Я придумал частичное решение для этого
Вы можете получить имя устройства следующим образом
NSString *ownerName = [[UIDevice currentDevice] name];
на английском языке устройство изначально называется, например, «iPhone Джо Блога»
название
NSRange t = [ownerName rangeOfString:@"’s"];
if (t.location != NSNotFound) {
ownerName = [ownerName substringToIndex:t.location];
}
затем вы можете взять это имя и искать контакты
CNContactStore * contactStore = [CNContactStore new];
NSPredicate *usersNamePredicate = [CNContact predicateForContactsMatchingName:usersName];
NSArray * keysToFetch = @[[CNContactFormatter descriptorForRequiredKeysForStyle:CNContactFormatterStyleFullName],CNContactPhoneNumbersKey,CNContactEmailAddressesKey,CNContactSocialProfilesKey, ];
NSArray * matchingContacts = [contactStore unifiedContactsMatchingPredicate:usersNamePredicate keysToFetch:keysToFetch error:nil];
Конечно, другие языки отличаются строкой имени устройства, например, «iPhone Von Johann Schmidt», поэтому требуется больше разбора для других языков, и он работает, только если пользователь не изменил имя устройства в iTunes на что-то вроде «Joes phone», но дает вам отправную точку
хорошо ... он дает вам массив подходящих предметов :) Так что, если есть несколько контактов с этим массивом, вам просто нужно использовать удачу в поте и идти с первой или работать через несколько карт и брать то, что вы нужно от каждого.
Я сказал, что это частичное решение, и хотя оно не будет работать для всех пользовательских случаев, вы можете найти, что оно работает для многих ваших пользователей и уменьшает небольшое трение