使用 Objective-C 读取 .mobileprovisioning 配置文件
Posted
技术标签:
【中文标题】使用 Objective-C 读取 .mobileprovisioning 配置文件【英文标题】:Read .mobileprovisioning profile with Objective-C 【发布时间】: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
谢谢!
【问题讨论】:
【参考方案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 方法进行解码。
希望这会有所帮助。
【讨论】:
以上是关于使用 Objective-C 读取 .mobileprovisioning 配置文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Objective-C 读取 .mobileprovisioning 配置文件
无法使用 Mobile Vision API 从图像中读取文本