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

19

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

根据文档https://help.apple.com/xcode/mac/current/#/dev88332a81e,我必须在xcode档案组织器中打开应用程序。

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

此外,是否有一些命令行工具可用于公证?


请按照自定义验签工作流程中的步骤进行操作。 - Parag Bafna
2个回答

43

你可以通过命令行完成此操作。

首先,您需要从 .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

2
那我建议您再次检查您所使用的凭据。https://help.apple.com/itc/apploader/#/apdSb30def73 - TheNextman
2
因为我没有被邀请到Itunes Connect,所以之前无法使用。现在已经可以了。非常感谢。 - laocius
3
stapler 与苹果公司进行交流。根据 man stapler 的说明:“在装订或验证时,stapler 需要互联网访问来检索票证。” - TheNextman
3
你可以直接用订书机订好这个 .dmg 文件。 - TheNextman
9
苹果公司真的需要让整个流程变得更简单;不得不经历这一切太荒谬了。 - l'L'l
显示剩余8条评论

3
使用 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接