INDIE INDEX

レベル:実践

Macに書き出す|UnityとGodotの署名と公証

公開 2026-10-24更新 2026-10-24

Mac App Store の外で配るときは、Developer ID の証明書で署名してから、Apple の公証を受ける必要があります。Unity は署名(codesign)・圧縮(ditto)・公証(notarytool)・staple(stapler)の順にコマンドで進め、Godot は書き出しのオプションで Xcode codesign と Xcode notarytool(Linux と Windows からは rcodesign)を選びます。

このページの目次
  1. Mac 向けの書き出しの形
  2. 署名と公証の前に要るもの
  3. Unity で署名と公証を受ける手順
  4. Godot で署名と公証を受ける手順
  5. 遊ぶ人の Mac で見える画面と対処
  6. 操作の流れを図で見る
  7. 失敗を避ける注意
  8. 次に読む
  9. 情報源

Mac 向けの書き出しの形

Unity 6.0 と Godot の書き出しの形には、たとえば次のものがあります。

Mac 向けの書き出しの形

項目内容
Unity の Architecture と Xcode プロジェクトIntel 64-bit・Apple Silicon・Intel 64-bit + Apple Silicon から選びます。選ぶ欄は、Build Profiles の画面の macOS の Platform Settings の節にあります。この欄は Build And Run のときにだけ当たります。Intel 64-bit + Apple Silicon は、Intel のチップと Apple silicon のどちらでも動く macOS のビルドを作ります。個別の構成のビルドより大きいビルドになり、アプリの大きさに響きます。Rosetta は、Intel(x64)のアプリを Apple silicon で動かす変換の層で、Apple が非推奨にしているところです。Create Xcode Project を有効にすると、最終的なアプリのバンドルを Xcode で作るための Xcode プロジェクトを作ります。Xcode には、コード署名と Mac App Store へのアップロードの機能が組み込まれています。
Godot の書き出されるもの公式の書き出しテンプレートで書き出した macOS のアプリは、1つの "Universal 2" バイナリの .app バンドルになります。.app バンドルは、実行ファイル・ライブラリ・プロジェクトの全ファイルを入れる、決まった構造のフォルダです。Universal バイナリは、Intel x86_64 と ARM64(Apple Silicon)の両方に対応します。.app バンドルは、そのまま、ZIP アーカイブ、DMG ディスクイメージのいずれかにできます。DMG は、macOS から書き出すときだけ対応しています。
表1

署名と公証の前に要るもの

署名と公証の前に要るものには、たとえば次のものがあります。

署名と公証の前に要るもの

項目内容
Apple Developer Program年間メンバーシップは 99 ドルです。日本から見ると別の通貨で表示されることがあり、額は表示された地域で決まります。Godot では、署名と公証を受けて Mac App Store の外で配るときは、アプリの作り手が Apple Developer Program に加入し、書き出しのときに署名と公証のオプションを設定します。
Developer ID の証明書Developer ID Application は Mac のアプリに署名する証明書で、Developer ID Installer は、署名したアプリを入れた Mac のインストーラパッケージに署名する証明書です。どちらも、開発者アカウントか Xcode で、それぞれ5つまで作れます。作るには Account Holder の役割が要ります。クラウド管理の証明書は、クラウド管理の Developer ID 証明書へのアクセスの役割を持つ admin も使えます。
バンドル IDUnity では、Edit > Project Settings > Player の Other Settings を開き、Identification の Bundle Identifier が、アプリの識別子です。ビルドしたアプリの Info.plist では、CFBundleIdentifier のキーが識別子です。Godot では、書き出しのオプションの Application の節に、有効で、ほかと重ならない Bundle identifier を設定します。使える字は英数字(A-Z、a-z、0-9)・ハイフン(-)・ピリオド(.)だけで、大文字と小文字は区別されません。
Unity で Xcode のコマンドラインツールを使って公証するときApple ID、macOS 10.15 Catalina 以降が動く Apple の機器、Xcode 11 以降(必要なコマンドラインツールが入ります)、Apple Developer Program のメンバーシップが要ります。
表2

