そういうのがいいブログ

アプリ個人開発 まるブログ

アプリ開発覚え書き

【Unity】Steam向けのMacアプリをAppleからの公証を受けた状態にする

はじめに

MacアプリをSteam配信するにあたり、
Appleからの公証を受けた状態でデータをアップロードすることが推奨されています。

本記事は公証を受ける手順をまとめた記事になります。

注意
iOSでのアプリリリース経験がある方向けに書いていくため
既に実施済みであると思われる内容は外部記事を貼る程度の説明にします。

公証とは?

公証(notarization)とは、Appleがアプリをスキャンし、
悪意のあるソフトウェアが含まれていないと確認することを指します。

公証を通過したアプリは、
macOSのセキュリティ機能であるGatekeeperによって
Developer ID証明書が検証され、安全なソフトウェアであることが確認されます。

Appleのページを流し読みすると概要はなんとなくつかめるかと思います。

developer.apple.com


ちなみに、公証を受けないと別端末でのテストが不便です。
Unityでビルドしたアプリを公証を受けずに別のmacOS機で起動したところ、
画像のウインドウが出現して起動できませんでした。

公証を受ける手順

公証を受ける手順は6ステップです。

1.Apple Developer Program(有料) への加入
2.Certificate Signing Request(CSR) を作成
3.Certificateの作成
4.UnityでMac向けにビルド(.xcodeproj 作成)
5.Xcodeでの権限設定
6.Xcodeから公証の申請をする

1.Apple Developer Program(有料) への加入

お金を払ってAppleDeveloperになる必要があります。
2024年4月に更新した際は12,980円/年でした。

hirokuma.blog

2.Certificate Signing Request(CSR) を作成

iOSにリリースしている方は作成したことがあると思いますが、
iOS用に作成したCertificate Signing Request(CSR)は使えないため
新規作成が必要です。

2.1 キーチェーンアクセスを起動

キーチェーンアクセスの場所
→Finder
→アプリケーション
→ユーティリティ
→キーチェーンアクセス


2.2 認証局に証明書を要求 を選択

→画面上のキーチェーンアクセス
→証明書アシスタント
認証局に証明書を要求


2.3 証明書情報の入力

・メールアドレス 自分のメールアドレスを入力
・通称
 通称はなんでも良いですが、
 自分の名前+Steam Mac Key とでもしておくと良いでしょう。
 例:Taro Yamada Steam Mac Key
・ディスクに保存 にチェック
・鍵ペア情報を指定 にチェック

→右下の「続ける」を押して進めます。


2.4 ファイル名を決めて保存

ファイル名と保存先の設定を求められます。

ファイル名
 名前はなんでも良いですが、
 SteamMac_CertificateSigningRequest.certSigningRequest
 としておくと後々分かりやすそうです。

ファイルの保存場所
 デスクトップでOKです。

→「保存」を押します。


2.5 鍵ペア情報の入力

鍵ペア情報は以下の設定で進めます。

鍵のサイズ :2048ビット
アルゴリズムRSA

→「続ける」を押して進めます。


ファイルが作成されるので「完了」を押します。


このようなアイコンのファイルが作成されます。

3.Certificateの作成・登録

Appleのデベロッパーページでファイルを作成していきます。


→アカウント


→証明書


→Certificatesの「+」ボタン


→Developer ID Application を選択
→Continue



→Profile Type は 「G2 Sub-CA (Xcode 11.4.1 or later)」を選択
→Choose Fileを押して先ほどデスクトップに保存した
「SteamMac_CertificateSigningRequest.certSigningRequest」ファイルを
 アップロードします。


→Continue



→Download



これで「developerID_application.cer」というファイルがダウンロードされたはずです。
こちらをダブルクリックしてキーチェーンアクセスに登録します。


キーチェーンアクセスに
「Developer ID Application」という証明書があれば完了です。


4.UnityでMac向けにビルド(.xcodeproj 作成)

ここではUnityで.xcodeprojを作成していきます。

Xcodeで公証を進めるため、ビルドプロファイルの
Xcodeプロジェクトを作成」にチェックを入れてビルドしてください。
(最終的にはXcodeから.appファイルで出力します。)


