Manifiesto de la aplicación

El manifiesto de la aplicación describe los recursos, también denominados capacidades de la aplicación, que requiere una aplicación. Cada aplicación tiene un manifiesto de aplicación.

Las aplicaciones deben participar en el uso de las capacidades enumerando cada recurso necesario en la sección Capacidades del manifiesto de la aplicación; ninguna funcionalidad está habilitada de forma predeterminada. Si una aplicación solicita una funcionalidad que no está en la lista, se produce un error en la solicitud. Si el archivo de manifiesto de la aplicación contiene errores, se produce un error en la instalación de prueba de la aplicación. El manifiesto de cada aplicación debe almacenarse como app_manifest.json en el directorio raíz de la carpeta de la aplicación del equipo.

La plantilla Azure Sphere crea automáticamente un manifiesto de aplicación predeterminado al crear una aplicación. Debe editar el manifiesto predeterminado para enumerar las capacidades que requiere la aplicación. Cada muestra de Azure Sphere también incluye un manifiesto de aplicación. Si basa la aplicación en un ejemplo, probablemente también necesitará editar el manifiesto.

Diferentes dispositivos Azure Sphere pueden exponer características del chip de diferentes maneras. Como resultado, el valor que usas en el manifiesto para identificar una característica determinada, como un pin de GPIO, puede variar en función del hardware para el que estés desarrollando. Administrar dependencias de hardware de destino proporciona más información sobre los destinos de hardware para una aplicación de alto nivel. En el manifiesto de aplicación para una aplicación de alto nivel, use las constantes definidas en el archivo JSON en la carpeta HardwareDefinitions del directorio de instalación del SDK de Esfera de Microsoft Azure. La ubicación exacta del directorio de instalación será diferente en Windows y Linux. En una aplicación compatible con tiempo real (RTApp), utilice los valores sin procesar que aparecen en Contenido del manifiesto de la aplicación.

Cuando cualquier aplicación se instala de prueba o se implementa en el dispositivo, el entorno en tiempo de ejecución de Azure Sphere lee el manifiesto de la aplicación para determinar qué capacidades puede usar la aplicación. Los intentos de acceso a recursos que no aparecen en el manifiesto producirán errores de API como EPERM (permiso denegado). Solo una aplicación del dispositivo puede usar un recurso. Si instala una aplicación que solicita un recurso que ya está en uso, se producirá un error en el intento.

Contenido del manifiesto de la aplicación

El manifiesto de la aplicación incluye los siguientes elementos:

Nombre Descripción
SchemaVersion Versión del esquema de manifiesto de la aplicación en uso. Actualmente debe ser 1. Obligatorio.
Nombre Nombre de la aplicación. En la creación del proyecto, este valor se establece en el nombre del proyecto. El nombre puede tener cualquier longitud, pero solo los primeros 31 caracteres se almacenan en el paquete de imagen; por lo tanto, el nombre aparece truncado en las consultas sobre el paquete de imagen. Obligatorio.
Componentid Id. del componente. Visual Studio crea este id. al crear la aplicación. Si no usa Visual Studio, vea Generar un id . de componente para obtener información sobre cómo crear el id. Obligatorio.
Entrypoint Nombre del archivo ejecutable junto con la ruta de acceso relativa en la imagen del sistema de archivos de la aplicación, que se crea cuando se crea la aplicación. Actualmente, Visual Studio usa /bin/app para este valor. Obligatorio.
CmdArgs Argumentos para pasar a la aplicación en el inicio. Escriba cada argumento entre comillas dobles y separe los argumentos con una coma. Opcional.
TargetBetaApis Especifica que la aplicación requiere API beta e identifica el conjunto de API beta usadas. Este campo se agrega automáticamente durante el proceso de compilación si la aplicación se compila mediante API beta. Opcional. Consulta Usar características beta para obtener más información.
Tipo de aplicación Tipo de aplicación. Opcional. Establecido en Depurador solo si está creando un reemplazo para gdbserver.
Capacidades Lista de pares clave/valor que especifican los requisitos de recursos de la aplicación. Obligatorio.
MallocVersion Un entero que especifica la versión de malloc, donde 1=standard y 2=mallocng, un malloc mejorado disponible en las versiones de MUSL mayores que 1.2.1. La versión 2 se recomienda para el desarrollo de aplicaciones nuevas.

La sección Capacidades admite lo siguiente:

Nota

