旧方法不再有效:
// way 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();
// way 2
extern NSString* CTSettingCopyMyPhoneNumber();
NSString *phone = CTSettingCopyMyPhoneNumber();
相关问题:
iOS 可以检测设备的电话号码吗? https://stackoverflow.com/questions/13460804/is-it-possible-to-detect-a-phone-number-of-the-device-in-ios
[UPDATE]
提供的方法适用于不带 JB 的 iOS 6.1.4 和带 JB 的 iOS 7.1.2
感谢用户creker https://stackoverflow.com/users/2363866/creker提示!
要获取号码,您必须使用以下方式:
1. Code
-(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. Build application without signing:
3.创建包含以下内容的 xml 文件 (entitlements.xml):
<?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>
Where:
com.apple.coretelephony.Calls.allow— 用于通话
com.apple.coretelephony.Identity.get— 用于获取自己的号码
4.使用 entitlements.xml 唱歌应用程序
将文件复制到一个文件夹中:
./FolderForRunSinging/
YourApp.app
entitlements.xml
权利.xml- 创建的XML
你的应用程序.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.复制申请表你的应用程序.app在您的设备上使用 ssh 访问文件夹
/Applications
6.重启跳板(在设备上运行):
$su mobile -c uicache 1>/dev/null 2>&1
工作样本可以在github https://github.com/0x8BADFOOD/iOS7-makecall-sample
iOS 7.1.2 上的结果 (需要JB!):
iOS 6.1.3 上的结果 (无需 JB 即可工作,无需特殊签名即可构建并运行)