Distribution App Center – Mises à jour dans l’application iOS

Important

Visual Studio App Center doit être mis hors service le 31 mars 2025. Bien que vous puissiez continuer à utiliser Visual Studio App Center jusqu’à ce qu’il soit entièrement mis hors service, il existe plusieurs alternatives recommandées vers lesquelles vous pouvez envisager de migrer.

En savoir plus sur les chronologies et les alternatives de support.

App Center Distribute permet à vos utilisateurs d’installer une nouvelle version de l’application lorsque vous la distribuez via App Center. Une fois qu’une nouvelle version de l’application est disponible, le Kit de développement logiciel (SDK) présente une boîte de dialogue de mise à jour aux utilisateurs pour télécharger ou reporter la nouvelle version. Une fois qu’il choisit de mettre à jour, le KIT de développement logiciel (SDK) commence à mettre à jour votre application.

Notes

Il existe quelques éléments à prendre en compte lors de l’utilisation des mises à jour dans l’application :

  1. Si vous avez publié votre application dans le App Store, les mises à jour dans l’application sont désactivées.
  2. Si vous exécutez des tests d’interface utilisateur automatisés, les mises à jour dans l’application activées bloquent vos tests d’interface utilisateur automatisés, car ils essaieront de s’authentifier auprès du back-end App Center. Nous vous recommandons de ne pas activer App Center Distribute pour votre cible de test de l’interface utilisateur.

Notes

Dans la 4.0.0 version d’App Center, des changements cassants ont été introduits. Suivez la section Migrer vers app Center SDK 4.0.0 et versions ultérieures pour migrer App Center à partir des versions précédentes.

Important

Le Kit de développement logiciel (SDK) App Center ne prend pas en charge plusieurs applications de fenêtre introduites dans iOS 13.

Ajouter des mises à jour dans l’application à votre application

Suivez la section Prise en main si vous n’avez pas configuré le Kit de développement logiciel (SDK) dans votre application.

1. Ajouter le module Distribuer App Center

Le Kit de développement logiciel (SDK) App Center est conçu avec une approche modulaire : il vous suffit d’intégrer les modules des services qui vous intéressent.

Intégration via Cocoapods

Si vous intégrez App Center à votre application via Cocoapods, ajoutez la dépendance suivante à votre podfile et exécutez pod install.

pod 'AppCenter/Distribute'

Intégration via Carthage

  1. Ajoutez la dépendance suivante à votre Cartfile pour inclure App Center Distribute.

    # Use the following line to get the latest version of App Center
    github "microsoft/appcenter-sdk-apple"
    
    # Use the following line to get the specific version of App Center
    github "microsoft/appcenter-sdk-apple" ~> X.X.X
    
  2. Exécutez carthage update.

  3. Ouvrez l’onglet Paramètres généraux de votre cible d’application. Faites glisser et déposez le fichier AppCenterDistribute.framework du dossier Carthage/Build/iOS vers la section Infrastructures et bibliothèques liées dans XCode.

  4. Faites glisser appCenterDistributeResources.bundle à partir d’AppCenterDistribute.framework dans le Navigateur de projet de XCode.

  5. Une boîte de dialogue s’affiche, vérifiez que la cible de votre application est vérifiée. Puis, cliquez sur Terminer.

Intégration via Swift Package Manager

  1. Dans le menu Xcode, cliquez sur Fichier > Des packages > Swift Ajouter une dépendance de package.
  2. Dans la boîte de dialogue qui s’affiche, entrez l’URL du dépôt : https://github.com/microsoft/appcenter-sdk-apple.git.
  3. Dans Version, sélectionnez Jusqu’à La majeure suivante et utilisez l’option par défaut.
  4. Choisissez AppCenterDistribute dans la colonne Produit de package .

Intégration en copiant les fichiers binaires dans votre projet

Si vous ne souhaitez pas utiliser Cocoapods, vous pouvez intégrer les modules en copiant les fichiers binaires dans votre projet. Effectuez les étapes ci-dessous :

Notes