Unity で署名と公証を受ける手順

  1. File > Build Profiles で Build Profiles の画面を開き、Platforms の欄から macOS を選ぶか、macOS 用のビルドプロファイルを作ります。Platform Settings の節で、Architecture に作りたい構成を選びます。Xcode プロジェクトを作りたいときは、Create Xcode Project を有効にします。Switch Profile を選んで新しいビルドプロファイルを有効にし、Build をクリックします。

  2. Apple Developer のアカウントで、Developer ID の証明書を作ります。Certificates, Identifiers & Profiles の Certificates で追加ボタン(+)を押し、Software の下の Developer ID を選んで Continue を押します。案内に従って秘密鍵と Certificate Signing Request(拡張子が .certSigningRequest のファイル)を作り、そのファイルを選んで Continue を押し、Download で .cer のファイルをダウンロードします。ダウンロードした証明書をクリックしてキーチェーンに追加すると、キーチェーンでは Developer ID Application : XXX (YYY) の形の名前で表示されます。アプリの識別子(Bundle Identifier)も Apple に登録します。Apple Developer のアカウントにサインインし、Certificates, IDs & Profiles の Identifiers で、バンドル ID を入力します。

  3. ビルドしたアプリと同じ場所に、アプリと同じ名前で、拡張子が .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>
    

    この2つは、macOS のアプリが Hardened Runtime を持つのに要る、最小の entitlements です。アプリがほかの entitlements を要するときは、この一覧に足します。

  4. Terminal を開いてアプリのあるフォルダに移動し、読み取りの権限を確かめるために、application_name.app をビルドしたアプリの名前にして、1つ目のコマンドを実行します。そのあと、署名のコマンドを実行します。application_name.entitlements は entitlements のファイルの名前、Developer ID Application : XXX (YYY) は署名の identity です。署名のコマンドは、アプリのバンドルのフォルダを順に見て、すべてのファイルに署名し、安全なタイムスタンプを付け、決めた entitlements を署名に埋め込みます。

    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"
    
  5. 公証のために、アプリを圧縮します。圧縮したファイルは、アプリと同じフォルダに出力されます。

    ditto -c -k --sequesterRsrc --keepParent "application_name.app" "application_name.zip"
    
  6. 公証には、特定の形式の固有のパスワードが要ります。アプリ用パスワードを作ります。作ったパスワードの形式は xxxx-xxxx-xxxx-xxxx です。Xcode 13 以降なら、Apple の notarytool でアップロードして公証を受けます。Apple は 2023年11月1日から、公証での altool の使用を非推奨にしています。Create Xcode Project で作った Xcode プロジェクトで公証する方法もあります。

  7. 公証のあとに staple すると、遊ぶ人の機器がオンラインでなくても、署名があって悪質な内容を含まないことを検証できます。staple しないと、この検証はオンラインのときにだけ行えます。アプリのあるフォルダで、次のコマンドを実行します。

    xcrun stapler staple "ApplicationName.app"
    

Godot で署名と公証を受ける手順

  1. Editor > Manage Export Templates で、Godot の書き出しテンプレートをダウンロードします。書き出しのオプションの Application の節に、Bundle identifier を設定します。
  2. Apple Developer ID の証明書があって、macOS から書き出すとき:Xcode のコマンドラインツールを入れ、Xcode を少なくとも1回開くか、sudo xcodebuild -license accept のコマンドを実行して、使用許諾に同意します。署名のために、Code Signing > Codesign で Xcode codesign を選び、Code Signing > Identity に、有効な Apple ID の証明書の identity(証明書の "Common Name")を設定します。公証のために、Notarization > Notarization で Xcode notarytool を選び、Debugging の entitlement を無効にします。Notarization の節には、有効な Apple ID のログインとアプリ用パスワード、または App Store Connect の API UUID と Key を設定します。Apple ID の Name と Password か、App Store Connect の API UUID と Key のどちらかを設定します。公証の状況は xcrun notarytool history で確かめ、公証のログは xcrun notarytool log {ID} でダウンロードします。公証が終わったら、書き出したプロジェクトにチケットを staple します。
  3. Apple Developer ID の証明書があって、Linux か Windows から書き出すとき:rcodesign を入れ、Editor Settings > Export > macOS > rcodesign に、rcodesign のパスを設定します。署名のために、Code Signing > Codesign で rcodesign を選び、Code Signing の節に、有効な Apple ID の PKCS #12 の証明書のファイルとパスワードを設定します。公証のために、Notarization > Notarization で rcodesign を選び、Debugging の entitlement を無効にして、Notarization の節に、有効な App Store Connect の API UUID と Key を設定します。公証の状況は rcodesign notary-log で確かめます。公証が終わったら、rcodesign staple のコマンドで、書き出したプロジェクトにチケットを staple します。
  4. Apple Developer ID の証明書が無いとき:Code Signing > Codesign で Built-in (ad-hoc only) を選び、Notarization > Notarization で Disabled を選びます。Godot は ad-hoc 署名を使い、遊ぶ人の側では、書き出したアプリを開きやすくなります。

