公证 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 Electron 应用的签名(signature)和公证(notarization)