Как программно получить номер телефона с помощью приложения iOS11 для предприятия

Да, я прекрасно знаю, что невозможно получить номер телефона с помощью общедоступных API.

Я хочу знать, какова последняя ситуация в отношении того, как получить номер телефона с помощью частных API для корпоративного приложения с iOS11. Всем прошлым вопросам, которые я мог найти, уже много лет, я не мог найти ничего нового.

Я пробовал это:

extern NSString* CTSettingCopyMyPhoneNumber();
+(NSString *) phoneNumber
{
    NSString *phone = CTSettingCopyMyPhoneNumber();
    return phone;
}

Но я не могу запустить это, поскольку я не смог добавить право com.apple.coretelephony.Identity.get без получения ошибки подписи, говорящей о том, что исполняемый файл был подписан с недопустимыми правами.

Возможно ли в iOS 11 программно получить номер телефона с помощью закрытых API для корпоративного приложения на устройстве без джейлбрейка?


person Gruntcakes    schedule 13.02.2018    source источник
comment
Apple не предоставляет разработчикам доступ к номеру телефона, связанному с устройством. forums.developer.apple.com/thread/9171   -  person Muhammad Zeshan Arif    schedule 21.02.2018
comment
Используйте SMS API для отправки кода UIDevice на номер, которым вы владеете. Большинство SMS-сервисов бесплатны для получения сообщений. Затем сделайте запрос веб-службы, чтобы получить номер телефона по коду UIDevice. Единственный способ сделать это.   -  person Greg    schedule 22.02.2018
comment
Интересно, что CTSettingCopyMyPhoneNumber() и [[AKDevice currentDevice] phoneNumber] внутренне полагаются на XPC межпроцессный вызов. Это фактический механизм выборки, тщательно охраняемый для действительных прав.   -  person Kamil.S    schedule 22.02.2018
comment
@ Зешан Ариф. Есть разница между публично доступным и частным доступом. MDN доступен, вопрос в том, как его получить в iOS 11. В предыдущих версиях iOS 11 было множество способов его получить.   -  person Gruntcakes    schedule 22.02.2018
comment
@Gruntcakes Чтобы получить номер телефона, вы можете прочитать файл plist. Это не будет работать на iDevices без взлома: NSString *commcenter = @/private/var/wireless/Library/Preferences/com.apple.commcenter.plist; NSDictionary *dict = [NSDictionary DictionaryWithContentsOfFile:commcenter]; NSString *PhoneNumber = [dict valueForKey:@PhoneNumber]; NSLog([NSString stringWithFormat:@Номер телефона: %@,Номер_телефона]);   -  person Muhammad Zeshan Arif    schedule 22.02.2018
comment
Не уверен, насколько это было бы хорошим решением, но как насчет получения имени пользователя iCloud и поиска того же имени в контактах для поиска номера телефона. Это потребует от пользователя разрешить обнаружение пользователя и доступ к контактам. Но вы можете сделать обязательным для них использование приложения, поскольку оно предназначено для предприятия.   -  person Sam    schedule 23.02.2018