[Java] 88 Apple公証方法の概要

[macOS Big Sur 11.6 , Mac mini M1 , Mac mini Intel]

最近開発したアプリをApp Storeに登録しようとしましたが、個人開発の場合は実名をApp Storeで公開することになるので、公証だけしてもらい自分のサイトにアップしました(署名するため結局公開になります)。

Appleの公証をパスできるようになるまでおよそ2日半掛かりました。成功するまでに”Your Mac software was not notarized.”のメールを38通受信しています。過去最高と言っていいくらいの壁でしたが、粘り強く食い下がって何とか解決できました。

Xcodeで開発した場合はIDE内で簡単に公証を受けられる様ですが、今回はJavaなのでほとんどターミナルでのコマンド処理でした。

流れは以下の通りです。あくまで私のケースでの進め方ですから参考程度にしていただければと思います。

1. Developer ID Applicationの証明書を発行する。
2. jar実行ファイルに署名する。
3. jpackageコマンドでappファイルを作成(引数は–type app-image他)して署名する。
4. appファイルをzipファイルに圧縮する。
5. zipファイルをxcrun altoolコマンドでAppleに提出する。
6. 1回で公証はまず通らない。ログを読んで署名ができていない(“The signature of the binary is invalid.”)と指摘されているファイルにappファイルからアクセスして署名する。
7. 追加署名したらzipファイルに圧縮して再提出。これを何回か繰り返す。
8. 署名漏れを完全にクリアすると公証が通った。
9. appファイルにステープラーでチケットを紐づける。
10. zipファイルに圧縮して自サイトにアップロードする。

dmgファイルで提出して署名漏れを指摘されても該当ファイルにアクセスできないのでappファイルにするのがポイントです。appファイルであれば中のContentsにアクセスして追加署名が可能です。

2回目以降は署名が必要なファイルが分かっているので提出前に全て署名しておけば一発で通ります。entitlements.plistの内容によるのかもしれませんが、私の場合はlibjli.dylibにも署名が必要でした。

なお公証を受けたファイルから署名の内容を確認できるため、結局実名は公開することになります。