旧的方式不再工作了:
//方式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();
相关问题:
Is it possible to detect a phone number of the device in iOS?
[UPDATE]
提供的方法适用于iOS 6.1.4,没有JB和iOS 7.1.2与JB
要得到号码你必须使用以下方式:
- -(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.构建应用程序而不签署:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
- <plist version="1.0">
- <dict>
- <key>com.apple.coretelephony.Calls.allow</key>
- <true/>
- <key>com.apple.coretelephony.Identity.get</key>
- <true/>
- </dict>
- </plist>
哪里:
com.apple.coretelephony.Calls.allow – 用于呼叫
com.apple.coretelephony.Identity.get – 获取自己的号码
4.使用authorizationlements.xml应用程序
复制一个文件夹中的文件:
- ./FolderForRunSinging/
- YourApp.app
- entitlements.xml
authorizationlements.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 Developer:FirstName SecondName(XXXXXXXX)’ – 您的钥匙串证书的名称
5.使用ssh到文件夹将应用程序YourApp.app复制到设备上
- /Applications
6.重新启动跳板(在设备上运行):
- $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来签署您的应用程序.