Mac App Store 以外での配布用の Mac Catalyst アプリを公開する

Mac App Store を介して Mac Catalyst アプリを配布する代わりに、Mac App Store の外部に配布することもできます。 この方法では、Mac Catalyst アプリをダウンロード用に選択した場所でホストできます。 Apple Developer Program と Apple Developer Enterprise Program のメンバーは、この配布方法を使用できます。

Mac Catalyst アプリを配布するには、プロビジョニング プロファイルを使用してアプリをプロビジョニングする必要があります。 プロビジョニング プロファイルは、コード署名情報だけでなく、アプリケーションの ID と使用する配布メカニズムも含むファイルです。

アドホック配布を使用して Mac App Store の外部に .NET Multi-platform App UI (.NET MAUI) Mac Catalyst アプリを配布するには、固有の開発プロビジョニング プロファイルを構築する必要があります。 このプロファイルにより、アプリにリリース用のデジタル署名を付けて Mac にインストールできるようになります。 配布プロビジョニング プロファイルには、アプリ ID と開発者 ID アプリケーション証明書が含まれています。 まだお持ちでない場合は、開発者 ID アプリケーション証明書を作成して、自分または組織を識別する必要があります。 さらに、アプリのインストーラー パッケージに署名するには、開発者 ID インストーラー証明書を作成する必要があります。

Mac App Store の外部に配布するために .NET MAUI Mac Catalyst アプリをプロビジョニングするプロセスは次のとおりです。

  1. 証明書署名要求を 2 つ作成します。 詳細については、「証明書署名要求を作成する」を参照してください。
  2. 開発者 ID アプリケーション証明書を作成します。 詳細については、「開発者 ID アプリケーション証明書を作成する」をご覧ください。
  3. 開発者 ID インストーラー証明書を作成します。 詳細については、「開発者 ID インストーラー証明書を作成する」をご覧ください。
  4. アプリ ID を作成する 詳細については、「アプリ ID を作成する」を参照してください。
  5. プロビジョニング プロファイルを作成します。 詳細については、「プロビジョニング プロファイルの作成」を参照してください。
  6. プロビジョニング プロファイルをダウンロードします。 詳細については、「Xcode のプロビジョニング プロファイルをダウンロードする」を参照してください。

重要

この記事では、Apple Developer Program の一部である Apple Developer Account を使用して Mac App Store の外部に配布するためのプロビジョニングについて説明します。 必要な手順はほとんど同じであるため、Apple Developer Enterprise Program の一部である Apple 開発者アカウントにも使用できます。

次に、プロビジョニングが完了したら、次のプロセスで、アプリを公開する準備をし、公開し、公証する必要があります。

  1. 必要に応じて、アプリにエンタイトルメントを追加します。 詳細については、「エンタイトルメントを追加する」を参照してください。
  2. アプリの Info.plist ファイルを更新します。 詳細については、「Info.plist の更新」を参照してください。
  3. アプリのコード署名検証を無効にします。 詳細については、「コード署名検証を無効にする」をご覧ください。
  4. コマンド ラインを使用してアプリを発行します。 詳細については、「コマンド ラインを使用して発行する」を参照してください。
  5. アプリを公証します。 詳細については、「アプリを公証する」をご覧ください。

証明書署名要求を作成します。

配布証明書を作成する前に、まず Mac のキーチェーン アクセスで証明書署名要求 (CSR) を作成する必要があります。

  1. お使いの Mac で、 Keychain Accessを起動します。

  2. キーチェーン アクセスで、[キーチェーンアクセス] > [証明書アシスタント] > [証明機関に証明書を要求する...] メニュー項目を選択します。

  3. [証明書アシスタント] ダイアログで、[ユーザーのメール アドレス] フィールドにメール アドレスを入力します。

  4. [証明書アシスタント] ダイアログで、[共通名] フィールドにキーの名前を入力します。

  5. [証明書アシスタント] ダイアログボックスで、[CA メール アドレス] フィールドを空のままにします。

  6. [証明書アシスタント] ダイアログで、[ディスクに保存] ラジオ ボタンを選択し、[続行] を選択します。

    Certificate assistant dialog.

  7. 証明書署名要求を既知の場所に保存します。

  8. [証明書アシスタント] ダイアログで、[完了] ボタンを選択します。

  9. キーチェーン アクセスを閉じます。