Le Kit de développement logiciel (SDK) App Center prend en charge l’utilisation de XCframework. Si vous souhaitez intégrer XCframeworks à votre projet, téléchargez le AppCenter-SDK-Apple-XCFramework.zip à partir de la page des versions et décompressez-le. Le contenu du dossier résultant n’est pas propre à la plateforme, mais il contient XCframeworks pour chaque module. Ils peuvent être intégrés de la même façon que les frameworks habituels, comme décrit ci-dessous.

  1. Téléchargez les frameworks du Kit de développement logiciel (SDK) App Center fournis sous forme de fichier zip.

  2. Décompressez le fichier et vous verrez un dossier appelé AppCenter-SDK-Apple/iOS qui contient des infrastructures différentes pour chaque service App Center. L’infrastructure appelée AppCenter est requise dans le projet, car elle contient du code partagé entre les différents modules.

  3. [Facultatif] Créez un sous-répertoire pour les bibliothèques tierces.

    • Comme bonne pratique, les bibliothèques tierces se trouvent généralement à l’intérieur d’un sous-répertoire, souvent appelé Fournisseur. Si votre projet n’est pas organisé avec un sous-répertoire pour les bibliothèques, créez un sous-répertoire Fournisseur maintenant.
    • Créez un groupe appelé Fournisseur à l’intérieur de votre projet Xcode pour imiter la structure de fichiers sur le disque.
  4. Ouvrez le Finder et copiez le dossier AppCenter-SDK-Apple/iOS décompressé dans le dossier de votre projet à l’emplacement où vous le souhaitez.

  5. Ajoutez l’infrastructure sdk au projet dans Xcode :

    • Vérifiez que le Navigateur de projet est visible (⌘+1).
    • À présent, faites glisser appCenter.framework, AppCenterDistribute.framework et AppCenterDistributeResources.bundle à partir du Finder (ceux qui se trouvent dans le dossier Fournisseur ) dans le Navigateur de projet de Xcode. AppCenter.framework est requis pour démarrer le KIT de développement logiciel (SDK). Vérifiez qu’il est ajouté à votre projet, sinon les autres modules ne fonctionneront pas et votre projet ne sera pas compilé correctement.
    • Une boîte de dialogue s’affiche, vérifiez que la cible de votre application est vérifiée. Puis, cliquez sur Terminer.

2. Démarrer App Center Distribution

App Center utilise uniquement les modules spécifiques que vous appelez dans votre application. Vous devez appeler explicitement chacun d’eux lors du démarrage du Kit de développement logiciel (SDK).

2.1 Ajouter l’importation pour App Center Distribute

Ouvrez le fichier AppDelegate.m du projet dans le fichier Objective-C ou AppDelegate.swift dans Swift et ajoutez les instructions d’importation suivantes :

@import AppCenter;
@import AppCenterDistribute;
import AppCenter
import AppCenterDistribute

2.2 Ajouter la start:withServices: méthode

Ajoutez Distribute à votre start:withServices: méthode pour démarrer le service App Center Distribute.

Insérez la ligne suivante pour démarrer le KIT de développement logiciel (SDK) dans la classe AppDelegate.m du projet pour Objective-C ou AppDelegate.swift pour Swift dans la didFinishLaunchingWithOptions méthode .

[MSACAppCenter start:@"{Your App Secret}" withServices:@[[MSACDistribute class]]];
AppCenter.start(withAppSecret: "{Your App Secret}", services: [Distribute.self])

Vérifiez que vous avez remplacé {Your App Secret} dans l’exemple de code ci-dessus par votre secret d’application. Vous case activée également la section Prise en main si vous n’avez pas configuré le KIT de développement logiciel (SDK) dans votre application.

2.3 Modifier la liste Info.plist du projet

  1. Dans le fichier Info.plist du projet, ajoutez une nouvelle clé pour URL types en cliquant sur le bouton « + » en regard de « Information Property List » en haut. Si Xcode affiche votre info.plist en tant que code source, reportez-vous à l’astuce ci-dessous.
  2. Remplacez le type de clé par Tableau.
  3. Ajoutez une nouvelle entrée au tableau (Item 0) et remplacez le type par Dictionnaire.
  4. Sous Item 0, ajoutez une URL Schemes clé et remplacez le type par Tableau.
  5. Sous votre URL Schemes clé, ajoutez une nouvelle entrée (Item 0).
  6. Sous URL Schemes>Item 0, remplacez la valeur appcenter-{APP_SECRET} par et remplacez par {APP_SECRET} le secret d’application de votre application.

Conseil

Si vous souhaitez vérifier que vous avez correctement modifié info.plist, ouvrez-le en tant que code source. Il doit contenir l’entrée suivante avec votre secret d’application au lieu de {APP_SECRET}:

