【问题标题】:Java Notarization of libAppleScriptEngine.dylib failing with The binary uses an SDK older than the 10.9 SDKlibAppleScriptEngine.dylib 的 Java 公证失败 二进制文件使用的 SDK 早于 10.9 SDK
【发布时间】:2020-07-27 05:02:52
【问题描述】:

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 中所述,没有提供替代品。

删除 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 文件以使公证成功吗?

【问题讨论】:

  • 公证仅适用于链接到 macOS 10.9 或更高版本的二进制文件。
  • 任何未签名的二进制文件也不会进行公证。
  • @RichardBarber 我明白了,但如果 8u241 是最近才发布的,为什么它包含针对非常旧的 OSX 10.9 构建的库,而且我自己无法重建二进制文件有什么办法解决这个问题。
  • Java8 本身是建立在 10.7.5 sdk 之上的。它是您正在使用的 Java8 的最新更新并不会改变向后兼容性。 Java8 最初是在 10.9 Mavericks 期间发布的,并且与当时仍受支持的 10.7.5 Lion 兼容。 Java8 的任何更新都旨在支持 Mountain Lion,并针对它进行了链接。

标签: java macos applescript java-11 notarize


【解决方案1】:

由于 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。

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

【讨论】:

  • 你暂时让我抱有希望,但不幸的是 libAppleScriptEngine.dylib 在 Java 9 中也被删除了。所以 macOS 是 Apple 开发的,Java 是 Oracle 开发的。许多人仍在使用 Java 8,而 Apple 要求所有新应用程序都必须经过公证,所以我不明白为什么 Oracle 仍在构建 Java 8 的新版本,但是针对已失效的 MacOS (10.7) 构建它们是没有意义的。
  • 所以目前我有三个选择,删除我对 Applescript 的使用并制定一种与 MacOS Music 通信的不同方式(不知道如何做到这一点),删除对音乐应用程序的支持 - 不好为客户,而不是公证申请 - 对客户不利。
  • 好的,我有一个使用来自 BellSoft Java 8u252 bell-sw.com/pages/java-8u252 的 libAppleScriptEngine 和 dylib 的解决方案,通过公证并且可以工作。
  • 有趣,答案已编辑。它根据otool -l 链接到 10.9,因此确实应该适合您。另请注意,它是开源的,因此您当然可以在本地构建它。
猜你喜欢
  • 2021-02-12
  • 2019-12-02
  • 1970-01-01
  • 2016-03-19
  • 2018-10-16
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多