二进制文件失败的libAppleScriptEngine.dylib的Java公证使用比10.9 SDK旧的SDK

二进制文件失败的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

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上仍能正常运行

但不幸的是(尽管应用程序的签名验证没有给出错误),公证失败,出现以下错误

{
  "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公证

  • 开源的Libericajdk8u252是为osx10.9构建的,因此可以正常工作。发行说明有误,说明macOS的最低版本为11.8,但该版本不存在
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,因此确实应该适合您。还要注意,它是开源的,因此您当然可以在本地构建它。