Я отправляю приложение в Mac App Store. Приложение основано на Java, поэтому инфраструктура Java.runtime встроена в комплект приложения.
Это нормально работало с Java 8 и более ранними версиями, но Java 11 вызывает некоторые проблемы. Apple требует, чтобы вы подписали все фреймворки, используя свой собственный файл сертификатов и прав. Поэтому я подписываю все двоичные файлы и файлы .dylib, а также сам фреймворк, используя инструмент кодирования с опцией --force, чтобы заменить существующую подпись. Опять же, это было хорошо с более старыми версиями Java.
Проблема в том, что с Java 11 CFBundleIdentifier включен в исполняемые файлы. Этот CFBundleIdentifier не заменяется кодовым знаком и поэтому остается "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.
Итак, мой вопрос заключается в том, можно ли заменить CFBundleIdentifier существующего исполняемого файла при использовании кодового знака или ad-hoc. Обходной путь должен был бы иметь мою собственную сборку OpenJDK, которая устанавливает другой CFBundleIdentifier, но это было бы очень непрактично и привело бы к длительной сборке.