Java libAppleScriptEngine.dylib 的公证失败,二进制文件使用早于 10.9 SDK 的 SDK
Java Notarization of libAppleScriptEngine.dylib failing with The binary uses an SDK older than the 10.9 SDK
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 Migration Guide 中所述,未提供替代品。
Removed AppleScript Engine
The AppleScript engine, a platform-specific javax.script
implementation, has been removed without any replacement in the JDK.
The AppleScript engine has been mostly unusable in recent releases.
The functionality worked only in JDK 7 or JDK 8 on systems that
already had Apple's version of the AppleScriptEngine.jar file on the
system.
但是,如果我在我的包的 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 build Oracle 8u241 替换 libAppleScriptEngine.dylib 的版本,但没有任何区别。我很惊讶它是针对旧的 sdk 构建的,因为我听说现在可以对 Java 8 构建进行公证。
我可以选择不签署 libAppleScriptEngine.dylib 文件以使公证成功吗?
因为Oracle Java 8链接到OSX 10.8.3,所以不会通过Apple公证。
- 开源 Liberica JDK 8u252 https://bell-sw.com/pages/java-8u252/ 是为 OSX 10.9 构建的,这样就可以了。发行说明有误,指出最低 macOS 版本为 11.8,该版本不存在。
otool -l Library/Java/JavaVirtualMachines/liberica-jdk-8.jdk/Contents/Home/jre/lib/libAppleScriptEngine.dylib
报告:
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.9
sdk 10.14
没有允许 Oracle Java 8 二进制文件被公证的解决方法。
公证仅适用于针对 macOS 10.9 或更高版本链接的二进制文件。
Java 8本身是建立在10.7.5 sdk之上的。这是您正在使用的 Java8 的最新更新并不会改变向后兼容性。 Java 8 最初是在 10.9 Mavericks 期间发布的,并且与当时仍受支持的 10.7.5 Lion 兼容。 Java 8 的任何更新都旨在支持 10.7.5 Lion 并与其相关联。
Java 9,在 10.12 期间发布 Sierra 向后兼容 10.10。
任何未签名的二进制可执行文件也不会进行公证。
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 Migration Guide 中所述,未提供替代品。
Removed AppleScript Engine
The AppleScript engine, a platform-specific javax.script implementation, has been removed without any replacement in the JDK.
The AppleScript engine has been mostly unusable in recent releases. The functionality worked only in JDK 7 or JDK 8 on systems that already had Apple's version of the AppleScriptEngine.jar file on the system.
但是,如果我在我的包的 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 build Oracle 8u241 替换 libAppleScriptEngine.dylib 的版本,但没有任何区别。我很惊讶它是针对旧的 sdk 构建的,因为我听说现在可以对 Java 8 构建进行公证。
我可以选择不签署 libAppleScriptEngine.dylib 文件以使公证成功吗?
因为Oracle Java 8链接到OSX 10.8.3,所以不会通过Apple公证。
- 开源 Liberica JDK 8u252 https://bell-sw.com/pages/java-8u252/ 是为 OSX 10.9 构建的,这样就可以了。发行说明有误,指出最低 macOS 版本为 11.8,该版本不存在。
otool -l Library/Java/JavaVirtualMachines/liberica-jdk-8.jdk/Contents/Home/jre/lib/libAppleScriptEngine.dylib
报告:
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.9
sdk 10.14
没有允许 Oracle Java 8 二进制文件被公证的解决方法。
公证仅适用于针对 macOS 10.9 或更高版本链接的二进制文件。
Java 8本身是建立在10.7.5 sdk之上的。这是您正在使用的 Java8 的最新更新并不会改变向后兼容性。 Java 8 最初是在 10.9 Mavericks 期间发布的,并且与当时仍受支持的 10.7.5 Lion 兼容。 Java 8 的任何更新都旨在支持 10.7.5 Lion 并与其相关联。
Java 9,在 10.12 期间发布 Sierra 向后兼容 10.10。