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

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

パラメーター 価値
-f または --framework ターゲット フレームワーク。 net8.0-ios
-c または --configuration ビルド構成。これは Release

Warnung

.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 アプリ アーカイブを生成するかどうかを示すブール値。 trueを使用して .ipa を生成します。
-p:CodesignKey コード署名キーの名前。
-p:CodesignProvision アプリ バンドルに署名するときに使用するプロビジョニング プロファイル。
-p:CodesignEntitlements アプリに必要な権利を指定するエンタイトルメント ファイルへのパス。

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

Important

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

たとえば、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"

.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> アプリ アーカイブを生成するかどうかを示すブール値。 trueを使用して .ipa を生成します。
<CodesignKey> コード署名キーの名前。
<CodesignProvision> アプリ バンドルに署名するときに使用するプロビジョニング プロファイル。
<CodesignEntitlements> アプリに必要な権利を指定するエンタイトルメント ファイルへのパス。

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

Important

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

次の例は、プロビジョニング プロファイルを使用して 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 のビルド ツールにアクセスする必要があります。 このため、Visual Studio 2022 は、ネットワークにアクセスできる Mac に接続して.NET MAUI iOS アプリを構築する必要があります。 詳細については、「iOS開発のための Mac とのペアリング」をご確認ください。

Visual Studio 2022 から Pair to Mac を使用して Mac ビルド ホストに初めてログインすると、SSH キーを設定します。 これらのキーを使用すると、今後のログインにユーザー名やパスワードは必要ありません。

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

パラメーター 価値
-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/ を使用してください。

Important

これらのパラメーターの値は、ビルド プロパティとしてプロジェクト ファイルに指定することもできます。 ただし、通常、 <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/

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

コマンド ライン ビルド呼び出しから ServerPassword パラメーターを省略すると、Pair to Mac は、保存された SSH キーを使用して Mac ビルド ホストへのログインを試みます。

公開はアプリをビルドして署名し、.ipa を Windows マシンの bin\Release\net8.0-ios\ios-arm64\publish フォルダーにコピーします。 アプリの配布チャネルは、プロビジョニング プロファイルに含まれる配布証明書で指定されます。 さまざまな配布チャネルの配布プロビジョニング プロファイルの作成の詳細については、「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 ファイルは、次のいずれかの方法で配布できます。