1

次の情報を返すアプリを構築しようとしています:

  • IMEI
  • ICCID
  • IMSI

CoreTelephony を使用できることはわかりましたが、疑うようになりました: これらのヘッダー ファイル (クラス ダンプから CoreTelephony.h をインポート) を使用するには、デバイスをジェイルブレイクする必要がありますか?

そうでない場合、CoreTelephony は iOS6 でのみ有効ですか?

それが私のやり方です:

CTServerConnectionRef conn;
void ConnectionCallback(CTServerConnectionRef connection, CFStringRef string, CFDictionaryRef dictionary, void *data) {
    NSLog(@"ConnectionCallback");
    CFShow(dictionary);
}

- (NSString *)coreTelephonyInfoForKey:(const NSString *)key {
    NSString *retVal = nil;
    conn = _CTServerConnectionCreate(kCFAllocatorDefault, ConnectionCallback,NULL);
    if (conn) {
        struct CTResult result;
        CFMutableDictionaryRef equipmentInfo = nil;
        _CTServerConnectionCopyMobileEquipmentInfo(&result, conn, &equipmentInfo);
        if (equipmentInfo) {
            retVal = [NSString stringWithString:CFDictionaryGetValue(equipmentInfo, (__bridge const void *)(key))];
            CFRelease(equipmentInfo);
        }
        CFRelease(conn);
    }
return retVal;
}
- (NSString *)IMEI {
    return [self coreTelephonyInfoForKey:@"kCTMobileEquipmentInfoIMEI"];

ここに私のCoreTelephony.hがあります

4

2 に答える 2

1

あなたの質問に部分的に答える:

  • プライベート API と呼ばれる文書化されていない API (iOS 領域内)。タグ「iphone-privateapi」を考慮して、これを理解したと思います

  • プライベート API は、ジェイルブレイクされた電話とジェイルブレイクされていない電話の両方で使用できます。一般的に言えば、パブリック API とプライベート API の技術的な違いは、API が .h ファイルで定義されているかどうかだけです。

  • プライベート API が時代遅れになることがあります (権限によって変更、削除、または保護されます)。最後のもの (エンタイトルメントによって保護されるのが最も一般的なケースです。エンタイトルメントは、いくつかの API を使用できるようにするアクセス許可です。ジェイルされたデバイスでは、システム アプリケーションのみがエンタイトルメントを持つことができます。ジェイルブレイクされたデバイスでは、すべてのアプリがエンタイトルメントを持つことができます。

質問に戻ります。iOS 7 で CoreTelephony を試していません。試してみましたか? (「そうでなければ、CoreTelephonyはiOS6でのみ有効ですか?」があなたが試したことを暗示しているかどうかはわかりませんでした)。

于 2013-09-24T15:04:36.477 に答える
1

おそらくcom.apple.coretelephony.Identity.get資格が必要です。環境設定アプリで見つけました。

于 2013-10-09T07:18:14.253 に答える