Существует более фундаментальная проблема - вы неправильно вызываете ABAddressBookGetSourceWithRecordID.Второй параметр, который он принимает - это int, который указывает идентификатор записи определенного источника в вашей адресной книге.Вы передаете ей константу, которая описывает тип определенного источника.
Константа, которую вы передаете, kABSourceTypeCardDav всегда равна 4. Однако идентификатор записи источника iCloud в адресной книге пользователя может быть чем-то оченьразные.
Что вам нужно сделать, это перечислить все источники и проверить их типы, например:
NSArray *allSources = (NSArray*)ABAddressBookCopyArrayOfAllSources(addressBook);
for (int i = 0; i < allSources.count; i++) {
ABRecordRef src = [allSources objectAtIndex:i];
NSNumber *stObj = (NSNumber*)ABRecordCopyValue(src, kABSourceTypeProperty);
ABSourceType st = (ABSourceType)[stObj intValue];
if (st == kABSourceTypeCardDAV) {
int recordID = ABRecordGetRecordID(src);
break;
}
}
Затем вы можете использовать recordID в качестве аргумента первой функции