Info.plist est un fichier de configuration XML pour les applications iOS et macOS contenant des métadonnées, des autorisations et des paramètres de démarrage. Il est traité par le système avant l’initialisation du code de l’application. Selon Apple Developer, 2025, sans un Info.plist correctement configuré, l’application ne passe pas la revue de l’App Store. Info.plist définit l’identifiant du bundle, la version de build, les autorisations demandées et les orientations d’écran prises en charge.
Points clés
Info.plist est un fichier au format XML dont l’élément racine est dict, contenant des paires clé-valeur sous forme de property list. Il se trouve à l’intérieur du bundle de l’application et est lu par le système à chaque démarrage avant l’exécution du code. Le format plist prend en charge les chaînes, les nombres, les tableaux, les dictionnaires, les dates et les valeurs booléennes, ce qui permet de décrire des configurations complexes.
Apple utilise Info.plist pour définir l’identité, les capacités et les exigences de l’application. La modification de certaines clés nécessite la reconstruction du bundle, car elles affectent les métadonnées vérifiées par l’App Store lors du téléchargement d’un build. Par exemple, modifier CFBundleVersion ou CFBundleIdentifier après la publication peut interrompre le processus de mise à jour de l’application, car App Store Connect utilise ces valeurs pour identifier les versions.
Les clés de base sont créées automatiquement lors de la création d’un projet dans Xcode, mais la plupart des paramètres sont ajoutés manuellement au fur et à mesure que les fonctionnalités de l’application évoluent. Xcode fournit un éditeur graphique d’Info.plist avec des listes déroulantes pour les clés standard, ce qui réduit le risque de fautes de frappe. Cependant, pour les configurations complexes comme Scene Manifest ou Background Modes, il est recommandé de modifier directement le XML brut.
Certaines clés Info.plist sont obligatoires pour publier sur l’App Store. Leur absence entraîne le rejet du build lors de la phase de validation. Apple vérifie automatiquement ces clés lors du téléchargement d’une archive via Xcode Organizer ou Transporter. Le développeur doit s’assurer que tous les champs obligatoires sont correctement remplis avant de soumettre à la revue.
La clé CFBundleIdentifier définit un identifiant unique d’application en notation de domaine inversé (com.company.appname). Elle est utilisée pour la signature de code, les notifications push, CloudKit, App Groups et de nombreux autres services Apple. Modifier l’identifiant après la publication est considéré par l’App Store comme une nouvelle application, et les utilisateurs existants ne recevront pas la mise à jour. Par conséquent, l’identifiant doit rester inchangé pendant tout le cycle de vie de l’application.
<key>CFBundleIdentifier</key>
<string>com.itsectr.myapp</string>
Les clés CFBundleShortVersionString (version affichée) et CFBundleVersion (numéro de build) sont utilisées par App Store Connect et le système pour gérer les mises à jour. La version est spécifiée au format major.minor.patch. Le numéro de build doit être incrémenté à chaque build téléchargé sur App Store Connect, même si la version de l’application ne change pas. Apple utilise CFBundleVersion pour déterminer si un build est nouveau ou duplique un build déjà téléchargé. Si le numéro de build correspond à un build déjà téléchargé, l’erreur ITMS-90161 est renvoyée.
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>42</string>
Les clés UISupportedInterfaceOrientations définissent les orientations d’écran prises en charge pour l’iPhone. Pour l’iPad, une clé séparée UISupportedInterfaceOrientations~ipad avec le suffixe de l’appareil est utilisée. Chaque orientation est spécifiée sous forme de chaîne : UIInterfaceOrientationPortrait, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight, UIInterfaceOrientationPortraitUpsideDown. Si une application ne prend en charge que l’orientation portrait et n’est pas exclusivement pour iPhone, l’App Store rejettera le build si seul le portrait est spécifié pour l’iPad.
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
</array>
Depuis iOS 10, Apple exige une description pour chaque autorisation demandée via des clés avec le préfixe NS (NeXTStep). La description est affichée à l’utilisateur dans une boîte de dialogue système lors de la première demande d’accès aux API privées. L’absence de la clé NS correspondante lors de l’appel d’une API nécessitant une autorisation entraîne un arrêt immédiat de l’application avec une exception enregistrée uniquement dans les journaux de crash.
| Clé | Objet |
|---|---|
| NSCameraUsageDescription | Accès à la caméra pour les photos et vidéos |
| NSPhotoLibraryUsageDescription | Accès à la photothèque |
| NSLocationWhenInUseUsageDescription | Géolocalisation pendant l’utilisation |
| NSMicrophoneUsageDescription | Accès au microphone pour l’enregistrement audio |
| NSContactsUsageDescription | Accès aux contacts de l’appareil |
Chaque clé de confidentialité doit contenir une description compréhensible par l’utilisateur de la raison de la demande. Les textes vides ou génériques, comme « Pour le fonctionnement de l’application » ou « Accès nécessaire », entraînent le rejet de l’App Store. La description doit expliquer la fonctionnalité spécifique : « L’accès à la caméra est nécessaire pour scanner les codes QR et créer des photos de profil. » Il est recommandé d’utiliser des versions localisées des descriptions via des fichiers InfoPlist.strings pour chaque langue prise en charge.
L’absence de la clé NS requise lors de l’appel d’une API qui accède à des données privées provoque un plantage de l’application. Le système termine le processus avec une exception, visible uniquement dans les journaux de rapports de crash de Xcode ou Firebase Crashlytics. L’utilisateur ne voit qu’une fermeture soudaine de l’application sans aucune explication. Par conséquent, avant d’ajouter une nouvelle fonctionnalité utilisant la caméra, le microphone ou la géolocalisation, vous devez d’abord ajouter la clé de confidentialité correspondante dans Info.plist, puis implémenter l’appel API.
La clé CFBundleURLTypes enregistre des schémas d’URL personnalisés pour les liens profonds dans l’application. Cela permet d’ouvrir l’application depuis le navigateur, un e-mail ou d’autres applications via des liens comme myapp://profile/123. Chaque schéma identifie l’application de manière unique : si deux applications enregistrent le même schéma, le système affiche une boîte de dialogue permettant à l’utilisateur de choisir laquelle utiliser.
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.itsectr.myapp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
Pour prendre en charge les Universal Links, la clé com.apple.developer.associated-domains est requise dans le fichier Entitlements, et non dans Info.plist. Les Universal Links fonctionnent uniquement si un fichier apple-app-site-association configuré existe sur le serveur, liant le domaine à l’application. Contrairement aux schémas d’URL personnalisés, les Universal Links n’affichent pas de boîte de dialogue de confirmation et n’entrent pas en conflit avec d’autres applications, car ils utilisent des liens HTTPS au lieu de schémas personnalisés. Cependant, ils nécessitent un domaine avec un certificat SSL valide.
Les schémas personnalisés peuvent entrer en conflit avec les schémas standard d’iOS. Il est recommandé d’utiliser des schémas d’au moins 4 caractères pour minimiser les collisions avec d’autres applications. Par exemple, le schéma « fb » est trop court et peut provoquer des conflits. Il est préférable d’utiliser la notation inversée : myapp:// au lieu de app://. N’oubliez pas non plus que si l’application est supprimée mais qu’une autre application a enregistré le même schéma, l’utilisateur peut rencontrer un comportement inattendu en naviguant via un lien.
La clé UIBackgroundModes déclare les capacités d’arrière-plan de l’application. Chaque mode nécessite une description correspondante dans Info.plist et une confirmation dans les capacités du projet Xcode. Sans spécification de mode, le système peut mettre fin de force à la tâche d’arrière-plan après 30 secondes ou en cas de manque de ressources.
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
<string>location</string>
<string>processing</string>
</array>
La clé UIApplicationSupportsMultipleScenes active la prise en charge du multitâche sur iPad et Mac Catalyst. Sans cette clé, l’application ne peut pas utiliser SwiftUI ScenePhase ou UIKit UISceneDelegate pour gérer plusieurs fenêtres. Sur iPadOS, les utilisateurs peuvent ouvrir plusieurs fenêtres de la même application, faire glisser du contenu entre elles et utiliser Split View. Si l’application ne prend pas en charge le mode multi-fenêtres, définir cette clé sur false désactive la fonctionnalité correspondante.
La clé LSRequiresIPhoneOS empêche l’installation de l’application sur iPad. Elle est utilisée pour les applications exclusivement iPhone qui ne prennent pas en charge l’interface iPad ou n’ont pas été adaptées à un grand écran. Cependant, Apple ne recommande pas d’utiliser cette clé inutilement, car les utilisateurs s’attendent à ce que les applications fonctionnent sur tous les appareils exécutant iOS et iPadOS. Si l’application est toujours limitée à l’iPhone, assurez-vous que cette exigence est techniquement justifiée et indiquée dans la description de l’App Store.
La clé UIViewControllerBasedStatusBarAppearance contrôle le style de la barre d’état. Si elle est définie sur NO, le style de la barre d’état est défini globalement via la clé Info.plist UIStatusBarStyle. Si YES (valeur par défaut depuis iOS 7), chaque ViewController peut gérer sa propre barre d’état en redéfinissant preferredStatusBarStyle. Pour les applications modernes, il est recommandé de conserver YES pour avoir différents styles de barre d’état sur différents écrans, par exemple clair sur fond sombre et sombre sur fond clair.
La clé UIApplicationExitsOnSuspend force l’application à se terminer complètement lorsqu’elle passe en arrière-plan au lieu de se suspendre. Elle est rarement utilisée, uniquement pour les applications ayant des exigences de sécurité élevées : applications bancaires ou applications traitant des données confidentielles. Dans ce cas, l’utilisateur perd la possibilité de revenir rapidement à l’application, et chaque démarrage se fait à partir d’un état propre. L’App Store peut demander une justification pour l’utilisation de cette clé lors de la revue.
La clé NSAppTransportSecurity gère les connexions réseau de l’application. Depuis iOS 9, App Transport Security (ATS) bloque toutes les connexions HTTP par défaut, exigeant HTTPS. Pour autoriser temporairement les requêtes HTTP vers des domaines spécifiques, le dictionnaire NSExceptionDomains dans NSAppTransportSecurity est utilisé. Pour le développement, la désactivation complète d’ATS via NSAllowsArbitraryLoads = true est autorisée, mais Apple exige une justification et n’autorise pas ces builds sans raison valable. Dans les builds de production, ATS doit être activé pour tous les domaines traitant des données utilisateur.
Questions fréquemment posées
Le fichier Info.plist se trouve dans le dossier du projet avec un nom correspondant au nom de l’application. Dans Xcode, il apparaît dans le navigateur de projet au sein du groupe Supporting Files avec une icône de livre bleu. On peut également le trouver via la recherche Spotlight dans le projet.
Oui, Info.plist peut être modifié dans n’importe quel éditeur de texte ou via l’interface graphique de Xcode. La modification manuelle offre un contrôle total sur le contenu mais nécessite une attention particulière à la syntaxe XML : chaque directive d’ouverture <key> doit avoir une </key> correspondante, et les types de données doivent correspondre à ce qu’Apple attend.
Dans les projets SwiftUI, Info.plist fonctionne à l’identique des projets UIKit. De plus, la clé UIApplicationSceneManifest peut être nécessaire pour la configuration des scènes si le projet n’utilise pas le protocole App pour la gestion des scènes. Le protocole App de SwiftUI génère automatiquement la configuration des scènes, mais la personnalisation nécessite l’ajout manuel de clés.
Ouvrez Info.plist dans Xcode, cliquez sur le bouton plus et saisissez le nom de la clé. Pour les clés personnalisées, utilisez un préfixe d’entreprise pour éviter les conflits avec les clés système d’Apple, par exemple ITSCustomKey au lieu de simplement CustomKey. Le type de valeur (String, Number, Array, Dictionary) est choisi en fonction du format de données attendu.
Raisons typiques : absence de clés de confidentialité pour les autorisations demandées, CFBundleIdentifier incorrect, décalage de version entre Info.plist et App Store Connect, valeurs vides dans les clés NS. Vérifiez toutes les clés NS pour les API utilisées et assurez-vous que chaque description contient une explication pertinente dans la langue de localisation de l’application.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi