我正在尝试将我们现有的应用程序上传到苹果进行公证。
根据文档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 及更高版本允许您设置一个构建设置 "Code Signing Inject Base Entitlements",这将防止一开始就添加 com.apple.security.get-task-allow
权限。您可以在例如不需要调试的发布版本上使用此选项,并跳过重新签名和重新打包为空entitlements文件的整个过程。
请注意还要使用 --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
最终,它要么成功,要么失败。只需不断检查。检查响应的“状态”字段,应为“success”。响应还将包括一个日志文件,您可以使用它来排除错误。
假设它成功了,您需要将公证附加到应用程序:
xcrun stapler staple MyApp.dmg
然后进行验证:
xcrun stapler validate MyApp.dmg
验证操作成功!
您还可以向您的 .app 应用程序应用隔离标志并尝试启动它,您将会看到新的 Gatekeeper 对话框:
xattr -w com.apple.quarantine MyApp.app
stapler
与苹果公司进行交流。根据 man stapler
的说明:“在装订或验证时,stapler
需要互联网访问来检索票证。” - TheNextmanxcrun notarytool store-credentials "<key>" --apple-id "<your apple id>" --team-id <your teamid> --password "<app specific password>"
并且
xcrun notarytool submit <your file>.dmg --keychain-profile "<key>" --wait