公证 java 应用程序以在 mac 应用程序商店上分发

Posted

技术标签:

【中文标题】公证 java 应用程序以在 mac 应用程序商店上分发【英文标题】:notarize java app for distribution on mac app store 【发布时间】:2018-11-23 01:20:00 【问题描述】:

我有一个内置 jvm 的应用程序。 我试图将其上传到苹果进行公证,但我收到了the binary is not signed 错误

severity    "error"
code    null
path    "Myapp.dmg/Myapp.app/Contents/Resources/javafx-media-11-mac.jar/libfxplugins.dylib"
message "The binary is not signed."
docUrl  null
architecture    "x86_64"

我已经签署了Myapp.app 并且还使用--deep--options runtime 签署了Myapp.dmg 我还尝试使用我的应用程序文件夹中的所有文件签名 find Myapp.app -exec codesign -f -s $MYDEVELOPERID --deep --options runtime \;,但还是不行。

请注意,我从错误中得到的文件路径在 jar 文件中。 我已经签署了 jar 文件。我是否还需要解压缩 jar 文件并对每个文件进行签名并重新打包?太琐碎了!

【问题讨论】:

【参考方案1】:

还使用 --deep--options runtime 签署了 Myapp.dmg

看起来--deep 尚未编码为在 JAR 文件中进行遍历。

我已经签署了 jar 文件。我是否还需要解压 jar 文件并对每个文件进行签名并重新打包?

是的。捆绑的.dylib.jnilib(可能还有.so)需要单独签名。如果它们是由 JAR 中的第 3 方提供的,您将需要提取、签名然后重新捆绑 JAR 文件。

在您的情况下,JavaFX 不再与 Java 11 运行时捆绑在一起,因此您需要提取、签名和重新压缩的是您捆绑的 JavaFX JAR。

这里(一般)详细说明了此过程:https://***.com/a/53528020/3196753。还有一个指向 ANT 特定代码 here 的链接,但每个构建都需要非常具体的代码,因此它仅作为工作的、经过公证的构建的参考点提供。

例如,在上面的 ANT 示例中,PowerPC 二进制文件需要手动剥离。许多项目仍然提供 PowerPC 二进制文件,但如果它们是分发的一部分,则公证将失败。

有人会认为签署这些 .dylib 文件的所有者应该是 JAR 的提供者,但我没有发现任何关于在任何 Apple's documentation 的项目中允许混合签名者的信息。

【讨论】:

以上是关于公证 java 应用程序以在 mac 应用程序商店上分发的主要内容,如果未能解决你的问题,请参考以下文章

无法签署 Mac 安装程序以在 Mac 应用商店之外分发

Mac Electron 应用的签名(signature)和公证(notarization)

Apple 公证错误“团队尚未配置公证”

关于IP-guard支持Mac OS公证情况的说明

Mac 上electron-notarize 进行签名与公证

在mac下,qt自动化打包、签名、dmg安装包生成、公证