正如你们许多人所知,您通常无法在 Windows 上构建 Unity 游戏的 Mac 版本,或者至少,您必须在 Linux 或 Mac 上使用 chmod
命令添加可执行位。然而,即使设置了可执行位,在 Mac 和 Windows 上构建的相同版本仍然有一个关键区别。 Mac 版本不要求您接受打开应用程序的安全风险,即使您在第二台 Mac 上尝试也是如此。
MacOS 如何知道 Unity 应用程序是否是在 Mac/Windows 上构建的?应用程序文件保存在哪里?它是否保存在构建本身中?
我们和一些熟人一起尝试了各种方法来找出这个问题的答案。
到目前为止,我们在构建之间比较了文件到文件的文件标志,但这并没有给我们带来答案。
比较整个构建的文件内容,会得到一小部分文件,这些文件与 Mac 上构建的构建与 Windows 上构建的构建不同。 其中一个文件位于
game.app/Contents/MacOS/_CodeSignature/CodeResources
,它似乎包含构建中文件的字典和相应的密钥/哈希。两个版本之间不同的每个此类哈希都属于一个在两个版本之间也被标记为不同的文件,但这些文件似乎都没有 Apple 的某种签名,通过该签名可以区分版本。
之所以只对 MacOS 中完成的构建进行签名,是因为 Apple 没有为 MacOS 之外的其他操作系统提供必要的工具:
codesign
。对于 Linux,我认为有一些开源工具声称也支持 MachO 代码签名,但我不知道它们有多好。最后,您始终需要 Apple 提供的代码签名证书+密钥。
如果您想查看 MachO 结构,有很多命令行工具,例如 otool 或用于 UI 的工具,例如
XMachOViewer。