このプロセスを繰り返して、2 つ目の証明書署名要求を作成します。 最初の CSR は、開発者 ID アプリケーション証明書の作成に使用されます。 2 つ目は、開発者 ID インストーラー証明書の作成に使用されます。

重要

同じ証明書署名要求を使用して、開発者 ID アプリケーション証明書と開発者 ID インストーラー証明書を作成することはできません。

開発者 ID アプリケーション証明書を作成する

CSR を使用すると、自分のアイデンティティを確認する開発者 ID 証明書を生成できます。 開発者 ID 証明書は、 Apple 開発者アカウントの Apple ID を使用して作成する必要があります。

  1. Web ブラウザーで、Apple 開発者アカウントにログインします。

  2. Apple 開発者アカウントで、[証明書]、[ID]、[プロファイル] タブの順に選択します。

  3. [証明書、 識別子、プロファイル] ページで、ボタンを + 選択して新しい証明書を作成します。

  4. [新しい証明書の作成] ページで、[開発者 ID アプリケーション] ラジオ ボタンを選択してから、[続行] ボタンを選択します。

    Create a Developer ID Application certificate.

  5. [新しい証明書の作成] ページで、[G2 サブ CA] ラジオ ボタンを選択し、[ファイルの選択] を選択します。

    Upload your certificate signing request for a Developer ID Application certificate.

  6. [アップロードするファイルの選択] ダイアログで、前に作成した最初の証明書要求ファイル (.certSigningRequest ファイル拡張子が付いたファイル) を選択し、[アップロード] を選択します。

  7. [新しい証明書の作成] ページで、[続行] を選択します。

    Continue to generate your distribution certificate.

  8. [証明書のダウンロード] ページで、[ダウンロード] を選択します。

    Download your Developer ID Application certificate.

    証明書ファイル (.cer の拡張子が付いたファイル) が、選択した場所にダウンロードされます。

  9. Mac で、ダウンロードした証明書ファイルをダブルクリックして、キーチェーンに証明書をインストールします。 証明書は、キーチェーン アクセスマイ証明書カテゴリに表示され、開発者 ID アプリケーションで始まります。

    Keychain Access showing Developer ID Application certificate.

    Note

    キーチェーン アクセスの完全な証明書名を書き留めます。 これは、アプリに署名するときに必要になります。

開発者 ID インストーラー証明書を作成する

CSR を使用すると、アプリのインストーラー パッケージに署名するために必要な開発者 ID インストーラー証明書を生成できます。 インストーラー証明書は、Apple 開発者アカウントの Apple ID を使用して作成する必要があります。

  1. Apple 開発者アカウントで、[証明書]、[ID]、[プロファイル] タブの順に選択します。

  2. [証明書、 識別子、プロファイル] ページで、ボタンを + 選択して新しい証明書を作成します。

  3. [新しい証明書の作成] ページで、[開発者 ID インストーラー] ラジオ ボタンを選択してから、[続行] ボタンを選択します。

    Create a Developer ID Installer certificate.

  4. [新しい証明書の作成] ページで、[G2 サブ CA] ラジオ ボタンを選択し、[ファイルの選択] を選択します。

    Upload your certificate signing request for a Developer ID Installer certificate.

  5. [アップロードするファイルの選択] ダイアログで、前に作成した 2 つ目の証明書要求ファイル (.certSigningRequest ファイル拡張子が付いたファイル) を選択し、[アップロード] を選択します。

  6. [新しい証明書の作成] ページで、[続行] を選択します。

    Continue to generate your installer certificate.

  7. [証明書のダウンロード] ページで、[ダウンロード] を選択します。

    Download your distribution certificate.

    証明書ファイル (.cer の拡張子が付いたファイル) が、選択した場所にダウンロードされます。

  8. Mac で、ダウンロードした証明書ファイルをダブルクリックして、キーチェーンに証明書をインストールします。 証明書はキーチェーン アクセス[個人用証明書] カテゴリに表示され、開発者 ID インストーラーで始まります。

    Keychain Access showing installer certificate.

    Note

    キーチェーン アクセスの完全な証明書名を書き留めます。 これは、アプリに署名するときに必要になります。

配布プロファイルの作成

配布プロビジョニング プロファイルを使用すると、.NET MAUI Mac Catalyst アプリをリリース用にデジタル署名し、別の Mac にインストールできます。 Mac App Store の外部に配布するためのプロビジョニング プロファイルには、アプリ ID と開発者 ID アプリケーション証明書が含まれています。

