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 dotnet publish
Befehl standardmäßig auf die ios-arm64
RuntimeIdentifier
festgelegt. 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:
- Das Zielframework wird auf etwas festgelegt, das den Text
-ios
enthält. - 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 dotnet publish
Befehl standardmäßig auf die ios-arm64
RuntimeIdentifier
festgelegt. 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:
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:
- Ad-hoc-Apps können mit Apple Configurator verteilt werden. Weitere Informationen finden Sie im Benutzerhandbuch zum Apple Configurator auf support.apple.com. |
- App Store-Apps können über eine App wie Transporter in den App Store hochgeladen werden. Dazu müssen Sie einen Datensatz für die App in App Store Connect anlegen und ein app-spezifisches Kennwort erstellen. Weitere Informationen finden Sie unter Einen App-Datensatz erstellen auf developer.apple.com und Anmelden bei Apps mit Ihrer Apple ID unter Verwendung app-spezifischer Passwörter auf support.apple.com.
- Interne Apps können über eine sichere Website oder über Mobile Device Management (MDM) verteilt werden. Bei beiden Ansätzen muss die App für die Verteilung vorbereitet werden, wozu auch die Erstellung eines Manifests gehört. Weitere Informationen finden Sie unter Verteilen von proprietären internen Apps auf Apple-Geräten auf support.apple.com.