web-dev-qa-db-ja.com

iOS 7:プライベートAPIを介して自分の番号を取得するにはどうすればよいですか?

古い方法はもう機能しません:

//方法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();

関連する質問:

iOSでデバイスの電話番号を検出することは可能ですか?

[更新]

提供されたメソッドは、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。署名せずにアプリケーションをビルドします。 enter image description here

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)」-キーチェーン内の証明書の名前

enter image description here

5。sshを使用してデバイス上のアプリケーションYourApp.appをフォルダーにコピーします

/Applications

6。スプリングボードを再起動します(デバイスで実行):

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

作業サンプルは github にあります。

IOS 7.1.2での結果(JBが必要です!):

enter image description here

IOS 6.1.3での結果(JBなしで動作し、特別な署名なしでビルドして実行するだけです

enter image description here

14
0x8BADF00D

このAPIを使用するには、ブール値をtrueに設定して資格com.Apple.coretelephony.Identity.getでアプリに署名する必要があります。

9
creker