アプリ ID を作成する

配布するアプリを識別するには、アプリ ID が必要です。 アプリ ID は逆引き DNS 文字列に似ています。これはアプリを一意に識別するもので、アプリのバンドル識別子と同じである必要があります。 テスト用にアプリをデバイスにデプロイしたときと同じアプリ ID を使用できます。

アプリ ID には 2 種類あります。

  • ワイルドカード。 ワイルドカード アプリ ID を使用すると、1 つのアプリ ID を使用して複数のアプリを照合できます。通常は com.domainname.* の形式を使用します。 ワイルドカード アプリ ID を使用して、複数のアプリを配布できます。アプリ固有の機能を有効にしないアプリに使用する必要があります。
  • 明示。 明示的なアプリ ID は、1 つのアプリに対して一意であり、通常は com.domainname.myid の形式を使用します。 明示的なアプリ ID を使用して、バンドル識別子が一致する 1 つのアプリを配布できます。 明示的なアプリ ID は、通常、Apple Pay や Game Center などのアプリ固有の機能を有効にするアプリに使用されます。 機能の詳細については、「機能」をご覧ください。

新しいアプリ ID の作成方法:

  1. Apple 開発者アカウントで、証明書、ID、プロファイルに 移動します

  2. [証明書]、[識別子]、[プロファイル] ページで、[識別子] タブを選択します。

  3. [ID] ページで、+ ボタンを選択して新しいアプリ ID を作成します。

  4. [新しい ID の登録] ページで、[アプリ ID] ラジオ ボタンを選択してから [続行] を選択します。

    Create an App ID.

  5. [新しい ID の登録] ページで、[アプリ] を選択してから [続行] を選択します。

    Register an App ID.

  6. [アプリ ID の登録] ページで説明を入力し、[明示的] または [ワイルドカード] バンドル ID ラジオ ボタンを選択します。 次に、アプリのバンドル ID を逆引き DS 形式で入力します。

    Specify the bundle identifier for the app.

    重要

    入力するバンドル ID は、アプリ プロジェクトの Info.plist ファイルのバンドル識別子に対応している必要があります。

    .NET MAUI アプリのバンドル識別子は、アプリケーション ID プロパティとしてプロジェクト ファイルに格納されます。

    • Visual Studio では、ソリューション エクスプローラーで、.NET MAUI アプリ プロジェクトを右クリックし、[プロパティ] を選択します。 次に、[MAUI 共有]> [全般] タブに移動します。"アプリケーション ID" フィールドにバンドル識別子が一覧表示されます。
    • Visual Studio for Mac のソリューション ウィンドウで、.NET MAUI アプリ プロジェクトを右クリックし、[プロパティ] を選択します。 次に、[プロジェクトのプロパティ] ウィンドウで、[ビルド]> [アプリ情報] タブを選択します。"アプリケーション ID" フィールドにバンドル識別子が一覧表示されます。

    "アプリケーション ID" フィールドの値が更新されると、Info.plistバンドル識別子の値が自動的に更新されます。

  7. [アプリ ID の登録] ページで、アプリで使用する機能を選択します。 すべての機能は、このページとアプリ プロジェクトの Entitlements.plist ファイルの両方で構成する必要があります。 詳細については、「機能」と「エンタイトルメント」をご覧ください。

  8. [アプリ ID の登録] ページで、[続行] を選択します。

  9. [アプリ ID の確認] ページで、[登録] ボタンを選択します。

プロビジョニング プロファイルを作成する

アプリ ID が作成されたら、配布プロビジョニング プロファイルを作成する必要があります。 このプロファイルにより、アプリにリリース用のデジタル署名を付けて Mac にインストールできるようになります。

