Modifier le fichier appinfo

Le fichier de configuration appinfo.json contient des informations définissant le fonctionnement de votre application ; ces informations sont stockées en tant que paires valeur-clé. De nombreuses propriétés définies dans ce fichier sont configurées dans AppStudio, dans Settings (Paramètres) ; néanmoins, il est nécessaire dans certains cas d’ajouter manuellement des éléments au fichier.

Par défaut, certaines catégories répertoriées ci-dessous ne figurent pas dans le fichier de configuration appinfo.json. En revanche, d’autres apparaissent dans le fichier de configuration, avec des propriétés qui sont gérées dans Settings (Paramètres). Les propriétés répertoriées dans cette rubrique s’ajoutent à celles qui sont configurées dans Settings (Paramètres).

Le fichier appinfo.json figure dans le dossier principal de votre application. Pour y accéder, cliquez sur le bouton Files (Fichiers) de votre application dans ArcGIS AppStudio.

Fonctionnalités

La catégorie capabilities existe déjà dans le fichier de configuration appinfo.json et peut être remplie avec des options sélectionnées dans la section Capabilities (Fonctionnalités) de l’outil Settings (Paramètres). Vous pouvez aussi ajouter manuellement l’une ou plusieurs des propriétés ci-dessous.

  • backup : lorsqu’elle est définie sur false, aucune sauvegarde ou restauration de l’application n’est réalisée sur Android et l’application est exclue des sauvegardes de l’ensemble du système. Si rien n’est spécifié, la valeur par défaut est False (Faux).
  • ios.appTransportSecurity.allowArbitraryLoads : si elle est définie sur false, des restrictions liées à la sécurité du transport s’appliquent aux connexions réseau. Si rien n’est spécifié, la valeur par défaut est False (Faux).
  • interAppFileSharing : lorsqu’elle est définie sur true, les fichiers de votre application sont accessibles à l’aide de l’application Fichiers sur iOS. Si rien n’est spécifié, la valeur par défaut est False (Faux).
  • mediaLocation  : lorsqu’elle est définie sur true, votre application peut extraire des métadonnées Exif non censurées des photos. Si rien n’est spécifié, la valeur par défaut est False (Faux).
  • indoorLocation : lorsqu’elle est définie sur true, toutes les fonctionnalités Bluetooth pour le positionnement en intérieur sont activées. Si rien n’est spécifié, la valeur par défaut est False (Faux).

Dans l’exemple ci-après, aucune restriction liée à la sécurité du transport n’est appliquée.