遊ぶ人の Mac で見える画面と対処

署名と公証の状態によって、遊ぶ人の Mac で初めて開くときの画面と、開くための対処は変わります。たとえば次の状態があります。

署名と公証の状態ごとの、遊ぶ人の Mac の画面と対処

状態初めて開くときの画面開くための対処
署名と公証があり、App Store の外で配る(DMG か ZIP のアーカイブ)ダイアログが出ます。Open をクリックして起動します。App Store のアプリだけを許す設定の Mac では、警告のダイアログが出ます。System Preferences を開き、Security & Privacy をクリックし、General で設定のロックを解除して、App Store and identified developers を選びます。
署名はあるが公証が無い(自己署名の証明書、または ad-hoc 署名。ad-hoc 署名は、書き出したプロジェクトでの Godot の既定の動き)ダイアログが出ます。Gatekeeper を一時的に無視して開きます。System Preferences の Security & Privacy の General で Open Anyway をクリックするか、Finder でアプリのアイコンを右クリック(Control-クリック)して、メニューから Open を選び、確認のダイアログで Open をクリックします。パスワードを求められたら入力します。ほかに、Terminal で `sudo spctl --master-disable` を実行すると、Anywhere の選択肢が使えるようになる方法があります。この方法は、好きなソフトウェアをどれでも動かせるようになる代わりに、コンピュータの安全性を下げます。Gatekeeper は、macOS のアップデートで再び有効になります。
署名が無く、実行ファイルは linker-signed(公式の書き出しテンプレートで作ったが、署名していない)ダイアログが出ます。quarantine の拡張ファイル属性を、手で取り除きます。Terminal.app を開き(Cmd + Space を押して Terminal と入力します)、対象のアプリのあるフォルダに移動します。たとえば Downloads にあるなら `cd ~/Downloads/` です。そのあと 「`xattr -dr com.apple.quarantine "Unsigned Game.app"`」 を実行します。引用符と .app の拡張子も含めます。
アプリも実行ファイルも署名が無い(Apple Silicon の Mac だけの話。OSXCross でコンパイルしたカスタムの書き出しテンプレートで作り、まったく署名していない)ダイアログが出ます。自分で ad-hoc 署名をします。App Store から Xcode を入れ、起動して、コマンドラインツールのインストールを確認します。Terminal.app を開いて対象のアプリのあるフォルダに移動し、「`xattr -dr com.apple.quarantine "Unsigned Game.app"`」 と 「`codesign -s - --force --deep "Unsigned Game.app"`」 を実行します。どちらも、引用符と .app の拡張子を含めます。
表3

公証を受けていない未署名のソフトウェアを動かすと、Mac に害が及ぶ、またはプライバシーを侵害されるおそれがあります。開きたいアプリが信頼できる入手先のもので、改ざんされていないと確かなときは、Mac のセキュリティ設定を一時的に無視して開けます。アプリを開こうとしたあとで、システム設定の「プライバシーとセキュリティ」で下へスクロールし、「このまま開く」のボタンをクリックします。警告が再び出たら「開く」をクリックでき、そのアプリはセキュリティ設定の例外として保存されるため、その後はダブルクリックで開けます。