Las aplicaciones de alto nivel pueden usar valores de funcionalidad de archivos de definición de hardware o pueden usar valores sin procesar. Sin embargo, no se pueden mezclar ambos tipos de valores en la misma capacidad. RTApps solo puede usar valores sin procesar para las capacidades.

Nombre Descripción
Adc El controlador de conversión analógico a digital (ADC) que utiliza la aplicación. Esta capacidad reserva el controlador ADC completo (que comprende un bloque de 8 pines), no sólo anclar 0 en el bloque.
En una aplicación de alto nivel, especifica el nombre del periférico que se declara en el archivo de encabezado de definición de hardware.
En una RTApp, especifique el AppManifestValue que se declara en el archivo JSON de definición de hardware.
Ejemplo de definición de hardware:"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Ejemplo de valor sin procesar:"Adc": [ "ADC-CONTROLLER-0" ]
Referencia de API:Applibs adc.h
Conceptual:Uso de ADC en Azure Sphere
AllowedApplicationConnections Lista de identificadores de componentes de aplicación a los que se puede conectar la aplicación.
Ejemplo:"AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
Referencia de API:Applibs application.h
Conceptual:Comunicarse con una aplicación de alto nivel
AllowedConnections Lista de nombres de host DNS o direcciones IP (IPv4) a los que la aplicación puede conectarse. Si la aplicación usa un Azure IoT Hub, la lista debe incluir la dirección IP o el nombre de host DNS del concentrador, normalmente nombre-concentrador.azure-devices.net. No se aceptan números de puerto ni caracteres comodín en nombres y direcciones IP.
Ejemplo:"AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts Lista de puertos que permiten el tráfico TCP entrante. Puede incluir hasta 10 puertos, y cada puerto debe aparecer individualmente. Los puertos admitidos son 1024 a 65535. Puede especificar los mismos puertos para TCP y UDP. Sin embargo, si especifica el mismo puerto para más de una aplicación en el dispositivo, la segunda aplicación que se ejecute no se cargará.
Ejemplo:"AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts Lista de puertos que permiten el tráfico UDP entrante. Puede incluir hasta 10 puertos, y cada puerto debe aparecer individualmente. Los puertos admitidos son 1024 a 65535. Puede especificar los mismos puertos para TCP y UDP. Sin embargo, si especifica el mismo puerto para más de una aplicación en el dispositivo, la segunda aplicación que se ejecute no se cargará.
Ejemplo:"AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Un booleano que indica si una aplicación de alto nivel tiene permiso para administrar certificados con la API CertStore: true para habilitar la API; De lo contrario, es falso.
Ejemplo:"CertStore" : true
DeviceAuthentication Una cadena que especifica el UUID del espacio empresarial de Azure Sphere (heredado) que se usará para la autenticación de dispositivos.
Ejemplo:"DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService Un booleano que indica si la aplicación tiene permiso para configurar el servicio DHCP: true si la aplicación tiene la capacidad; De lo contrario, es falso.
Ejemplo:"DhcpService" : true
Referencia de API:Applibs networking.h
Conceptual:Usar servicios de red
EnterpriseWifiConfig Un booleano que indica si una aplicación de alto nivel tiene permiso para crear una red EAP-TLS y asociar certificados con ella: true si la aplicación tiene la capacidad; De lo contrario, es falso.
Ejemplo:"EnterpriseWifiConfig" : true
ExternalInterrupt Lista de interrupciones externas que usa una RTApp. Esta funcionalidad no está disponible para aplicaciones de alto nivel.
Ejemplo:"ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio Una lista de GPIOs que usa la aplicación.
En una aplicación de alto nivel, especifique el nombre de GPIO que se declara en el archivo de encabezado de definición de hardware, como $MT 3620_RDB_LED1_RED.
En una RTApp, especifique los enteros que corresponden a los números de GPIO en el archivo JSON de definición de hardware. Por ejemplo, 8 especifica GPIO 8.
Ejemplo de definición de hardware:"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Ejemplo de valor sin procesar:"Gpio": [ 8, 12 ]
Referencia de API:Applibs gpio.h
Conceptual:Uso de GPIOs en Azure Sphere
HardwareAddressConfig Un booleano que indica si la aplicación tiene permiso para configurar la dirección de hardware de la interfaz de red: true si la aplicación tiene la capacidad; De lo contrario, es falso.
Ejemplo:"HardwareAddressConfig" : true
Referencia de API:Applibs networking.h
Conceptual:Usar servicios de red
HeapMemStats Un booleano que indica si el seguimiento de asignación de memoria de montón está habilitado: true si la aplicación tiene la capacidad; De lo contrario, es falso.
Ejemplo:"HeapMemStats": true
Conceptual:Uso de memoria en aplicaciones de alto nivel
I2cMaster Lista de interfaces maestras I2C usadas por la aplicación.
En una aplicación de alto nivel, especifica el nombre del periférico que se declara en el archivo de encabezado de definición de hardware.
En una RTApp, especifique el AppManifestValue que se declara en el archivo JSON de definición de hardware.
Ejemplo de definición de hardware:"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Ejemplo de valor sin procesar:"I2cMaster": [ "ISU0", "ISU1" ]
Referencia de API:Applibs i2c.h
Conceptual:Uso de I2C con Azure Sphere
I2sSubordinate La interfaz subordinada del Sonido Inter-IC (I2S) utilizada por un RTApp. Esta funcionalidad no está disponible para aplicaciones de alto nivel. Ejemplo de valor sin procesar: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Configuración de almacenamiento mutable que permite a la aplicación usar almacenamiento persistente.
Ejemplo:"MutableStorage" : { "SizeKB": 64, }
Referencia de API:Applibs storage.h
Conceptual:Uso del almacenamiento en Azure Sphere
NetworkConfig Un booleano que indica si la aplicación tiene permiso para configurar una interfaz de red: true si la aplicación tiene la capacidad; De lo contrario, es falso.
Ejemplo:"NetworkConfig" : true
Referencia de API:Applibs networking.h
Conceptual:Usar servicios de red
Powercontrols Una matriz de cadenas que representan capacidades granulares para controlar el estado de energía del dispositivo. ForcePowerDown y ForceReboot son los únicos valores admitidos.
Advertencia: Como ForcePowerDown y ForceReboot permiten que una aplicación finalice inmediatamente todas las aplicaciones, debe asegurarse de que el dispositivo aún puede recibir actualizaciones del sistema operativo y de las aplicaciones. Para obtener más información e instrucciones, consulta Forzar apagado y actualizaciones.
Ejemplo:"PowerControls": ["ForcePowerDown", "ForceReboot"]
Referencia de API:Applibs powermanagement.h
Conceptual:Administrar el estado de apagado para dispositivos Azure Sphere
Pwm El modulador de ancho de pulso (PWM) que utiliza la aplicación.
En una aplicación de alto nivel, especifica el nombre del periférico que se declara en el archivo de encabezado de definición de hardware.
En una RTApp, especifique el AppManifestValue que se declara en el archivo JSON de definición de hardware.
Ejemplo de definición de hardware:"Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Ejemplo de valor sin procesar:"Pwm": [ "PWM-CONTROLLER-0" ]
Referencia de API:Applibs pwm.h
Conceptual:Usar PMM en aplicaciones de alto nivel
ReadNetworkProxyConfig Un valor booleano que indica si la aplicación tiene permiso para recuperar la configuración del proxy: true si la aplicación tiene la capacidad; De lo contrario, es falso.
Ejemplo:"ReadNetworkProxyConfig": true
Referencia de API:Applibs networking.h
Conceptual:Conectarse a servicios web
SntpService Un booleano que indica si la aplicación tiene permiso para configurar el servicio SNTP: true si la aplicación tiene la capacidad; De lo contrario, es falso.
Ejemplo:"SntpService" : true
Referencia de API:Applibs networking.h
Conceptual:Servidor SNTP
SoftwareUpdateDeferral Un valor booleano que indica si la aplicación tiene permiso para aplazar las actualizaciones de software durante un período limitado: true si la aplicación tiene la capacidad; De lo contrario, es falso.
Ejemplo:"SoftwareUpdateDeferral" : true
Referencia de API:Applibs eventloop.H
Conceptual:aplazar las actualizaciones del dispositivo
SpiMaster Una lista de interfaces maestras SPI que utiliza la aplicación.
En una aplicación de alto nivel, especifica el nombre del periférico que se declara en el archivo de encabezado de definición de hardware.
En una RTApp, especifique el AppManifestValue que se declara en el archivo JSON de definición de hardware.
Ejemplo de definición de hardware:"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Ejemplo de valor sin procesar:"SpiMaster": [ "ISU0", "ISU1" ]
Referencia de API:Applibs spi.h
Conceptual:Uso de SPI con Azure Sphere
SystemEventNotifications Un booleano que indica si la aplicación tiene permiso para recibir notificaciones de eventos del sistema: true si la aplicación tiene la capacidad; De lo contrario, es falso.
Ejemplo:"SystemEventNotifications" : true
Referencia de API:Applibs sysevent.h
Conceptual:aplazar las actualizaciones del dispositivo
SystemTime Un booleano que indica si la aplicación tiene permiso para configurar la hora del sistema: true si la aplicación tiene la capacidad; De lo contrario, es falso.
Ejemplo:"SystemTime" : true
Referencia de API:Applibs rtc.h
Conceptual:Administrar el tiempo del sistema y el RTC en Azure Sphere
TimeSyncConfig Un booleano que indica si la aplicación tiene permiso para configurar el servicio de sincronización de tiempo: true si la aplicación tiene la capacidad; De lo contrario, es falso.
Ejemplo:"TimeSyncConfig" : true
Uart Lista de periféricos UART que usa la aplicación. Esta funcionalidad no habilita el UART dedicado en un panel de desarrollo mt3620. Para obtener información sobre el UART dedicado, vea Crear una aplicación compatible en tiempo real.
En una aplicación de alto nivel, especifica el nombre del periférico que se declara en el archivo de encabezado de definición de hardware.
En una RTApp, especifique el AppManifestValue que se declara en el archivo JSON de definición de hardware.
Ejemplo de definición de hardware:"Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Ejemplo de valor sin procesar:"Uart": [ "ISU0", "ISU1" ]
Referencia de API:Applibs uart.h
Conceptual:Usar UART en Azure Sphere
WifiConfig Un booleano que indica si la aplicación tiene permiso para usar la API WifiConfig para cambiar la configuración de Wi-Fi: true si la aplicación tiene la capacidad; De lo contrario, es falso.
Ejemplo:"WifiConfig" : true
Referencia de API:Applibs wificonfig.h
Conceptual:Configurar redes

