3

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 文件以允许公证成功吗?

4

1 回答 1

0

因为 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 并与之链接。

  • 在 10.12 Sierra 期间发布的 Java 9 向后兼容 10.10。

任何未签名的二进制可执行文件也不会进行公证。

于 2020-04-15T10:42:13.667 回答