Teilen über


Veröffentlichen einer iOS-App über die Befehlszeile

Um Ihre App über die Befehlszeile auf einem Mac zu veröffentlichen, öffnen Sie ein Terminal und navigieren Sie zum Ordner für Ihr .NET Multiplatform App UI (.NET MAUI) Appsprojekt. Führen Sie den Befehl dotnet publish mit den folgenden Parametern aus:

Parameter Wert
-f oder --framework Das Zielframework ist net8.0-ios.
-c oder --configuration Die Buildkonfiguration ist Release.

Warnung

Der Versuch, eine .NET MAUI-Lösung zu veröffentlichen, führt dazu, dass der Befehl dotnet publish versucht, jedes Projekt in der Lösung einzeln zu veröffentlichen, was zu Problemen führen kann, wenn Sie andere Projekttypen zu Ihrer Lösung hinzugefügt haben. Daher sollte der Befehl dotnet publish auf Ihr .NET MAUI-Appsprojekt beschränkt sein.

Zusätzliche Build-Parameter können auf der Kommandozeile angegeben werden, wenn sie nicht in einer <PropertyGroup> in Ihrer Projektdatei enthalten sind. In der folgenden Tabelle sind einige der üblichen Parameter aufgeführt:

Parameter Wert
-p:ApplicationTitle Der vom Benutzer sichtbare Name für die App.
-p:ApplicationId Der eindeutige Bezeichner für die App, wie etwa com.companyname.mymauiapp.
-p:ApplicationVersion Die Version des Builds, die eine Iteration der App identifiziert.
-p:ApplicationDisplayVersion Die Versionsnummer der API.
-p:RuntimeIdentifier Der Laufzeitbezeichner (RID) für das Projekt. Verwenden Sie ios-arm64.
-p:ArchiveOnBuild Ein boolescher Wert, der angibt, ob das App-Archiv erstellt werden soll. Verwenden Sie true, um die .ipa zu erzeugen.
-p:CodesignKey Der Name des Codesignierschlüssels.
-p:CodesignProvision Name des Bereitstellungsprofils, das beim Signaturen verwendet werden soll
-p:CodesignEntitlements Der Pfad zur Berechtigungsdatei, die die von der App benötigten Berechtigungen angibt.

Eine vollständige Liste der Build-Eigenschaften finden Sie unter Projektdateieigenschaften.

Wichtig

Die Werte für diese Parameter müssen nicht in der Befehlszeile angegeben werden. Sie können auch in der Projektdatei angegeben werden. Wenn ein Parameter in der Befehlszeile und in der Projektdatei angegeben ist, hat der Befehlszeilenparameter Vorrang. Weitere Informationen über die Bereitstellung von Build-Eigenschaften in Ihrer Projektdatei finden Sie unter Build-Eigenschaften in Ihrer Projektdatei definieren.

Verwenden Sie zum Beispiel den folgenden Befehl, um eine .ipa auf einem Mac zu erstellen und zu signieren:

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"

Hinweis

In .NET 8 wird für den Befehl dotnet publish standardmäßig die Konfiguration Release verwendet. Daher kann die Buildkonfiguration von der Befehlszeile weggelassen werden. Darüber hinaus wird der Befehl dotnet publish auch auf ios-arm64RuntimeIdentifier voreingestellt. Daher kann das RuntimeIdentifier in der Befehlszeile auch weggelassen werden.

Publishing erstellt und signiert die App und kopiert die .ipa in den Ordner bin/Release/net8.0-ios/ios-arm64/publish/. Der Verteilungskanal für die App wird im Verteilungszertifikat angegeben, das im Bereitstellungsprofil enthalten ist. Informationen zum Erstellen von Bereitstellungsprofilen für die verschiedenen Verteilungskanäle finden Sie unter Veröffentlichen einer iOS-App für die Verteilung im App Store, Veröffentlichen einer iOS-App für die Ad-hoc-Verteilung und Veröffentlichen einer iOS-App für die interne Verteilung.