ダウンロードフォルダから実行したときや、まだ quarantine のままのときは、Gatekeeper がパスのランダム化を行います。アプリが頼っている、アプリからの相対パスでのアクセスが壊れます。この問題は、アプリを /Applications のフォルダに移すと解決します。

操作の流れを図で見る

Unity と Godot の操作の順を、それぞれ1本の流れにしました。右端の「遊ぶ人の Mac」は、どちらも同じです。

Unity の署名と公証の流れ

Unity の署名と公証の流れ1Build するFile > Build Profiles・Architecture・Build2証明書とバンドル ID を用意するDeveloper ID Application・Identifiers・.entitlements3署名して公証を受ける署名(codesign)・圧縮(ditto)・公証(notarytool)・staple(xcrun stapler staple)4遊ぶ人の Mac公証があれば初回のダイアログで Open。署名だけ・署名が無いときは前の表の対処
図1

Godot の署名と公証の流れ

Godot の署名と公証の流れ1テンプレートとバンドル ID を用意して、書き出し方を決めるEditor > Manage Export Templates・Bundle identifier。macOS は Xcode codesign とXcode notarytool。Linux・Windows は rcodesign。証明書が無いときは Built-in (ad-hoc only) と Disabled2書き出して公証を受け、staple するDebugging の entitlement を無効にする3遊ぶ人の Mac公証があれば初回のダイアログで Open。署名だけ・署名が無いときは前の表の対処
図2

失敗を避ける注意

Windows で書き出した .app は、ファイルシステムの制限で実行権限(executable flag)が付かず、macOS で動きません。ZIP で書き出した場合は、この問題の対象外です。Windows で書き出した .app を macOS で動かすには、.app を macOS か Linux の機器に移し、chmod +x {executable_name} のコマンドで実行権限を付けます。.app バンドルが有効であるには、Contents/MacOS/ の主な実行ファイルと、あれば Contents/Helpers/ の補助の実行ファイルに、実行権限が要ります。Unity も、Windows で macOS のアプリをビルドするときは、macOS で開く前にバイナリの executable flag を設定する必要があります。

Mac App Store で配るときは、公証は要りません。Mac App Store のアップロードに、公証と似た内容の検証が含まれているためです。Godot では、App Store で配るには App Sandbox を有効にする必要があります。サンドボックス化したアプリは、ファイルシステムのほとんどにアクセスできず、独自のファイルダイアログを使えず、.app バンドルの外の実行ファイルを OS.execute と OS.create_process で実行できません。Apple Developer Program の登録の流れは、スマホ向けストアに出す手順のページにあります。

Godot の Debugging の entitlement は、書き出したアプリでネイティブのデバッガ(GDB、LLDB)を使うために、一時的に有効にできる項目です。製品の書き出しでは無効にしておく項目です。公証するには、無効にしておく必要があります。

Godot の Mono 版の書き出しでは、Allow JIT Code Execution・Allow Unsigned Executable Memory・Allow DYLD Environment Variables の entitlements が常に有効で、書き出しのオプションには表示されません。

動的または自己書き換えのネイティブコードを持つアドオンを使うときは、アドオンの説明に従って、Allow JIT Code Execution などを有効にします。Unity でも、macOS 特有の動作をするプラグインを使うときは、動作を有効にする entitlements を足す必要が出ることがあります。

Godot でカスタムの entitlements のファイルを選んだときは、ほかのすべての entitlements の設定が無視されます。

Unity の codesign の --deep の指定は、署名に問題を起こすことがあります。署名するすべてのコードに、同じ署名のオプションと entitlements を当てるためです。また、見つけたコードのファイルにしか署名せず、システムがデータを置く場所にコードのファイルがあると、署名しません。

次に読む

Windows 向けの書き出しの操作は、Windows 向けの書き出しのページにあります。

情報源

このページに出た言葉

このページの内容の誤りは、問い合わせの窓口で受け付けています。