La sección MutableStorage admite lo siguiente:

Nombre Descripción
SizeKB Es un entero que especifica el tamaño del almacenamiento mutable en el caso deloss. El valor máximo es 64. Un valor de 0 equivale a no tener la capacidad de almacenamiento mutable.

Ejemplo

A continuación se muestra un archivo app_manifest.json de ejemplo para una aplicación de alto nivel que se centra en el hardware MT3620 RDB:

{
    "SchemaVersion": 1,
    "Name": "MyTestApp",
    "ComponentId": "072c9364-61d4-4303-86e0-b0f883c7ada2",
    "EntryPoint": "/bin/app",
    "CmdArgs": ["-m", "262144", "-t", "1"],
    "Capabilities": {
        "AllowedConnections" : [
            "my-hub.example.net",
            "contoso.azure-devices.net",
            "global.azure-devices-provisioning.net" ],
        "AllowedTcpServerPorts": [ 1024, 65535 ],
        "AllowedUdpServerPorts": [ 1024, 50000 ],
        "DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0",
        "Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ],
        "HardwareAddressConfig": true,
        "I2cMaster": [ "ISU2" ],
        "MutableStorage" : {
            "SizeKB": 64,
        },
        "SpiMaster": [ "ISU1" ],
        "SystemTime" : true,
        "Uart": [ "ISU0" ],
        "WifiConfig" : true
    },
    "ApplicationType": "Default",
    "MallocVersion": 2
}

El archivo app_manifest.json de ejemplo para MyTestApp hace lo siguiente:

  • Pasa cuatro argumentos de línea de comandos a la aplicación.
  • Solo permite las conexiones a los hosts DNS my-hub.example.net, contoso.azure-devices.net y global.azure-devices-provisioning.net.
  • Permite el tráfico TCP entrante en los puertos 1024 y 65535.
  • Permite el tráfico UDP entrante en los puertos 1024 y 50000.
  • Especifica un UUID del inquilino de Azure Sphere (heredado) que se usará para la autenticación de dispositivos y permite las conexiones al servicio de aprovisionamiento de dispositivos.
  • Especifica el uso de tres OPI.
  • Permite a la aplicación configurar la dirección de hardware de la interfaz de red.
  • Especifica el uso de un periférico UART.
  • Permite el almacenamiento mutable con 64 blocs de notas de espacio de almacenamiento.
  • Permite a la aplicación usar la API WifiConfig para cambiar la configuración del Wi-Fi.
  • Especifica el uso de una interfaz maestra SPI.
  • Especifica el uso de una interfaz maestra I2C.
  • Permite a la aplicación configurar la hora del sistema mediante la API RTC.
  • Habilita mallocng para el desarrollo de aplicaciones.