Mac App Store の外部で配布するためのプロビジョニング プロファイルを作成するには、次の操作を行います。

  1. Apple Developer Account の [Certificates, Identifiers & Profiles]\(証明書、識別子、プロファイル\) ページで、[Profiles]\(プロファイル\) タブを選択します。

  2. [プロファイル] タブで、[+] ボタンをクリックして新しいプロファイルを作成します。

  3. [新しいプロビジョニング プロファイルの登録] ページで、[開発者 ID] ラジオ ボタンを選択してから、[続行] ボタンをクリックします。

    Register a provisioning profile distribution outside the App Store.

  4. [プロビジョニング プロファイルの生成] ページで、[Mac Catalyst] ラジオ ボタンを選択します。 次に、[アプリ ID] ドロップダウンで、前に作成したアプリ ID を選択してから [続行] ボタンをクリックします。

    Select your App ID.

  5. [プロビジョニング プロファイルの生成] ページで、配布証明書に対応するラジオ ボタンを選択してから、[続行] ボタンをクリックします。

    Select your distribution certificate.

  6. [プロビジョニング プロファイルの生成] ページで、[生成] ボタンをクリックする前にプロビジョニング プロファイルの名前を入力します。

    Generate the provisioning profile.

    Note

    プロビジョニング プロファイル名は、アプリの署名時に必要になりますので、メモしておきます。

  7. [プロビジョニング プロファイルの生成] ページで、必要に応じて [ダウンロード] ボタンをクリックしてプロビジョニング プロファイルをダウンロードします。

    Note

    プロビジョニング プロファイルを今すぐダウンロードする必要はありません。 代わりに、Xcode でこれを行います。

Xcode でプロビジョニング プロファイルをダウンロードする

Apple Developer アカウントでプロビジョニング プロファイルを作成した後、Xcode はそれをダウンロードして、アプリに署名できるようにします。

  1. Mac で Xcode を起動します。

  2. Xcode で、[Xcode] > [環境設定...] メニュー項目を選択します。

  3. [環境設定] ダイアログで、[アカウント] タブを選択します。

  4. [アカウント] タブで 、[+] ボタンをクリックして Apple Developer アカウントを Xcode に追加します。

    Xcode Accounts dialog in preferences.

  5. アカウントの種類のポップアップで、[Apple ID] を選択し、[続行] ボタンをクリックします。

    Xcode select the type of account you'd like to add popup.

  6. サイン イン ポップアップで、Apple ID を入力し、[次へ] ボタンをクリックします。

  7. サイン イン ポップアップで、Apple ID のパスワードを入力し、[次へ] ボタンをクリックします。

    Xcode Apple account sign-in.

  8. [アカウント] タブで、[証明書の管理...] ボタンをクリックして、配布証明書がダウンロードされていることを確認します。

  9. [アカウント] タブで、[手動プロファイルのダウンロード] ボタンをクリックしてプロビジョニング プロファイルをダウンロードします。

    Xcode Apple Developer Program account details.

  10. ダウンロードが完了するまで待ってから、Xcode を閉じます。

エンタイトルメントの追加

Apple のアプリ サンドボックスは、Mac アプリのシステム リソースとユーザー データへのアクセスを制限し、アプリが侵害された場合の損害を含めます。 必要に応じて、Mac App Store の外部で配布される Mac Catalyst アプリに対して有効にすることができます。

これを実現するには、.NET MAUI アプリ プロジェクトの Platforms/MacCatalyst フォルダーに Entitlements.plist ファイルを追加します。

<?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.app-sandbox</key>
    <true/>
  </dict>
</plist>

アプリ サンドボックスの権利は、boolean 型の com.apple.security.app-sandbox キーを使用して定義されます。 App Sandbox の詳細については、developer.apple.com にある「App Sandbox を使用したユーザー データの保護」をご覧ください。 App Sandbox エンタイトルメントの詳細については、「App Sandbox のエンタイトルメント」をご覧ください。

アプリで送信ネットワーク接続を開く場合は、boolean 型の com.apple.security.network.client キーを Entitlements.plist ファイルに追加する必要もあります。

<?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.app-sandbox</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
  </dict>
</plist>

送信ネットワーク接続エンタイトルメントについては、developer.apple.com の「com.apple.security.network.client」をご覧ください。

Info.plist を更新する

アプリを発行する前に、その Info.plist ファイルを追加情報で更新する必要があります。

ユーザー インターフェイスのイディオムを指定する

Mac Catalyst アプリは、iPad または Mac ユーザー インターフェイスのイディオムで実行できます。

  • iPad ユーザー インターフェイスのイディオムは、iPad のような外観を維持しながら、Mac の表示環境に合わせてアプリのユーザー インターフェイスをスケーリングするように macOS に指示します。
  • Mac ユーザー インターフェイスのイディオムは、Mac の表示環境に合わせてアプリのユーザー インターフェイスをスケーリングしません。 一部のコントロールはサイズと外観を変更し、コントロールとの対話は AppKit コントロールとの対話と同じように感じます。

