二进制文件失败的libAppleScriptEngine.dylib的Java公证使用比10.9 SDK旧的SDK
2019年底,我的Java 8应用程序的基本公证开始工作,2020年2月,苹果收紧了公证规则,这阻止了我的应用程序被公证。因为我需要转移到Java11,所以我切换到Java11,因为我知道这是可以公证的,可以进行必要的代码更改,但仍然存在一些问题 具体来说,我的应用程序中有一个选项,可以使用Applescript与苹果音乐应用程序(以前的iTunes)通信。在Java 11之前,通过使用MacoS JDK/JRE和applescript jar附带的libappleScriptingine.dylib(最初由Apple提供,并提供接口,因此可以通过javax.scripting查找),这一点始终是可能的 在Java 11中,libAppleScriptEngine.dylib已被删除,如中所述,未提供替换 已删除AppleScript引擎 AppleScript引擎,一个特定于平台的javax.script 实现,在JDK中已被删除,没有任何替换 AppleScript引擎在最近的版本中基本上无法使用。 该功能仅在JDK 7或JDK 8中适用于以下系统: 已经有了苹果版本的AppleScriptEngine.jar文件 系统 但是,如果我在包的MacOS文件夹中使用libAppleScriptEngine.dylib部署应用程序,applescript在Java 11上仍能正常运行 但不幸的是(尽管应用程序的签名验证没有给出错误),公证失败,出现以下错误二进制文件失败的libAppleScriptEngine.dylib的Java公证使用比10.9 SDK旧的SDK,java,macos,applescript,java-11,notarize,Java,Macos,Applescript,Java 11,Notarize,2019年底,我的Java 8应用程序的基本公证开始工作,2020年2月,苹果收紧了公证规则,这阻止了我的应用程序被公证。因为我需要转移到Java11,所以我切换到Java11,因为我知道这是可以公证的,可以进行必要的代码更改,但仍然存在一些问题 具体来说,我的应用程序中有一个选项,可以使用Applescript与苹果音乐应用程序(以前的iTunes)通信。在Java 11之前,通过使用MacoS JDK/JRE和applescript jar附带的libappleScriptingine.dy
{
"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 buildOracle 8u241中的版本替换libAppleScriptEngine.dylib,但没有改变。我很惊讶它是根据旧的sdk构建的,因为我听说现在可以对Java8构建进行公证了
我可以选择不签署libAppleScriptEngine.dylib文件以使公证成功吗?因为Oracle Java 8链接到OSX 10.8.3,它不会通过Apple公证
- 开源的Liberica
otool-l Library/Java/JavaVirtualMachines/liberica-jdk-8.jdk/Contents/Home/jre/lib/libapplescriptenine.dylib
报告:
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.9
sdk 10.14
不存在允许对Oracle Java 8二进制文件进行公证的解决方案
公证仅适用于针对macOS 10.9或更高版本链接的二进制文件。
- Java8本身是基于10.7.5SDK构建的。您正在使用的是Java8的最新更新,这并不会改变向后兼容性。Java8最初是在10.9 Mavericks期间发布的,与当时仍然支持的10.7.5 Lion兼容。Java8的任何更新都是为了支持10.7.5Lion,并与之链接
- 10.12期间发布的Java9向后兼容10.10
任何未签名的二进制可执行文件也不会进行公证。公证仅适用于针对macOS 10.9或更高版本链接的二进制文件。任何未签名的二进制文件也不会进行公证。@RichardBarber我明白了,但如果8u241只是最近才发布,为什么它包含针对非常旧的OSX 10.9构建的库,sicne我自己也无法重建二进制文件。Java8本身是在10.7.5SDK上构建的。您正在使用的是Java8的最新更新,这并不会改变向后兼容性。Java8最初是在10.9 Mavericks期间发布的,与当时仍然支持的10.7.5 Lion兼容。Java8的任何更新都是为了支持Mountain Lion,并与之链接。我暂时抱着希望,但不幸的是,Java9中的libAppleScriptEngine.dylib也被删除了。所以macOS是由苹果开发的,Java是由Oracle开发的。许多人仍在使用Java 8,苹果要求所有新应用都经过公证,所以我不明白为什么Oracle仍在开发Java 8的新版本,但针对一个已不存在的MacOS(10.7)开发它们是没有意义的。因此,就目前情况而言,我有三个选择,删除我对Applescript的使用,找到一种与MacOS Music通信的不同方式(不知道怎么做),删除对音乐应用程序的支持-对客户不好,而不是公证应用程序-对客户不好。好的,我有一个使用LibAppleScriptine的解决方案,BellSoft Java 8u252的dylib通过公证并工作。有趣,答案已编辑。根据
otool-l
,它链接到了10.9,因此确实应该适合您。还要注意,它是开源的,因此您当然可以在本地构建它。