我的 macOS Electron 应用程序持续存在公证问题。
尽管多次尝试解决这些问题,公证状态仍然是“无效”,并且报告中的错误是一致的。
我在做什么
像这样签署代码 codesign --sign "Apple Distribution: Name Lastname (123456)" --deep --force --timestamp=auto path/to/Application.app
然后我得到:Application.app:替换现有签名
然后我使用以下命令验证签名: codesign --verify --deep --strict --verbose=4 路径/to/Application.app
然后我得到: --prepared:/path/to/Application.app/Contents/Frameworks/SomeFramework.framework --validated:/path/to/Application.app/Contents/Frameworks/SomeFramework.framework --prepared:/ path/to/Application.app/Contents/Frameworks/AnotherFramework.framework --validated:/path/to/Application.app/Contents/Frameworks/AnotherFramework.framework Application.app:在磁盘上有效 Application.app:满足其指定要求
然后我构建: npm 构建
然后我打包: zip -r 应用程序.zip 应用程序.app
然后我上传: xcrun notarytool 提交 Application.zip --apple-id your-apple-id --team-id your-team-id --password your-app-specific-password
然后我检查状态并得到: 成功收到提交信息createdDate:2024-08-15T18:21:31.520Z id:55daf39a-4be9-4dd6-a490-1890d33f9e75名称:Application.zip状态:无效
在生成的报告中,我遇到如下问题:
“path”:“path/to/Application.app/Contents/Frameworks/SomeFramework.framework/SomeFramework”,“message”:“二进制文件的签名无效。”,“docUrl”:“https://developer .apple.com/documentation/security/notarizing_macos_software_before_distribution/resolving_common_notarization_issues#3087735”,“架构”:“arm64”
和
“path”:“path/to/Application.app/Contents/Frameworks/SomeFramework.framework/Versions/Current/Helpers/chrome_crashpad_handler”,“message”:“签名不包含安全时间戳。”,“docUrl” :“https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution/resolving_common_notarization_issues#3087733”,“架构”:“arm64”
我做错了什么?我尝试单独签署每个问题并重新运行整个过程,但它不起作用。
我最近在开发 macOS Electron 应用程序时遇到了类似的问题,经过大量故障排除后,我成功地对所有内容进行了公证。因为这是我在这里回答的第一个问题,而且我今天刚刚开始我的帐户,所以我认为这将是一个很好的机会来分享我所学到的知识,并希望帮助其他面临同样挫折的人。
以下是根据对我有用的方法对潜在问题和解决方案进行的细分:
我遇到的第一个障碍是应用程序内某些框架的签名无效。事实证明,该问题与这些组件的签名方式有关。
我必须单独签署从最里面的组件到主应用程序包的每个框架和二进制文件,而不是使用
--deep
标志(这造成的弊大于利)。此方法可确保每个部分在公证过程中正确签名并得到认可。
出现的另一个问题与缺少安全时间戳有关,特别是对于像
chrome_crashpad_handler
这样的二进制文件。签署所有二进制文件时包含 --timestamp
标志至关重要,因为它可以保证公证服务将它们视为有效。
最初,我使用
zip
命令来打包我的应用程序,但这导致了公证过程中的问题。我改用 ditto
命令,它保留了所有必要的文件属性,这解决了问题。这是我使用的命令:
ditto -c -k --sequesterRsrc --keepParent Application.app Application.zip
我希望我的建议可以帮助您避免我经历过的头痛。如果您需要进一步说明或更多详细信息,请告诉我!