我目前分发一个 Java 应用程序,打包并签名 using pkgbuild在 macOS 上。
最近,苹果警告开发者:
“在即将发布的 macOS 版本中,Gatekeeper 将要求开发人员 ID 签名的软件经过公证的由苹果公司。”
阅读公证文件后,苹果警告开发商:
“您必须启用硬化运行时让您的应用程序得到 Apple 的公证。”
其中详细介绍了如何在 Xcode 中打开这些设置。但是那些不是用 Xcode 开发的应用程序呢?Xamarin/Mono 有一些来回关于他们如何解决这个问题,但到目前为止的提交似乎集中在 Mojave 检测和 C/C++ 上。 Java 应用程序或不分发任何 C/C++/Objective-C 编译代码的应用程序怎么样?项目如何进行“公证”,以免被未来的 macOS 更新阻止?
可能相关:如何在 Xcode 上共同设计并启用第 3 方 CLI 的强化运行时?
我正在回答这个关于需要公证的Java项目的问题。经过轻微修改,答案应该也适用于其他类型的项目(python、powershell、node)。
Note:在发布本文时,Apple 的公证命令允许以下程序运行,但是随着公证和安全性变得更加普遍且执行更加严格,Apple 将不可避免地更改和改进强化要求和程序。请根据需要进行编辑、评论或重新回答。
代码签名
公证
-
对本机库进行签名后,必须使用以下方式发送包进行公证xcrun
.
xcrun altool --eval-app --primary-bundle-id <bundle id> -u <iTunes Connect Account> -f <file path>
可能看起来像这样:
xcrun altool --eval-app --primary-bundle-id com.domain.appname -u [email protected] -f appname.pkg
系统将提示您输入 Apple 开发者密码(NOT您用于登录 Mac 的密码)。Edit:由于双因素已被强制执行,您需要创建一个应用程序专用密码为了这一步!
-
几分钟后,xcrun
命令将返回一个唯一的 ID,可用于确定公证是否获得批准。
RequestUUID = a1b2c3d4e5-a1b2-a1b2-a1b2-a1b2c3d4e5f6
- 定期检查此唯一 ID 的状态,看看它是被批准还是被拒绝。
xcrun altool --eval-info a1b2c3d4e5-a1b2-a1b2-a1b2-a1b2c3d4e5f6 -u [email protected]
-
如果被拒绝,他们不会直接告诉你原因,你必须解析 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
}
Stapling
最后,装订构建将确保即使网络连接不可用,包也是可信的。
(apple.com) 您还应该使用订书机工具将票证附加到您的软件中,以便将来的发行版包含票证。这可以确保即使网络连接不可用,Gatekeeper 也可以找到票证。要将票证附加到您的应用程序,请使用订书机工具:
xcrun stapler staple appname.pkg
Runtime
@NaderNader 提供的附加解决方案,如果将 Java 运行时与.app
,需要额外的步骤来将分布标记为runtime
使用--option=runtime
标志,在哪里P6DMU6694X
是您的签名 ID:
codesign --force --deep --options=runtime -s "P6DMU6694X" /path/to/My.app
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)