Share via


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-arm64RuntimeIdentifier. 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 :

  1. L’infrastructure cible est définie sur un élément contenant le texte -ios.
  2. 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-arm64RuntimeIdentifier. 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é :

Autorisez codesign à signer votre application 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 :