次の方法で共有


Mac App Store の外部で配布するための Mac Catalyst アプリを発行する

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

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

.NET マルチプラットフォーム アプリ UI (.NET MAUI) Mac Catalyst アプリを Mac App Store の外部で配布するには、そのアプリに固有の配布プロビジョニング プロファイルをビルドする必要があります。 このプロファイルにより、アプリにリリース用のデジタル署名を付けて 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 開発者アカウントを使用して、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. [証明書アシスタント] ダイアログで、[ディスクに保存] ラジオ ボタンを選択し、[続行] を選択します。

    [証明書アシスタント] ダイアログ。

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

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

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

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

重要

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

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

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

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

  2. Apple Developer アカウントで、[Certificates, IDs & Profiles] タブを選択します。

  3. Certificates, Identifiers & Profiles」ページで、+ ボタンを選択して新しい証明書を作成します。

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

    Developer ID アプリケーション証明書を作成します。

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

    Developer ID アプリケーション証明書の証明書署名要求をアップロードします。

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

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

    配布証明書の生成を続行します。

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

    Developer ID アプリケーション証明書をダウンロードします。

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

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

    Developer ID アプリケーション証明書を示すキーチェーン アクセス。

    Note

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

開発者 ID インストーラー証明書の作成

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

  1. Apple Developer アカウントで、[Certificates, IDs & Profiles] タブを選択します。

  2. Certificates, Identifiers & Profiles」ページで、+ ボタンを選択して新しい証明書を作成します。

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

    Developer ID インストーラー証明書を作成します。

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

    Developer ID インストーラー証明書の証明書署名要求をアップロードします。

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

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

    インストーラー証明書の生成を続行します。

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

    配布証明書をダウンロードします。

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

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

    インストーラー証明書を示すキーチェーン アクセス。

    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 Developer アカウントで、[証明書、ID、プロファイル] に移動します。

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

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

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

    アプリ ID を作成します。

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

    アプリ IDの登録。

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

    アプリのバンドル識別子を指定します。

    重要

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

    .NET MAUI アプリのバンドル識別子は、アプリケーション ID プロパティとしてプロジェクト ファイルに格納されます。 Visual Studio では、ソリューション エクスプローラーで、.NET MAUI アプリ プロジェクトを右クリックし、[プロパティ] を選択します。 次に、[MAUI 共有 > 一般] タブに移動します。[アプリケーション ID] フィールドにはバンドル識別子がリストされます。

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

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

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

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

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

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

Mac App Store の外部で配布するプロビジョニング プロファイルを作成する方法は以下のとおりです。

  1. Apple Developer アカウントの [証明書、識別子、プロファイル] ページで、[プロファイル] タブを選択します。

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

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

    App Store 以外の配布プロビジョニング プロファイルを登録します。

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

    アプリ ID を選択します。

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

    配布証明書を選択します。

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

    プロビジョニング プロファイルを生成します。

    Note

    アプリに署名するときに必要となるため、プロビジョニング プロファイル名をメモしておきます。

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

    Note

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

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

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

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

  2. Xcode で、Xcode > Preferences... メニュー項目を選択します。

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

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

    Xcode の Preferences での Accounts ダイアログ。

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

    Xcode では、ポップアップを追加するアカウントの種類を選択します。

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

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

    Xcode に Apple アカウントでサインインする。

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

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

    Xcode での Apple Developer Program アカウントの詳細。

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

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

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

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

<?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 キーを使用して定義されます。 アプリ サンドボックスの詳細については、developer.apple.com の「アプリ サンドボックスによるユーザー データの保護」をご覧ください。 アプリ サンドボックスのエンタイトルメントの詳細については、「アプリ サンドボックスのエンタイトルメント」をご覧ください。

アプリで送信ネットワーク接続を開く場合は、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 ファイルで指定できます。

これを行うには、ITSAppUsesNonExemptEncryption キーをアプリの Info.plist に追加し、アプリが暗号化を使用するかどうかを示す 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 プロジェクトのリンク モード。NoneSdkOnly、または Full です。
-p:CreatePackage true に設定すると、ビルドの最後にアプリのパッケージ (.pkg) が作成されます。
-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-x64maccatalyst-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-x64maccatalyst-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 構成になります。 したがって、コマンド ラインからビルド構成を省略できます。

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

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

Mac で codesign がアプリに署名できるようにします。Mac で productbuild にアプリへの署名を許可します。

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

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

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

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

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

重要

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

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

<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 構成になります。 したがって、コマンド ラインからビルド構成を省略できます。

ビルドの公開、署名、アプリのパッケージ化が行われ、.pkgbin/Release/net8.0-maccatalyst/publish/ フォルダーにコピーされます。

アプリの公証

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

アプリは、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 の「公証サービスにアプリをアップロードする」をご覧ください。 一般的な公証の問題の解決の詳細については、「一般的な公証の問題の解決」をご覧ください。

チケットをアプリに関連付ける

公証により、署名付きインストーラー パッケージとその中のアプリ バンドルのチケットが生成され、アプリが公証されていることを Gatekeeper に伝えます。 公証が完了すると、ユーザーが macOS 10.14 以降でアプリを実行しようとしたときに、Gatekeeper がオンラインでチケットを検索します。

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

xcrun stapler staple {filename}.pkg

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

公証の検証

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

xcrun stapler validate mypackage.pkg

アプリを配布する

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

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

関連項目