"capabilities": {
    "ios": {
        "appTransportSecurity": {
             "allowArbitraryLoads": true
    }
},

Déploiement

La catégorie deployment existe déjà dans le fichier de configuration appinfo.json et peut être remplie avec des options sélectionnées dans les sections Platforms (Plateformes) et Advanced (Avancés) sous Settings (Paramètres). Vous pouvez aussi ajouter manuellement l’une ou plusieurs des propriétés ci-dessous.

  • android.trustUserCertificates : si vous affectez la valeur true à cette propriété, votre application acceptera toutes les autorités de certification. Par défaut, la valeur est false et les applications AppStudio ne reconnaissent pas les autorités de certification ajoutées par les utilisateurs pour les connexions sécurisées sur Android.
  • android.minimumSdkVersion : cette propriété définit le niveau d’API minimal requis pour que l’application s’exécute. Si rien n’est spécifié, la valeur par défaut d’une application AppStudio est 23.
  • android.targetSdkVersion : cette propriété définit le niveau d’API voulu pour l’application. Elle affecte également la manière dont l’utilisateur doit accorder des autorisations sur l’application. Si l’appareil exécute Android 6.0 ou une version ultérieure et que le SDK cible de votre application est de 23 ou d’une valeur supérieure, l’utilisateur doit demander chaque autorisation dont il a besoin pendant l’exécution de l’application. Si rien n’est spécifié, la valeur par défaut d’une application AppStudio est 31 pour la construction en local et 33 pour la construction sur le cloud. Pour plus d’informations, reportez-vous à l’aide de Google Play Console.
    Remarque :

    Les utilisateurs de la construction en local doivent attribuer la valeur 33 à deployment.android.targetSdkVersion dans le fichier appinfo.json de leur application de manière à satisfaire aux exigences indiquées dans https://developer.android.com/google/play/requirements/target-sdk.

  • android.enableGooglePlayServicesSecurityProvider : cette propriété indique si votre application fait appel au fournisseur de sécurité Google Play afin de s’assurer que l’application fonctionne sur un appareil bénéficiant des dernières mises à jour en matière de protection contre les failles connues. Si rien n’est spécifié, la valeur par défaut d’une application AppStudio est False (Faux).
  • ios.minimumVersion : cette propriété définit la version minimale du système d’exploitation sur lequel votre logiciel peut s’exécuter. Si rien n’est spécifié, la valeur par défaut d’une application AppStudio est 13.0.
  • desktop.allowOverwrite : lorsque cette propriété est définie sur true, l’application peut être installée sous Windows sans qu’il soit nécessaire de désinstaller une version précédente de l’application. Si aucune valeur n’est spécifiée, la valeur par défaut est false.

Dans l’exemple ci-après, toutes les autorités de certification sont acceptées sur Android, et les versions minimales des systèmes d’exploitation sur lesquels l’application peut être installée pour Android et iOS sont les versions 6.0 et 13.0 respectivement.

"deployment": {
    "android": {
        "trustUserCertificates": true,
        "minimumSdkVersion": 23,
        "targetSdkVersion": 31
    },
    "ios": {
        "minimumVersion": "13.0"
    }
},

Affichage

La catégorie display existe déjà dans le fichier de configuration appinfo.json et peut être remplie avec des options sélectionnées dans la section Display (Affichage) sous Settings (Paramètres). Vous pouvez aussi ajouter manuellement l’une ou plusieurs des propriétés ci-dessous.

  • enableHighDpi : cette propriété détermine si l’application s’ouvre en mode haute résolution sur les appareils sur lesquels ce mode est pris en charge. Si rien n’est spécifié, la valeur par défaut est False (Faux).
  • statusBar : cette propriété indique si la barre d’état s’affiche lorsque vous utilisez l’application sur des appareils iOS et Android. Elle ne doit pas être confondue avec la propriété usesStatusBar, définie dans les options Status Bar (Barre d’état) dans l’onglet Settings (Paramètres) > Devices (Appareils) de votre application, qui indique si la barre d’état apparaît sur les téléphones ou les tablettes. Si rien n’est spécifié, la valeur par défaut est False (Faux).
  • ios.windowMode : cette propriété définit la manière dont l’application interagit avec la fonction multitâche de l’iPad, qui permet d’utiliser l’application en même temps que d’autres applications sur un même écran. Par défaut, cette propriété est activée si le mode portrait ou paysage est désactivé dans les options de la tablette sur l’onglet Settings (Paramètres) > Devices (Appareils) de votre application. Pour désactiver ios.windowMode, ce qui permet d’exécuter votre application uniquement sur l’écran complet de l’iPad, définissez-la sur fullscreen.

Dans l’exemple ci-après, la haute résolution est activée, la barre d’état est activée sur tous les appareils iOS, et l’application ne s’exécutera qu’en mode plein écran sur un iPad.

"display": {
    "enableHighDpi": true,
    "statusBar": true,
    "ios": {
       "windowMode": "fullscreen"
    }
},

Générer

La catégorie make n’existe pas au préalable dans le fichier de configuration appinfo.json. Vous pouvez ajouter manuellement l’une ou plusieurs des propriétés ci-dessous.

  • ignore : cette propriété permet de définir une liste de modèles de nom de fichier à exclure des ressources d’une application lorsque celle-ci est générée. Vous pouvez ainsi conserver dans l’élément d’application des fichiers utiles pendant le développement et les tests, mais inutiles lors de la génération de l’application.
  • ios.enableBitcode : cette propriété indique si l’application prend en charge la technologie Bitcode. Apple optimise le binaire de l’application pour des appareils spécifiques sans qu’il soit nécessaire de le mettre à jour ou de le soumettre une nouvelle fois. La technologie Bitcode s’applique uniquement aux applications iOS et est activée par défaut pour les versions Apple App Store.

Gestion

La catégorie management n’existe pas au préalable dans le fichier de configuration appinfo.json. Vous pouvez ajouter manuellement l’une ou plusieurs des propriétés ci-dessous.

  • configurationSchema : cette propriété permet d’accepter un nom ou un chemin de fichier .xml contenant les paramètres de configuration par défaut de l’application utilisés lors du déploiement de l’application avec le logiciel Enterprise Mobile Management (EMM). Pour savoir comment mettre en forme ce fichier .xml, consultez la rubrique de référence des développeurs Android intitulée Set up managed configurations.
  • android.restrictionFile : cette propriété permet d’accepter un nom ou un chemin de fichier .xml utilisé pour imposer des restrictions aux appareils Android. Cette propriété est requise pour utiliser la configuration de l’application lors du déploiement de votre application avec le logiciel EMM. Pour savoir comment mettre en forme ce fichier .xml, consultez la rubrique de référence des développeurs Android intitulée RestrictionsManager.
  • windows.applicationName : il s’agit du nom de l’application nécessitant les propriétés de configuration de l’application, si l’application requiert une configuration d’entreprise.
  • windows.keyRoot : racine de la clé de registre sous laquelle rechercher ces propriétés de configuration de l’application. Si elle n’est pas spécifiée, la propriété prend la valeur par défaut HKEY_CURRENT_USER.
  • windows.vendorName : il s’agit du nom de l’éditeur de logiciels responsable de l’application. Dans le cas des applications Esri, la valeur est ESRI.

Dans l’exemple ci-après, les fichiers de configuration et les paramètres utilisés lors du déploiement de l’application avec le logiciel EMM sont répertoriés.

"management": {
     "android": {
         "restrictionFile": "AppConfig_Android.xml"
     },
     "configurationSchema": "AppConfig.xml",
     "windows": {
         "applicationName": "MyApp",
         "keyRoot": "HKEY_CURRENT_USER",
         "vendorName": "MyName"
     }
},

Ressources

La catégorie deployment existe déjà dans le fichier de configuration appinfo.json et peut être remplie avec des options sélectionnées dans les sections Resources (Ressouces) sous Settings (Paramètres). Vous pouvez aussi ajouter manuellement l’une ou plusieurs des propriétés ci-dessous.

  • appIconBackgroundColor : cette propriété permet d’accepter une valeur de couleur hexadécimale et de définir la couleur de remplissage de l’arrière-plan pour les plateformes imposant une forme d’icône spécifique. Par exemple, chaque icône d’application dans iOS est affichée dans un rectangle à coins arrondis et ses zones transparentes sont automatiquement remplies en noir. Si aucune valeur n’est fournie, le comportement par défaut de la plateforme est appliqué.
  • launchImageTextColor : cette propriété permet d’accepter une valeur de couleur hexadécimale et de définir la couleur du texte qui s’affiche sur l’écran de présentation de l’application. Par défaut, le texte est de couleur noire, ce qui peut le rendre difficile à lire en fonction de l’écran de présentation de votre application.
  • platformName.appIcon : en outre, platformName doit être remplacé par la plateforme que vous utilisez. Ceci accepte un chemin d’accès au fichier pour définir une icône d’application propre à la plateforme. Si aucune icône n’est fournie pour une plateforme, l’icône générale fournie pour l’application est utilisée.
  • android.adaptiveIcons : lorsque cette propriété est définie sur true, les appareils Android affiche l’icône adaptative de l’application. Les propriétés ci-après doivent également être spécifiées sous la section des ressources pour associer des chemins d’accès aux fichiers aux éléments de l’icône adaptative.
    • android.appIcon : chemin d’accès au fichier du lanceur pour l’icône adaptative. Référence les fichiers de premier plan et d’arrière-plan.
    • android.appIconForeground : chemin d’accès au fichier du premier plan de l’icône adaptative. Il peut s’agir d’un fichier .xml ou .png.
    • android.appIconBackground : chemin d’accès au fichier de l’arrière-plan de l’icône adaptative. Il peut s’agir d’un fichier .xml ou .png.
    • android.appIconBackgroundColor : valeur de couleur hexadécimale. Il s’agit d’une alternative facultative à android.appIconBackground. Si les deux propriétés sont définies, la propriété android.appIconBackground est utilisée.

L’exemple de code ci-après montre une icône adaptative pour Android et des icônes uniques pour chaque plateforme.

"resources": {
    "android": {
       "adaptiveIcons": true,
	      "appIcon": "ic_launcher.xml",
	      "appIconBackgroundColor": " ic_launcher_background.xml",
	      "appIconForeground": " ic_launcher_foreground.xml"
	     
    },
    "ios": {
        "appIcon": "ios_appicon.png"
    },
    "linux": {
        "appIcon": "linux_appicon.png"
    },
    "macos": {
        "appIcon": "mac_appicon.png"
    },
    "windows": {
        "appIcon": "windows_appicon.png"
    }
},

Les icônes adaptatives sont propres à Android et sont utilisées pour garantir que l’icône de votre application apparaît comme prévu dans un large éventail de configurations de système d’exploitation. Elles peuvent apparaître sous forme de cercles, de carrés ou de toute autre variante. Au niveau le plus élémentaire, une icône adaptative peut avoir un premier plan issu d’un fichier .png et une couleur pleine comme arrière-plan. Vous pouvez utiliser l’outil de votre choix pour créer le fichier .png ; toutefois, il est important de veiller à ce que votre image comporte un remplissage suffisant pour ne pas être rognée par le masque appliqué par le système d’exploitation. Pour les spécifications de taille et de forme des fichiers d’icône adaptative, consultez la rubrique Icônes adaptatives. Des outils en ligne tels qu’EasyAppIcon peuvent être utilisés pour créer tous les fichiers dont vous avez besoin pour une icône adaptative, mais peuvent être limités à la création de sorties de fichiers spécifiques. Pour une expérience optimale de création d’icônes adaptatives, il est recommandé d’utiliser Android Studio.

Dans l’exemple de code ci-dessus, des fichiers .xml sont utilisés pour le premier plan et l’arrière-plan. L’exemple de code ci-après présente le contenu du fichier ic_launcher.xml, qui référence les fichiers de premier plan et d’arrière-plan.

<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@color/ic_launcher_background"/>
    <foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

L’exemple de code ci-après présente le contenu du fichier ic_launcher_background.xml, qui décrit un arrière-plan bleu plein.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="ic_launcher_background">#3697f0</color>
</resources>

L’exemple de code ci-après présente le contenu du fichier ic_launcher_foreground.xml, qui décrit l’icône Run (Exécuter) de AppStudio Player en tant qu’image de premier plan.

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="108dp"
    android:height="108dp"
    android:viewportWidth="108"
    android:viewportHeight="108">
  <group android:scaleX="1.62"
      android:scaleY="1.62"
      android:translateX="28.08"
      android:translateY="28.08">
    <path
        android:fillColor="#FF000000"
        android:pathData="M22.079,1L9.92,1A1.921,1.921 0,0 0,8 2.921L8,28.08A1.921,1.921 0,0 0,9.921 30L22.08,30A1.921,1.921 0,0 0,24 28.079L24,2.92A1.921,1.921 0,0 0,22.079 1zM23,28.08a0.922,0.922 0,0 1,-0.921 0.92L18,29v-1h-4v1L9.921,29A0.922,0.922 0,0 1,9 28.08L9,27h14zM23,26L9,26L9,4h14zM23,3L9,3v-0.08A0.922,0.922 0,0 1,9.921 2L22.08,2a0.922,0.922 0,0 1,0.921 0.92zM12.1,10.417L12.1,20.7l8.227,-5.142zM12.9,11.86l5.917,3.698 -5.917,3.699z"/>
  </group>
</vector>

Traductions

Une fois que vous avez généré des fichiers de traduction pour votre application, vous devez vous assurer qu’ils sont bien référencés dans le fichier appinfo.json. Pour plus d’informations sur la préparation de votre application pour la traduction et la génération des fichiers correspondants, reportez-vous à la section Globaliser votre application.

Une fois ces fichiers présents dans votre élément d’application, les propriétés path et fileName doivent être ajoutées sous une nouvelle catégorie translations dans le fichier appinfo.json pour indiquer leur emplacement.

L’exemple suivant présente l’association des fichiers d’une application modèle Map Viewer :

"translations": {
    "path": "MapViewer/languages",
    "fileName": "MapViewer"
}

Une fois que vous avez ajouté l’exemple de code dans votre fichier appinfo.json, l’application générée utilise les fichiers nommés MapViewer_codeenvironnementlocal.qm (par exemple, MapViewer_en.qm et MapViewer_ja.qm) qui se trouvent dans le dossier de langues MapViewer.

Clés de description d’utilisation

Il est courant de modifier directement le fichier appinfo.json en y ajoutant des clés de description d’utilisation. Ce sont des chaînes courtes qui décrivent pourquoi votre application demande à utiliser des fonctions telles que l’appareil photo, la capture d’emplacements en arrière-plan ou le Bluetooth. Cette obligation propre aux appareils iOS et macOS ne peut actuellement pas être utilisée sur d’autres plateformes. Même si le développement d’un élément d’interface utilisateur dédié à cette fonction est prévu ultérieurement, vous devez ajouter manuellement les clés pour le moment.

Vous devez ajouter les descriptions d’utilisation individuelles sous l’en-tête usageDescriptionKeys. Vous pouvez insérer cette section dans le fichier appinfo.json à tout moment. L’ordre des valeurs n’a pas d’importance. Si l’ajout de descriptions pour toutes les fonctionnalités, même celles non prises en charge par l’application, ne présente pas d’inconvénients, les chaînes de description superflues ne seront pas incluses dans le processus de génération de l’application.

Dans l’exemple de code suivant, bluetoothUsageDescription n’est pas utilisée parce que l’application n’inclut pas la fonction Bluetooth.

"usageDescriptionKeys": {
    "bluetoothUsageDescription": "This app uses Bluetooth to scan and connect to devices. (iOS only)",
    "cameraUsageDescription": "This app needs access to the camera to take a picture. (iOS only)",
    "faceIDUsageDescription": "This app uses face ID to authenticate using facial recognition. (iOS only)",
    "locationAlwaysUsageDescription": "This app needs access to device location when the app is running or in the background. (iOS and macOS)",
    "locationWhenInUseUsageDescription": "This app needs access to device location when the app is running. (iOS and macOS)",
    "microphoneUsageDescription": "This app needs access to a microphone to record audio. (iOS only)",
    "photoLibraryUsageDescription": "This app needs access to the photo library to select a photo. (iOS only)",
    "photoLibraryAddUsageDescription": "This app uses your photo library to save photos in the camera roll for use in the app. (iOS only)",
    "locationAlwaysAndWhenInUseUsageDescription": "This app needs access to device location when the app is running or in the background. (iOS and macOS)",
    "sensorsUsageDescription": "This app uses the Activity Recognizer to identify device motion."
},

Propriétés supplémentaires

La propriété suivante est ajoutée en dehors de toute catégorie :

queryApps.packageNames : cette propriété est ajoutée en dehors de toute section. Elle admet une liste de noms de paquetage d’application qui sera par la suite interrogée par la fonction isAppInstalled dans le composant AppFramework durant son utilisation sur les appareils Android.