コマンド ラインを使用して 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-arm64
RuntimeIdentifier
になります。 そのため、RuntimeIdentifier
はコマンド ラインから省略することもできます。
発行では、アプリをビルドして署名した後、.ipa を bin/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 つの項目を検索します。
- ターゲット フレームワークは、テキスト
-ios
を含むものに設定されています。 - ビルド構成は
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-arm64
RuntimeIdentifier
になります。 そのため、RuntimeIdentifier
はコマンド ラインから省略することもできます。
Note
コマンド ラインでのビルドの呼び出しで ServerPassword
パラメーターを省略すると、[Mac とペアリング] は、保存されている SSH キーを使って Mac ビルド ホストへのログインを試みます。
発行では、アプリをビルドして署名し、Windows コンピューターの bin\Release\net8.0-ios\ios-arm64\publish フォルダーに .ipa をコピーします。 アプリの配布チャネルは、プロビジョニング プロファイルに含まれる配布証明書で指定されます。 さまざまな配布チャネルの配布プロビジョニング プロファイルの作成の詳細については、「App Store 配布用の iOS アプリを発行する」、「アドホック配布用の iOS アプリを発行する」、「社内配布用の iOS アプリを公開する」をご覧ください。
公開プロセス中に、ペアになっている 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 ファイルは、次のいずれかの方法で配布できます。
- アドホック アプリは、Apple Configurator を使用して配布できます。 詳細については、support.apple.com の『Apple Configurator ユーザーガイド』をご覧ください。 |
- App Store アプリは、Transporter などのアプリを使用して App Store にアップロードできます。 そのためには、App Store Connect でアプリのレコードを作成し、アプリ固有のパスワードを作成する必要があります。 詳細については、developer.apple.com の「アプリ レコードの作成」と support.apple.com の「アプリ固有のパスワードを使用して Apple ID でアプリにサインインする」をご覧ください。
- 社内アプリは、セキュリティで保護された Web サイトまたはモバイル デバイス管理 (MDM) 経由で配布できます。 どちらの方法でも、マニフェストの準備を含めて、配布用にアプリを準備する必要があります。 詳細については、support.apple.com の「Apple デバイスに独自の社内アプリを配布する」をご覧ください。
.NET MAUI