🐡

Max8.1で作ったアプリケーションを配布するには

2021/08/27に公開

macOS Big surよりデベロッパーによる認証が行われていないアプリついては通常のダブルクリックだけでは起動しなくなりました。で、Notarizationという処理が必要になりますが、Cycling '74のMax8.1で作ったアプリケーションについても同様の処理をしないとBig surを使っている人に向けて配布などはできません。そこで調べてるとCycling '74が以下のような情報を出しています。

Max 8.1: Mac OS 10.15 Catalina Support and Notarization

ここのステップに従ってちょっとやってみることに。
やろうとしてるアプリのレポジトリはこれ。MIDIキーボードの入力を可視化するアプリ。

Image from Gyazo

Code Sign

  1. Apple Developer IDが必要なので取得してない人は取得しましょう(年間13000円くらい?)
  2. Xcodeのバージョン10以降をインストール。現在の最新は12.5.1かな。
  3. Code Signはスタンドアロンで行います。
  • --forceフラグを使用して、強制的に再署名を行う(Cycling '74 code signingを上書きする)。
  • 署名の範囲を指定するのですが、最新の状況とそのためのスクリプトがこちらで提供されています(なのでそっちをやってみます)
  • 上記のページからstandalone-codesigning-script.rbを追加し、以下の情報を変更(レポジトリのファイルから変更箇所の確認ができます
authority = "Developer ID Application: YOUR CERTIFICATE NAME"
entitlements = "PATH/TO/YOUR-APP-NAME.entitlements"
appbundle = "PATH/TO/YOUR-APP-NAME.app"
appname = "YOUR-APP-NAME"
  • entitlementsファイルについては上記のレポジトリに入れておいたのと、Cycling '74の先のページの下にカンニングできる内容が乗っている(実際にアプリが使う機能に合わせて追加する必要がある。その辺はAppleのページをみたりググったりする)
  • 上記のスクリプトを実行(これが成功すればCode Singは終了)
    • ruby PATH/TO/standalone-codesigning-script.rb PATH/TO/YOUR-APP-NAME.app
    • もし "resource fork, Finder information, or similar detritus not allowed" というエラーが出たら、xattr -cr PATH/TO/YOUR-APP-NAME.appを実行。

notarization

  1. 上で署名したMaxで作ったアプリケーションをzipもしくはdmgにする(今回はdmgにした)
  2. まずアプリの署名の権限を持ったApple Developer IDが必要です。
  3. 次にそのApple IDの設定でアプリ用パスワードを発行します。
  4. まずはxcrun altool --list-providers -u <username> -p <password>でログインが出来れば下記のような情報が帰ってくるのでそれを確認
ProviderName        ProviderShortname PublicID                             WWDRTeamID 
------------------- ----------------- ------------------------------------ ---------- 
  1. notarizationする
➜ xcrun altool --notarize-app -f </path/to/yourapp.zip|dmg> -t osx -u <username> -p hmuu-cbzs-uqfp-bhrb -primary-bundle-id <com.yourcompany.yourappname> --team-id <上記で確認したWWDRTeamID>

上記を実行すると最後に下記のようにRequestUUIDが返ってきて、notarizationのプロセスが始まります。

No errors uploading '/path/to/yourapp.zip|dmg'.
RequestUUID = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

実際にnotarizationが成功してるかを確認するには、、、

xcrun altool --notarization-info <上記で確認したRequestUUID> -u <username> -p <password>

を実行。これで下記のように帰って来れば成功(メールでも結果は通知されます)。

No errors getting notarization info.

          Date: 2021-08-27 05:47:39 +0000
          Hash: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    LogFileURL: https://hogehoge
   RequestUUID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        Status: success
   Status Code: 0
Status Message: Package Approved

Status: in progressの時はここがsuccessになるまで次に行くのは待ちましょう。

staple

  1. 最後にstapleする。.appや.dmgだと直接stapleできるが、zipの場合はnortraizeしたzipをunzipしてアプリに戻し、staple成功後に再度zipする。
  2. そしたらxcrun stapler staple -v </path/to/notarizedされた.app|.dmg>を実行。
The staple and validate action worked!

と最後に表示されれば成功。

WIP

こんな感じです。アプリとしてAppStoreに配布するのはまた別のことがあります。こちらの記事が日本語で書かれていますが、結構色々やることありますね、、、。
Cycling'74の"Max"(Max/MSP)でプログラミングして、MacAppStoreでアプリを販売する方法
上の記事からも参照されている英語の2018年と2019年の記事はこちら。
Max Standalone in the Mac App Store (2018)
Max Standalone in the App Store (2019)

ただし認証は成功してるけどアプリ自体が「予期せぬ終了」してしまうので調査中。
どうやら.entitlementsファイルの内容の問題だった様子。ひとまず手元の環境では別のマシンでも「ネットから落としてきたアプリだけど動かす?」的な警告は出る(普通)がちゃんと起動するようになりました。出来上がったアプリはこちらから落とせます。起動しなかったら教えてください、、、

App Storeに配布するのはもう少し整理したら挑戦してみたいと思います。

Discussion