既定では、.NET MAUI Mac Catalyst アプリでは iPad ユーザー インターフェイスのイディオムが使用されます。 これが目的の動作である場合は、アプリの Info.plist ファイルで UIDeviceFamily キーの値として 2 のみが指定されていることを確認します。

<key>UIDeviceFamily</key>
<array>
  <integer>2</integer>
</array>

Mac ユーザー インターフェイスのイディオムを採用するには、アプリの Info.plist ファイルを更新して、UIDeviceFamily キーの値として 6 を指定します。

<key>UIDeviceFamily</key>
<array>
  <integer>6</integer>
</array>

Mac Catalyst ユーザー インターフェイスのイディオムの詳細については、「Mac Catalyst アプリの UI イディオムを指定する」を参照してください。

アプリの既定の言語とリージョンを設定する

アプリの Info.plistCFBundleDevelopmentRegion キーを、ローカライズネイティブ開発リージョンを表す string に設定します。

<key>CFBundleDevelopmentRegion</key>
<string>en</string>

キーの値は言語指定子で、省略可能なリージョン指定子を使用する必要があります。 詳細については、developer.apple.com で CFBundleDevelopmentRegion を参照してください。

アプリの Info.plistNSHumanReadableCopyright キーを、アプリの人間が判読できる著作権情報を表す string に設定します。

<key>NSHumanReadableCopyright</key>
<string>MyMauiApp © 2023</string>

詳細については、developer.apple.com で NSHumanReadableCopyright を参照してください。

アプリによる暗号化の使用を宣言する

アプリで暗号化を使用していて、米国またはカナダの外部に配布する予定の場合は、米国の輸出コンプライアンス要件の対象となります。 アプリの暗号化の使用に関する情報は、Info.plist ファイルで提供できます。

これを行うには、アプリの Info.plistITSAppUsesNonExemptEncryption キーを追加し、アプリで暗号化を使用するかどうかを示す boolean 値を指定します。

<key>ITSAppUsesNonExemptEncryption</key>
<false/>

詳細については、developer.apple.com で「暗号化エクスポート規制への準拠」を参照してください。

コード署名の検証を無効にする

現在、プロビジョニング要件を満たしている場合、Mac App Store の外部に配布するために .NET MAUI Mac Catalyst アプリを発行しようとすると、コード 3 で終了する際に codesign のエラーが表示されます。

/usr/local/share/dotnet/packs/Microsoft.MacCatalyst.Sdk/16.2.1040/tools/msbuild/iOS/Xamarin.Shared.targets(1930,3): error MSB6006: "codesign" exited with code 3. [/Users/davidbritch/Projects/MyMauiApp/MyMauiApp/MyMauiApp.csproj::TargetFramework=net8.0-maccatalyst]

codesign がアプリの署名に成功しても、_CodesignVerify ターゲットがコード署名の検証に失敗します。

test-requirement: code failed to satisfy specified code requirement(s)

このエラーのため、.pkg ファイルは生成されません。

そのため、コード署名の検証を無効にするには、現在、次のビルド ターゲットをプロジェクト ファイルの末尾に追加する必要があります。

<Project Sdk="Microsoft.NET.Sdk">
  ...
  <Target Name="_SkipCodesignVerify" BeforeTargets="_CodesignVerify" AfterTargets="_CodesignAppBundle">  
    <PropertyGroup>    
      <_RequireCodeSigning>false</_RequireCodeSigning>  
    </PropertyGroup>
  </Target>
</Project>

コマンド ラインを使用して発行する

Mac のコマンド ラインから Mac Catalyst アプリを発行するには、ターミナルを開き、.NET MAUI アプリ プロジェクトのフォルダーに移動します。 次のパラメーターを指定して dotnet publish コマンドを実行します。

