我的问题与@JasonGenX 的帖子中描述的问题有相似但不同的原因。
我的应用程序有一些文件在我运行时被修改,这导致应用程序的签名验证失败。
为了修复它,我删除了这些文件并阻止它们被创建或修改,因此 .app 包永远不会自行更改。
具体来说,我的应用程序包中有 Python 代码。当应用程序运行 Python 时,它会将导入编译为.pyc
文件。这些与应用程序包的其余部分一起签署。
当我在创建 DMG 之前运行 .app 时,Python 更新并修改了这些.pyc
文件,因此它们不再通过签名验证。我使用以下方法验证了这一点:
$ codesign --verify --verbose=4 my.app
[...]
my.app: a sealed resource is missing or invalid
file modified: /private/tmp/my.app/Contents/Resources/python-dist/chardet/codingstatemachine.pyc
file modified: /private/tmp/my.app/Contents/Resources/python-dist/chardet/euckrprober.pyc
[...etc...]
.app 仍然在我自己的计算机上运行,因为我自己构建了它,所以它是受信任的。但是当我上传和下载 DMG 时,它被标记为表明它来自不受信任的来源并需要签名验证。
由于签名验证失败,MacOS 报告 app bundle 已损坏。
解决方法是.pyc
从我捆绑的 Python 资源中删除文件,然后将 Python 作为 运行python -B
,这指示它不要创建.pyc
文件。
我在没有文件的情况下重建了我的 .app 包.pyc
,Python 不再创建它们,所以 .app 包保持不变。