使用Objective-C读取.mobileprovisioning文件

6

所以,我正在尝试打开一个.mobileprovisioning文件来读取其中的内容...这是我正在做的事情:

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

当然我可以读取数据,但我找不到将这些数据转换为有用的东西的方法...一个NSDictionary、一个NSString或任何其他东西...

我已经尝试过:

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

有任何想法吗?我相信这是一个编码问题,但我读了一些资料和谷歌了一段时间后仍然无法解决...我认为配置文件保存为十六进制,但我不知道如何从objective-c中读取。我已经找到了这个链接,但没有有用的答案。

如何将填充有十六进制值的NData转换为NSString

谢谢!

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;
}

CMSDecoderRefSecurity 框架的一部分,仅适用于 Mac OS :( - Ihar Katkavets

2

0

您可以在TextEdit中强制打开移动配置文件,以查看内部内容并对编码的CMS消息进行修剪/编辑或其他操作。然后,您可以使用NSData encodewithUTF字符串方法进行解码。

希望这可以帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接