Manifesto do aplicativo

O manifesto do aplicativo descreve os recursos, também chamados de recursos de aplicativo, que um aplicativo requer. Cada aplicativo tem um manifesto de aplicativo.

Os aplicativos devem optar por usar recursos listando cada recurso necessário na seção Recursos do manifesto do aplicativo; nenhum recurso está habilitado por padrão. Se um aplicativo solicitar um recurso que não esteja listado, a solicitação falhará. Se o arquivo de manifesto do aplicativo contiver erros, tentará sideload do aplicativo falhar. O manifesto de cada aplicativo deve ser armazenado como app_manifest.json no diretório raiz da pasta de aplicativo no computador.

O modelo do Azure Sphere cria automaticamente um manifesto de aplicativo padrão quando você cria um aplicativo. Você deve editar o manifesto padrão para listar os recursos exigidos pelo aplicativo. Cada exemplo do Azure Sphere também inclui um manifesto de aplicativo. Se você basear seu aplicativo em um exemplo, provavelmente também precisará editar o manifesto.

Diferentes dispositivos do Azure Sphere podem expor recursos do chip de maneiras diferentes. Como resultado, o valor que você usa no manifesto para identificar um determinado recurso, como um pino GPIO, pode variar dependendo do hardware para o qual você está desenvolvendo. Gerenciar dependências de hardware de destino fornece mais informações sobre destinos de hardware para um aplicativo de alto nível. No manifesto do aplicativo para um aplicativo de alto nível, use as constantes definidas no arquivo JSON na pasta HardwareDefinitions do diretório de instalação do SDK do Microsoft Azure Sphere. O local exato do diretório de instalação será diferente no Windows e no Linux. Em um aplicativo com capacidade em tempo real (RTApp), use os valores brutos listados no conteúdo do manifesto do aplicativo.

Quando qualquer aplicativo é sideload ou implantado no dispositivo, o runtime do Azure Sphere lê o manifesto do aplicativo para verificar quais recursos o aplicativo pode usar. As tentativas de acessar recursos que não estão listados no manifesto resultarão em erros de API, como ePERM (permissão negada). Apenas um aplicativo no dispositivo pode usar um recurso. Se você instalar um aplicativo que solicita um recurso que já está em uso, a tentativa falhará.

Conteúdo do manifesto do aplicativo

O manifesto do aplicativo inclui os seguintes itens:

Nome Descrição
SchemaVersion Versão do esquema de manifesto do aplicativo em uso. Atualmente, deve ser 1. Necessário.
Nome Nome do aplicativo. Na criação do projeto, esse valor é definido como o nome do projeto. O nome pode ter qualquer comprimento, mas apenas os primeiros 31 caracteres são armazenados no pacote de imagem; assim, o nome aparece truncado em consultas sobre o pacote de imagem. Necessário.
Componentid ID do componente. O Visual Studio cria essa ID quando você cria o aplicativo. Se você não usar o Visual Studio, consulte Gerar uma ID do componente para obter informações sobre como criar a ID. Necessário.
Entrypoint Nome do executável junto com o caminho relativo na imagem do sistema de arquivos do aplicativo, que é criada quando o aplicativo é criado. Atualmente, o Visual Studio usa /bin/app para esse valor. Necessário.
CmdArgs Argumentos para passar para o aplicativo na inicialização. Inclua cada argumento em aspas duplas e argumentos separados com uma vírgula. Opcional.
TargetBetaApis Especifica que o aplicativo requer APIs Beta e identifica o conjunto de APIs Beta usadas. Esse campo será adicionado automaticamente durante o processo de build se o aplicativo for criado usando APIs Beta. Opcional. Consulte Usar recursos beta para obter detalhes.
ApplicationType Tipo de aplicativo. Opcional. Defina como Depurador somente se você estiver criando um substituto para o gdbserver.
Capacidades Lista de pares de chave/valor que especificam os requisitos de recurso do aplicativo. Necessário.
MallocVersion Um inteiro que especifica a versão de malloc, em que 1=standard e 2=mallocng, um malloc aprimorado disponível em versões MUSL maior que 1.2.1. A versão 2 é recomendada para todo o novo desenvolvimento de aplicativos.

