Unityで作ったMacアプリで公証を受ける方法

ゲーム開発 |

Mac向けのアプリを作って配布するとき、App Store以外で配布する場合(たとえばSteamなどで)も、Appleの公証を受ける必要があります。その手順を記録しておきます。

手順

Apple Developer Programの会員になる

まだ登録していない場合、あらかじめ、Apple Developer Programに登録しておきます。

1万円ちょっとの登録料が毎年かかります。

証明書を用意

Apple Developer Programのサイト上で、証明書やProvisioning Profileなどを一通り作成してダウンロードする必要があります。

一連の流れは以下の記事が詳しいので参考にしてもらえればと思いますが、

簡単に箇条書きします。

1. 証明書署名リクエストを作成

2. Certificatesを作成

App Store以外で配布するには、Developer ID InstallerとDeveloper ID Applicationの2種類が必要になります。

作成後、ダウンロードしてファイルをダブルクリックするとキーチェーンに反映されます。

3. IdentifiersメニューでApp IDを作成

このときにBundle IDを作成するのですが、このIDはあとでUnityでビルドする際に使います。

4. Devicesメニューで、今使用しているデバイスを登録

5. ProfilesメニューでProvisioning Profileを作成

この際、Developer IDを選択してください。

Unityでビルド

次はUnity上での設定です。

以下を参考にしました:

https://docs.unity3d.com/ja/2019.4/Manual/HOWTO-PortToAppleMacStore.html

Edit>Project Settings>Player のOther settingsで、Mac App Store Optionsという項目を見つけます。

Bundle Identifier には、先ほど作ったBundle ID (com.domainname.mygameなど)を入力し、Build にはバージョン(1.0など)を入力します。

App Storeには配布しないので、ここでは Mac App Store Validation にチェックはしません。

この設定をした上で、ビルドしてください。

.entitlements を用意

ビルド後の実行アプリに署名を付けるのですが、その前に、.entitlementsを用意しましょう。

このためには、Unity公式マニュアルに書かれている通り、Xcodeで空の Mac アプリケーションを作ります。

この、署名用にのみ作成した mygame.entitlements ファイルにちょっとだけ変更を加えます。

com.apple.security.cs.allow-unsigned-executable-memory キーを追加して、YESにします。詳細

(上記は必須か分かりませんが、私の場合は署名が成功しているのに署名後にアプリが起動しなくなるというトラブルに見舞われ、半日ほどハマりました。上記のキーを追加したところ問題なく起動するようになりました。)

署名

公証を受けるには署名が必須です。

ターミナルを起動し、以下を入力します。緑字の部分を置き換えてください。

codesign -o runtime -f --deep -s 'Developer ID Application: チーム名 (チームID)' --entitlements "mygame.entitlementsのパス" "mygame.appのパス"

チーム名とチームIDの部分は、キーチェーンにある作成済みの証明書を開いて確認できます。コピペして正式名称を入力します。(表記が少しでも違うとエラーになります)

TIPS: 公証を受けるには -o runtime (ランタイムを有効にする)と、.entitlements が含まれていることが要件です。詳細

次のコマンドで正しく署名できたか確認できます。

codesign -dvv "mygame.appのパス"

これでアプリへの署名ができました。しかし、公証に提出するにはアプリのままでは駄目で、パッケージ化しなくてはいけません。

以下のコマンドで、パッケージ化とパッケージへの署名を行います。注意: こちらはDeveloper ID Installerで署名します。

productbuild --component mygame.appのパス /Applications --sign "Developer ID Installer: チーム名 (チームID)" mygame.pkgのアウトプット先のパス

パッケージに正しく署名されたかどうか、以下のコマンドで確認できます。

pkgutil --check-signature mygame.pkgのパス

これで提出物の準備ができました。

公証を受けるために提出

その前にこの手順を元にApp用パスワードを作成し、どこかにメモしておきます。

公証への提出は、以下を打ち込みます。

xcrun altool --notarize-app -t osx -f mygame.appのパス  --primary-bundle-id "com.domainname.mygame" -u "Apple ID" -p "App用パスワード"

これでアプリがアップロードされ、少し待つと公証が成功したかどうかの結果がメールで届きます。

公証に失敗した場合は、ここにトラブルシューティングの方法が書いてあります。

その他の参考サイト:


この記事もおすすめ

執筆者

Yulius

ゲームの翻訳を承っています。お気軽にご相談ください。

お問い合わせ