Weitere Informationen über den Befehl dotnet publish finden Sie unter dotnet publish.

Definieren von Buildeigenschaften in der Projektdatei

Eine Alternative zur Angabe von Build-Parametern auf der Befehlszeile besteht darin, sie in Ihrer Projektdatei in einem <PropertyGroup> anzugeben. In der folgenden Tabelle sind einige der üblichen Build-Eigenschaften aufgeführt:

Eigenschaft Wert
<ApplicationTitle> Der vom Benutzer sichtbare Name für die App.
<ApplicationId> Der eindeutige Bezeichner für die App, wie etwa com.companyname.mymauiapp.
<ApplicationVersion> Die Version des Builds, die eine Iteration der App identifiziert.
<ApplicationDisplayVersion> Die Versionsnummer der API.
<RuntimeIdentifier> Der Laufzeitbezeichner (RID) für das Projekt. Verwenden Sie ios-arm64.
<ArchiveOnBuild> Ein boolescher Wert, der angibt, ob das App-Archiv erstellt werden soll. Verwenden Sie true, um die .ipa zu erzeugen.
<CodesignKey> Der Name des Codesignierschlüssels.
<CodesignProvision> Name des Bereitstellungsprofils, das beim Signaturen verwendet werden soll
<CodesignEntitlements> Der Pfad zur Berechtigungsdatei, die die von der App benötigten Berechtigungen angibt.

Eine vollständige Liste der Build-Eigenschaften finden Sie unter Projektdateieigenschaften.

Wichtig

Die Werte für diese Build-Eigenschaften müssen nicht in der Projektdatei angegeben werden. Sie können auch in der Befehlszeile angegeben werden, wenn Sie die App veröffentlichen. Auf diese Weise können Sie bestimmte Werte in Ihrer Projektdatei auslassen.

Das folgende Beispiel zeigt eine typische Eigenschaftsgruppe für das Erstellen und Signaturen Ihrer iOS-App mit ihrem Bereitstellungsprofil:

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

In diesem Beispiel <PropertyGroup> wird eine Bedingungsprüfung hinzugefügt, die verhindert, dass die Einstellungen verarbeitet werden, wenn die Bedingungsprüfung nicht bestanden wird. Bei der Konditionsprüfung werden zwei Punkte überprüft:

  1. Das Zielframework wird auf etwas festgelegt, das den Text -ios enthält.
  2. Die Build-Konfiguration ist auf Release eingestellt.

Wenn eine dieser Bedingungen nicht erfüllt ist, werden die Einstellungen nicht verarbeitet. Noch wichtiger ist, dass die Einstellungen <CodesignKey> und <CodesignProvision> nicht gesetzt sind, wodurch die App nicht signiert werden kann.

Veröffentlichen einer iOS-App von Windows aus

Die Erstellung nativer iOS-Apps mit .NET MAUI erfordert den Zugriff auf die Build-Tools von Apple, die nur auf einem Mac laufen. Aus diesem Grund muss Visual Studio 2022 eine Verbindung zu einem Mac mit Netzwerkzugriff herstellen, um .NET MAUI iOS-Apps zu erstellen. Weitere Informationen finden Sie unter Pair to Mac für die iOS-Entwicklung.

Hinweis

Wenn sich Pair to Mac zum ersten Mal von Visual Studio 2022 aus bei einem Mac-Build-Host anmeldet, werden SSH-Schlüssel eingerichtet. Durch die Verwendung dieser Schlüssel entfällt bei weiteren Anmeldungen die Angabe des Benutzernamens oder des Kennworts.

Um Ihre App über die Befehlszeile unter Windows zu veröffentlichen, öffnen Sie ein Terminal und navigieren Sie zu dem Ordner für Ihr .NET MAUI-Appsprojekt. Führen Sie den Befehl dotnet publish aus und geben Sie dabei die gleichen Befehlszeilenparameter oder Build-Eigenschaften in Ihrer Projektdatei an, die Sie auch beim Veröffentlichen von einem Mac aus angeben würden. Darüber hinaus müssen Sie die folgenden Befehlszeilenparameter angeben:

