Mac App Store 提交失败,因为嵌入式 Java 11 框架包含现有 CFBundleIdentifier

Kee*_*ist 5 java codesign mac-app-store java-11

我正在向 Mac App Store 提交应用程序。该应用程序基于 Java,因此 Java.runtime 框架嵌入在应用程序包中。

这在 Java 8 及更早版本中运行良好,但在 Java 11 中会导致一些问题。Apple 要求您使用自己的证书和权利文件对所有框架进行签名。因此,我使用带有 --force 选项的协同设计工具来替换现有签名,对所有二进制文件和 .dylib 文件以及框架本身进行签名。同样,这对于旧的 Java 版本来说是没问题的。

问题是,从 Java 11 开始,CFBundleIdentifier 包含在可执行文件中。此 CFBundleIdentifier 不会被 codesign 替换,因此仍然是“net.java.openjdk.cmd”。然后,Apple 会拒绝该应用程序,因为此 CFBundleIdentifier 已存在于 Mac App Store 中。

提供的错误消息显示了问题:

CFBundleIdentifier Collision - The Info.plist CFBundleIdentifier value 'net.java.openjdk.cmd' of 'java' is already in use by another application.
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是是否可以在使用协同设计或临时时替换现有可执行文件的 CFBundleIdentifier。解决方法是使用我自己的 OpenJDK 构建来设置不同的 CFBundleIdentifier,但这非常不切实际,并且会导致构建耗时。