パラメーター
-f または --framework ターゲット フレームワーク。これは net8.0-maccatalyst です。
-c または --configuration ビルド構成。これは Release です。
-p:MtouchLink プロジェクトのリンク モード。NoneSdkOnlyFull のいずれかです。
-p:CreatePackage ビルドの最後にアプリのパッケージ (.pkg) が作成されるように true に設定します。
-p:EnableCodeSigning コード署名が有効になるように true に設定します。
-p:EnablePackageSigning true に設定して、作成されたパッケージが署名されるようにします。
-p:CodesignKey コード署名キーの名前。 キーチェーン アクセスに表示されるディストリビューション証明書の名前に設定します。
-p:CodesignProvision 署名時に使用するプロビジョニング プロファイルの名前。
-p:CodesignEntitlements アプリに必要な権利を指定するエンタイトルメント ファイルへのパス。 Platforms\MacCatalyst\Entitlements.plist に設定します。
-p:PackageSigningKey パッケージの署名時に使用するパッケージ署名キー。 キーチェーン アクセスに表示されるインストーラー証明書の名前に設定します。
-p:RuntimeIdentifier プロジェクトのランタイム識別子 (RID)。 .NET MAUI Mac Catalyst アプリのリリース ビルドでは、ユニバーサル アプリをサポートするために、ランタイム識別子として既定で maccatalyst-x64 および maccatalyst-arm64 を使用します。 1 つのアーキテクチャのみをサポートするには、maccatalyst-x64 または maccatalyst-arm64 を指定します。
-p:UseHardenedRuntime 強化されたランタイムを有効にするように true に設定します。これは、Mac App Store の外部に配布されている Mac Catalyst アプリに必要です。

警告

.NET MAUI ソリューションを発行しようとすると、dotnet publish コマンドによってソリューション内の各プロジェクトが個別に発行され、ソリューションに他のプロジェクトの種類を追加したときに問題が発生する場合があります。 そのため、dotnet publish コマンドの スコープは .NET MAUI アプリ プロジェクトに設定する必要があります。

プロジェクト ファイルの <PropertyGroup> に追加のビルド パラメーターが指定されていない場合は、コマンド ラインで追加のビルド パラメーターを指定できます。 次の表に、一般的なパラメーターの一部を一覧表示します。

パラメーター
-p:ApplicationTitle アプリのユーザーに表示される名前。
-p:ApplicationId アプリの一意識別子 (例 com.companyname.mymauiapp)。
-p:ApplicationVersion アプリのイテレーションを識別するビルドのバージョン。
-p:ApplicationDisplayVersion アプリのバージョン番号です。
-p:RuntimeIdentifier プロジェクトのランタイム識別子 (RID)。 .NET MAUI Mac Catalyst アプリのリリース ビルドでは、ユニバーサル アプリをサポートするために、ランタイム識別子として既定で maccatalyst-x64 および maccatalyst-arm64 を使用します。 1 つのアーキテクチャのみをサポートするには、maccatalyst-x64 または maccatalyst-arm64 を指定します。

ビルド プロパティの完全な一覧については、「プロジェクト ファイルのプロパティ」を参照してください。

重要

これらすべてのパラメーターの値をコマンド ラインで指定する必要はありません。 これらは、プロジェクト ファイルでも指定できます。 コマンド ラインとプロジェクト ファイルでパラメーターを指定した場合、コマンド ライン パラメーターが優先されます。 プロジェクト ファイルでビルド プロパティを指定する方法の詳細については、「プロジェクト ファイルでビルド プロパティを定義する」を参照してください。

たとえば、Mac App Store の外部で配布するために、次のコマンドを使用して Mac で .pkg をビルドして署名します。

dotnet publish -f net8.0-maccatalyst -c Release -p:MtouchLink=SdkOnly -p:CreatePackage=true -p:EnableCodeSigning=true -p:EnablePackageSigning=true -p:CodesignKey="Developer ID Application: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp (Non-App Store)" -p:CodesignEntitlements="Platforms\MacCatalyst\Entitlements.plist" -p:PackageSigningKey="Developer ID Installer: John Smith (AY2GDE9QM7)" -p:UseHardenedRuntime=true

Note

.NET 8 では、dotnet publish コマンドの既定値は Release 構成です。 そのため、コマンド ラインからビルド構成を省略できます。

アプリをビルド、署名、パッケージ化し、.pkg を bin/Release/net8.0-maccatalyst/publish/ フォルダーにコピーします。 1 つのアーキテクチャのみを使用してアプリを発行 すると、bin/Release/net8.0-maccatalyst/{architecture}/publish/ フォルダーに発行されます。

署名プロセス中に、ログイン パスワードを入力して、codesignproductbuild の実行を許可することが必要な場合があります。

