はじめに
社内ツールとしてmacOS上で動作するアプリを開発する機会がありました。
最初はビルドしたappファイルを配布するだけで動くと思っていたのですが、起動しないとのこと。
どうやら「Mac App Store以外の場所からダウンロードされるMacソフトウェア」として公証を受けて配布する必要があるそうです。
証明書の作成やビルド後の手順、また自身のデベロッパーアカウントの権限によっても手順が変わってくるので、それをまとめておこうと思います。
やったこと
- 証明書の作成とインストール
- プロビジョニングプロファイルの作成とインストール
- アプリのビルド
- ビルドしたバイナリの公証
- アプリの配布
1. 証明書の作成とインストール
証明書の作成は基本的には通常の方法と同じですが、Software の選択で以下どちらかを選択する必要があります。
- Developer ID Application:Macアプリに署名するための証明書
- Developer ID Installer:Macインストーラパッケージに署名するための証明書
これらの作成には Account Holder 権限を持っている必要があります。
あなたが Account Holder 権限を持っていない場合は、権限保持者に作成を依頼し、キーチェーンからエクスポートしてもらったファイルを自身のMacにインストールする必要があります。
2. プロビジョニングプロファイルの作成とインストール
こちらは通常の作成方法と同じです。
対応する証明書は1で作成した証明書を選択します。
3. アプリのビルド(Xcodeではアーカイブ)
まず、Xcode上で 1, 2 で作成した証明書とプロビジョニングプロファイルを設定します。
ビルド自体は通常のビルド方法と同じですが、Xcode上で実施するかコマンドで実施するか、またデベロッパーアカウントの権限によって後の手順が変わってきます。
4. ビルドしたバイナリの公証
あなたが Admin 以上の権限を持っていれば Xcode 上で完結させることができますが、そうでない場合は notarytool というコマンドラインツールを使用して公証を受けることになります。
Xcode 上で公証を受ける場合
コチラに公式ドキュメントがあるので、この手順通りに実施すれば良いはず。
(筆者は権限が無かったので試せていません)
Notarize your app automatically as part of the distribution process - Notarizing macOS software before distribution | Apple Developer Documentation(英語)
コマンドラインツールを使用する場合
事前準備
- コマンド実行時に指定するアプリ用パスワードを作成する
- https://account.apple.com/sign-in にアクセスしてサインイン
- アプリ用パスワードをクリック
- アプリ用パスワードを生成
- 生成されたパスワードをメモしておく
- ビルド(アーカイブ)したappファイルをzip圧縮しておく
公証コマンド実行
-
ターミナル上で下記コマンドを実行
xcrun notarytool submit PATH_TO_ZIP --apple-id "YOUR_EMAIL" --password "APP_SPECIFIC_PASSWORD" --team-id "YOUR_TEAM_ID" --waitPATH_TO_ZIP: appファイルを圧縮したzipファイルのパス
YOUR_EMAIL: あなたの開発者アカウントのメールアドレス
APP_SPECIFIC_PASSWORD: アプリ用パスワード作成で生成されたパスワード
YOUR_TEAM_ID: Apple Developer ProgramのチームID
-
処理状態が表示されるので一番下の
status: Acceptedが表示されたら完了Conducting pre-submission checks for api_test_app.zip and initiating connection to the Apple notary service... Submission ID received id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Upload progress: 100.00% (xx.x MB of xx.x MB) Successfully uploaded file id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx path: /Path/To/Your.zip Waiting for processing to complete. Current status: Accepted.......... Processing complete id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx status: Accepted
5. アプリ配布
- zipファイルを任意の方法で配布する
- ユーザーはzipファイルを展開し、生成されたappファイルを実行する
おわりに
いかがでしたか?
コマンドラインツールで公証を受ける方法は CI/CD パイプラインに組み込む際にも使えるのではないかと思います。(未確認)
今回は、野良アプリとして公証を受ける方法になかなか辿り着けなかったので、記事にまとめてみました。
この記事があなたの助けになれれば幸いです。


