ios-simulator - 如何在模拟器 iOS 8 中添加通讯录联系人

标签 ios-simulator contacts ios8.1

有没有办法将 Mac 上的通讯录联系人添加到 iOS 8.1 模拟器。在谷歌上找到的所有答案都是旧的,不再有效。我只找到一个链接:Importing AddressBook data into the iPhone Simulator

如果有人这样做,请提供更新的答案。旧的解决方案不起作用,因为 Apple 更改了 iOS 8 中的所有结构

最佳答案

iOS 8.1 上测试和iPhone6+ SimulatorXCode 6.1 .

我做了两个方法addSampleContactsremoveSampleContacts您可以将其添加到项目中以在模拟器中添加(或删除)联系人。

为此,

  1. 您需要添加AddressBook.frameworkAddressBookUI.framework在您的项目中。
  2. 导入#import <AddressBook/AddressBook.h>在要添加/删除示例联系人的类(或 Controller )中
  3. 您需要一个联系人文件(.vcf 格式)。您可以使用手机的联系人文件进行此测试,以获得大量实际(真实)联系人。将该文件添加到您的项目中。
  4. 如果您已经设置了此功能,请添加以下功能。

-(void)addSampleContacts
{
    NSError *error;
    CFErrorRef castError = (__bridge CFErrorRef)error;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &castError);
    __block BOOL accessAllowed = NO;

    if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6 or above
        dispatch_semaphore_t sema = dispatch_semaphore_create(0);

        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
            accessAllowed = granted;
            dispatch_semaphore_signal(sema);
        });

        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
    }

    if(accessAllowed)
    {
        NSString *vFilePath = [[NSBundle mainBundle] pathForResource:@"YourContactFile" ofType:@"vcf"];
        NSData *myData = [NSData dataWithContentsOfFile:vFilePath];
        CFDataRef vCardData = (__bridge CFDataRef)myData;

        NSError *error;
        CFErrorRef castError = (__bridge CFErrorRef)error;
        ABAddressBookRef ContactBook = ABAddressBookCreateWithOptions(NULL, &castError);
        ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(ContactBook);
        CFArrayRef vCardContact = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData);
        NSArray *arrayContacts = (__bridge_transfer NSArray *)vCardContact;
        NSInteger totalVCFContactCount = arrayContacts.count;

        for (CFIndex index = 0; index < totalVCFContactCount; index++)
        {
            ABRecordRef contact = CFArrayGetValueAtIndex(vCardContact, index);
            ABAddressBookAddRecord(ContactBook, contact, NULL);
            ABAddressBookSave(ContactBook, nil);
            CFRelease(contact);
        }

        CFRelease(vCardContact);
        CFRelease(defaultSource);
    }


    NSLog(@"Contacts added.");
}

-(void)removeSampleContacts
{
    NSError *error;
    CFErrorRef castError = (__bridge CFErrorRef)error;
    ABAddressBookRef contactBook = ABAddressBookCreateWithOptions(NULL, &castError);

    __block BOOL accessAllowed = NO;

    if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6 or above
        dispatch_semaphore_t sema = dispatch_semaphore_create(0);

        ABAddressBookRequestAccessWithCompletion(contactBook, ^(bool granted, CFErrorRef error) {
            accessAllowed = granted;
            dispatch_semaphore_signal(sema);
        });

        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
    }

    if(accessAllowed)
    {
        CFArrayRef allContacts = ABAddressBookCopyArrayOfAllPeople( contactBook );
        NSArray *arrayContacts = (__bridge_transfer NSArray *)allContacts;

        for ( int i = 0; i < arrayContacts.count; i++ )
        {
            ABRecordRef ref = CFArrayGetValueAtIndex(allContacts, i);
            ABAddressBookRemoveRecord(contactBook, ref, nil);
            ABAddressBookSave(contactBook, nil);
        }
    }

    NSLog(@"Contacts removed.");
}

如果您之前已经这样做过,则可能不需要请求(或检查)许可。

关于ios-simulator - 如何在模拟器 iOS 8 中添加通讯录联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27814780/

相关文章:

angularjs - 无法使用 Appium for IOS 生成的代码运行 Protractor 脚本,它表示 findelement 不是函数

java - 在 Android 代码中搜索电话号码

ios - 两个 View 之间的转换适用于 iOS8,但不适用于 iOS9

ios - 应用程序在XCode中存储在哪里?

macos - Visual Studio 中的 Apache Cordova 无法连接 Mac(远程构建服务器)

iphone - 使用 Core Graphics 绘制部分图像或对角剪裁

iOS:如何从 ABPersonCopyArrayOfAllLinkedPeople 返回的链接联系人数组中获取 'primary' ABPersonRef?

email - Opencart 添加姓名和电子邮件以及联系电子邮件中的消息

swift - 字典在 Swift 中创建 UIPrintInfo 对象需要哪些键?