コマンド ラインを使用して 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 の発行」をご覧ください。

ランタイム識別子

RuntimeIdentifier パラメーターがコマンド ラインまたはプロジェクト ファイルで指定されていない場合、ビルド プロセスは既定でシミュレーター ランタイム識別子になります。 さらに、コマンド ラインでランタイム識別子を渡すと、プロジェクト ファイルに複数のターゲット フレームワークがある場合、ビルドの復元に失敗する可能性があります。 詳細については、「-f と -r の両方を dotnet ビルドに指定すると、プロジェクト ファイルに複数のフレームワークが存在する場合、復元に失敗する」をご覧ください。

これらの問題の解決策の 1 つは、プロジェクト ファイルに次の <PropertyGroup> を追加することです。

<PropertyGroup Condition="'$(IsPublishing)'  == 'true' And '$(TargetFramework)' == 'net7.0-ios'">
    <RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
</PropertyGroup>

次に、以下のコマンドを実行してアプリを発行します。

dotnet publish -f net7.0-ios -p:IsPublishing=true ...

これらの問題に対する別の解決策は、プロジェクト ファイルに次の <PropertyGroup> を追加することです。

<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net7.0-ios'">
    <RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
</PropertyGroup>

次に、以下のコマンドを実行してアプリを発行します。

dotnet publish -f net7.0-ios -c Release ...

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

コマンド ラインでビルド パラメーターを指定する代わりに、<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'">
  <RuntimeIdentifier>ios-arm64</RuntimeIdentifier> <!-- Required in .NET 7 but not in .NET 8 -->
  <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 の実行を許可することが必要な場合があります。

Allow codesign to sign your app on your paired Mac.

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

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 ファイルは、次のいずれかの方法で配布できます。