コード署名は、アプリケーションにコード署名を作成するプロセスです。コード署名は、アプリケーションの整合性を保証し、あらゆる改ざんから保護します。Apple のデバイスは、アプリケーションのコード署名を使用して、開発者がコード署名を作成した後に行われた変更を検出します。アプリケーションにコード署名がない場合は、ユーザーがアプリケーションを開く前にデバイスが警告を出します。
ノート: Xcode コマンドラインまたは Unity Build Automation を使用してアプリケーションの公証を受けるには、コード署名が必要です。
Unity は、生成するすべての macOS ビルドに署名 ID と呼ばれるコード署名を追加します。Apple によるアプリケーションの公証を受けるには、Developer ID 証明書など、開発者を識別する暗号署名がコード署名に含まれている必要があります。
新しい Developer ID 証明書を作成するには、以下の手順に従います。
.cer です。
Apple の公証を受けるには、アプリケーション識別子でアプリケーションを識別できる必要があります。アプリケーション識別子を取得する方法は 2 つあります。Unity で行う方法と、アプリケーションの情報プロパティリストファイルで行う方法です。
アプリケーション識別子が取得できたら、それを Apple に登録できます。これを行うには、以下の手順に従います。
エンタイトルメントとは、コード署名に含まれる権限や制限で、アプリケーションが行えるアクションを制御します。
アプリケーションにエンタイトルメントを設定するには、以下の手順に従います。
.entitlements を付加したファイルを作成します。例えば、アプリケーションに MyProject という名前を付けた場合、MyProject.entitlements というファイルを作成します。<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
</dict>
</plist>
これらのエンタイトルメントは、macOS アプリケーションが Hardened Runtime を有効にするために最低限必要なエンタイトルメントです。アプリケーションにこれ以上のエンタイトルメントが必要な場合は、このリストに追加します。
アプリケーションにコード署名するには、コマンドラインを使用する必要があります。マシンでターミナルを開き、アプリケーションのあるディレクトリに移動します。
コード署名の処理に必要な読み取り権限があることを確認するために、以下のコマンドを実行します。 "application_name.app" はアプリケーションの名前です。
chmod -R a+xr "application_name.app"
アプリケーションにコード署名するには、以下のコマンドを実行してください。
"application_name.app" は、ビルドしたアプリケーションです。"application_name.entitlements" は、エンタイトルメント ファイルの名前です。"Developer ID Application : XXX (YYY)" は、署名 ID です。codesign
--deep
--force
--verify
--verbose
--timestamp
--options runtime
--entitlements "application_name.entitlements"
--sign "Developer ID Application : XXX (YYY)" "application_name.app"
このコマンドは、アプリケーションバンドルフォルダー内全体に適用され、すべてのファイルに署名し、安全なタイムスタンプを追加し、署名内に設定されたエンタイトルメントを埋め込みます。
--deep オプションを使用すると、コード署名に問題が発生する可能性があります。理由は以下の通りです。
このオプションは、署名対象の全てのコードに、同じコード署名オプションとエンタイトルメントを適用するため。
このオプションは、オプションの使用によって見つかるコードファイルにのみ署名するため。システムによってデータが見つけられる場所にコードファイルがある場合、--deep は、そうしたコードファイルには署名しません。
--deep オプションについての詳細と、それに関連する問題の解決方法については、Sign Your Code (コードに署名する) を参照してください。