我正在就需要公证的 Java 项目回答这个问题。稍作修改,答案也应该适用于其他类型的项目(python、powershell、node)。
注意:在发布此内容时,Apple 的公证命令允许以下程序工作,但是随着公证和安全变得更加普遍和更严格地执行,Apple 将不可避免地更改和改进强化要求和程序。请根据需要编辑、评论或重新回答。
代码签名
公证
一旦对原生库进行了签名,就必须使用xcrun
.
xcrun altool --eval-app --primary-bundle-id <bundle id> -u <iTunes Connect Account> -f <文件路径>
这可能看起来像这样:
xcrun altool --eval-app --primary-bundle-id com.domain.appname -u john@domain.com -f appname.pkg
系统将提示您输入 Apple Developer 密码(不是您用于登录 Mac 的密码)。 编辑:由于双重因素是强制性的,因此您需要为此步骤创建一个应用程序专用密码!
几分钟后,该xcrun
命令将返回一个唯一 ID,可用于确定公证是否被批准。
RequestUUID = a1b2c3d4e5-a1b2-a1b2-a1b2-a1b2c3d4e5f6
- 定期检查此唯一 ID 的状态以查看它是被批准还是被拒绝。
xcrun altool --eval-info a1b2c3d4e5-a1b2-a1b2-a1b2-a1b2c3d4e5f6 -u john@domain.com
如果被拒绝,他们不会直接告诉你原因,你必须解析 JSON 响应。
LogFileURL: https://osxapps-ssl.itunes.apple.com/itunes-assets/...
阅读 JSON 并更正已识别的问题。JSON 已缩小,您可能希望通过漂亮的格式化程序运行它。如果没有问题,您的应用程序已经过公证并且是Ready for distribution
.
{
"logFormatVersion": 1,
"jobId": "a1b2c3d4e5-a1b2-a1b2-a1b2-a1b2c3d4e5f6",
"status": "Accepted",
"statusSummary": "Ready for distribution",
"statusCode": 0,
"archiveFilename": "appname.pkg",
"uploadDate": "2018-10-26T05:41:12Z",
"sha256": "e2350bda66...",
"issues" null
}
装订
最后,装订构建将确保即使网络连接不可用,包也是可信的。
(apple.com) 您还应该使用订书机工具将票据附加到您的软件,以便将来的发行版包含票据。这确保即使网络连接不可用,Gatekeeper 也能找到票证。要将票证附加到您的应用程序,请使用订书机工具:
xcrun stapler staple appname.pkg
运行
@NaderNader 提供的附加解决方案,如果将 Java 运行时与 a 捆绑在一起.app
,则需要额外的步骤来使用标志将分发标记为 a runtime
,--option=runtime
您P6DMU6694X
的签名 ID 在哪里:
codesign --force --deep --options=runtime -s "P6DMU6694X" /path/to/My.app