我有一个内置了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文件并签名每个文件并重新打包吗?太琐碎了!
答案 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中的任何项目中都不允许混合签名人。