Apple 公证将 dylib 文件列为未签名

Apple notarization lists dylib files as not signed

我们使用捆绑的 JRE 1.8.0_172 分发 Java 应用程序。我使用标志 -f --deep 和 --options runtime 对应用程序进行签名。查看捆绑的 JRE 的 _CodeSignature 目录中的 CodeResources 文件,JRE 中的每个文件都经过签名和说明。

但是,在将包含该应用程序的DMG提交给Apple进行公证后,我们的软件被拒绝了。 JRE 中的所有 60 个 DYLIB 文件都列为未签名。这是一个例子:

来自 CodeResources 文件:

<key>Home/jre/lib/libAppleScriptEngine.dylib</key>
    <dict>
        <key>hash</key>
        <data>
        oJjQQGky4LuYNhwuBu8zMLG4zbc=
        </data>
        <key>hash2</key>
        <data>
        grMACw0q7A9GJyPxlSBDGYEkZKrDusKLRRnXsW/bHGI=
        </data>
    </dict>

来自 Apple 的回复:

"severity": "error",
"code": null,
"path": "TheApplication.dmg/TheApplication.app/Contents/PlugIns/jdk1.8.0_172.jdk/Contents/Home/jre/lib/libAppleScriptEngine.dylib",
"message": "The binary is not signed.",
"docUrl": null,
"architecture": "x86_64"

除了 dylib 文件之外,jspawnhelper 文件也因未签名而被拒绝。

最后,文件libjli.dylib被拒绝,原因如下: "The binary uses an SDK older than the 10.9 SDK."

有没有人遇到过类似的问题然后能够通过公证流程的?

2020 年 1 月 14 日: 我从这个网站使用的步骤 http://www.zarkonnen.com/signing_notarizing_catalina 从今天开始不工作。苹果改变了他们的限制。我现在遇到的问题与我第一次在 post.

中询问的问题相同

2020 年 2 月 21 日: 事实证明,列为未签名的文件实际上并未签名。我现在使用 shell 脚本对我们应用程序中的每个文件进行递归签名。我遵循这一点,对捆绑的 JRE、其他内部应用程序以及顶层的整个应用程序进行整体签名。

剩下的问题是Java 8 不是用使用强化运行时的文件构建的。希望 OpenJDK and/or AdoptOpenJDK 很快就会有新版本的 Java 8 满足 Apple 严格的运行时要求。

这是 Java 8 中的错误:https://bugs.openjdk.java.net/browse/JDK-8223671

这个问题最快的解决方案可能来自 AdoptOpenJDK,希望能在本月底前完成:https://github.com/AdoptOpenJDK/openjdk-build/issues/1130