旧方法已经行不通:
// 方法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();
// 第二种方法
extern NSString* CTSettingCopyMyPhoneNumber();
NSString *phone = CTSettingCopyMyPhoneNumber();
相关问题:
[更新]
提供的方法在iOS 6.1.4(未越狱)和iOS 7.1.2(已越狱)上有效。
感谢用户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 文件(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>
在哪里:
com.apple.coretelephony.Calls.allow — 用于电话
com.apple.coretelephony.Identity.get — 用于获取自己的号码
4. 在 entitlements.xml 中使用 Sing 应用程序 将文件复制到一个文件夹中:
./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. 使用ssh将应用程序YourApp.app复制到设备上的文件夹中
'/Applications
6. 重启SpringBoard(在设备上运行):
$su mobile -c uicache 1>/dev/null 2>&1
可在Github上找到工作示例。
iOS 7.1.2的结果(需要JB!):
iOS 6.1.3的结果(无需JB和特殊签名,只需构建并运行):