Allow codesign to sign your app on your Mac.Allow productbuild to sign your app on your Mac.

dotnet publish コマンドの詳細については、「dotnet publish」を参照してください。

プロジェクト ファイルでビルド プロパティを定義する

コマンド ラインでビルド パラメーターを指定する代わりに、<PropertyGroup> のプロジェクト ファイルで ビルド パラメーターを指定することもできます。 次の表に、一般的なビルド プロパティの一部を示します。

プロパティ
<ApplicationTitle> アプリのユーザーに表示される名前。
<ApplicationId> アプリの一意識別子 (例 com.companyname.mymauiapp)。
<ApplicationVersion> アプリのイテレーションを識別するビルドのバージョン。
<ApplicationDisplayVersion> アプリのバージョン番号です。
<CodesignKey> コード署名キーの名前。 キーチェーン アクセスに表示されるディストリビューション証明書の名前に設定します。
<CodesignEntitlements> アプリに必要な権利を指定するエンタイトルメント ファイルへのパス。 Platforms\MacCatalyst\Entitlements.plist に設定します。
<CodesignProvision> 署名時に使用するプロビジョニング プロファイルの名前。
<CreatePackage> ビルドの最後にアプリのパッケージ (.pkg) が作成されるように true に設定します。
<EnableCodeSigning> コード署名が有効になるように true に設定します。
<EnablePackageSigning> true に設定して、作成されたパッケージが署名されるようにします。
<MtouchLink> プロジェクトのリンク モード。NoneSdkOnlyFull のいずれかです。
<PackageSigningKey> パッケージの署名時に使用するパッケージ署名キー。 キーチェーン アクセスに表示されるインストーラー証明書の名前に設定します。
<RuntimeIdentifier> プロジェクトのランタイム識別子 (RID)。 .NET MAUI Mac Catalyst アプリのリリース ビルドでは、ユニバーサル アプリをサポートするために、ランタイム識別子として既定で maccatalyst-x64 および maccatalyst-arm64 を使用します。 1 つのアーキテクチャのみをサポートするには、maccatalyst-x64 または maccatalyst-arm64 を指定します。
<UseHardenedRuntime> 強化されたランタイムを有効にするように true に設定します。これは、Mac App Store の外部に配布されている Mac Catalyst アプリに必要です。

ビルド プロパティの完全な一覧については、「プロジェクト ファイルのプロパティ」を参照してください。

重要

これらのビルド プロパティの値は、プロジェクト ファイルで指定する必要はありません。 これらは、アプリを発行するときにコマンド ラインで指定することもできます。 これにより、プロジェクト ファイルから特定の値を省略できます。

次の例は、Mac Catalyst アプリをビルドして署名して Mac App Store の外部に配布するための一般的なプロパティ グループを示しています。

<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-maccatalyst|AnyCPU'">
  <MtouchLink>SdkOnly</MtouchLink>
  <EnableCodeSigning>True</EnableCodeSigning>
  <EnablePackageSigning>true</EnablePackageSigning>
  <CreatePackage>true</CreatePackage>
  <CodesignKey>Developer ID Application: John Smith (AY2GDE9QM7)</CodesignKey>
  <CodesignProvision>MyMauiApp (Non-App Store)</CodesignProvision>
  <CodesignEntitlements>Platforms\MacCatalyst\Entitlements.plist</CodesignEntitlements>
  <PackageSigningKey>Developer ID Installer: John Smith (AY2GDE9QM7)</PackageSigningKey>
  <UseHardenedRuntime>true</UseHardenedRuntime>
</PropertyGroup>

次の例 <PropertyGroup> は条件チェックを追加し、条件チェック合格しない限り設定が処理されないようにします。 条件チェックは、次の 2 つの項目を検索します。

  1. ビルド構成は Release に設定されています。
  2. ターゲット フレームワークは、テキスト net8.0-maccatalyst を含むものに設定されています。
  3. プラットフォームは AnyCPU に設定されています。

これらの条件のいずれかが失敗した場合、設定は処理されません。 さらに重要なのは、<CodesignKey><CodesignProvision><PackageSigningKey> の設定がなく、アプリに署名できなくなっていることです。

上記のプロパティ グループを追加した後、ターミナルを開き、.NET MAUI アプリ プロジェクトのフォルダーに移動することで、Mac のコマンド ラインからアプリを発行できます。 次に、次のコマンドを実行します。

