Modifica appinfo

Il file di configurazione appinfo.json contiene informazioni che definiscono il funzionamento dell'app, memorizzate come coppie chiave/valore. Molte delle proprietà definite nel file sono configurate in Impostazioni AppStudio, ma in alcuni casi è necessario aggiungere gli oggetti al file manualmente.

Alcune categorie di seguito elencate non sono nel file di configurazione appinfo.json come impostazione predefinita. Altre categorie appaiono già nel file di configurazione con proprietà gestite in Impostazioni. Le proprietà elencate in questo paragrafo sono aggiuntive a quelle configurate in Impostazioni.

Il file appinfo.json si trova nella cartella principale dell'app. Per accedervi, fare clic sul pulsante File per l'app in ArcGIS AppStudio.

Funzionalità

La categoria di funzionalità esisterà già nel file di configurazione appinfo.json e potrà essere compilata con le opzioni selezionate nella sezione Funzionalità dello strumento Impostazioni. È anche possibile aggiungere manualmente ciascuna delle seguenti proprietà.

  • backup: se impostato su false, non verrà mai effettuato nessun backup o ripristino dell'applicazione su Android, e l'applicazione viene esclusa dai backup di sistema. Se non viene specificato, il valore predefinito è false.
  • ios.appTransportSecurity.allowArbitraryLoads: se impostato su false, le restrizioni di sicurezza di trasporto sono applicate per le connessioni di rete. Se non viene specificato, il valore predefinito è false.
  • interAppFileSharing: se impostato su true, è possibile accedere ai file nell'applicazione utilizzando l'app Files su iOS. Se non viene specificato, il valore predefinito è false.
  • mediaLocation: quando impostato su true, l'app può recuperare metadati Exif non modificati dalle foto. Se non viene specificato, il valore predefinito è false.
  • indoorLocation: quando impostato su true, tutte le funzionalità Bluetooth per il posizionamento interno sono abilitate. Se non viene specificato, il valore predefinito è false.

Nel seguente esempio non vengono applicate restrizioni di sicurezza sul trasporto.

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

Distribuzione

La categoria installazione esisterà già nel file di configurazione di appinfo.json e potrà essere compilato con le opzioni selezionate nelle sezioni Piattaforme e Avanzate dello strumento Impostazioni. È anche possibile aggiungere manualmente ciascuna delle seguenti proprietà.

  • android.trustUserCertificates: impostando questa proprietà su true, l'app accetta tutte le autorità di certificazione. L'impostazione predefinita è false e le app AppStudio non ritengono attendibili le autorità di certificazione aggiunte dall'utente per connessioni sicure su Android.
  • android.minimumSdkVersion: Definisce il livello API minimo richiesto ai fini del funzionamento dell'app. Se non specificato, il valore predefinito di un'app AppStudio è 23.
  • android.targetSdkVersion: definisce il livello API previsto per l'app. Influisce anche sul modo in cui l'utente deve concedere le autorizzazioni dell'app. Se sul dispositivo viene eseguito Android 6.0 o versioni successive o se l'SDK di destinazione dell'app è 23 o superiore, l'utente deve richiedere ciascuna autorizzazione necessaria durante l'esecuzione dell'app. Se non viene specificato, il valore predefinito di un'app AppStudio è 31 per la creazione in locale e 33 per la creazione su cloud. Per maggiori informazioni, vedere la guida Consolge Google Play.
    Nota:

    Gli utenti della creazione in locale devono impostare deployment.android.targetSdkVersion su 33 nel file .json della loro app per soddisfare i requisiti elencati in https://developer.android.com/google/play/requirements/target-sdk.

  • android.enableGooglePlayServicesSecurityProvider: controlla se l'app richiama il fornitore di sicurezza Google Play per assicurarsi che l'app sia in esecuzione su un dispositivo con gli ultimi aggiornamenti per proteggerlo da exploit noti. Se non viene specificato, il valore predefinito di un'applicazione AppStudio è false.
  • ios.minimumVersion: definisce la versione minima del sistema operativo su cui il proprio software può funzionare. Se non specificato, il valore predefinito di un'app AppStudio è 13.0.
  • desktop.allowOverwrite: Se impostato su true, l'app può essere installata su Windows senza disinstallare una versione precedente dell'app. Se non specificato il valore predefinito è false.

Nel seguente esempio tutte le autorità certificate saranno accettate su Android e le versioni minime dei sistemi operativi in cui l'app può essere installata per Android e iOS sono rispettivamente 6.0 e 13.0.

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

Visualizza

