As I noted earlier on this mailing list, until this past week I had been 
successfully notarizing Mac disk images containing an application by ignoring 
the code-signing features of jpackage (which are missing elements required for 
notarization; one of those is already recorded in bug JDK-8238184, 
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8238184 
<https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8238184> but since that 
was filed, Apple has further tightened the requirements and it is also 
necessary to enable the hardened runtime via `—options runtime` and to supply 
an entitlements file with several important entitlements).

So, what I had been doing was creating my disk image using the early access 
jpackage, and a runtime created via jlink from an Amazon Corretto 11 LTS 
OpenJDK, with no signing, and then running `codesign —force —deep` with the 
necessary timestamp, runtime, and entitlements arguments and file.

That stopped working at the end of the week, because Apple started to complain 
that the individual binaries and native libraries of the runtime itself were 
not signed. Since there were many dozens of them, I despaired about what to do, 
and opened a support ticket with Apple (as yet no response has been 
forthcoming).

But in further experimentation today, I tried downloading this weeks’s release 
candidate of OpenJDK 14, and noticed that the binaries and native libraries 
within that are all properly signed and notarized by Oracle. Excellent! So I 
changed approaches.

I used the release candidate of OpenJDK 14 for both the jlink step to produce 
my tailored runtime, and then used that with jpackage to create an application 
image. I then code signed the application image (without attempting to use 
—deep) to add the necessary timestamp, hardened runtime, and entitlements. I 
then put that into a disk image and submitted it to Apple for notarization.

It *almost* worked, but I received the following error report from Apple:

{
  "logFormatVersion": 1,
  "jobId": "c8195a4f-3e5b-492b-be27-dc22f20efb42",
  "status": "Invalid",
  "statusSummary": "Archive contains critical validation errors",
  "statusCode": 4000,
  "archiveFilename": "Beat_Link_Trigger.dmg",
  "uploadDate": "2020-02-08T23:04:13Z",
  "sha256": "3d0c25a6e6563f2c69201c74ea48c182b1df590838436bc84a57f4e9b25ea934",
  "ticketContents": null,
  "issues": [
    {
      "severity": "error",
      "code": null,
      "path": "Beat_Link_Trigger.dmg/Beat Link 
Trigger.app/Contents/runtime/Contents/MacOS/libjli.dylib",
      "message": "The signature of the binary is invalid.",
      "docUrl": null,
      "architecture": "x86_64"
    }
  ]
}
Looking into the application image package contents, I discovered that for some 
reason, there were two copies of libjli.dylib present. In addition to the 
expected one in:
  My.app/Contents/runtime/Contents/Home/lib/libjli.dylib
there was an additional copy (and nothing else) in:
  My.app/Contents/runtime/Contents/MacOS/libjli.dylib

That second one was the one that was causing the notarization to fail.

I updated my build script to remove that extra folder, 
Contents/runtime/Contents/MacOS/, from the application image before code 
signing, building the disk image, and submitting it for notarization, and I was 
back in business creating successfully notarized Java applications. Note that 
the application appears to work just fine without the redundant, problematic 
copy of libjli.dylib inside it.

You can find the build script that does all this here:
https://github.com/Deep-Symmetry/beat-link-trigger/blob/master/.github/scripts/build_dmg.zsh
 
<https://github.com/Deep-Symmetry/beat-link-trigger/blob/master/.github/scripts/build_dmg.zsh>

It is driven by this GitHub Actions workflow:
https://github.com/Deep-Symmetry/beat-link-trigger/blob/master/.github/workflows/uberjar.yml
 
<https://github.com/Deep-Symmetry/beat-link-trigger/blob/master/.github/workflows/uberjar.yml>

Please let me know if there is any more information I could provide, or if you 
think I should open this as a bug in itself.

Thanks,

  -James

Reply via email to