<key>CFBundleURLTypes</key>
<array>
  <dict>
  	<key>CFBundleURLSchemes</key>
  	<array>
  		<string>appcenter-{APP_SECRET}</string>
  	</array>
  </dict>
</array>

Utiliser un groupe de distribution privé

Par défaut, Distribute utilise un groupe de distribution public. Si vous souhaitez utiliser un groupe de distribution privé, vous devez le définir explicitement via updateTrack la propriété.

MSACDistribute.updateTrack = MSACUpdateTrackPrivate;
Distribute.updateTrack = .private

Notes

La valeur par défaut est UpdateTrack.public. Cette propriété ne peut être mise à jour qu’avant l’appel de méthode AppCenter.start . Les modifications apportées à la piste de mise à jour ne sont pas conservées lorsque le processus d’application redémarre. Par conséquent, si la propriété n’est pas toujours mise à jour avant l’appel AppCenter.start , elle sera publique, par défaut.

Après cet appel, une fenêtre de navigateur s’ouvre pour authentifier l’utilisateur. Toutes les vérifications de mise à jour suivantes obtiennent la dernière version sur la voie privée.

Si un utilisateur est sur la piste privée, cela signifie qu’une fois l’authentification réussie, il obtient la dernière version de tous les groupes de distribution privés dont il est membre. Si un utilisateur est sur la voie publique, cela signifie qu’il obtiendra la dernière version de n’importe quel groupe de distribution public.

Désactiver la vérification automatique de la mise à jour

Par défaut, le Kit de développement logiciel (SDK) recherche automatiquement les nouvelles versions :

  • Au démarrage de l’application.
  • Lorsque l’application passe en arrière-plan, à nouveau au premier plan.
  • Lors de l’activation du module Distribuer s’il est précédemment désactivé.

Si vous souhaitez case activée pour les nouvelles versions manuellement, vous pouvez désactiver la case activée automatique pour la mise à jour. Pour ce faire, appelez la méthode suivante avant le démarrage du Kit de développement logiciel (SDK) :

[MSACDistribute disableAutomaticCheckForUpdate];
Distribute.disableAutomaticCheckForUpdate()

Notes

Cette méthode doit être appelée avant l’appel de la AppCenter.start méthode.

Vous pouvez ensuite utiliser l’API checkForUpdate décrite dans la section suivante.

Rechercher manuellement la mise à jour

[MSACDistribute checkForUpdate];
Distribute.checkForUpdate()

Cette opération envoie une demande à App Center et affiche une boîte de dialogue de mise à jour au cas où une nouvelle version est disponible.

Notes

Une case activée manuelle pour l’appel de mise à jour fonctionne même lorsque les mises à jour automatiques sont activées. Une case activée manuelle de mise à jour est ignorée si une autre case activée est déjà effectuée. La case activée manuelle pour la mise à jour ne sera pas traitée si l’utilisateur a reporté les mises à jour (sauf si la dernière version est une mise à jour obligatoire).

Personnaliser ou localiser la boîte de dialogue de mise à jour dans l’application

1. Personnaliser ou localiser du texte

Vous pouvez facilement fournir vos propres chaînes de ressources si vous souhaitez localiser le texte affiché dans la boîte de dialogue de mise à jour. Examinez ce fichier de chaînes. Utilisez le même nom/clé de chaîne et spécifiez la valeur localisée à refléter dans la boîte de dialogue dans vos propres fichiers de chaînes d’application.

2. Personnaliser la boîte de dialogue de mise à jour

Vous pouvez personnaliser l’apparence de la boîte de dialogue de mise à jour par défaut en implémentant le DistributeDelegate protocole. Vous devez inscrire le délégué avant de démarrer le Kit de développement logiciel (SDK) comme indiqué dans l’exemple suivant :

[MSACDistribute setDelegate:self];
Distribute.delegate = self;

Voici un exemple d’implémentation de délégué qui remplace la boîte de dialogue sdk par une boîte de dialogue personnalisée :