La categoria di visualizzazione esisterà già nel file di configurazione di appinfo.json e potrà essere compilata con le opzioni selezionate nella sezione Visualizzazione dello strumento Impostazioni. È anche possibile aggiungere manualmente ciascuna delle seguenti proprietà.

  • enableHighDpi: determina se l'applicazione verrà aperta in modalità high DPI sui dispositivi dov'è supportata. Se non viene specificato, il valore predefinito è false.
  • statusBar: definisce se la barra di stato appare quando si utilizza l'applicazione su qualsiasi dispositivo iOS e Android. Questa proprietà non deve essere confusa con la proprietà usesStatusBar, impostata dalle opzioni della Barra di stato nella scheda Impostazioni > Dispositivi dell'applicazione, che decide se la barra di stato apparirà sui telefoni o sui tablet. Se non viene specificato, il valore predefinito è false.
  • ios.windowMode: definisce come l'app si interseca con la funzionalità iPad Multitasking, consentendo all'app di essere usata assieme ad altre app sullo stesso schermo. Per impostazione predefinita, questa proprietà è abilitata se la modalità ritratto o paesaggio è disabilitata nelle opzioni della tavoletta sulla scheda Impostazioni > Dispositivi per l'app. Per disabilitare ios.windowMode consentendo all'app di eseguire solamente sullo schermo pieno iPad, impostarlo su fullscreen.

Nel seguente esempio è abilitato un DPI elevato, la barra di stato è abilitata su tutti i dispositivi iOS e l'app verrà eseguita a schermo intero su un iPad.

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

Crea

La categoria crea non esiste nel file di configurazione di appinfo.json. È possibile aggiungere manualmente ciascuna delle seguenti proprietà.

  • ignore: definisce una lista di nomi dei file modello che saranno esclusi dalle risorse app durante la costruzione. Ciò permette di conservare i file nell'app durante la fase di sviluppo e di prova, ma non nella fase di creazione.
  • ios.enableBitcode: specifica se l'app è in grado di supportare Bitcode. Apple ottimizza il formato binario dell'app per dispositivi specifici senza aggiornamenti o rinvii. Bitcode è disponibile solo per le app iOS ed è attivata per impostazione predefinita per build Apple App Store.

Gestione

La categoria gestione non esiste nel file di configurazione di appinfo.json. È possibile aggiungere manualmente ciascuna delle seguenti proprietà.

  • configurationSchema: accetta un nome file o un percorso per un file .xml che contiene configurazioni dell'app predefinite utilizzate per l'installazione dell'app con un software Enterprise Mobile Management (EMM). Per informazioni sulla formattazione di questo file .xml, vedere il riferimento dello sviluppatore Android per Impostare configurazioni gestite.
  • android.restrictionFile: accetta un nome file o percorso per un file .xml utilizzato per imporre restrizioni su dispositivi Android. È richiesto per utilizzare la configurazione dell'app durante l'installazione dell'app con un software EMM. Per informazioni sulla formattazione di questo file .xml, vedere il riferimento dello sviluppatore Android per RestrictionsManager.
  • windows.applicationName: il nome dell'applicazione che necessita delle proprietà di configurazione dell'app, se l'app richiede la configurazione aziendale.
  • windows.keyRoot: la radice della chiave di registro sotto la quale cercare queste proprietà di configurazione dell'app. Se non specificata, l'impostazione predefinita è HKEY_CURRENT_USER.
  • windows.vendorName: il nome del fornitore del software responsabile dell'applicazione. Per le app Esri, il valore è ESRI.

Nel seguente esempio sono elencati i file di configurazione e i parametri utilizzati nell'installazione dell'app con software EMM.

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

Risorse

La categoria installazione esisterà già nel file di configurazione di appinfo.json e potrà essere compilato con le opzioni selezionate nella sezione Risorse dello strumento Impostazioni. È anche possibile aggiungere manualmente ciascuna delle seguenti proprietà.

  • appIconBackgroundColor: accetta valori di colore esadecimali e definisce il colore di riempimento dello sfondo per piattaforme che impongono una forma specifica delle icone. Ad esempio, iOS impone un rettangolo arrotondato per le icone delle app e riempie in automatico le aree trasparenti con il nero. Se non viene specificato nessun valore specifico, viene applicato il comportamento standard della piattaforma.
  • launchImageTextColor: accetta valori di colore esadecimali e definisce il colore del testo che compare nella schermata iniziale dell'app. Il colore preimpostato per questo testo è il nero, che può risultare difficile da vedere in base al colore della schermata iniziale dell'app.
  • platformName.appIcon: inoltre, platformName deve essere sostituito con la piattaforma utilizzata. Accetta il percorso del file per definire l'icona dell'app specifica per la piattaforma. Se per una piattaforma non viene fornita alcuna icona, viene impiegata l'icona generica fornita per l'app.
  • android.adaptiveIcons: se impostato su true, i dispositivi Android mostreranno l'icona adattiva dell'app. Le seguenti proprietà devono essere specificate anche in risorse, definendo i percorsi dei file per gli elementi dell'icona adattiva.
    • android.appIcon: percorso del file di lancio dell'icona adattiva. Fa riferimento ai file di primo piano e di sfondo.
    • android.appIconForeground: percorso del file di primo piano dell'icona adattiva. Può essere un file .xml o .png.
    • android.appIconBackground: percorso del file di sfondo dell'icona adattiva. Può essere un file .xml o .png.
    • android.appIconBackgroundColor: valore esadecimale del colore, opzione alternativa a android.appIconBackground. Se sono entrambi definiti, verrà usato android.appIconBackground.

