Notarization is a process where Apple verifies your application to make sure it has a Developer ID code signature and doesn’t contain malicious content. For more information about noratization, see Apple’s documentation on Notarizing macOS Software Before Distribution.
If you develop on an Apple device, you can use Xcode, Xcode command-line tools, or Unity Cloud Build to notarize your application. If you don’t have an Apple device, use Unity Cloud Build.
This page contains information on the following notarization methods:
Unity can create an Xcode project that represents your Unity project during the build process. You can use this Xcode project to notarize your application. To create an Xcode project from your Unity project, follow the macOS application build steps. For information on how to notarize the Xcode project, see Apple’s documentation on Notarizing macOS Software Before Distribution.
If you are unable to notarize your application in the Xcode environment, or if you want to manually control notarization, you can use Xcode’s command-line tools. To do this, you need:
To notarize your application with the Xcode command-line tools, you first need to code sign the application. This section explains how to code sign your application using Xcode’s command-line tools. For information about what code signing is and why Apple requires it, see Code signing.
Unity adds a code signature to every macOS build it produces. This is a simple code signature and doesn’t identify you as the developer. To notarize an application, Apple requires the code signature to include a cryptographic signature that identifies the developer. This is called a signing identity. Usually, you use a Developer ID certificate.
新しい Developer ID 証明書を作成するには、Create a New Certificate にアクセスし、以下を行ってください。
.cer
です。Apple は、アプリケーションを公証するにあたって、アプリケーションを識別する必要があります。アプリケーションの識別子の取得は、2 つの方法 (Unity で取得する方法と、ビルドされたアプリケーションの 情報プロパティリストファイル 内で取得する方法) で行えます。
アプリケーション識別子が取得できたら、それを Apple に登録できます。これは以下の手順で行えます。
Entitlements are permissions or restrictions that your code signature includes that allow or prevent your application from taking specific actions. For more information, see Entitlements.
アプリケーションのエンタイトルメントの設定は、以下の手順で行えます。
.entitlements
を付加したファイルを作成します。例えば、アプリケーションの名前が Sample であれば、Sample.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"
A code signature uses a particular signing identity. Usually, this is your Developer ID Application signing identity. However, some digital distribution services, such as the Mac App Store require a different signing identity. For information about which signing identity a particular digital distribution service requires, see the documentation for that digital distribution service.
アプリケーションにコード署名するには、以下のコマンドを実行してください。
"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"
このコマンドは、アプリケーションバンドルフォルダー内を再帰的に移動し、全てのファイルに署名し、安全なタイムスタンプを追加し、署名内に設定されたエンタイトルメントを埋め込みます。
Warning: Using the --deep
option might cause issues with your code signature. This is because:
このオプションは、署名対象の全てのコードに、同じコード署名オプションとエンタイトルメントを適用するため。
このオプションは、その見つけたコードファイルにのみ署名するため。システムがデータを見つけることを想定している場所にコードファイルがある場合、--deep
は、そうしたコードファイルには署名しません。
For more information about the --deep
option and how to resolve issues with it, see Sign your code.
After you code sign your application, you need to upload it to Apple for notarization. To do this, Apple requires:
Apple は、公証のためにアプリケーションをアップロードする前にアプリケーションを圧縮することを要件として設けています。これは以下の手順で行ってください。
ターミナルを開き、アプリケーションのあるディレクトリに移動します。
"application_name.app"
は、ビルドしたアプリケーションです。"application_name.zip"
は、生成する圧縮ファイルの名前です。ditto -c -k --sequesterRsrc --keepParent "application_name.app" "application_name.zip"
これにより、アプリケーションが圧縮され、アプリケーションと同じディレクトリに圧縮ファイルが出力されます。
Apple は、アプリケーションを公証するにあたって、特定の形式の固有のパスワードを必要とします。App 用パスワードを生成するには Apple ID が必要です。Apple ID を持っていない場合は、Apple ID 管理ページ にアクセスして作成してください。
For information on how to generate an application password, see How to generate an app-specific password. The password you generate uses the following format: xxxx-xxxx-xxxx-xxxx
.
プロバイダーのショートネームは、個人または企業を識別するための一語のラベルです。Apple は、Apple ID が複数の組織に関連付けられている場合に、どの組織に対して公証を行うか特定するためにプロバイダーのショートネームを使用します。プロバイダーのショートネームは以下の方法で取得できます。
apple_id
は Apple ID です。xxxx-xxxx-xxxx-xxxx
は App 用パスワード です。xcrun iTMSTransporter -m provider -u apple_id -p xxxx-xxxx-xxxx-xxxx
Apple からアプリケーションの公証を受けるには、アプリケーションを公証サーバーにアップロードする必要があります。これは、以下の手順で行います。
apple_id
は Apple ID です。xxxx-xxxx-xxxx-xxxx
は App 用パスワード です。provider_short_name
は、プロバイダーのショートネーム です。application_bundle_id
は、アプリケーションの アプリケーション識別子 です。application_name.zip
は、圧縮されたアプリケーション です。xcrun altool --notarize-app --username apple_id --password xxxx-xxxx-xxxx-xxxx --asc-provider provider_short_name --primary-bundle-id application_bundle_id --file application_name.zip
アップロードが成功すると、Apple が、リクエスト ID を含む応答をターミナルに表示します。このリクエスト ID を使用して、リクエストの状況を確認できます。サービスへのトラフィック状況によっては、公証プロセスに何時間かかかる場合があるため、これは役に立ちます。方法は以下の通りです。
request_id
は、Apple が上記のコマンドから返すリクエスト ID です。apple_id
は Apple ID です。xxxx-xxxx-xxxx-xxxx
は App 用パスワード です。provider_short_name
は、プロバイダーのショートネーム です。xcrun altool --notarization-info request_id --username apple_id --password xxxx-xxxx-xxxx-xxxx --asc-provider provider_short_name
公証プロセスが完了すると、Apple から、Apple ID に関連付けられたアドレスに、確認メールが送られます。その後で、公証が成功したかどうか確認することができます。これは以下のように行います。
application_name.app
は、アプリケーションの名前です。spctl -a -v application_name.app
公証が成功した場合は、これにより、Apple がアプリケーションを受理したことを示す、Developer ID を含むメッセージが返されます。
After notarizing your application, any device that runs it can verify that it has a code signature and contains no malicious content. However, the device can only perform this verification if it has an internet connection. To make a device able to verify your application without an internet connection, you must staple the application. For information about stapling, see Staple the Ticket to Your Distribution. To staple your application,
"ApplicationName.app"
is the name of your application: xcrun stapler staple "ApplicationName.app"
.Unity Cloud Build can notarize and staple your macOS application during the build process. To do this, Unity requires:
.p12
ファイルの作成に使用したパスワードDepending on the platform you are developing on, the process for some of these requirements differ. If you develop on an Apple device, you can use Xcode command-line tools to get the information and create the relevant files. However, If you develop on Windows or Linux, you don’t have access to Apple-specific Xcode command-line tools.
どのプラットフォームを使用する場合も、Apple ID、パスワード、エンタイトルメントファイルの取得方法は同じです。
上記の手順が完了したら、以下を確認してください。
Apple デバイスで開発する場合、Xcode コマンドラインツールを使用して、Unity Cloud Build を使用した公証 に記載の要件を満たすことができます。その後、Unity Cloud Build を設定し、ビルドプロセスの一環として、アプリケーションの公証を受け、ステープルすることができます。要件を満たすには、以下を行ってください。
.p12
) format. For information on how to do this, see Import and export keychain items using Keychain Access on Mac.要件を満たした後で、Unity Cloud Build の公証フォーム に必要事項を記入し、提出します。
If you develop on Windows or Linux but want to build, notarize, and staple your application for macOS, you can’t use Xcode command-line tools. To meet the requirements listed in Notarization using Unity Cloud Build so you can set up Unity Cloud Build to notarize and staple your application as part of the build process:
要件を満たした後で、Unity Cloud Build の公証フォーム に必要事項を記入し、提出します。
.p12
ファイルは、Developer ID 証明書と秘密鍵の両方をバンドルします。以下の手順で、このファイルを Developer ID 証明書から作成できます、
Open a command-line interface and go to the directory that contains your Developer ID certificate file. If you didn’t download your Developer ID certificate, see Signing identity.
.cer
ファイル形式が使用されています。このファイルを .pem
ファイル形式に変換してください。これを行うには、以下のコマンドを実行します。
developer_identity.cer
は、変換する Developer ID 証明書ファイルです。developer_identity.pem
は、出力するファイルの名前とファイルタイプです。openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM
mykey.key
is the file name and file type of the private key to output.openssl genrsa -out mykey.key 2048
.p12
ファイルを生成します。これを行うには、以下のコマンドを実行します。
mykey.key
は、手順 3 で生成した秘密鍵のファイルです。developer_identity.pem
は、手順 2 で生成した .pem
ファイルです。openssl pkcs12 -export -inkey mykey.key -in developer_identity.pem -out iphone_dev.p12
Unity Cloud Build を使用した公証 に記載されている要件を満たした後で、以下の手順に従って Unity Cloud Build 公証を設定してください。
.p12
ファイルです。.p12
ファイルの作成時に入力したパスワードです。--deep --force --verify --verbose --timestamp --options runtime
フラグで codesign
コマンドを実行します。カスタムフラグの指定は現時点では不可能です。FASTLANE_NOTARIZE_VERBOSE=true
in your build target Environment Variables.