- (BOOL)distribute:(MSACDistribute *)distribute releaseAvailableWithDetails:(MSACReleaseDetails *)details {

  // Your code to present your UI to the user, e.g. an UIAlertController.
  UIAlertController *alertController = [UIAlertController
      alertControllerWithTitle:@"Update available."
                       message:@"Do you want to update?"
                preferredStyle:UIAlertControllerStyleAlert];

  [alertController
      addAction:[UIAlertAction actionWithTitle:@"Update"
                                         style:UIAlertActionStyleCancel
                                       handler:^(UIAlertAction *action) {
                                         [MSACDistribute notifyUpdateAction:MSACUpdateActionUpdate];
                                       }]];

  [alertController
      addAction:[UIAlertAction actionWithTitle:@"Postpone"
                                         style:UIAlertActionStyleDefault
                                       handler:^(UIAlertAction *action) {
                                         [MSACDistribute notifyUpdateAction:MSACUpdateActionPostpone];
                                       }]];

  // Show the alert controller.
  [self.window.rootViewController presentViewController:alertController animated:YES completion:nil];
  return YES;
}
func distribute(_ distribute: Distribute, releaseAvailableWith details: ReleaseDetails) -> Bool {

  // Your code to present your UI to the user, e.g. an UIAlertController.
  let alertController = UIAlertController(title: "Update available.",
                                        message: "Do you want to update?",
                                 preferredStyle:.alert)

  alertController.addAction(UIAlertAction(title: "Update", style: .cancel) {_ in
    Distribute.notify(.update)
  })

  alertController.addAction(UIAlertAction(title: "Postpone", style: .default) {_ in
    Distribute.notify(.postpone)
  })

  // Show the alert controller.
  self.window?.rootViewController?.present(alertController, animated: true)
  return true;
}

Si vous revenez YES/true dans la méthode ci-dessus, votre application doit obtenir le choix de l’utilisateur et envoyer un message au SDK avec le résultat à l’aide de l’API suivante.

// Depending on the user's choice, call notifyUpdateAction: with the right value.
[MSACDistribute notifyUpdateAction:MSACUpdateActionUpdate];
[MSACDistribute notifyUpdateAction:MSACUpdateActionPostpone];
// Depending on the user's choice, call notify() with the right value.
Distribute.notify(.update);
Distribute.notify(.postpone);

Si vous n’appelez pas la méthode ci-dessus, la releaseAvailableWithDetails:méthode -se répète chaque fois que votre application entre au premier plan.

3. Exécuter du code si aucune mise à jour n’est trouvée

Dans les cas où le Kit de développement logiciel (SDK) recherche des mises à jour et ne trouve aucune mise à jour disponible plus récente que celle actuellement utilisée, un distributeNoReleaseAvailable: rappel de délégué de MSACDistributeDelegate est appelé. Cela vous permet d’exécuter du code personnalisé dans de tels scénarios.

Voici des exemples qui montrent comment afficher l’interface utilisateur d’alerte quand aucune mise à jour n’est trouvée :

