次の方法で共有


コマンド ラインを使用して iOS アプリを発行する

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

パラメーター
-f または --framework ターゲットとなるフレームワークは net8.0-ios です。
-c または --configuration ビルド構成は、Release です。

警告

.NET MAUI ソリューションを公開しようとすると、dotnet publish コマンドがソリューション内の各プロジェクトを個別に公開しようとするため、他のプロジェクト タイプをソリューションに追加した場合に問題が発生する可能性があります。 したがって、dotnet publish コマンドのスコープを .NET MAUI アプリ プロジェクトに限定する必要があります。

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

パラメーター
-p:ApplicationTitle ユーザーに表示されるアプリの名前。
-p:ApplicationId com.companyname.mymauiapp のようなアプリ固有の識別子。
-p:ApplicationVersion アプリのイテレーションを識別するビルドのバージョン。
-p:ApplicationDisplayVersion アプリのバージョン番号です。
-p:RuntimeIdentifier プロジェクトのランタイム識別子 (RID)。 ios-arm64 を使用してください。
-p:ArchiveOnBuild アプリ アーカイブを生成するかどうかを示すブール値。 .ipa を生成するために true を使用します。
-p:CodesignKey コード署名キーの名前。
-p:CodesignProvision アプリ バンドルの署名時に使用するプロビジョニング プロファイル。
-p:CodesignEntitlements アプリに必要なエンタイトルメントを指定するエンタイトルメント ファイルへのパス。

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

重要

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

たとえば、Mac で .ipa をビルドして署名するには、次のコマンドを使用します。

dotnet publish -f net8.0-ios -c Release -p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Distribution: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp"

Note

.NET 8 では、dotnet publish コマンドの既定値は Release 構成になります。 そのため、コマンド ラインからビルド構成を省略できます。 さらに、dotnet publish コマンドの既定値も ios-arm64RuntimeIdentifier になります。 そのため、RuntimeIdentifier はコマンド ラインから省略することもできます。

発行では、アプリをビルドして署名した後、.ipabin/Release/net8.0-ios/ios-arm64/publish/ フォルダーにコピーします。 アプリの配布チャネルは、プロビジョニング プロファイルに含まれる配布証明書で指定されます。 さまざまな配布チャネルのプロビジョニング プロファイルの作成については、「App Store 配布用の iOS アプリの発行」、「アドホック配布用の iOS アプリを発行する」、「社内配布用の iOS アプリを公開する」をご覧ください。

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

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

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

プロパティ
<ApplicationTitle> ユーザーに表示されるアプリの名前。
<ApplicationId> com.companyname.mymauiapp のようなアプリ固有の識別子。
<ApplicationVersion> アプリのイテレーションを識別するビルドのバージョン。
<ApplicationDisplayVersion> アプリのバージョン番号です。
<RuntimeIdentifier> プロジェクトのランタイム識別子 (RID)。 ios-arm64 を使用してください。
<ArchiveOnBuild> アプリ アーカイブを生成するかどうかを示すブール値。 .ipa を生成するために true を使用します。
<CodesignKey> コード署名キーの名前。
<CodesignProvision> アプリ バンドルの署名時に使用するプロビジョニング プロファイル。
<CodesignEntitlements> アプリに必要なエンタイトルメントを指定するエンタイトルメント ファイルへのパス。

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

重要

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

次の例は、プロビジョニング プロファイルを使用して iOS アプリをビルドして署名するための一般的なプロパティ グループを示しています。

<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
  <CodesignKey>Apple Distribution: John Smith (AY2GDE9QM7)</CodesignKey>
  <CodesignProvision>MyMauiApp</CodesignProvision>
  <ArchiveOnBuild>true</ArchiveOnBuild>
</PropertyGroup>

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

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

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

Windows から iOS アプリを発行する

.NET MAUI を使用したネイティブ iOS アプリケーションのビルドには、Mac 上でのみ動作する Apple のビルド ツールにアクセスする必要があります。 このため、.NET MAUI iOS アプリをビルドするために、Visual Studio 2022 はネットワークからアクセス可能な Mac に接続する必要があります。 詳細については、「iOS開発のための Mac とのペアリング」をご確認ください。

