我在我的iPhone应用程序中包含一个plist文件。它是二进制格式(使用plutil从xml转换为二进制)。我想在运行时对它运行MD5校验和(或SHA-1)以确认其内容是预期的。不幸的是,我总是得到一个与我原来包含的不同的校验和。假设我在计算MD5总和错误超过一个小时后,我决定运行测试并确认字节确实相同。他们不是。文件大小保持不变,但从字节30开始,在整个文件中(最后32个字节除外),文件内容完全不同。在包含在iPhone应用程序之前,有没有人知道属性列表文件是否已签名或以其他方式“编译”为不同的二进制格式?如果是,您能否提供有关该流程的更多详细信息?
提前致谢!
答案 0 :(得分:1)
默认情况下,Xcode不是直接执行直接复制,而是使用小脚本在构建目标时处理和复制plist文件。如果您在Xcode中调出目标的信息窗口并选择“规则”选项卡,您将看到,为了处理text.plist源文件,它使用自己的名为CopyPlistFile的工具。它会进行一些基本检查以确保plist有效,并且可以选择将其转换为其他格式,尽管默认情况下似乎没有执行转换。
我不知道这是否会导致plist文件发生变化,但是如果你想要的话,可以在项目中获取有关plist文件的信息,并将其文件类型从“text.plist”更改为“文本”。这应该会导致Xcode将其视为纯文本文件而不是属性列表文件,只需直接复制而不是通过CopyPlistFile工具运行它。
答案 1 :(得分:0)
我会在这个问题上弹出堆叠的原因。我不知道你的问题的答案,但我很好奇为什么你花时间在它上面。
由于应用程序是经过数字签名的,您为什么要关注PList的完整性?如果有人修改了它,那么应用程序将无法安装,因为数字签名将不再有效。
另一个原因可能是您担心应用被黑客入侵。完全合理,但如果有人可以破解应用程序,那么他们也可以修改PList,并更改代码中的校验和,以便它仍然可以运行。如果没有真正从第三方(例如您自己的服务器)获取内容,则无法保证内容的完整性