Version: Unity 6.0 (6000.0)
言語 : 日本語
macOS アプリケーションのコード署名と公証
Xcode とコマンドラインツールによる公証

アプリケーションのコード署名

コード署名は、アプリケーションにコード署名を作成するプロセスです。コード署名は、アプリケーションの整合性を保証し、あらゆる改ざんから保護します。Apple のデバイスは、アプリケーションのコード署名を使用して、開発者がコード署名を作成した後に行われた変更を検出します。アプリケーションにコード署名がない場合は、ユーザーがアプリケーションを開く前にデバイスが警告を出します。

ノート: Xcode コマンドラインまたは Unity Build Automation を使用してアプリケーションの公証を受けるには、コード署名が必要です。

署名 IDの作成

Unity は、生成するすべての macOS ビルドに署名 ID と呼ばれるコード署名を追加します。Apple によるアプリケーションの公証を受けるには、Developer ID 証明書など、開発者を識別する暗号署名がコード署名に含まれている必要があります。

新しい Developer ID 証明書を作成するには、以下の手順に従います。

  1. Create a New Certificate に移動します。
  2. プロンプトに従って秘密鍵を作成し、Certificate Signing Request をアップロードします。
  3. Developer ID 証明書をダウンロードします。この証明書のファイル形式は .cer です。
  4. 証明書をクリックして、キーチェーンに追加します。キーチェーン内では、以下のような形式の名前で表示されます。Developer ID Application :XXX (YYY)

アプリケーション識別子の確認

Apple の公証を受けるには、アプリケーション識別子でアプリケーションを識別できる必要があります。アプリケーション識別子を取得する方法は 2 つあります。Unity で行う方法と、アプリケーションの情報プロパティリストファイルで行う方法です。

  • Unity で取得する方法
    1. Edit > Project Settings > Player に移動します。
    2. Other Settings セクションを展開します。
    3. Mac App Store Options に移動します。
    4. Bundle Identifier プロパティがアプリケーション識別子です。
  • 情報プロパティリストファイル内で取得する方法
    1. Finder で、ビルドしたアプリケーションに移動します。
    2. アプリケーションを右クリックし、Show Package Contents を選択します。
    3. Contents に移動して
    4. Info.plist を開きます。
    5. アプリケーション識別子を表すキーは CFBundleIdentifier です。

アプリケーション識別子が取得できたら、それを Apple に登録できます。これを行うには、以下の手順に従います。

  1. Apple Developer アカウントにサインインします。
  2. Certificates, IDs & Profiles を選択します。
  3. Identifiers を選択します。
  4. バンドル ID を入力します。

エンタイトルメントの作成

エンタイトルメントとは、コード署名に含まれる権限や制限で、アプリケーションが行えるアクションを制御します。

アプリケーションにエンタイトルメントを設定するには、以下の手順に従います。

  1. ビルドしたアプリケーションと同じディレクトリに、アプリケーションと同じ名前にファイル拡張子 .entitlements を付加したファイルを作成します。例えば、アプリケーションに MyProject という名前を付けた場合、MyProject.entitlements というファイルを作成します。
  2. このファイルをテキストエディターで開き、以下の内容をファイル内にコピーします。
<?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"

アプリケーションにコード署名するには、以下のコマンドを実行してください。

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 (コードに署名する) を参照してください。

追加リソース

macOS アプリケーションのコード署名と公証
Xcode とコマンドラインツールによる公証