Parameter Wert
-p:ServerAddress Die IP-Adresse Ihres Mac-Build-Hosts.
-p:ServerUser Der Benutzername, mit dem Sie sich bei Ihrem Mac-Build-Host anmelden. Verwenden Sie Ihren Systembenutzernamen anstelle des vollständigen Namens.
-p:ServerPassword Das Kennwort für den Benutzernamen, mit dem Sie sich bei Ihrem Mac-Build-Host anmelden.
-p:TcpPort Der TCP-Port, der für die Kommunikation mit Ihrem Mac-Build-Host verwendet wird, ist 58181.
-p:_DotNetRootRemoteDirectory Der Ordner auf Ihrem Mac-Build-Host, der das .NET SDK enthält. Verwenden Sie /Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/.

Wichtig

Die Werte für diese Parameter können auch in der Projektdatei als Build-Eigenschaften angegeben werden. Die Werte für <ServerAddress>, <ServerUser>, <ServerPassword> und <_DotNetRootRemoteDirectory> werden jedoch aus Sicherheitsgründen in der Regel in der Befehlszeile angegeben.

Verwenden Sie zum Beispiel den folgenden Befehl, um eine .ipa von Windows aus zu erstellen und zu signieren:

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/

Hinweis

In .NET 8 wird für den Befehl dotnet publish standardmäßig die Konfiguration Release verwendet. Daher kann die Buildkonfiguration von der Befehlszeile weggelassen werden. Darüber hinaus wird der Befehl dotnet publish auch auf ios-arm64RuntimeIdentifier voreingestellt. Daher kann das RuntimeIdentifier in der Befehlszeile auch weggelassen werden.

Hinweis

Wenn der Parameter ServerPassword in einem Befehlszeilenaufruf für die Erstellung weggelassen wird, versucht Mit Mac koppeln, sich mit seinen gespeicherten SSH-Schlüsseln beim Mac-Build-Host anzumelden.

Beim Veröffentlichen wird die App erstellt und signiert und dann die .ipa in den Ordner bin\Release\net8.0-ios\ios-arm64\publish auf Ihrem Windows-Rechner kopiert. Der Verteilungskanal für die App wird im Verteilungszertifikat angegeben, das im Bereitstellungsprofil enthalten ist. Informationen zum Erstellen von Bereitstellungsprofilen für die verschiedenen Verteilungskanäle finden Sie unter Veröffentlichen einer iOS-App für die Verteilung im App Store, Veröffentlichen einer iOS-App für die Ad-hoc-Verteilung und Veröffentlichen einer iOS-App für die interne Verteilung.

Während des Veröffentlichungsprozesses kann es notwendig sein, codesign auf Ihrem gekoppelten Mac laufen zu lassen:

Erlauben Sie Codesign, Ihre App auf Ihrem gekoppelten Mac zu signieren.

Fehlerbehebung bei einem Remote-Build

Wenn bei der Remote-Erstellung über die Befehlszeile unter Windows kein RuntimeIdentifier angegeben wird, wird die Architektur des Windows-Rechners verwendet. Dies ist darauf zurückzuführen, dass RuntimeIdentifier zu Beginn des Build-Prozesses gesetzt werden muss, bevor der Build eine Verbindung zum Mac herstellen kann, um seine Architektur abzuleiten.

Wenn bei der Remote-Erstellung mit Visual Studio unter Windows kein RuntimeIdentifier angegeben wird, erkennt die IDE die Architektur des entfernten Macs und setzt es entsprechend. Die Standardeinstellung kann durch Setzen der $(ForceSimulatorX64ArchitectureInIDE) build-Eigenschaft außer Kraft gesetzt werden:

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

Die App verteilen

Die .ipa-Datei kann auf eine der folgenden Arten verteilt werden: