macOS用スクリーンセーバーに署名してAppleに提出して公証を受ける

こんな事する人はほんの一握りかと思いますけれど、それだからなのかXcodeから直接できないっていうのもどうかと思いますし、そもそも現在(2020.07.20)、Xcodeから作れるスクリーンセーバーのプロジェクトは内部的にレガシーだとされ、じゃぁレガシーじゃないの作らせてくださいよって話ではありました。

Appに署名してGatekeeperで保護する

https://developer.apple.com/jp/developer-id/

ここを読めばわかる、って言われたんだけど、わかるかや! ということで覚書。

これは初回だけ、というかエラーになったら対処する(Xcodeがメジャーバージョンアップしたりとか・・・)必要があるんですが、altoolってなに?って言われることがあります。 そのときは、あ、全部ターミナルでやるですよ。

sudo xcode-select –switch /Applications/Xcode.app/

そして、アプリ(というか今回はスクリーンセーバーモジュール)のパスワードと設定します。 これ、アップルとの対話に必要なパスワードです。 詳しくは

App 用パスワードを使う

https://support.apple.com/ja-jp/HT204397

を参照してください。 このパスワードは初回のみで結構です。 パスワードは xxxx-xxxx-xxxx-xxxx のように、4文字ずつのアルファベットのグループが4つ、ハイフンでつながっている形式となります。

さて、それじゃ始めますかね(かんぱーい)

まず、ビルドします。 .saverファイルをデスクトップに置きます。 どこでもいいですけどデスクトップがわかりやすいかな。 そして

cd ~/Desktop

(ターミナル上で)デスクトップに移動します。

/usr/bin/codesign -f -o runtime –timestamp –sign “Developer ID Application: hogehoge company” “hogehoge.saver”

最初の赤い文字部分には Developer ID Application の証明書名を記します。 証明書は作っておいてね。 作って自身の端末に入れたならば、キーチェーンアクセスの自分の証明書の中にあるはずです。 情報を見る、からコピペできます。 なお、最後のカッコ書きの部分は要らないようです。

続く赤い文字部分は、デスクトップに置いたビルドされた.saverパッケージです。

処理はほぼ一瞬で終わり、これで署名が完了しました。 続けて

ditto -ck –rsrc –sequesterRsrc “hogehoge.saver” “hogehoge.saver.zip”

dittoコマンドで.saverパッケージをリソースフォーク付きでzip圧縮します。 すごいですね、リソースフォークですよ。 ResEditとかリソースラを使いたくなっちゃいますね(なりませんし起動できません)。 ともあれ、デスクトップ上に圧縮ファイルができました。 これをAppleに送りつけます。

xcrun altool –notarize-app -t osx -f “hogehoge.saver.zip” –primary-bundle-id “jp.co.hogehoge-hogesaver” -u “[email protected]” -p “xxxx-xxxx-xxxx-xxxx

公証を受けるためにブツを送る、ということです。 1番めのは送るべき署名付きでリソースフォークがついた.saverパッケージの圧縮ファイル。 2番めはその.saverパッケージ(プロダクト)のバンドルID。 3番めのは Apple Developer へのログインメールアドレス(Apple ID メアドです)。 Xcodeで自動化されたのと同じ、最終的に結果がこのメールアドレスに送られます。 4番めがお待たせしました、冒頭に用意しておいた App 用パスワードです。 間違っても Apple ID のパスではありません。 公証を受けるためのブツ用のパスワードです。

アップロードはブツの容量によりけり時間がかかります。 あとはメールを待つだけなんですが、ものによっては数十秒で完了することもありますので、逐一進捗を確認できます。

xcrun altool –notarization-info ******* -u “jp.co.hogehoge-hogesaver” -p “xxxx-xxxx-xxxx-xxxx

最初のやつは、ブツを送った際に完了メッセージに記された RequestUUID です。 公証をリクエストした際に発行されたIDで進捗を確認します、ということです。 ネットワークによりけりですけどすぐに返答がきます。 Status の部分に注目で、 in progress なんてなってれば処理中ですし、success になっていれば完了で、さらに Status Code: 0 / Status Message: Package Approved なんて返ります。

これで公証は得られました。 zip圧縮する前の、署名をつけたパッケージを配布に用います。