【问题标题】:Read .mobileprovisioning profile with Objective-C使用 Objective-C 读取 .mobileprovisioning 配置文件
【发布时间】:2013-10-12 14:55:12
【问题描述】:

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

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

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

我已经试过了:

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

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

How to convert NData populated with hex values to NSString

谢谢!

【问题讨论】:

    标签: objective-c cocoa nsdata provisioning-profile hex


    【解决方案1】:

    以下方法应该可以满足您的需求。正如@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;
    }
    

    【讨论】:

    • CMSDecoderRef Security 框架的一部分,仅适用于 Mac OS :(
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 2014-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-08
        • 1970-01-01
        相关资源
        最近更新 更多