公证Java应用程序以在Mac App Store上分发

时间:2018-11-23 01:20:01

标签: macos codesign code-signing-certificate code-signing-entitlements

我有一个内置了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,并且还与Myapp.dmg--deep签署了--options runtime 我也尝试使用 find Myapp.app -exec codesign -f -s $MYDEVELOPERID --deep --options runtime {} \;,但仍然无法正常工作。

请注意,我从错误中获取的文件路径位于jar文件内部。 我已经签名了jar文件。我还需要解压缩jar文件并签名每个文件并重新打包吗?太琐碎了!

1 个答案:

答案 0 :(得分:0)

  

还用--deep--options runtime签名Myapp.dmg

看来--deep尚未编码为遍历JAR文件。

  

我已经签署了jar文件。我还需要解压缩jar文件并签名每个文件并重新打包吗?

是的。捆绑的.dylib.jnilib(以及可能的.so)需要单独签名。如果它们是由JAR内部的第三方提供的,则需要提取,签名然后重新捆绑JAR文件。

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

此过程(通常)在https://stackoverflow.com/a/53528020/3196753中阐明。还有一个指向ANT特定代码here的链接,但是每个构建都需要非常特定的代码,因此仅作为经过公证的有效构建的参考来提供。

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

有人会认为,对这些.dylib文件进行签名的所有者应该在JAR的提供程序上,但是我发现在Apple's documentation中的任何项目中都不允许混合签名人。