A seção Recursos dá suporte ao seguinte:

Nota

Aplicativos de alto nível podem usar valores de funcionalidade de arquivos de definição de hardware ou podem usar valores brutos. No entanto, você não pode misturar ambos os tipos de valor na mesma funcionalidade. Os RTApps podem usar apenas valores brutos para recursos.

Nome Descrição
Adc O controlador ADC (conversão analógica para digital) usado pelo aplicativo. Essa funcionalidade reserva todo o controlador ADC (que compreende um bloco de 8 pinos), não apenas fixar 0 no bloco.
Em um aplicativo de alto nível, especifique o nome periférico declarado no arquivo de cabeçalho de definição de hardware.
Em um RTApp, especifique o AppManifestValue declarado no arquivo JSON de definição de hardware.
Exemplo de definição de hardware:"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Exemplo de valor bruto:"Adc": [ "ADC-CONTROLLER-0" ]
Referência da API:Applibs adc.h
Conceitual:usando ADCs no Azure Sphere
AllowedApplicationConnections Uma lista de IDs do componente do aplicativo à qual o aplicativo tem permissão para se conectar.
Exemplo:"AllowedApplicationConnections": [ "005180BC-402F-4CB3-A662-72937DBCDE47" ]
Referência da API:Applibs application.h
Conceitual:Comunicar-se com um aplicativo de alto nível
AllowedConnections Uma lista de nomes de host DNS ou endereços IP (IPv4) aos quais o aplicativo tem permissão para se conectar. Se o aplicativo usar um Hub IoT do Azure, a lista deverá incluir o endereço IP ou o nome do host DNS para o hub, normalmente hub-name.azure-devices.net. Números de porta e caracteres curinga em nomes e endereços IP não são aceitos.
Exemplo:"AllowedConnections" : [ "my-hub.example.net", "global.azure-devices-provisioning.net" ]
AllowedTcpServerPorts Uma lista de portas que permitem o tráfego TCP de entrada. Você pode incluir até 10 portas e cada porta deve ser listada individualmente. As portas com suporte são de 1024 a 65535. Você pode especificar as mesmas portas para TCP e UDP. No entanto, se você especificar a mesma porta para mais de um aplicativo no dispositivo, o segundo aplicativo a ser executado não será carregado.
Exemplo:"AllowedTcpServerPorts": [ 1024, 65535 ]
AllowedUdpServerPorts Uma lista de portas que permitem o tráfego UDP de entrada. Você pode incluir até 10 portas e cada porta deve ser listada individualmente. As portas com suporte são de 1024 a 65535. Você pode especificar as mesmas portas para TCP e UDP. No entanto, se você especificar a mesma porta para mais de um aplicativo no dispositivo, o segundo aplicativo a ser executado não será carregado.
Exemplo:"AllowedUdpServerPorts": [ 1024, 50000 ]
CertStore Um booliano que indica se um aplicativo de alto nível tem permissão para gerenciar certificados com a API do CertStore: true para habilitar a API; caso contrário, false.
Exemplo:"CertStore" : true
DeviceAuthentication Uma cadeia de caracteres que especifica o UUID do locatário do Azure Sphere a ser usado para autenticação do dispositivo.
Exemplo:"DeviceAuthentication": "77304f1f-9530-4157-8598-30bc1f3d66f0"
DhcpService Um booliano que indica se o aplicativo tem permissão para configurar o serviço DHCP: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo:"DhcpService" : true
Referência de API:Applibs networking.h
Conceitual:Usar serviços de rede
EnterpriseWifiConfig Um booliano que indica se um aplicativo de alto nível tem permissão para criar uma rede EAP-TLS e associar certificados a ela: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo:"EnterpriseWifiConfig" : true
ExternalInterrupt Uma lista de interrupções externas que um RTApp usa. Essa funcionalidade não está disponível para aplicativos de alto nível.
Exemplo:"ExternalInterrupt": [ "EINT4", "EINT12" ]
Gpio Uma lista de GPIOs que o aplicativo usa.
Em um aplicativo de alto nível, especifique o nome GPIO declarado no arquivo de cabeçalho de definição de hardware, como $MT 3620_RDB_LED1_RED.
Em um RTApp, especifique os inteiros que correspondem aos números de GPIO no arquivo JSON de definição de hardware. Por exemplo, 8 especifica o GPIO 8.
Exemplo de definição de hardware:"Gpio": [ "$MT3620_RDB_HEADER1_PIN6_GPIO", "$MT3620_RDB_LED1_RED", "$MT3620_RDB_BUTTON_A" ]
Exemplo de valor bruto:"Gpio": [ 8, 12 ]
Referência da API:Applibs gpio.h
Conceitual:usando GPIOs no Azure Sphere
HardwareAddressConfig Um booliano que indica se o aplicativo tem permissão para configurar o endereço de hardware da interface de rede: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo:"HardwareAddressConfig" : true
Referência de API:Applibs networking.h
Conceitual:Usar serviços de rede
HeapMemStats Um booliano que indica se o rastreamento de alocação de memória de heap está habilitado: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo:"HeapMemStats": true
Conceitual:uso de memória em aplicativos de alto nível
I2cMaster Uma lista de interfaces de master I2C que são usadas pelo aplicativo.
Em um aplicativo de alto nível, especifique o nome periférico declarado no arquivo de cabeçalho de definição de hardware.
Em um RTApp, especifique o AppManifestValue declarado no arquivo JSON de definição de hardware.
Exemplo de definição de hardware:"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ]
Exemplo de valor bruto:"I2cMaster": [ "ISU0", "ISU1" ]
Referência da API:Applibs i2c.h
Conceitual:Usando I2C com o Azure Sphere
I2sSubordinate A interface subordinada de Som Inter-IC (I2S) usada por um RTApp. Essa funcionalidade não está disponível para aplicativos de alto nível. Exemplo de valor bruto: "I2sSubordinate": [ "I2S0", "I2S1" ]
MutableStorage Configurações de armazenamento mutáveis que permitem que o aplicativo use armazenamento persistente.
Exemplo:"MutableStorage" : { "SizeKB": 64, }
Referência da API:Applibs storage.h
Conceitual:usando o armazenamento no Azure Sphere
NetworkConfig Um booliano que indica se o aplicativo tem permissão para configurar uma interface de rede: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo:"NetworkConfig" : true
Referência de API:Applibs networking.h
Conceitual:Usar serviços de rede
PowerControls Uma matriz de cadeias de caracteres que representam recursos granulares para controlar o estado de energia do dispositivo. ForcePowerDown e ForceReboot são os únicos valores com suporte.
Aviso: Como o ForcePowerDown e o ForceReboot permitem que um aplicativo encerre imediatamente todos os aplicativos, você deve garantir que seu dispositivo ainda seja capaz de receber atualizações do sistema operacional e do aplicativo. Para obter mais informações e diretrizes, confira Forçar o Power Down e atualizações.
Exemplo:"PowerControls": ["ForcePowerDown", "ForceReboot"]
Referência da API:Applibs powermanagement.h
Conceitual:Gerenciar o estado de power-down para dispositivos do Azure Sphere
Pwm O PWM (modulador de largura de pulso) usado pelo aplicativo.
Em um aplicativo de alto nível, especifique o nome periférico declarado no arquivo de cabeçalho de definição de hardware.
Em um RTApp, especifique o AppManifestValue declarado no arquivo JSON de definição de hardware.
Exemplo de definição de hardware:"Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]
Exemplo de valor bruto:"Pwm": [ "PWM-CONTROLLER-0" ]
Referência da API:Applibs pwm.h
Conceitual:Usar PWMs em aplicativos de alto nível
ReadNetworkProxyConfig Um booliano que indica se o aplicativo tem permissão para recuperar a configuração do proxy: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo:"ReadNetworkProxyConfig": true
Referência de API:Applibs networking.h
Conceitual:Conectar-se aos serviços Web
SntpService Um booliano que indica se o aplicativo tem permissão para configurar o serviço SNTP: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo:"SntpService" : true
Referência de API:Applibs networking.h
Conceitual:servidor SNTP
SoftwareUpdateDeferral Um booliano que indica se o aplicativo tem permissão para adiar atualizações de software por um período limitado: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo:"SoftwareUpdateDeferral" : true
Referência de API:Eventloop applibs.H
Conceitual:Adiar atualizações de dispositivo
SpiMaster Uma lista de interfaces de master SPI usadas pelo aplicativo.
Em um aplicativo de alto nível, especifique o nome periférico declarado no arquivo de cabeçalho de definição de hardware.
Em um RTApp, especifique o AppManifestValue declarado no arquivo JSON de definição de hardware.
Exemplo de definição de hardware:"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ]
Exemplo de valor bruto:"SpiMaster": [ "ISU0", "ISU1" ]
Referência da API:Applibs spi.h
Conceitual:Usando SPI com o Azure Sphere
SystemEventNotifications Um booliano que indica se o aplicativo tem permissão para receber notificações de evento do sistema: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo:"SystemEventNotifications" : true
Referência da API:Applibs sysevent.h
Conceitual:Adiar atualizações de dispositivo
Systemtime Um booliano que indica se o aplicativo tem permissão para configurar o tempo do sistema: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo:"SystemTime" : true
Referência da API:Applibs rtc.h
Conceitual:Gerenciar a hora do sistema e o RTC no Azure Sphere
TimeSyncConfig Um booliano que indica se o aplicativo tem permissão para configurar o serviço de sincronização de tempo: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo:"TimeSyncConfig" : true
Uart Uma lista de periféricos UART que o aplicativo usa. Essa funcionalidade não habilita o UART dedicado em um quadro de desenvolvimento mt3620. Para obter informações sobre o UART dedicado, consulte Criar um aplicativo com capacidade em tempo real.
Em um aplicativo de alto nível, especifique o nome periférico declarado no arquivo de cabeçalho de definição de hardware.
Em um RTApp, especifique o AppManifestValue declarado no arquivo JSON de definição de hardware.
Exemplo de definição de hardware:"Uart": [ "$MT3620_RDB_HEADER2_ISU0_UART", "$MT3620_RDB_HEADER4_ISU1_UART" ]
Exemplo de valor bruto:"Uart": [ "ISU0", "ISU1" ]
Referência da API:Applibs uart.h
Conceitual:Usar UART no Azure Sphere
WifiConfig Um booliano que indica se o aplicativo tem permissão para usar a API WifiConfig para alterar a configuração Wi-Fi: true se o aplicativo tiver a funcionalidade; caso contrário, false.
Exemplo:"WifiConfig" : true
Referência da API:Applibs wificonfig.h
Conceitual:Configurar rede

