ios7 – iOS 7:如何通过私人API获取自己的号码?

前端之家收集整理的这篇文章主要介绍了ios7 – iOS 7:如何通过私人API获取自己的号码?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
旧的方式不再工作了:

//方式1

  1. void *lib = dlopen("/Symbols/System/Library/Framework/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);
  2. NSString* (*getPhoneNumber)() = dlsym(lib,"CTSettingCopyMyPhoneNumber");
  3.  
  4. if (getPhoneNumber == nil) {
  5. NSLog(@"getPhoneNumber is nil");
  6. return nil;
  7. }
  8. NSString* ownPhoneNumber = getPhoneNumber();

//方式2

  1. extern NSString* CTSettingCopyMyPhoneNumber();
  2. NSString *phone = CTSettingCopyMyPhoneNumber();

相关问题:

Is it possible to detect a phone number of the device in iOS?

[UPDATE]

提供的方法适用于iOS 6.1.4,没有JB和iOS 7.1.2与JB

感谢用户creker提示

要得到号码你必须使用以下方式:

代码

  1. -(NSString*) getMyNumber {
  2. NSLog(@"Open CoreTelephony");
  3. void *lib = dlopen("/Symbols/System/Library/Framework/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);
  4. NSLog(@"Get CTSettingCopyMyPhoneNumber from CoreTelephony");
  5. NSString* (*pCTSettingCopyMyPhoneNumber)() = dlsym(lib,"CTSettingCopyMyPhoneNumber");
  6. NSLog(@"Get CTSettingCopyMyPhoneNumber from CoreTelephony");
  7.  
  8. if (pCTSettingCopyMyPhoneNumber == nil) {
  9. NSLog(@"pCTSettingCopyMyPhoneNumber is nil");
  10. return nil;
  11. }
  12. NSString* ownPhoneNumber = pCTSettingCopyMyPhoneNumber();
  13. dlclose(lib);
  14. return ownPhoneNumber;
  15. }

2.构建应用程序而不签署:

3.创建具有以下内容的xml文件(授权文件):

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plist version="1.0">
  4. <dict>
  5. <key>com.apple.coretelephony.Calls.allow</key>
  6. <true/>
  7. <key>com.apple.coretelephony.Identity.get</key>
  8. <true/>
  9. </dict>
  10. </plist>

哪里:

com.apple.coretelephony.Calls.allow – 用于呼叫

com.apple.coretelephony.Identity.get – 获取自己的号码

4.使用authorizationlements.xml应用程序
复制一个文件夹中的文件

  1. ./FolderForRunSinging/
  2. YourApp.app
  3. entitlements.xml

authorizationlements.xml – 创建的xml

YourApp.app – 从XCode文件复制的应用程序的二进制文件
要找到您可以使用的二进制文件命令:

  1. $ls -la ~/Library/Developer/Xcode/DerivedData/ | grep YourApp

路径应该是这样的:

  1. /Users/username/Library/Developer/Xcode/DerivedData/YourApp-cktasembftvbmqaaiiunvljdwocs/Build/Products/Debug-iphoneos/YourApp.app

运行歌唱命令:

  1. $codesign --sign='iPhone Developer: FirstName SecondName (XXXXXXXX)’
  2. --entitlements entitlements.xml YourApp.app

‘iPhone Developer:FirstName SecondName(XXXXXXXX)’ – 您的钥匙串证书的名称

5.使用ssh到文件夹将应用程序YourApp.app复制到设备上

  1. /Applications

6.重新启动跳板(在设备上运行):

  1. $su mobile -c uicache 1>/dev/null 2>&1

工作样本可以在github找到

结果在iOS 7.1.2(JB是必需的!):

结果在iOS 6.1.3(工作没有JB,没有特殊签名只是构建和运行)

解决方法

为了使用这个API,您需要使用具有布尔值设置为true的权限com.apple.coretelephony.Identity.get来签署您的应用程序.

猜你在找的iOS相关文章