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

lao*_*ius 13 macos xcode code-signing codesign notarize

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

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

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

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

The*_*man 24

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

首先,您需要从.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
Run Code Online (Sandbox Code Playgroud)

现在,您需要将.app重新打包回.dmg内,并辞职:

--options runtime尽管不确定是否有必要,我也在这里使用标志)

codesign -s "Developer ID Application: Name (ID)" MyApp.dmg --options runtime
Run Code Online (Sandbox Code Playgroud)

然后使用altool提交您的.dmg:

(用户名和密码必须是开发人员门户中macOS团队的成员)

xcrun altool --notarize-app -f MyApp.dmg --primary-bundle-id my-app.myapp -u username -p password
Run Code Online (Sandbox Code Playgroud)

如果上传成功,您将获得令牌:

RequestUUID = 28fad4c5-68b3-4dbf-a0d4-fbde8e6a078f
Run Code Online (Sandbox Code Playgroud)

然后,您可以altool使用令牌使用来检查状态:

xcrun altool --notarization-info 28fad4c5-68b3-4dbf-a0d4-fbde8e6a078f -u username -p password
Run Code Online (Sandbox Code Playgroud)

最终,它将成功或失败。只是继续检查。检查响应的“状态”字段,该字段应为“成功”。该响应还将包括一个日志文件,您可以使用该日志文件对错误进行故障排除。

假设成功,则需要将公证书钉入应用程序:

xcrun stapler staple MyApp.dmg
Run Code Online (Sandbox Code Playgroud)

然后验证:

xcrun stapler validate MyApp.dmg
Run Code Online (Sandbox Code Playgroud)

验证操作成功!

您还可以将隔离标志应用于.app并尝试启动它,您将看到新的Gatekeeper对话框:

xattr -w com.apple.quarantine MyApp.app
Run Code Online (Sandbox Code Playgroud)

  • 苹果确实需要让整个过程变得更容易;必须经历这一切是荒谬的。 (6认同)
  • 订书机与苹果公司对话。来自`man Stapler`:“订书机需要互联网访问才能在订书或验证时检索票证。” (3认同)
  • @estan您只需装订.dmg (3认同)
  • 然后,我建议您仔细检查所使用的凭据。https://help.apple.com/itc/apploader/#/apdSb30def73 (2认同)
  • 这是因为没有邀请我参加Itunes Connect。现在工作了。非常感谢 (2认同)
  • 当您使用xcrun装订时,对于多个应用程序执行此操作时,它怎么知道要使用哪个“公证”?令我惊讶的是,公证返回带有UUID或用于标识特定公证批准的内容。 (2认同)
  • 对于我们的发布CI版本,我将开始对此进行摆弄。我很好奇,因为https://developer.apple.com/documentation/security/notarizing_your_app_before_distribution/customizing_the_notarization_workflow上的文档说:“虽然您可以对ZIP存档进行非公证,但是您不能直接对其进行装订。相反,请对每个文件运行装订器最初添加到存档中的单个项目。然后创建一个新的ZIP文件,其中包含装订的项目以进行分发。” ,. dmg文件也是如此吗?我是否必须安装.dmg并在其中装订每个项目,还是仅需装订.dmg即可? (2认同)
  • spctl -a -v -t install .pkg检查pkg是否被接受,如果没有--type(-t)安装,它将失败 (2认同)
  • 订书机验证 <pkg location> 是检查 pkg 的正确选项 (2认同)