You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS应用公证失败:jpackage打包JRE的版权文件未签名

苹果公证失败:JRE运行时文件签名验证错误

环境

  • Java 21.0.4+8-LTS-274
  • MacOS Sequoia 15.1.1 (24B91)

打包脚本

使用jpackage打包应用:

jpackage \
--dest /Users/alanwhite/git/drumscore/DrumScore/bundles \
--app-version "${APP_VERSION}" \
--copyright 'Copyright (c) 2024 Alan R. White' \
--name 'DrumScoreEditor' \
--vendor 'drumscore.scot' \
--input /Users/alanwhite/git/drumscore/DrumScore/autobuild/target/build \
--main-jar "DrumScoreEditor-${APP_VERSION}.jar" \
--main-class org.whiteware.DrumScoreEditor \
--java-options '--add-opens java.desktop/com.apple.eawt.event=ALL-UNNAMED' \
--file-associations /Users/alanwhite/git/drumscore/DrumScore/autobuild/filetypes.txt \
--resource-dir /Users/alanwhite/git/drumscore/DrumScore/package/macosx \
--mac-package-name 'Drum Score Editor' \
--mac-package-signing-prefix 'org.whiteware.DrumScoreEditor' \
--mac-sign \
--mac-signing-key-user-name 'Alan White (XXXXXXXX)' \
--add-modules java.base,java.desktop,java.datatransfer,java.prefs,java.xml,java.logging

公证失败日志

执行xcrun notarytool submit后报错:

{
      "severity": "error",
      "code": null,
      "path": "DrumScoreEditor_macOS_arm64_3.2.1.dmg/DrumScoreEditor.app/Contents/runtime/Contents/MacOS/libjli.dylib",
      "message": "The signature of the binary is invalid.",
      "docUrl": "https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution/resolving_common_notarization_issues#3087735",
      "architecture": "arm64"
    }

签名检查结果

用codesign检查运行时文件:

codesign -vvv --strict runtime/Contents/MacOS/libjli.dylib
runtime/Contents/MacOS/libjli.dylib: a sealed resource is missing or invalid
file modified: /Volumes/DrumScoreEditor/DrumScoreEditor.app/Contents/runtime/Contents/Home/legal/java.datatransfer/COPYRIGHT
file modified: /Volumes/DrumScoreEditor/DrumScoreEditor.app/Contents/runtime/Contents/Home/legal/java.datatransfer/LICENSE
file modified: /Volumes/DrumScoreEditor/DrumScoreEditor.app/Contents/runtime/Contents/Home/legal/java.desktop/COPYRIGHT
file modified: /Volumes/DrumScoreEditor/DrumScoreEditor.app/Contents/runtime/Contents/Home/legal/java.desktop/LICENSE
file modified: /Volumes/DrumScoreEditor/DrumScoreEditor.app/Contents/runtime/Contents/Home/legal/java.logging/COPYRIGHT
file modified: /Volumes/DrumScoreEditor/DrumScoreEditor.app/Contents/runtime/Contents/Home/legal/java.logging/LICENSE
file modified: /Volumes/DrumScoreEditor/DrumScoreEditor.app/Contents/runtime/Contents/Home/legal/java.prefs/COPYRIGHT
file modified: /Volumes/DrumScoreEditor/DrumScoreEditor.app/Contents/runtime/Contents/Home/legal/java.prefs/LICENSE
file modified: /Volumes/DrumScoreEditor/DrumScoreEditor.app/Contents/runtime/Contents/Home/legal/java.xml/COPYRIGHT
file modified: /Volumes/DrumScoreEditor/DrumScoreEditor.app/Contents/runtime/Contents/Home/legal/java.xml/LICENSE

单独检查这些legal目录下的文件:

codesign -vvv --strict runtime/Contents/Home/legal/java.datatransfer/COPYRIGHT
runtime/Contents/Home/legal/java.datatransfer/COPYRIGHT: code object is not signed at all

问题背景

上周打包公证流程完全正常,且未更换JDK版本。手动对这些文件签名不符合苹果公证规范,请问最佳解决方式是什么?是jpackage应该处理这些文件的签名,还是这些文件应由JDK提供商签名?


解决方案

1. 调整jpackage签名策略,跳过运行时文件重签名

JRE运行时本身已由JDK厂商签名,jpackage默认的全量重签名会破坏原有签名,导致密封资源验证失败。修改打包脚本,指定仅签名应用自身代码:

jpackage \
# 保留原有所有参数...
--mac-sign \
--mac-signing-key-user-name 'Alan White (XXXXXXXX)' \
--mac-signing-executable "codesign --deep --force --sign 'Alan White (XXXXXXXX)' --exclude Contents/runtime"

注意--exclude的路径需匹配应用包内的JRE目录。

2. 用jlink预构建自定义JRE

通过jlink生成仅包含所需模块的未签名JRE,再由jpackage统一签名,避免原有签名冲突:

jlink \
--module-path $JAVA_HOME/jmods \
--add-modules java.base,java.desktop,java.datatransfer,java.prefs,java.xml,java.logging \
--output custom-jre

在jpackage脚本中指定这个自定义JRE:

jpackage \
# 保留原有所有参数...
--runtime-image /path/to/custom-jre

3. 同步工具版本兼容性

MacOS Sequoia更新后可能调整了公证规则,更新Xcode命令行工具确保签名工具与系统兼容:

xcode-select --install

4. 禁止修改JRE目录文件

确保打包流程中没有脚本或工具修改JRE目录下的任何文件(包括legal目录的COPYRIGHT/LICENSE),这类文件是JRE签名的一部分,任何修改都会导致签名失效。


内容的提问来源于stack exchange,提问作者Hamish258

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:25:55