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

标签 xcode macos code-signing codesign notarize

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

根据文件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 和更高版本允许您设置build设置“代码签名注入(inject)基本权利”,这将阻止 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

如果上传成功,您将获得一个 token :
RequestUUID = 28fad4c5-68b3-4dbf-a0d4-fbde8e6a078f

然后您可以使用 altool 查看状态,使用该 token :
xcrun altool --notarization-info 28fad4c5-68b3-4dbf-a0d4-fbde8e6a078f -u username -p password

最终,它要么成功,要么失败。继续检查。检查响应的“状态”字段,应该是“成功”。响应还将包含一个日志文件,您可以使用它来解决错误。

假设它成功,您需要将公证装订到应用程序:
xcrun stapler staple MyApp.dmg

然后验证:
xcrun stapler validate MyApp.dmg

The validate action worked!



您还可以将隔离标志应用到您的 .app 并尝试启动它,您将看到新的 Gatekeeper 对话框:
xattr -w com.apple.quarantine MyApp.app

关于xcode - 如何在xcode中上传dmg文件进行公证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53112078/

相关文章:

ios - 代码设计检查失败 : . .. *.app: 密封资源丢失或无效 > 文件已添加

objective-c - 将方法放在单独的文件中

ios - 在 Storyboard Xcode 6 中包装几个元素

macos - 如何查找正在使用端口的java进程

macos - 如何以编程方式拦截 OSX (10.8) 打印命令?

php - 命令行和 apache 中的不同版本的 php

code-signing - Codesign 软件仍然在 Windows 10 上发出警告

java - 使用有效 CA 签名的小程序仍显示为未知发布者

xcode - 运行时将模拟器置于前端

ios - 找不到 iOS 开发证书