Note

[Mac とペアリング] は、Visual Studio 2022 から特定の Mac ビルド ホストに初めてログインするときに、SSH キーを設定します。 これらのキーがあると、将来のログインではユーザー名またはパスワードは必要ありません。

Windows のコマンド ラインからアプリを発行するには、ターミナルを開き、.NET MAUI アプリ プロジェクトのフォルダーに移動します。 Mac から発行するときに指定するのと同じコマンド ライン パラメーターまたはビルド プロパティをプロジェクト ファイルで指定して、dotnet publish コマンドを実行します。 さらに、次のコマンド ライン パラメーターを指定する必要があります。

パラメーター
-p:ServerAddress Mac ビルド ホストの IP アドレス。
-p:ServerUser Mac ビルド ホストにログインするときに使用するユーザー名。 フル ネームではなくシステム ユーザー名を使います。
-p:ServerPassword Mac ビルド ホストへのログインに使用するユーザー名のパスワード。
-p:TcpPort Mac ビルド ホストとの通信に使用する TCP ポート (58181)。
-p:_DotNetRootRemoteDirectory .NET SDK を含む Mac ビルド ホスト上のフォルダー。 /Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/ を使用してください。

重要

これらのパラメーターの値は、ビルド プロパティとしてプロジェクト ファイルに指定することもできます。 ただし、<ServerAddress><ServerUser><ServerPassword><_DotNetRootRemoteDirectory> の値は、通常、セキュリティ上の理由からコマンド ラインで提供されます。

たとえば、次のコマンドを使用して、Windows から .ipa をビルドして署名します。

dotnet publish -f net8.0-ios -c Release -p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Distribution: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp" -p:ServerAddress={macOS build host IP address} -p:ServerUser={macOS username} -p:ServerPassword={macOS password} -p:TcpPort=58181 -p:_DotNetRootRemoteDirectory=/Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/

Note

.NET 8 では、dotnet publish コマンドの既定値は Release 構成になります。 そのため、コマンド ラインからビルド構成を省略できます。 さらに、dotnet publish コマンドの既定値も ios-arm64RuntimeIdentifier になります。 そのため、RuntimeIdentifier はコマンド ラインから省略することもできます。

Note

コマンド ラインでのビルドの呼び出しで ServerPassword パラメーターを省略すると、[Mac とペアリング] は、保存されている SSH キーを使って Mac ビルド ホストへのログインを試みます。

発行では、アプリをビルドして署名し、Windows コンピューターの bin\Release\net8.0-ios\ios-arm64\publish フォルダーに .ipa をコピーします。 アプリの配布チャネルは、プロビジョニング プロファイルに含まれる配布証明書で指定されます。 さまざまな配布チャネルの配布プロビジョニング プロファイルの作成の詳細については、「App Store 配布用の iOS アプリを発行する」、「アドホック配布用の iOS アプリを発行する」、「社内配布用の iOS アプリを公開する」をご覧ください。

公開プロセス中に、ペアになっている Mac での codesign の実行を許可することが必要な場合があります。

ペアリングされた Mac で codesign がアプリに署名できるようにします。

リモート ビルドをトラブルシューティングする

Windows 上のコマンド ラインからリモートでビルドするときに RuntimeIdentifier が指定されていない場合は、Windows コンピューターのアーキテクチャが使用されます。 これは、ビルドが Mac に接続してアーキテクチャを取得する前に、ビルド プロセスの早い段階で RuntimeIdentifier を設定する必要があるために発生します。

Windows 上の Visual Studio を使用してリモートでビルドするときに RuntimeIdentifier が指定されていない場合、IDE はリモート Mac のアーキテクチャを検出し、それに応じて設定します。 既定値をオーバーライドするには、$(ForceSimulatorX64ArchitectureInIDE) ビルド プロパティを設定します。

<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net8.0-ios'">
    <ForceSimulatorX64ArchitectureInIDE>true</ForceSimulatorX64ArchitectureInIDE>
</PropertyGroup>

アプリの配布

.ipa ファイルは、次のいずれかの方法で配布できます。