- (void)distributeNoReleaseAvailable:(MSACDistribute *)distribute {
  UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
                                                                 message:NSLocalizedString(@"No updates available", nil)
                                                          preferredStyle:UIAlertControllerStyleAlert];
  [alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil) style:UIAlertActionStyleDefault handler:nil]];
  [self.window.rootViewController presentViewController:alert animated:YES completion:nil];
}
  func distributeNoReleaseAvailable(_ distribute: Distribute) {
    let alert = UIAlertController(title: nil, message: "No updates available", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
    self.window?.rootViewController?.present(alert, animated: true)
  }

Activer ou désactiver App Center Distribute au moment de l’exécution

Vous pouvez activer et désactiver App Center Distribute au moment de l’exécution. Si vous le désactivez, le Kit de développement logiciel (SDK) ne fournit aucune fonctionnalité de mise à jour dans l’application, mais vous pouvez toujours utiliser distribuer le service dans le portail App Center.

[MSACDistribute setEnabled:NO];
Distribute.enabled = false

Pour réactiver App Center Distribute, utilisez la même API, mais passez YES/true en tant que paramètre.

[MSACDistribute setEnabled:YES];
Distribute.enabled = true

L’état est conservé dans le stockage de l’appareil au cours des lancements d’application.

Notes

Cette méthode ne doit être utilisée qu’après Distribute le démarrage.

Vérifier si App Center Distribute est activé

Vous pouvez également case activée si App Center Distribute est activé ou non :

BOOL enabled = [MSACDistribute isEnabled];
var enabled = Distribute.enabled

Notes

Cette méthode ne doit être utilisée qu’après Distribute le démarrage. Elle est toujours retournée false avant le démarrage.

Ne pas initialiser App Center Distribute pendant le développement

En mode privé, App Center Distribute ouvre son interface utilisateur/navigateur au démarrage de l’application. Bien qu’il s’agit d’un comportement attendu pour vos utilisateurs finaux, il peut être perturbant pour vous pendant la phase de développement de votre application. Nous vous déconseillons d’initialiser Distribute pour votre DEBUG configuration.

#if DEBUG
    [MSACAppCenter start:@"{Your App Secret}" withServices:@[[MSACAnalytics class], [MSACCrashes class]]];
#else
    [MSACAppCenter start:@"{Your App Secret}" withServices:@[[MSACAnalytics class], [MSACCrashes class], [MSACDistribute class]]];
#endif
#if DEBUG
    AppCenter.start(withAppSecret: "{Your App Secret}", services: [Analytics.self, Crashes.self])
#else
    AppCenter.start(withAppSecret: "{Your App Secret}", services: [Analytics.self, Crashes.self, Distribute.self])
#endif

Effectuer propre juste avant la fermeture de l’application pour la mise à jour

Implémentez le DistributeDelegate protocole et inscrivez le délégué comme indiqué dans l’exemple suivant :

[MSACDistribute setDelegate:self];
Distribute.delegate = self;

La distributeWillExitApp: méthode déléguée est appelée juste avant l’arrêt de l’application pour l’installation de la mise à jour :

- (void)distributeWillExitApp:(MSACDistribute *)distribute {
  // Perform the required clean up here.
}
func distributeWillExitApp(_ distribute: Distribute) {
  // Perform the required clean up here.
}

Comment fonctionnent les mises à jour dans l’application ?

Notes

Pour que les mises à jour dans l’application fonctionnent, une build d’application doit être téléchargée à partir du lien. Il ne fonctionne pas s’il est installé à partir d’un IDE ou manuellement.

La fonctionnalité de mises à jour dans l’application fonctionne comme suit :

  1. Cette fonctionnalité fonctionne uniquement avec les builds distribuées à l’aide du service App Center Distribute . Il ne fonctionne pas lorsque le débogueur est attaché ou si la fonctionnalité d’accès guidé iOS est activée.

  2. Une fois que vous avez intégré le SDK, généré une version de mise en production de votre application et l’avez chargée dans App Center, les utilisateurs de ce groupe de distribution sont avertis de la nouvelle version par e-mail.

  3. Lorsque chaque utilisateur ouvre le lien dans son e-mail, l’application est installée sur son appareil. Il est important qu’ils utilisent le lien e-mail pour installer l’application : App Center Distribute ne prend pas en charge les mises à jour dans l’application pour les applications qui ont été installées à partir d’autres sources (par exemple, en téléchargeant l’application à partir d’une pièce jointe). Lorsqu’une application est téléchargée à partir du lien, le Kit de développement logiciel (SDK) enregistre des informations importantes à partir des cookies pour case activée pour des mises à jour ultérieures. Sinon, le SDK ne dispose pas de ces informations clés.

  4. Si l’application définit la piste sur privée, un navigateur s’ouvre pour authentifier l’utilisateur et activer les mises à jour dans l’application. Le navigateur ne s’ouvre pas à nouveau tant que les informations d’authentification restent valides, même si vous revenez à la piste publique et que vous revenez au mode privé ultérieurement. Si l’authentification du navigateur réussit, l’utilisateur est redirigé automatiquement vers l’application. Si la piste est publique (qui est la valeur par défaut), l’étape suivante se produit directement.

    • Sur iOS 9 et 10, une instance de s’ouvre SFSafariViewController dans l’application pour authentifier l’utilisateur. Il se ferme automatiquement une fois l’authentification réussie.
    • Sur iOS 11, l’expérience utilisateur est similaire à iOS 9 et 10, mais iOS 11 demande à l’utilisateur l’autorisation d’accéder aux informations de connexion. Il s’agit d’une boîte de dialogue au niveau du système qui ne peut pas être personnalisée. Si l’utilisateur annule la boîte de dialogue, il peut continuer à utiliser la version qu’il teste, mais il n’obtient pas de mises à jour dans l’application. Ils seront invités à accéder à nouveau aux informations de connexion lorsqu’ils lanceront l’application la prochaine fois.
  5. Une nouvelle version de l’application affiche la boîte de dialogue de mise à jour dans l’application demandant aux utilisateurs de mettre à jour votre application s’il s’agit des éléments suivants :

    • une valeur plus élevée de CFBundleShortVersionString ou
    • une valeur égale de CFBundleShortVersionString mais une valeur supérieure de CFBundleVersion.
    • les versions sont les mêmes, mais l’identificateur unique de build est différent.

Conseil

Si vous chargez le même ipa une deuxième fois, la boîte de dialogue n’apparaît PAS , car les fichiers binaires sont identiques. Si vous chargez une nouvelle build avec les mêmes propriétés de version, la boîte de dialogue de mise à jour s’affiche. La raison en est que c’est un binaire différent .

Comment faire tester les mises à jour dans l’application ?

Vous devez charger les builds de mise en production (qui utilisent le module Distribuer du Kit de développement logiciel (SDK) App Center) sur le portail App Center pour tester les mises à jour dans l’application, en augmentant à chaque fois les numéros de version.

  1. Créez votre application dans le portail App Center si ce n’est déjà fait.
  2. Créez un groupe de distribution et nommez-le afin que vous puissiez reconnaître qu’il est destiné à tester la fonctionnalité de mise à jour dans l’application.
  3. Ajoutez vous-même (ou toutes les personnes que vous souhaitez inclure lors de votre test de la fonctionnalité de mise à jour dans l’application). Utilisez une nouvelle adresse e-mail ou une adresse e-mail qui n’a pas été utilisée pour cette application dans App Center. Cela garantit que votre expérience est proche de celle de vos testeurs réels.
  4. Créez une build de votre application qui inclut App Center Distribute et contient la logique d’installation, comme décrit ci-dessous. Si le groupe est privé, n’oubliez pas de définir la piste de mise à jour privée dans l’application avant de commencer à utiliser la propriété updateTrack.
  5. Cliquez sur le bouton Distribuer une nouvelle version dans le portail et chargez votre build de l’application.
  6. Une fois le chargement terminé, cliquez sur Suivant et sélectionnez le groupe de distribution que vous avez créé comme Destination de cette distribution d’application.
  7. Passez en revue la distribution et distribuez la build à votre groupe de test dans l’application.
  8. Personnes de ce groupe recevront une invitation à être testeurs de l’application. Une fois qu’ils ont accepté l’invitation, ils peuvent télécharger l’application à partir du portail App Center à partir de leur appareil mobile. Une fois les mises à jour dans l’application installées, vous êtes prêt à tester les mises à jour dans l’application.
  9. Placez le nom de version (CFBundleShortVersionString) de votre application.
  10. Générez la version release de votre application et chargez une nouvelle version de votre application comme vous l’avez fait à l’étape précédente et distribuez-la au groupe de distribution que vous avez créé précédemment. Les membres du groupe de distribution seront invités à entrer une nouvelle version lors du prochain démarrage de l’application.

Conseil

Consultez les informations sur l’utilisation d’App Center Distribute pour obtenir des informations plus détaillées sur les groupes de distribution , etc. Bien qu’il soit possible d’utiliser App Center Distribute pour distribuer une nouvelle version de votre application sans ajouter de code, l’ajout d’App Center Distribute au code de votre application entraînera une expérience plus transparente pour vos testeurs et utilisateurs à mesure qu’ils obtiennent l’expérience de mise à jour dans l’application.

Désactiver le transfert des appels de méthodes du délégué d’application vers les services App Center

Le Kit de développement logiciel (SDK) App Center utilise le swizzling pour améliorer son intégration en transférant lui-même certains des appels de méthodes du délégué d’application. Le swizzling de méthode est un moyen de modifier l’implémentation des méthodes au moment de l’exécution. Si, pour une raison quelconque, vous ne souhaitez pas utiliser le swizzling (par exemple, en raison d’une stratégie spécifique), vous pouvez désactiver ce transfert pour tous les services App Center en suivant les étapes ci-dessous :

  1. Ouvrez le fichier Info.plist du projet.
  2. Ajoutez AppCenterAppDelegateForwarderEnabled la clé et définissez la valeur sur 0. Cela désactive le transfert des délégués d’application pour tous les services App Center.
  3. Ajoutez le openURL rappel dans le fichier du AppDelegate projet.
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {

  // Pass the url to MSACDistribute.
  return [MSACDistribute openURL:url];
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {

  // Pass the URL to App Center Distribute.
  return Distribute.open(url)
}