2019 年底,我对我的 Java 8 应用程序进行了基本公证,2020 年 2 月,Apple 收紧了关于公证的规则,这阻止了我的应用程序被公证。因为无论如何我都需要迁移到 Java 11,所以我切换到了 Java 11,因为我知道这可以公证并进行必要的代码更改,但仍然存在一些问题。
具体来说,我的应用程序中有一个选项可以使用 Applescript与Apple Music应用程序(以前的 iTunes)进行通信。在 Java 11 之前,这始终可以通过使用 MacoS JDK/JRE 和 applescript jar 附带的 libAppleScriptEngine.dylib(最初由 Apple 提供并提供接口,因此可以通过 javax.scripting 查找)来实现。
在 Java 11 中,libAppleScriptEngine.dylib 已删除,如Oracle JDK 11 迁移指南中所述,没有提供替代品。
移除 AppleScript 引擎
AppleScript 引擎是一个特定于平台的 javax.script 实现,已在 JDK 中删除,没有任何替换。
AppleScript 引擎在最近的版本中几乎无法使用。该功能仅适用于 JDK 7 或 JDK 8 在系统上已具有 Apple 版本的 AppleScriptEngine.jar 文件的系统。
但是,如果我在我的包的 MacOS 文件夹中使用 libAppleScriptEngine.dylib 部署我的应用程序,则 applescript 将继续在 Java 11 上正常运行。
但不幸的是(尽管应用程序的签名验证没有错误)公证失败并出现以下错误
{
"logFormatVersion": 1,
"jobId": "224840dd-15ec-45a2-8cd0-b046dab3bccb",
"status": "Invalid",
"statusSummary": "Archive contains critical validation errors",
"statusCode": 4000,
"archiveFilename": "songkong-osx.dmg",
"uploadDate": "2020-04-14T11:50:17Z",
"sha256": "b4d3a808a11a342b748901e5b6df5d628fb76a936ebe67ed5b2558cee5f268f7",
"ticketContents": null,
"issues": [
{
"severity": "error",
"code": null,
"path": "songkong-osx.dmg/SongKong.app/Contents/MacOS/libAppleScriptEngine.dylib",
"message": "The binary uses an SDK older than the 10.9 SDK.",
"docUrl": null,
"architecture": "x86_64"
}
]
}
那么有没有办法解决这个问题?
这是构建脚本的结尾
export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate"
/usr/bin/codesign --timestamp --options runtime \
--entitlements /Users/paul/code/jthink/songkong/songkong.entitlements \
--sign "Developer ID Application: P Taylor" \
--force --deep --verbose /Applications/SongKong.app
/usr/bin/codesign -vvv --deep --strict /Applications/SongKong.app
spctl -a -t exec -vv /Applications/SongKong.app
cd /Users/paul/code/jthink/SongKong
/usr/local/bin/dmgcanvas /Users/paul/code/jthink/SongKong \
/dmgCanvas_songkong.dmgCanvas /Users/paul/songkong-osx.dmg \
-v SongKong -identity "Developer ID Application: P Taylor"\
-notarizationAppleID paultaylor@jthink.net \
-notarizationPassword password -notarizationPrimaryBundleID songkong
我尝试用最新的 Oracle Java 8 版本 Oracle 8u241替换 libAppleScriptEngine.dylib 的版本,但没有任何区别。我很惊讶它是针对旧 sdk 构建的,因为我听说现在可以公证 Java 8 构建。
我可以选择不签署 libAppleScriptEngine.dylib 文件以允许公证成功吗?