Il seguente esempio di codice mostra un'icona adattiva per Android e icone uniche per ogni piattaforma.

"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"
    }
},

Le icone adattive sono univoche per Android e sono usate per assicurare che l'icona dell'app sia visualizzata correttamente su una vasta gamma di configurazioni di sistemi operativi. Le icone adattive possono essere mostrate come cerchi, quadrati o varianti delle due. A livello base, un'icona adattiva può essere creata da un .png in primo piano e un colore solido in sfondo. Qualsiasi strumento può essere utilizzato per creare il .png, ma è importante assicurarsi che l'immagine abbia un bordo sufficientemente ampio per non risultare tagliata dalla maschera applicata dal sistema operativo. Per le specifiche di dimensione e forma dei file di icona adattiva consultare Icone adattive. Strumenti online come EasyAppIcon possono essere utilizzati per creare tutti i file necessari per un'icona adattiva, ma potrebbero essere limitati nella sola creazione di file specifici. Per una migliore esperienza di creazione di icone adattive si raccomanda di utilizzare Android Studio.

Nel codice esempio precedente, i file .xml sono utilizzati sia per il primo piano che per lo sfondo. Il seguente esempio di codice mostra il contenuto del file ic_launcher.xml che fa riferimento ai file di primo piano e di sfondo.

<?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>

Il seguente esempio di codice mostra il contenuto del file ic_launcher_background.xml, il quale descrive uno sfondo blu solido.

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

Il seguente esempio di codice mostra il contenuto del file ic_launcher_foreground.xml, il quale descrive l'icona AppStudio Run Player come immagine in primo piano.

<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>

Traduzioni

Dopo aver generato i file di traduzione per l'app, sarà necessario assicurarsi che vi si faccia riferimento nel file appinfo.json. Per ulteriori informazioni sulla preparazione dell'app per la traduzione e la generazione di questi file, vedere Globalizzare la propria app.

Una volta che questi file sono presenti nell'app, le proprietà path e fileName dovranno essere implementate sotto una nuova categoria translations nel file appinfo.json per rendere visibile la loro posizione.

L'esempio seguente associa i file di una app modello di tipo Map Viewer:

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

Una volta aggiunto il precedente esempio di codice al file appinfo.json, l'app creata utilizza i file nella cartella delle lingue MapViewer, denominata MapViewer_localcode.qm (ad esempio, MapViewer_en.qm e MapViewer_ja.qm).

Chiavi di descrizione d'uso

Un esempio piuttosto comune di modifica diretta dei file appinfo.json è l'aggiunta di chiavi di descrizione d'uso. Si tratta di stringhe brevi che descrivono il motivo per cui l'app richiede di utilizzare funzionalità quali la fotocamera, il rilevamento della posizione in background o il Bluetooth. Si tratta di un requisito dei dispositivi iOS e macOS che attualmente non può essere utilizzato sulle altre piattaforme. Mentre questo è destinato ad essere implementato come un elemento dell'interfaccia utente in futuro, attualmente è necessario aggiungerlo manualmente.

È necessario aggiungere descrizioni di utilizzo individuali sotto l'intestazione usageDescriptionKeys. È possibile inserire questa sezione nel file appinfo.json in qualsiasi momento. L'ordine dei valori non produce alcuna differenza nella funzione. Per quanto non ci sia nessun rischio nell'aggiunta di descrizioni per tutte le funzionalità (anche quelle non supportate dall'app), le stringhe di descrizione non necessarie non saranno comprese nel processo di creazione dell'app.

Nel seguente esempio di codice, bluetoothUsageDescription non verrà utilizzato in quanto l'app non include la funzionalità 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."
},

Proprietà aggiuntive

La seguente proprietà viene aggiunta al di fuori di una qualsiasi categoria:

queryApps.packageNames: questa proprietà viene aggiunta al di fuori di qualsiasi sezione. Accetta un elenco di nomi pacchetto di app, che saranno interrogate dalla funzione isAppInstalled nella componente AppFramework quando usata su dispositivi Android.