我正在尝试将我们现有的应用程序上传到苹果进行公证。
根据文档https://help.apple.com/xcode/mac/current/#/dev88332a81e 我必须打开应用程序 xcode 存档管理器。
我们有一个从我们的 jenkins 构建服务器生成的 dmg 文件。如何在 xcode 中打开 dmg 文件进行上传?
另外,是否有一些我可以用于公证的命令行工具?
我正在尝试将我们现有的应用程序上传到苹果进行公证。
根据文档https://help.apple.com/xcode/mac/current/#/dev88332a81e 我必须打开应用程序 xcode 存档管理器。
我们有一个从我们的 jenkins 构建服务器生成的 dmg 文件。如何在 xcode 中打开 dmg 文件进行上传?
另外,是否有一些我可以用于公证的命令行工具?
您可以从命令行执行此操作。
首先,您需要从您的 .dmg 中提取 .app 并对其进行签名,删除该com.apple.security.get-task-allow
过程中的权利(该权利由构建自动添加以支持调试,通常通过归档删除 - 公证服务不会接受包但是,具有该权利,因此您必须将其删除)。
您使用的 .entitlements 文件可以是一个空文件。
Xcode 10.2 及更高版本允许您设置构建设置“代码签名注入基本权利”,这将com.apple.security.get-task-allow
首先阻止添加权利。您可以在不需要调试的发布版本上使用此选项,并跳过这整个辞职和使用空权利文件重新打包的舞蹈。
另请注意 的使用--options runtime
,它指定您的应用程序是使用强化运行时构建的,也是必需的。
codesign -f -s "Developer ID Application: Name (ID)" --entitlements my-entitlments.entitlements --options runtime MyApp.app
现在您需要将您的 .app 重新打包回 .dmg 中,然后退出:
(我--options runtime
也在这里使用标志,但不确定是否有必要)
codesign -s "Developer ID Application: Name (ID)" MyApp.dmg --options runtime
然后使用altool
提交您的 .dmg:
(用户名和密码必须是开发者门户中 macOS 团队的成员)
xcrun altool --notarize-app -f MyApp.dmg --primary-bundle-id my-app.myapp -u username -p password
如果上传成功,您将获得一个令牌:
RequestUUID = 28fad4c5-68b3-4dbf-a0d4-fbde8e6a078f
然后您可以altool
使用该令牌检查状态:
xcrun altool --notarization-info 28fad4c5-68b3-4dbf-a0d4-fbde8e6a078f -u username -p password
最终,它要么成功,要么失败。继续检查。检查响应的“状态”字段,应该是“成功”。响应还将包含一个日志文件,您可以使用它来解决错误。
假设它成功,您需要将公证装订到应用程序:
xcrun stapler staple MyApp.dmg
然后验证:
xcrun stapler validate MyApp.dmg
验证操作有效!
您还可以将隔离标志应用到您的 .app 并尝试启动它,您将看到新的 Gatekeeper 对话框:
xattr -w com.apple.quarantine MyApp.app