6

所以,我正在尝试打开一个 .mobileprovisioning 配置文件来阅读里面的内容......这就是我正在做的事情:

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

当然,我会读取数据,但我没有找到将这些数据转化为有用的东西的方法……一个 NSDictionary、一个 NSString 或其他什么……

我已经尝试过:

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

任何想法?我确定这是一个编码问题,但在阅读和谷歌搜索一段时间后我无法解决它......我认为配置文件保存为十六进制,但我不知道如何从目标中读取它 - C。我找到了这个,但没有有用的答案。

如何将填充有十六进制值的 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 回答
2

.mobileprovisioning 文件是编码的 CMS 消息。

有关详细信息和用于解码的 API,请参阅https://developer.apple.com/library/mac/documentation/security/Reference/CryptoMessageRef/Reference/reference.html 。

如果您只想将编码的属性列表作为文本,一个快速而简单的技巧是获取您的 NSData 的字节指针,扫描开始的“<?xml”和结束的“</plist>”。然后从中制作一个 NSString 。

于 2013-10-09T20:38:43.857 回答
0

您可以简单地强制在 TextEdit 中打开移动配置文件,您可以在其中查看
内部内容,并可以在其中修剪/编辑编码的 CMS 消息或任何您想要的内容。然后您可以简单地使用 NSData encodewithUTF string 方法进行解码。

希望这可以帮助。

于 2013-10-14T08:07:04.923 回答