2015-01-07 2 views
2

Есть ли способ добавить контакты адресной книги на ваш Mac для iOS 8.1 симулятора. Все ответы, найденные в google, стары и больше не работают. Только одна ссылка, которую я нашел, была Importing AddressBook data into the iPhone SimulatorКак добавить контакты адресной книги в тренажере iOS 8

Просьба представить обновленный ответ, если кто-то это сделал. Старое решение не работает, потому что Apple изменила всю структуру в iOS 8

ответ

3

Протестировано на iOS 8.1 и iPhone6+ Simulator с XCode 6.1.

Я сделал два метода: addSampleContacts и removeSampleContacts, которые вы можете добавить в свой проект, чтобы добавлять (или удалять) контакты в вашем симуляторе.

Для этого

  1. Вам нужно добавить AddressBook.framework и AddressBookUI.framework в вашем проекте.
  2. Импорт #import <AddressBook/AddressBook.h> в классе (или контроллере), где вы хотите добавить/удалить выборочные контакты
  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."); 
} 

Вам не нужно спросить (или проверить) для разрешения, если вы уже делаете это раньше.

+0

Вы также можете загрузить файл vcf, чтобы мы могли легко использовать этот файл. Благодарю. – GeneCode

+0

Если у вас есть учетная запись Google или учетная запись iTunes, вы можете экспортировать файл 'vcf' для контактов вашего телефона. – Hemang

Смежные вопросы