古い方法はもう機能しません:
//方法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();
関連する質問:
[更新]
提供されたメソッドは、JBなしのiOS 6.1.4およびJBありのiOS7.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を使用してアプリを歌う1つのフォルダーにファイルをコピーします。
./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。スプリングボードを再起動します(デバイスで実行):
$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
でアプリに署名する必要があります。