6

だから、私は .mobileprovisioning プロファイルを開いて内部の内容を読み取ろうとしています...これが私がやっていることです:

NSString *path = [pathURL path];
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];

もちろん、私はデータを読み取りますが、このデータを何か有用なものに取得する方法を見つけていません... NSDictionary、NSStringなど...

私はすでに試しました:

NSString *newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

何か案が?これはエンコーディングの問題だと確信していますが、しばらく読んでグーグルで調べても解決できません...プロビジョニングプロファイルは16進数で保存されていると思いますが、それを客観的に読み取る方法がわかりません- c. 私はこれを見つけましたが、有用な答えはありませんでした。

16 進値が入力された NData を NSString に変換する方法

ありがとう!

4

3 に答える 3

8

次のメソッドは、あなたが望むことをするはずです。@rbrockerhoff が言うように、モバイル プロビジョニング プロファイルはエンコードされた CMS メッセージです。この方法では、デコーダーを使用して、最初に CMS 関数を使用してデータをデコードし、次にデコードされたデータから plist 文字列/コンテンツを作成します。この文字列は、メソッドから返されるディクショナリに変換できます。ディクショナリには、モバイル プロビジョニング プロファイルのすべての詳細が含まれます。

- (NSDictionary *)provisioningProfileAtPath:(NSString *)path {
    CMSDecoderRef decoder = NULL;
    CFDataRef dataRef = NULL;
    NSString *plistString = nil;
    NSDictionary *plist = nil;

    @try {
        CMSDecoderCreate(&decoder);
        NSData *fileData = [NSData dataWithContentsOfFile:path];
        CMSDecoderUpdateMessage(decoder, fileData.bytes, fileData.length);
        CMSDecoderFinalizeMessage(decoder);
        CMSDecoderCopyContent(decoder, &dataRef);
        plistString = [[NSString alloc] initWithData:(__bridge NSData *)dataRef encoding:NSUTF8StringEncoding];
        NSData *plistData = [plistString dataUsingEncoding:NSUTF8StringEncoding];
        plist = [NSPropertyListSerialization propertyListWithData:plistData options:NSPropertyListImmutable format:nil error:nil]
    }
    @catch (NSException *exception) {
        NSLog(@"Could not decode file.\n");
    }
    @finally {
        if (decoder) CFRelease(decoder);
        if (dataRef) CFRelease(dataRef);
    }

    return plist;
}
于 2013-10-11T06:04:45.693 に答える
0

テキストエディットでモバイル プロビジョニング プロファイルを強制的に開くだけで、
内部のコンテンツを表示したり、エンコードされた CMS メッセージや必要なものをトリム/編集したりできます。次に、NSData encodewithUTF 文字列メソッドで簡単にデコードできます。

お役に立てれば。

于 2013-10-14T08:07:04.923 に答える