iOS 7: Как получить свой номер через приватный API?
Старые способы небольше не работает:
// путь 1
void *lib = dlopen("/Symbols/System/Library/Framework/CoreTelephony.framework/CoreTelephony", RTLD_LAZY);
NSString* (*getPhoneNumber)() = dlsym(lib, "CTSettingCopyMyPhoneNumber");
if (getPhoneNumber == nil) {
NSLog(@"getPhoneNumber is nil");
return nil;
}
NSString* ownPhoneNumber = getPhoneNumber();
// путь 2
extern NSString* CTSettingCopyMyPhoneNumber();
NSString *phone = CTSettingCopyMyPhoneNumber();
Смежные вопросы:
Можно ли определить номер телефона устройства в iOS?
[ОБНОВИТЬ]
Предоставленный метод работает на iOS 6.1.4 без JB и iOS 7.1.2 с JB
Спасибо пользователюcreker за подсказку!
Чтобы получить номер, вы должны использовать следующий способ:
1. Код
-(NSString*) getMyNumber {
NSLog(@"Open CoreTelephony");
void *lib = dlopen("/Symbols/System/Library/Framework/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);
NSLog(@"Get CTSettingCopyMyPhoneNumber from CoreTelephony");
NSString* (*pCTSettingCopyMyPhoneNumber)() = dlsym(lib, "CTSettingCopyMyPhoneNumber");
NSLog(@"Get CTSettingCopyMyPhoneNumber from CoreTelephony");
if (pCTSettingCopyMyPhoneNumber == nil) {
NSLog(@"pCTSettingCopyMyPhoneNumber is nil");
return nil;
}
NSString* ownPhoneNumber = pCTSettingCopyMyPhoneNumber();
dlclose(lib);
return ownPhoneNumber;
}
2. Сборка приложения без подписи:
3. Создайте xml-файл (authorlements.xml) со следующим содержимым:
com.apple.coretelephony.Calls.allow
com.apple.coretelephony.Identity.get
Куда:
com.apple.coretelephony.Calls.allow - для звонков
com.apple.coretelephony.Identity.get - для получения собственного номера
4. Спеть приложение с authorlements.xml Скопировать файлы в одну папку:
./FolderForRunSinging/
YourApp.app
entitlements.xml
entitlements.xml - создал xml
YourApp.app - двоичные файлы для вашего приложения, скопированные из файлов XCode. Чтобы найти, где находятся ваши двоичные файлы, вы можете использовать команду:
$ls -la ~/Library/Developer/Xcode/DerivedData/ | grep YourApp
Путь должен быть таким:
/Users/username/Library/Developer/Xcode/DerivedData/YourApp-cktasembftvbmqaaiiunvljdwocs/Build/Products/Debug-iphoneos/YourApp.app
Запустите пение команды: '
$codesign --sign='iPhone Developer: FirstName SecondName (XXXXXXXX)’
--entitlements entitlements.xml YourApp.app
Разработчик iPhone: FirstName SecondName (XXXXXXXX) ' - название вашего сертификата в связке ключей
5. Скопировать заявкуYourApp.app на вашем устройстве с помощью SSH в папку
/Applications
6. Перезапустите трамплин (запустите на устройстве):
$su mobile -c uicache 1>/dev/null 2>&1
Рабочий образец можно найти наGitHub
Результат на iOS 7.1.2 (JB требуется!):
Результат на iOS 6.1.3 (работает без JB и без специальной подписи просто собери и запусти)