我们目前正在尝试验证我们的应用程序,以便在应用程序商店之外分发它。我们在应用程序包中包含 OpenSceneGraph 库和 Qt 框架。
到目前为止,我们是这样做的:
在 Contents/MacOS 文件夹中签名的可执行文件
签名库和 Qt 框架
签名的 App.app 文件夹
压缩.app并提交公证
可执行文件、库和框架的签名是使用 codesign 命令手动完成的,为了对整个 .app 进行签名,我们执行以下操作:
codesign --force --verify --verbose=3 --options runtime --timestamp --entitlements App.entitlements -s "Developer ID Application: Our Dev Id" App.app
当我们发送压缩的 .app 进行公证时,我们通常会得到一个快速回复,通知我们公证成功,但如果我们尝试运行,
spctl --verbose --assess --type execute -v App.app
我们会收到以下错误:
App.app:被拒绝(嵌入式框架的根目录中存在未密封的内容)
同样检查带有公证输出的 json 文件,我们注意到相同的错误,但它被标记为警告并使用 codesign 进行检查,没有返回错误。
经过一番挖掘,我们意识到这个问题与 Qt 框架有关:作为一种反证,我们尝试在没有 Qt 框架的情况下提交相同的应用程序,而这一次当捆绑包成功公证时,spctl 也接受了它。因此,我们消除了根目录中的所有符号链接,将 .prl 文件移动到 Resources/ 文件夹中,并按照一些论坛帖子中的建议在 Versions/ 子文件夹中创建了 A/ 的别名,但我们无法拥有spctl 接受我们与 Qt 框架的捆绑。现在在每个框架的根目录下只有 Versions 文件夹,没有其他内容(我们使用 ls-lha 确认)
我们缺少什么?有没有办法至少得到一些提示,让验证工具感到不安的未密封内容在哪里?
先感谢您