El archivo de configuración appinfo.json contiene la información que define el funcionamiento de su aplicación, almacenada como pares de clave-valor. Muchas de las propiedades definidas en el archivo se definen en Configuración de AppStudio, pero en ciertos casos deberá agregar elementos al archivo manualmente.
Algunas de las categorías que se enumeran a continuación no están en el archivo de configuración de appinfo.json de forma predeterminada. Otras categorías sí que aparecen en el archivo de configuración, con propiedades que se administran en Configuración. Las propiedades enumeradas en este tema son adicionales a las que se definen en Configuración.
El archivo appinfo.json se encuentra en la carpeta principal de la aplicación. Para acceder a él, haga clic en el botón Archivos para su aplicación de ArcGIS AppStudio.
Capacidades
La categoría de funcionalidades ya existirá en el archivo de configuración de appinfo.json y podrá estar rellenada con las opciones que se hayan seleccionado en la sección Funcionalidades de la herramienta Configuración. También puede agregar manualmente cualquiera de las siguientes propiedades.
- backup: si se establece en false, jamás se realiza ninguna copia de seguridad ni se restaura la aplicación en Android y las copias de seguridad de todo el sistema excluyen la aplicación. Si no se especifica, el valor predeterminado es false.
- ios.appTransportSecurity.allowArbitraryLoads: si se establece en false, se aplican restricciones de seguridad de transporte a las conexiones de red. Si no se especifica, el valor predeterminado es false.
- interAppFileSharing: si se establece en true, será posible acceder a los archivos de su aplicación mediante la aplicación Archivos de iOS. Si no se especifica, el valor predeterminado es false.
- mediaLocation: cuando se establece en true, la aplicación puede recuperar metadatos Exif no redactados de las fotos. Si no se especifica, el valor predeterminado es false.
- indoorLocation: cuando se establece en true, se habilitan todas las funciones de Bluetooth necesarias para el posicionamiento en interiores. Si no se especifica, el valor predeterminado es false.
En el siguiente ejemplo, no se aplican restricciones de seguridad de transporte.
"capabilities": {
"ios": {
"appTransportSecurity": {
"allowArbitraryLoads": true
}
},
Implementación
La categoría de implementación ya existirá en el archivo de configuración de appinfo.json y podrá estar rellenada con las opciones seleccionadas en las secciones Plataformas y Opciones avanzadas de la herramienta Configuración. También puede agregar manualmente cualquiera de las siguientes propiedades.
- android.trustUserCertificates: establecer esta propiedad en true hace que la aplicación acepte todas las autoridades de certificados. De forma predeterminada, está como false las aplicaciones de AppStudio no confían en las autoridades de certificados agregadas por el usuario para las conexiones seguras en Android.
- android.minimumSdkVersion: define el nivel de API mínimo requerido para que la aplicación se ejecute. Si no se especifica, el valor predeterminado de una aplicación de AppStudio es 23.
- android.targetSdkVersion: define el nivel de API deseado para la aplicación. También afecta a la forma en que el usuario debe conceder los permisos de la aplicación. Si el dispositivo ejecuta Android 6.0 o posterior y el SDK objetivo de su aplicación es el 23 o superior, el usuario debe solicitar cada permiso que necesite mientras se ejecuta la aplicación. Si no se especifica, el valor predeterminado de una aplicación de AppStudio es 31 para la creación local y 33 para la creación en la nube. Para obtener más información, consulte la Ayuda de Google Play Console.
Nota:
Los usuarios de la creación local deben configurar deployment.android.targetSdkVersion en 33 en el archivo appinfo.json de su aplicación para que cumpla los requisitos que figuran en https://developer.android.com/google/play/requirements/target-sdk.
- android.enableGooglePlayServicesSecurityProvider: controla si la aplicación llama al proveedor de seguridad de Google Play para garantizar que la aplicación se esté ejecutando en un dispositivo con las actualizaciones más recientes a fin de protegerse de vulnerabilidades conocidas. Si no se especifica, el valor predeterminado de una aplicación de AppStudio es false.
- ios.minimumVersion: define la versión mínima del sistema operativo en la que se puede ejecutar su software. Si no se especifica, el valor predeterminado de una aplicación de AppStudio es 13.0.
- desktop.allowOverwrite: si se establece en true, la aplicación se puede instalar en Windows sin desinstalar una versión anterior de la aplicación. Si no se especifica, el valor predeterminado es false.
En el siguiente ejemplo, se aceptarán todas las autoridades certificadas en Android, y los sistemas operativos mínimos en los que se puede instalar la aplicación para Android y iOS son 6.0 y 13.0 respectivamente.
"deployment": {
"android": {
"trustUserCertificates": true,
"minimumSdkVersion": 23,
"targetSdkVersion": 31
},
"ios": {
"minimumVersion": "13.0"
}
},
Mostrar
La categoría de visualización ya existirá en el archivo de configuración de appinfo.json y podrá estar rellenada con las opciones que se hayan seleccionado en la sección Visualización de la herramienta Configuración. También puede agregar manualmente cualquiera de las siguientes propiedades.
- enableHighDpi: determina si la aplicación se abrirá en modo de mayor DPI en los dispositivos donde se admite este modo. Si no se especifica, el valor predeterminado es false.
- statusBar: define si la barra de estado aparece al usar su aplicación en cualquier dispositivo iOS o Android. No se debe confundir con la propiedad usesStatusBar, definida en las opciones de la Barra de estado de la pestaña Configuración > Dispositivos de su aplicación, que controla si la barra de estado aparece en teléfonos o tablets. Si no se especifica, el valor predeterminado es false.
- ios.windowMode: define la forma en que la aplicación interactúa con la capacidad Multitarea de iPad, lo que permite usar la aplicación con otras aplicaciones en la misma pantalla. De forma predeterminada, esta propiedad está habilitada si el modo horizontal o vertical está deshabilitado en las opciones de Tablet de la pestaña Configuración > Dispositivos de su aplicación. Para deshabilitar ios.windowMode y permitir que su aplicación solo se ejecute a pantalla completa en el iPad, establézcala como fullscreen.
En el siguiente ejemplo, se ha habilitado el DPI alto, la barra de estado está habilitada en todos los dispositivos iOS y la aplicación solo se ejecutará en pantalla completa en un iPad.
"display": {
"enableHighDpi": true,
"statusBar": true,
"ios": {
"windowMode": "fullscreen"
}
},
Crear
La categoría de creación no existe ya en el archivo de configuración de appinfo.json. Puede agregar manualmente cualquiera de las siguientes propiedades.
- ignore: define una lista de patrones de nombre de archivo que se deben excluir de los recursos de la aplicación cuando esta se compile. Con ello, se pueden guardar en el elemento de aplicación los archivos que resultan útiles durante el desarrollo y las pruebas, pero que no son necesarios al crear la aplicación.
- ios.enableBitcode: especifica si la aplicación es compatible con Bitcode. Apple optimiza el binario de la aplicación para dispositivos específicos sin necesidad de actualizar ni reenviar. Bitcode solo está disponible para aplicaciones de iOS y está habilitado de manera predeterminada en compilaciones de Apple App Store.
Administración
La categoría de administración no existe ya en el archivo de configuración de appinfo.json. Puede agregar manualmente cualquiera de las siguientes propiedades.
- configurationSchema: acepta una ruta o nombre de archivo de un archivo .xml que contiene los valores predeterminados de configuración de una aplicación utilizados al implementar su aplicación con el software Enterprise Mobile Management (EMM). Para obtener información sobre cómo dar formato a este archivo .xml, consulte la referencia para desarrolladores de Android sobre Configurar configuraciones administradas.
- android.restrictionFile: acepta una ruta o nombre de archivo de un archivo .xml utilizado para imponer restricciones en dispositivos Android. Se requiere para usar la configuración de una aplicación al implementar su aplicación con el software EMM. Para obtener información sobre cómo dar formato a este archivo .xml, consulte la referencia para desarrolladores de Android sobre RestrictionsManager.
- windows.applicationName: el nombre de la aplicación que necesita propiedades de configuración de aplicación, si la aplicación requiere configuración corporativa.
- windows.keyRoot: la raíz de la clave de registro bajo la que buscar estas propiedades de configuración de la aplicación. Si no se especifica, el valor predeterminado es HKEY_CURRENT_USER.
- windows.vendorName: el nombre del proveedor del software responsable de la aplicación. En las aplicaciones de Esri, el valor es ESRI.
En el siguiente ejemplo, se enumeran los archivos de configuración y los parámetros utilizados al implementar la aplicación con el software EMM.
"management": {
"android": {
"restrictionFile": "AppConfig_Android.xml"
},
"configurationSchema": "AppConfig.xml",
"windows": {
"applicationName": "MyApp",
"keyRoot": "HKEY_CURRENT_USER",
"vendorName": "MyName"
}
},
Recursos
La categoría de implementación ya existirá en el archivo de configuración de appinfo.json y podrá estar rellenada con las opciones seleccionadas en las secciones Recursos de la herramienta Configuración. También puede agregar manualmente cualquiera de las siguientes propiedades.
- appIconBackgroundColor: acepta un valor de color hexadecimal y define el color de relleno del fondo para plataformas que imponen una forma de icono específica. Por ejemplo, iOS impone un rectángulo redondeado para los iconos de las aplicaciones y rellena automáticamente de negro las áreas transparentes. Si no se especifica ningún valor, se aplica el comportamiento predeterminado de la plataforma.
- launchImageTextColor: acepta un valor de color hexadecimal y define el color del texto que aparece en la pantalla de presentación de su aplicación. El color predeterminado de este texto es negro y puede ser difícil de apreciar en función de la pantalla de presentación de su aplicación.
- platformName.appIcon: además, platformName se debe reemplazar por la plataforma que utiliza. Aquí se acepta una ruta de archivos para definir un icono de aplicación específico de la plataforma. Si no se proporciona un icono para la plataforma, se utiliza el icono general proporcionado para la aplicación.
- android.adaptiveIcons: cuando se establece en true, los dispositivos Android mostrarán el icono adaptable de la aplicación. Las siguientes propiedades también deben especificarse en recursos, definiendo las rutas de archivo a los elementos del icono adaptable.
- android.appIcon: ruta de archivo del inciador para el icono adaptable. Hace referencia a los archivos de primer plano y fondo.
- android.appIconForeground: ruta de archivo al primer plano del icono adaptable. Puede ser un archivo .xml o .png.
- android.appIconBackground: ruta de archivo al fondo del icono adaptable. Puede ser un archivo .xml o .png.
- android.appIconBackgroundColor: valor hexadecimal del color, una alternativa opcional a android.appIconBackground. Si se definen ambos, se utilizará android.appIconBackground.
La siguiente muestra de código presenta un icono adaptable para Android e iconos únicos para cada plataforma.
"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"
}
},
Los iconos adaptables son únicos para Android y se utilizan para garantizar que el icono de su aplicación se muestre como se espera en una amplia variedad de configuraciones de sistema operativo. Los iconos adaptables pueden mostrarse como círculos, cuadrados o variaciones intermedias. En el nivel más básico, un icono adaptable puede estar hecho de .png en el primer plano y un color liso como fondo. Se puede utilizar cualquier herramienta para crear .png, pero es importante asegurarse de que su imagen tenga suficiente relleno para que no sea recortada por la máscara aplicada por el sistema operativo. Para conocer la especificación del tamaño y la forma de los archivos de iconos adaptables, consulte Iconos adaptables. Las herramientas en línea, como EasyAppIcon, pueden utilizarse para crear todos los archivos necesarios para un icono adaptable, pero pueden estar limitadas a crear solo salidas de archivos específicos. Para obtener la mejor experiencia en la creación de iconos adaptables, se recomienda utilizar Android Studio.
En la muestra de ejemplo anterior, se utilizan archivos .xml tanto para el primer plano como para el fondo. La siguiente muestra de código muestra el contenido del archivo ic_launcher.xml que hace referencia a los archivos de primer plano y del fondo.
<?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>
La siguiente muestra de código presenta el contenido del archivo ic_launcher_background.xml, que describe un fondo azul liso.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#3697f0</color>
</resources>
La siguiente muestra de código presenta el contenido del archivo ic_launcher_foreground.xml, que describe el icono Ejecutar de AppStudio como imagen de fondo.<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>
Traducciones
Una vez generados los archivos de traducción para su aplicación, debe asegurarse de que se les hace referencia en el archivo appinfo.json. Para obtener más información sobre cómo preparar la aplicación para la traducción y cómo generar estos archivos, consulte Globalizar su aplicación.
Una vez que estos archivos estén presentes en su elemento de aplicación, debe agregar las propiedades path y fileName en otra categoría de translations nueva en el archivo appinfo.json para tomar nota de su ubicación.
El siguiente ejemplo asocia los archivos de una aplicación de plantilla de Map Viewer:
"translations": {
"path": "MapViewer/languages",
"fileName": "MapViewer"
}
Después de agregar la muestra de código anterior al archivo appinfo.json, la aplicación compilada utiliza los archivos de la carpeta MapViewer languages denominados MapViewer_localecode.qm (por ejemplo, MapViewer_en.qm y MapViewer_ja.qm).
Claves de descripción de uso
Un caso común para editar directamente el archivo appinfo.json es agregar claves de descripción de uso. Son cadenas breves que describen por qué la aplicación está solicitando el uso de capacidades tales como la cámara, la captura de ubicaciones en segundo plano o el Bluetooth. Es un requisito para los dispositivos de iOS y macOS y, por el momento, no se puede utilizar en otras plataformas. Aunque está prevista su futura implementación como elemento de interfaz de usuario, por el momento se tiene que agregar manualmente.
Debe agregar las descripciones de uso individual en el encabezado usageDescriptionKeys. Puede introducir esta sección en el archivo appinfo.json en cualquier momento. El orden de los valores no repercute en la funcionalidad. Aunque no existe inconveniente alguno en incluir descripciones para todas las capacidades, incluso aquellas capacidades no compatibles con la aplicación, las cadenas de descripción innecesarias no se incluyen en el proceso de compilación de la aplicación.
En la siguiente muestra de código, bluetoothUsageDescription no se utiliza porque la aplicación no incluye la funcionalidad 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."
},
Propiedades adicionales
La siguiente propiedad se agrega fuera de cualquier categoría:
queryApps.packageNames: esta propiedad se agrega fuera de cualquier sección. Acepta una lista de nombres de paquetes de aplicaciones, que consultará la función isAppInstalled del componente AppFramework cuando se use en dispositivos Android.