Publier une application iOS en utilisant la ligne de commande
Pour publier votre application à partir de la ligne de commande sur un Mac, ouvrez un terminal et accédez au dossier de votre projet d’application .NET MAUI (Multi-platform App UI). Exécutez la commande dotnet publish
, en fournissant les paramètres suivants :
Paramètre | Valeur |
---|---|
-f ou --framework |
Infrastructure cible, c’est-à-dire net8.0-ios . |
-c ou --configuration |
Configuration de build, c’est-à-dire Release . |
Avertissement
La tentative de publication d’une solution .NET MAUI entraîne la commande dotnet publish
qui tente de publier chaque projet dans la solution individuellement, ce qui peut entraîner des problèmes lorsque vous avez ajouté d’autres types de projets à votre solution. Par conséquent, la commande dotnet publish
doit être étendue à votre projet d’application .NET MAUI.
Des paramètres de build supplémentaires peuvent être spécifiés sur la ligne de commande, s’ils ne sont pas fournis dans un <PropertyGroup>
dans votre fichier projet. Le tableau suivant répertorie certains paramètres courants :
Paramètre | Valeur |
---|---|
-p:ApplicationTitle |
Nom de l’application visible par l’utilisateur. |
-p:ApplicationId |
Identificateur unique de l’application, par exemple com.companyname.mymauiapp . |
-p:ApplicationVersion |
Version de la build qui identifie une itération de l’application. |
-p:ApplicationDisplayVersion |
Numéro de version de l’application. |
-p:RuntimeIdentifier |
Identificateur de runtime (RID) du projet. Utiliser ios-arm64 . |
-p:ArchiveOnBuild |
Valeur booléenne qui indique si l’archive d’application doit être générée. Utilisez true pour générer l’archive .ipa. |
-p:CodesignKey |
Nom de la clé de signature du code. |
-p:CodesignProvision |
Profil de provisionnement à utiliser lors de la signature de l’ensemble d’applications. |
-p:CodesignEntitlements |
Chemin d’accès au fichier des droits qui spécifie les droits dont a besoin l’application. |
Pour obtenir la liste complète des propriétés de build, consultez Project file properties.
Important
Les valeurs de ces paramètres ne doivent pas nécessairement être fournies sur la ligne de commande. Elles peuvent également être indiquées dans le fichier projet. Lorsqu’un paramètre est fourni sur la ligne de commande et dans le fichier projet, le paramètre de ligne de commande est prioritaire. Pour en savoir plus sur l’entrée des propriétés de build dans le fichier projet, consultez Définir les propriétés de build dans votre fichier projet.
Par exemple, utilisez la commande suivante pour générer et signer une archive .ipa sur un Mac :
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"
Remarque
Dans .NET 8, la commande dotnet publish
est par défaut dans la configuration Release
. Par conséquent, la configuration de build peut être omise à partir de la ligne de commande. Par ailleurs, la commande dotnet publish
est également définie par défaut sur ios-arm64
RuntimeIdentifier
. Par conséquent, le RuntimeIdentifier
peut aussi être omis dans la ligne de commande.
La publication a pour effet de générer et signer l’application, puis de copier l’archive .ipa dans le dossier bin/Release/net8.0-ios/ios-arm64/publish/. Le canal de distribution de l’application est spécifié dans le certificat de distribution contenu dans le profil de provisionnement. Pour plus d’informations sur la création de profils de provisionnement pour les différents canaux de distribution, consultez Publier une application iOS pour une distribution dans l’App Store, Publier une application iOS pour une distribution ad hoc et Publier une application iOS pour une distribution en interne.
Pour plus d’informations sur la commande dotnet publish
, consultez dotnet publish.
Définir les propriétés de build dans votre fichier projet
Une alternative à la spécification des paramètres de build sur la ligne de commande consiste à les spécifier dans votre fichier projet dans un <PropertyGroup>
. Le tableau suivant répertorie certaines propriétés courantes de build :
Propriété | Valeur |
---|---|
<ApplicationTitle> |
Nom de l’application visible par l’utilisateur. |
<ApplicationId> |
Identificateur unique de l’application, par exemple com.companyname.mymauiapp . |
<ApplicationVersion> |
Version de la build qui identifie une itération de l’application. |
<ApplicationDisplayVersion> |
Numéro de version de l’application. |
<RuntimeIdentifier> |
Identificateur de runtime (RID) du projet. Utiliser ios-arm64 . |
<ArchiveOnBuild> |
Valeur booléenne qui indique si l’archive d’application doit être générée. Utilisez true pour générer l’archive .ipa. |
<CodesignKey> |
Nom de la clé de signature du code. |
<CodesignProvision> |
Profil de provisionnement à utiliser lors de la signature de l’ensemble d’applications. |
<CodesignEntitlements> |
Chemin d’accès au fichier des droits qui spécifie les droits dont a besoin l’application. |
Pour obtenir la liste complète des propriétés de build, consultez Project file properties.
Important
Les valeurs de ces propriétés de build ne doivent pas nécessairement être fournies dans le fichier projet. Elles peuvent également être indiquées sur la ligne de commande lorsque vous publiez l’application. Vous pouvez ainsi omettre des valeurs spécifiques de votre fichier projet.
L’exemple suivant montre un groupe de propriétés type pour la génération et la signature de votre application iOS avec son profil de provisionnement :
<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
<CodesignKey>Apple Distribution: John Smith (AY2GDE9QM7)</CodesignKey>
<CodesignProvision>MyMauiApp</CodesignProvision>
<ArchiveOnBuild>true</ArchiveOnBuild>
</PropertyGroup>
Cet exemple de <PropertyGroup>
ajoute une vérification de conditions, qui empêche le traitement de ces paramètres sauf si la vérification de conditions est concluante. La vérification de conditions recherche deux éléments :
- L’infrastructure cible est définie sur un élément contenant le texte
-ios
. - La configuration de build est définie sur
Release
.
Si l’une de ces conditions n’est pas remplie, les paramètres ne sont pas traités. Plus important encore, les paramètres <CodesignKey>
et <CodesignProvision>
ne sont pas définis, ce qui empêche la signature de l’application.
Publier une application iOS à partir de Windows
Pour pouvoir créer des applications iOS natives à l’aide de .NET MAUI, il est nécessaire d’avoir accès aux outils de génération d’Apple, qui s’exécutent uniquement sur un Mac. Pour cette raison, Visual Studio 2022 doit se connecter à un Mac accessible au réseau pour générer des applications iOS .NET MAUI. Pour plus d’informations, consultez Appairer avec un Mac pour le développement iOS.
Remarque
Lors de sa première connexion à un hôte de build Mac depuis Visual Studio 2022, la fonctionnalité Pair to Mac configure des clés SSH. Avec ces clés, les connexions ultérieures ne nécessitent pas de nom d’utilisateur ni de mot de passe.
Pour publier votre application à partir de la ligne de commande sur Windows, ouvrez un terminal et accédez au dossier de votre projet d’application .NET MAUI. Exécutez la commande dotnet publish
en renseignant les mêmes paramètres de ligne de commande ou les mêmes propriétés de build du fichier projet que vous renseigneriez en publiant à partir d’un Mac. Par ailleurs, vous devez renseigner les paramètres de ligne de commande suivants :
Paramètre | Valeur |
---|---|
-p:ServerAddress |
L’adresse IP de votre hôte de build Mac. |
-p:ServerUser |
Le nom d’utilisateur à utiliser lorsque vous vous connectez à votre hôte de build Mac. Utilisez votre nom d’utilisateur système plutôt que votre nom complet. |
-p:ServerPassword |
Le mot de passe du nom d’utilisateur que vous employez pour vous connecter à votre hôte de build Mac. |
-p:TcpPort |
Le port TCP à utiliser pour communiquer avec votre hôte de build Mac, à savoir 58181. |
-p:_DotNetRootRemoteDirectory |
Le dossier sur votre hôte de build Mac qui contient le kit de développement logiciel (SDK) .NET. Utiliser /Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/ . |
Important
Les valeurs de ces paramètres peuvent aussi être fournies dans le fichier projet en tant que propriétés de build. Cependant, les valeurs de <ServerAddress>
, <ServerUser>
, <ServerPassword>
et <_DotNetRootRemoteDirectory>
sont généralement renseignées en ligne de commande pour des raisons de sécurité.
Par exemple, utilisez la commande suivante pour générer et signer une archive .ipa à partir de Windows :
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/
Remarque
Dans .NET 8, la commande dotnet publish
est par défaut dans la configuration Release
. Par conséquent, la configuration de build peut être omise à partir de la ligne de commande. Par ailleurs, la commande dotnet publish
est également définie par défaut sur ios-arm64
RuntimeIdentifier
. Par conséquent, le RuntimeIdentifier
peut aussi être omis dans la ligne de commande.
Remarque
Si le paramètre ServerPassword
est omis dans le cadre d’un appel de build de ligne de commande, la fonctionnalité Pair to Mac tente de se connecter à l’hôte de build Mac avec les clés SSH qu’elle a enregistrées.
La publication a pour effet de générer et signer l’application, puis de copier l’archive .ipa dans le dossier bin/Release/net8.0-ios/ios-arm64/publish/ de votre machine Windows. Le canal de distribution de l’application est spécifié dans le certificat de distribution contenu dans le profil de provisionnement. Pour plus d’informations sur la création de profils de provisionnement de distribution pour les différents canaux de distribution, consultez Publier une application iOS pour une distribution dans l’App Store, Publier une application iOS pour une distribution ad hoc et Publier une application iOS pour une distribution en interne.
Pendant le processus de publication, il peut s’avérer nécessaire d’autoriser l’exécution de codesign
sur votre Mac appairé :
Résoudre les problèmes liés à une génération à distance
Si aucun RuntimeIdentifier
n’est spécifié lors de la génération à distance depuis la ligne de commande de Windows, l’architecture de la machine Windows est utilisée. Cela s’explique par le fait que le RuntimeIdentifier
doit être défini au début du processus de génération, avant que la build puisse se connecter au Mac pour déduire son architecture.
Si aucun RuntimeIdentifier
n’est spécifié lors de la génération à distance via Visual Studio sur Windows, l’IDE détecte l’architecture du Mac distant et le définit en conséquence. La valeur par défaut peut être remplacée en définissant la propriété de build $(ForceSimulatorX64ArchitectureInIDE)
:
<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net8.0-ios'">
<ForceSimulatorX64ArchitectureInIDE>true</ForceSimulatorX64ArchitectureInIDE>
</PropertyGroup>
Distribuer l’application
Le fichier .ipa peut être distribué en suivant l’une des approches suivantes :
- Les applications ad hoc peuvent être distribuées en utilisant Apple Configurator. Pour plus d’informations, consultez le guide d’utilisation d’Apple Configurator sur support.apple.com. |
- Les applications App Store peuvent être chargées sur l’App Store par l’intermédiaire d’une application comme Transporter. Vous êtes alors amené à créer un enregistrement pour l’application dans App Store Connect et à créer un mot de passe propre à l’application. Pour plus d’informations, consultez Create an app record sur developer.apple.com et Se connecter à des applications avec votre identifiant Apple en utilisant des mots de passe pour application sur support.apple.com.
- Les applications internes peuvent être distribuées via un site web sécurisé ou par l’intermédiaire de la gestion des périphériques mobiles (GPM). Ces deux approches exigent que l’application soit préparée pour la distribution, ce qui englobe la préparation d’un manifeste. Pour plus d’informations, consultez Distribuer des applications internes propriétaires à des appareils Apple sur support.apple.com.