dotnet build -f net8.0-maccatalyst -c Release

Note

.NET 8 では、dotnet publish コマンドの既定値は Release 構成です。 そのため、コマンド ラインからビルド構成を省略できます。

アプリをビルド、署名、パッケージ化し、.pkg を bin/Release/net8.0-maccatalyst/publish/ フォルダーにコピーします。

アプリを公証する

macOS には ゲートキーパー と呼ばれる技術が含まれています。これは、信頼できるソフトウェアのみが Mac 上で実行されるようにするのに役立ちます。 ユーザーがインストーラー パッケージまたはアプリをダウンロードして開くと、ゲートキーパーは、ソフトウェアが特定された開発者からのソフトウェアであることを確認します。 これを行うには、開発者 ID 証明書をチェックし、ソフトウェアが Apple によって既知の悪意のあるコンテンツから解放され、変更されていないことをチェックします。 そのため、アプリをプロビジョニングして公開した後、Apple に提出して公証される必要があります。 Apple の公証サービスは、開発者 ID 署名済みアプリを自動的にスキャンし、セキュリティ チェックを実行します。 公証が成功すると、ソフトウェアにチケットが割り当てられ、公証されたことがゲートキーパーに通知されます。

アプリは、notarytool コマンド ライン ツールを使用して Apple の公証サービスに送信できます。

xcrun notarytool submit {my_package_filename} --wait --apple-id {my_apple_id} --password {my_app_specific_password} --team-id {my_team_id}

notarytool ツールを使用して .NET MAUI Mac Catalyst .pkg ファイルに署名する例を次に示します。

xcrun notarytool submit MyMauiApp-1.0.pkg --wait --apple-id johm.smith@provider.com --password fqtk-cprr-gqdt-bvyo --team-id AY2GDE9QM7

wait フラグは、notarytool に公証サービスが送信の処理を完了した後にのみ終了するように指示するため、サービスの状態をポーリングする必要はありません。 apple-idpasswordteam-id 引数は、App Store Connect の資格情報を指定するために使用されます。 App Store Connect には 2 要素認証が必要であるため、notarytool 用にアプリ固有のパスワードを作成する必要があります。 アプリ固有のパスワードの作成については、developer.apple.com の「アプリ固有のパスワードを使用して Apple ID でアプリにサインインする」を参照してください。

Apple にアプリを送信した後、公証プロセスには通常長くて 1 時間かかります。

Note

公証は、ほとんどのアプリで 5 分以内に完了します。 公証サービスからの長い応答時間を回避する方法については、developer.apple.com の「長い公証応答時間とサイズ制限を回避する」を参照してください。

公証が成功した場合、公証サービスは署名されたインストーラー パッケージとその中のアプリ バンドルのチケットを生成します。

公証の詳細については、「配布前の macOS ソフトウェアの公証」を参照してください。 Apple の公証サービスにアプリを送信するその他の方法については、developer.apple.com の「公証サービスにアプリをアップロードする」を参照してください。 一般的な公証の問題の解決については、「一般的な公証の問題の解決」を参照してください。

チケットをアプリに留める

公証は、署名されたインストーラー パッケージとその内部のアプリ バンドルのチケットを生成し、アプリが公証されていることをゲートキーパーに通知します。 公証が完了すると、ユーザーが macOS 10.14 以降でアプリを実行しようとすると、ゲートキーパーによってチケットがオンラインで検索されます。

公証が成功したら、stapler ツールを使用してチケットをアプリに添付する必要があります。 これにより、ネットワーク接続が利用できない場合でも、ゲートキーパーがチケットを見つけることができます。 次のコマンドを実行して、チケットを .pkg に添付します。

xcrun stapler staple {filename}.pkg

stapler ツールは、チケットを取得し、インストーラー パッケージに添付します。 チケットをアプリに留めることに成功した場合、留めて検証するアクションが機能したことを示すメッセージが表示されます。

公証の検証

公証を検証する場合は、次のコマンドを使用して検証できます。

xcrun stapler validate mypackage.pkg

アプリを配布する

署名され、公証された .pkg は、Web サーバーなどの選択した場所にある Mac App Store の外部に安全に配布できます。

Mac でアプリを安全に開く方法については、support.apple.com の「Mac でアプリを安全に開く」を参照してください。

関連項目