如何在xcode中上传dmg文件进行公证



我正在尝试将我们现有的应用程序上传到苹果进行公证。

根据文件https://help.apple.com/xcode/mac/current/#/dev88332a81e我必须打开应用程序xcode档案管理器。

我们有一个从jenkins构建服务器生成的dmg文件。如何在xcode中打开dmg文件进行上传?

还有,我可以使用一些命令行工具进行公证吗?

您可以从命令行执行此操作。

首先,您需要从.dmg中提取.app并放弃它,在这个过程中删除com.apple.security.get-task-allow权限(这是由构建自动添加的,以支持调试,通常会通过存档删除-但是,公证服务不会接受具有该权限的包,因此您必须删除它(。

您使用的.authorities文件可以只是一个空文件。


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

对于Xcode 13和更高版本,通过命令行进行公证基本上可以归结为以下两个:

xcrun 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

在编写这个答案时,苹果的文档令人困惑,因为他们提到使用秘密的2FA密码,而不是应用程序特定的密码。您可以通过以下步骤创建特定于应用程序的密码。

此处稍长的版本:https://blog.rampatra.com/how-to-notarize-a-dmg-or-zip-file-with-the-help-of-xcode-s-notary-tool

最新更新