ビルドすると、複数のファイルが出来上がりますので
ファイル生成先は専用のフォルダを作成して指定すると良いでしょう。

私は「Build XcodeData」というフォルダを作成して
ここにビルドデータが保存されるようにしています。

5.Xcodeでの権限設定

生成した.xcodeprojファイルを開いてXcode上で公証申請に必要な権限設定を行います。

5.1 アカウント設定

まず、「Signing & Capabilities」のところで次の2点を確認、設定します。
・「Automatically manage signing」が有効なことを確認
・「Team」に自分のアカウントを設定

5.2 Hardened Runtime 追加

次に「Capability」をクリックして公証に必要な権限を追加します。


一覧から「Hardened Runtime」を探してダブルクリックして追加してください。


5.3 Hardened Runtime 設定

「Hardened Runtime」追加後、Xcodeの画面の下部に
「Hardened Runtime」の項目が追加されます。
こちらでアプリに必要な権限にチェックを入れていきます。

この権限設定は、アプリ内容によって変わるため当てはまるものにチェックを入れてください。
チェックを入れていないとアプリが動作しないこともあるのでご注意を。

今回は、次の4項目にチェックを入れて進めます。
・Allow Execution of JIT-compiled Code
・Allow Unsigned Executable Memory
・Disable Library Validation
・Disable Executable Memory Protection


<メモ1>
Unity公式によると権限設定には最低次の2つの項目が必要と書いてあります。
・Disable Library Validation
・Disable Executable Page Protection
しかし、Disable Executable Page Protectionの項目は見当たらなかったため
無視して進めています。


<メモ2>
公証関係の他の記事を見るとアプリにEntitlementを付与するという項目があります。
こちらは、XcodeでいうEntitlements Fileの内容をコードから設定しています。

Entitlements Fileの内容は、Xcodeで「Hardened Runtime」の
項目にチェックを入れることで自動で入力されます。
そのため、特に自分で瀬定する必要はありません。
将来的にコード上から設定する場合にはこちらを確認することになるため書いておきます。

5.4.アプリ起動確認

権限設定した後はXcodeの再生ボタンを押してアプリが起動するか確認します。
起動できない場合は権限設定を見直してください。

Xcode上から起動すると、Aの機能がうまくいかないが、
公証を受けた状態の.appファイルではAの機能は問題なく動作するということがあったため
起動するかどうかだけ確認できればいいような気がします。

6.Xcodeから公証の申請をする

画面上部のProduct → Archive でアプリを作成します。


作成が終わるとOrganizerの画面が自動で開きます。
(自動で開かなければ画面上部のWindow → Organizerで開いてください)
ウインドウ右側のDistribute Appを押します。

→「Direct Distribution」を選択して「Distribute」


もしこのような画面が出てきた場合は、
PCのログインに使用しているパスワードを入力後、常に許可を押してください。


アップロードが完了すると下記の画面が表示されます。

Uploaded "自分のアプリ名" to Apple notary service.
You will receive a notification when your app is ready for distribution.

日本語訳
Apple公証サービスに「自分のアプリ名」をアップロードしました。
アプリの配布の準備が完了すると、通知が届きます。

以上で申請完了です。


5分ほど経ってOrganizerウインドウのStatusを見てみると
Ready to distribute と表示されていました。

(アップロード後の文面に「アプリの配布の準備が完了すると、通知が届きます」と
 書かれていましたが、特にメール連絡などはありませんでした。)

7.アプリを出力する

OrganizerウインドウでReady to distribute と表示されたアプリをXcodeから出力します。

方法は簡単でReady to distributeと表示されたファイルをクリックして
右下に表示される「Export Notarized App」ボタンを押すだけです。
※Notarizedは公証済みを指す言葉です。

8.公証したアプリの起動確認

出力したアプリをGoogleDriveにアップし、
別のmacOS機でダウンロードして起動したところ
下記のウインドウが表示され無事に起動できました。

おわりに

Steamへのアップロードができていないためこの方法で問題ないかまだわかりません。
問題あれば修正していきます。

参考

zenn.dev

qiita.com

docs.unity3d.com

adventuresjp.com