libAppleScriptEngine.dylib 的 Java 公证失败,二进制文件使用早于 10.9 SDK 的 SDK [英] Java Notarization of libAppleScriptEngine.dylib failing with The binary uses an SDK older than the 10.9 SDK

查看:18
本文介绍了libAppleScriptEngine.dylib 的 Java 公证失败,二进制文件使用早于 10.9 SDK 的 SDK的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

2019 年底,我对 Java 8 应用程序进行了基本公证,2020 年 2 月,Apple 收紧了有关公证的规则,这阻止了我的应用程序进行公证.由于无论如何我都需要迁移到 Java 11,因此我切换到 Java 11,因为我知道这可以通过公证并进行必要的代码更改,但仍然存在一些问题.

End of 2019 I had basic notarization of my Java 8 application working, on February 2020 Apple tightened the rules regarding notarization and this stopped my application from being notarized. Since I needed to move to Java 11 anyway I switched to Java 11 as I understood that this could be notarized ok and made necessary code changes but still having some problems.

具体来说,我的应用程序中有一个选项可以使用 Applescript 与 Apple Music 应用程序(以前称为 iTunes)进行通信.在 Java 11 之前,这始终可以通过使用 MacoS JDK/JRE 和 applescript jar 附带的 libAppleScriptEngine.dylib(最初由 Apple 提供并提供接口,因此可以通过 javax.scripting 查找)来实现.

Specifically there is an option in my application to communicate with Apple Music app (formerly iTunes) using Applescript to communicate with it. Prior to Java 11 this has always been possible via use of libAppleScriptEngine.dylib that comes with MacoS JDK/JRE and applescript jar (originally provided by Apple and provides interface so can be looked up by javax.scripting).

在 Java 11 中,libAppleScriptEngine.dylib 已被删除,如 Oracle JDK 11 迁移指南,不提供替代品.

In Java 11 libAppleScriptEngine.dylib has been removed as documented in Oracle JDK 11 Migration Guide, with no replacement offered.

移除了 AppleScript 引擎

Removed AppleScript Engine

AppleScript 引擎,特定于平台的 javax.script实现,已在 JDK 中删除,没有任何替换.

The AppleScript engine, a platform-specific javax.script implementation, has been removed without any replacement in the JDK.

AppleScript 引擎在最近的版本中几乎无法使用.该功能仅在 JDK 7 或 JDK 8 的系统上有效已经有 Apple 版本的 AppleScriptEngine.jar 文件系统.

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

However, if I deploy my application with libAppleScriptEngine.dylib in the MacOS folder of my package the applescript continues to work fine running on Java 11.

但不幸的是(虽然应用程序的签名验证没有错误)公证失败并出现以下错误

But unfortunately (although signing verification of the app gives no error) notarization fails with following error

{
  "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"
    }
  ]
}

有没有办法解决这个问题?

So is there a way round this ?

构建脚本到此结束

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

我尝试将 libAppleScriptEngine.dylib 的版本替换为最新的 Oracle Java 8 版本 Oracle 8u241,但没有任何区别.我很惊讶它是针对旧的 sdk 构建的,因为我听说现在可以对 Java 8 构建进行公证.

I tried replacing the version of libAppleScriptEngine.dylib with one from the latest Oracle Java 8 build Oracle 8u241 but made no differcne. I am surprised it is built against the old sdk, because I had heard it was now possible to notarize a Java 8 build.

我可以选择不签署 libAppleScriptEngine.dylib 文件以允许公证成功吗?

Can I elect not to sign the libAppleScriptEngine.dylib file in order to allow notarization to succeed ?

推荐答案

因为 Oracle Java 8 链接到 OSX 10.8.3,所以不会通过 Apple 公证.

Because Oracle Java 8 is linked to OSX 10.8.3, it will not pass Apple notary.

  • 开源 Liberica JDK 8u252 https://bell-sw.com/pages/java-8u252/ 是为 OSX 10.9 构建的,所以它可以工作.发行说明中有错误,指出最低 macOS 版本为 11.8,但不存在.
  • The open-source Liberica JDK 8u252 https://bell-sw.com/pages/java-8u252/ is built for OSX 10.9, so that will work. The release notes are in error, stating the minimum macOS version is 11.8, which does not exist.

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 二进制文件进行公证的变通方法.


There is no work-around which allows an Oracle Java 8 binary to be notarized.

  • Java 8 本身建立在 10.7.5 sdk 上.它是您使用的 Java8 的最新更新并不会改变向后兼容性.Java 8 最初是在 10.9 Mavericks 期间发布的,并且与当时仍受支持的 10.7.5 Lion 兼容.Java 8 的任何更新都旨在支持 10.7.5 Lion 并与之相关联.

  • Java 8 itself is built on the 10.7.5 sdk. That it is a recent update of Java8 you are using does not change that backwards compatibility. Java 8 was originally released during 10.9 Mavericks and was compatible with the then-still-supported 10.7.5 Lion. Any update of Java 8 is intended to support 10.7.5 Lion and was linked against it.

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

Java 9, released during 10.12 Sierra is backwards compatible to 10.10.

这篇关于libAppleScriptEngine.dylib 的 Java 公证失败,二进制文件使用早于 10.9 SDK 的 SDK的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