A seção MutableStorage dá suporte ao seguinte:

Nome Descrição
SizeKB Um inteiro que especifica o tamanho do armazenamento mutável em kibibytes. O valor máximo é 64. Um valor de 0 é equivalente a não ter o recurso de armazenamento mutável.

Exemplo

O seguinte mostra um arquivo app_manifest.json de exemplo para um aplicativo de alto nível que tem como destino o hardware de RDB MT3620:

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

O arquivo de exemplo app_manifest.json para MyTestApp faz o seguinte:

  • Passa quatro argumentos de linha de comando para o aplicativo.
  • Só permite conexões com os hosts DNS my-hub.example.net, contoso.azure-devices.net e global.azure-devices-provisioning.net.
  • Permite o tráfego TCP de entrada nas portas 1024 e 65535.
  • Permite o tráfego UDP de entrada nas portas 1024 e 50000.
  • Especifica um locatário do Azure Sphere a ser usado para autenticação de dispositivo e permite conexões com o Serviço de Provisionamento de Dispositivos.
  • Especifica o uso de três GPIOs.
  • Permite que o aplicativo configure o endereço de hardware da interface de rede.
  • Especifica o uso de um periférico UART.
  • Habilita o armazenamento mutável com 64 kibibytes de espaço de armazenamento.
  • Permite que o aplicativo use a API WifiConfig para alterar a configuração do Wi-Fi.
  • Especifica o uso de uma interface master SPI.
  • Especifica o uso de uma interface de master I2C.
  • Permite que o aplicativo configure o tempo do sistema usando a API RTC.
  • Habilita o mallocng para o desenvolvimento de aplicativos.