Configurações do iOS

As configurações aplicáveis somente aos dispositivos iOS são colocadas no elemento <iPhone> no descritor do aplicativo. O elemento iPhone pode ter um elemento InfoAdditions , um elemento requestedDisplayResolution , um elemento Entitlements , um elemento externalSwfs e um elemento forceCPURenderModeForDevices como filhos.

O elemento InfoAdditions permite especificar pares de valores chave que são adicionados ao arquivo de configurações Info.plist do aplicativo. Nesse exemplo, os valores definem o estilo da barra de estilo do aplicativo e determinam que o aplicativo não requer acesso WiFi contínuo.
<InfoAdditions> 
                            <![CDATA[ 
                            <key>UIStatusBarStyle</key> 
                            <string>UIStatusBarStyleBlackOpaque</string> 
                            <key>UIRequiresPersistentWiFi</key> 
                            <string>NO</string> 
                            ]]> 
                            </InfoAdditions>

As configurações de InfoAdditions são anexadas a uma tag CDATA .

O elemento Entitlements permite especificar pares de valores chave que são adicionados ao arquivo de configurações Entitlements.plist do aplicativo. As configurações Entitlements.plist permitem que o aplicativo acesse determinados recursos do iOS, como por exemplo notificações por push.

Para obter informações mais detalhadas sobre as configurações de Info.plist e Entitlements.plist, consulte a documentação do desenvolvedor da Apple.

Tarefas em segundo plano de suporte no iOS

Adobe AIR 3.3 e superior oferece suporte a multitarefa no iOS ativando determinados comportamentos de segundo plano:

  • Áudio

  • Atualizações de local

  • Sistemas de rede

  • Cancelar a execução de aplicativos em segundo plano

Nota: Com o swf versão 21 e suas versões anteriores, o AIR não oferece suporte a execução em segundo plano em iOS e Android quando o modo de renderização estiver definido como direto. Devido a essa restrição, os aplicativos baseados em Stage3D não conseguem executar tarefas em segundo plano, como reprodução de áudio, atualizações de locais, upload ou download de rede etc. O iOS não permite renderização de chamadas ou OpenGLES em segundo plano. Aplicativos que tentam fazer chamadas OpenGL em segundo plano são encerrados pelo iOS. O Android não restringe aplicativos de realizar chamadas OpenGLES em segundo plano ou outra tarefa em segundo plano, como reprodução de áudio. Com o swf versão 22 e posteriores, os aplicativos móveis do AIR podem ser executados em segundo plano quando o renderMode estiver definido como direto. O runtime do iOS AIR resulta em um erro de ActionScript (3768 - a API Stage3D não pode ser usada durante a execução em segundo plano) se as chamadas de OpenGLES forem executadas em segundo plano. Entretanto, não há erros em Android pois seus aplicativos nativos podem realizar chamadas de OpenGLES em segundo plano. Para o uso ideal do recurso remoto, não faça chamadas de renderização enquanto um aplicativo é executado em segundo plano.

Áudio de fundo

Para ativar a reprodução e a gravação de áudio de fundo, inclua o seguinte par de valores-chave no elemento InfoAdditions :

<InfoAdditions> 
                                <![CDATA[ 
                                <key>UIBackgroundModes</key> 
                                <array> 
                                <string>audio</string> 
                                </array> 
                                ]]> 
                                </InfoAdditions>

Atualizações de local de fundo

Para ativar atualizações de local de fundo, inclua o seguinte par de valores-chave no elemento InfoAdditions :

<InfoAdditions> 
                                <![CDATA[ 
                                <key>UIBackgroundModes</key> 
                                <array> 
                                <string>location</string> 
                                </array> 
                                ]]> 
                                </InfoAdditions>
Nota: Use esse recurso apenas quando necessário, já que APIs de local são um consumidor significativo de bateria.

Rede de fundo

Para executar tarefas curtas em segundo plano, seu aplicativo define a propriedade NativeApplication.nativeApplication.executeInBackground como true .

Por exemplo, seu aplicativo pode iniciar uma operação de carregamento de arquivo, depois da qual o usuário move outro aplicativo para a frente. Quando o aplicativo recebe um evento de conclusão de carregamento, ele pode definir NativeApplication.nativeApplication.executeInBackground como false .

A definição da propriedade NativeApplication.nativeApplication.executeInBackground como true não garante que o aplicativo será executado indefinidamente, já que o iOS impõe um limite de tempo para tarefas em segundo plano. Quando o iOS interrompe o processamento em segundo plano, o AIR despacha o evento NativeApplication.suspend .

Cancelar a execução em segundo plano

Seu aplicativo pode explicitamente cancelar a execução em segundo plano incluindo o seguinte par de valores-chave no elemento InfoAdditions :

<InfoAdditions> 
                                <![CDATA[ 
                                <key>UIApplicationExitsOnSuspend</key> 
                                <true/> 
                                ]]> 
                                </InfoAdditions>

Configurações reservadas de InfoAdditions do iOS

O AIR define várias entradas no arquivo INfo.plist gerado para garantir que os recursos do aplicativo e o runtime funcionem corretamente. Não é possível definir as configurações a seguir:

CFBundleDisplayName

CFBundleExecutable

CFBundleIconFiles

CFBundleIdentifier

CFBundleInfoDictionaryVersion

CFBundlePackageType

CFBundleResourceSpecification

CFBundleShortVersionString

CFBundleSupportedPlatforms

CFBundleVersion

CTAutoOrients

CTInitialWindowTitle

CTInitialWindowVisible

CTIosSdkVersion

CTMaxSWFMajorVersion

DTPlatformName

DTSDKName

MinimumOSVersion (reservado até 3.2)

NSMainNibFile

UIInterfaceOrientation

UIStatusBarHidden

UISupportedInterfaceOrientations

Nota: É possível definir o MinimumOSVersion. A definição de MinimumOSVersion está presente no Air 3.3 e em versões posteriores.

Suporte a modelos diferentes de dispositivos iOS

Para oferecer suporte a iPad, inclua as configurações adequadas de valores chave para UIDeviceFamily no elemento InfoAdditions . A configuração UIDeviceFamily é uma matriz de sequências de caracteres. Cada sequência de caracteres define os dispositivos suportados. O parâmetro <string>1</string> define o suporte para iPhone e iPod Touch. O ajuste <string>2</string> define o suporte para o iPad. O ajuste <string>3</string> define o suporte para o tvOS. Se você especificar somente uma dessas sequências de caracteres, somente aquela família de dispositivos será suportada. Por exemplo, a configuração a seguir limita o suporte ao iPad:

<key>UIDeviceFamily</key> 
                            <array> 
                            <string>2</string> 
                            </array>>

As configurações a seguir suportam as duas famílias de dispositivos (iPhone/iPod Touch e iPad):

<key>UIDeviceFamily</key> 
                            <array> 
                            <string>1</string> 
                            <string>2</string> 
                            </array>

Além disso, no AIR 3.7 e superiores, é possível usar a tag forceCPURenderModeForDevices para forçar a CPU a entrar no modo de renderização para um conjunto de dispositivos especificado e ativar o modo de renderização da GPU para os dispositivos iOS restantes.

Adicione esta tag como filha da tag iPhone e especifique uma lista separada por espaços com os nomes dos modelos de dispositivos. Para obter uma lista de nomes de modelos de dispositivos válidos, consulte forceCPURenderModeForDevices .

Por exemplo, para usar o modo de CPU em iPods, iPhones e iPads antigos e ativar o modo de GPU para todos os demais dispositivos, especifique o seguinte no descritor do aplicativo:

... 
                            <renderMode>GPU</renderMode> 
                            ... 
                            <iPhone> 
                            ... 
                               <forceCPURenderModeForDevices>iPad1,1 iPhone1,1 iPhone1,2 iPod1,1 
                               </forceCPURenderModeForDevices> 
                            </iPhone>

Exibições em alta resolução

O elemento requestedDisplayResolution especifica se o seu aplicativo usará o modo de resolução padrão ou alta nos dispositivos iOS com tela de alta resolução.

<requestedDisplayResolution>high</requestedDisplayResolution>

No modo de alta resolução, você pode tratar individualmente cada pixel numa exibição de alta resolução. No modo padrão, a tela do dispositivo aparecerá para o seu aplicativo como uma tela de resolução padrão. O desenho de um único pixel nesse modo definirá a cor de quatro pixel na tela de alta resolução.

A definição proposta pelo aplicativo é padrão . Observe que, para o direcionamento de dispositivos iOS, você utiliza o elemento requestedDisplayResolution como um filho do elemento iPhone (não os elementos InfoAdditions ou initialWindow ).

Se desejar utilizar configurações diferentes em dispositivos diferentes, especifique o seu valor padrão como o valor do elemento requestedDisplayResolution . Use o atributo excludeDevices para especificar dispositivos que devem usar o valor oposto. Por exemplo, com o código a seguir, o modo de alta resolução é usado para todos os dispositivos compatíveis, exceto os iPads de 3ª geração, que usam o modo padrão.

<requestedDisplayResolution excludeDevices="iPad3">high</requestedDisplayResolution>

O atributo excludeDevices está disponível no AIR 3.6 e posterior.

Esquemas URI personalizados do iOS

Você pode registrar um esquema URI personalizado para permitir que o seu aplicativo seja invocado por um link numa página da web ou em um outro aplicativo nativo no dispositivo. Para registrar um esquema URI, adicione uma chave CFBundleURLTypes no elemento InfoAdditions. O exemplo a seguir registra um esquema URI denominado com.example.app para permitir que o aplicativo seja invocado por URLs com a forma: example://foo .

<key>CFBundleURLTypes</key> 
                            <array> 
                            <dict> 
                            <key>CFBundleURLSchemes</key> 
                            <array> 
                            <string>example</string> 
                            </array> 
                            <key>CFBundleURLName</key> 
                            <string>com.example.app</string> 
                            </dict> 
                            </array>

Quando o aplicativo é invocado através de um URI personalizado, o objeto NativeApplication envia um evento invoke . A URL do link, incluindo parâmetros de consulta, é colocada no array arguments do objeto InvokeEvent. Você pode usar qualquer número de esquemas URI personalizados.

Nota: Links em uma instância StageWebView não podem abrir URLs que usam um esquema de URI customizado.
Nota: Se outro aplicativo já tiver registrado um esquema, então o seu aplicativo não poderá substituí-lo como um aplicativo registrado para aquele esquema URI.

Filtragem de compatibilidade com o iOS

Adicione entradas a uma matriz UIRequiredDeviceCapabilities dentro do elemento InfoAdditions se o seu aplicativo tiver que ser usado somente em dispositivos com capacidades específicas de hardware ou software. Por exemplo, a entrada a seguir indica que um aplicativo requer uma câmara fotográfica digital e um microfone:

<key>UIRequiredDeviceCapabilities</key> 
                            <array> 
                            <string>microphone</string> 
                            <string>still-camera</string> 
                            </array>

Se um dispositivo não tiver a capacidade correspondente, o aplicativo não poderá ser instalado. As configurações de capacidade relevantes para os aplicativos AIR incluem:

telefonia

wifi

sms

câmara fotográfica digital

câmara com autofoco

câmara voltada para frente

câmara com flash

câmara de vídeo

acelerômetro

serviços de localização

gps

microfone

O AIR 2.6+ adiciona automaticamente armv7 e opengles-2 à lista de capacidades requeridas.

Nota: Não é necessário incluir essas capacidades no descritor do aplicativo para que o seu aplicativo as utilize. Use as configurações de UIRequiredDeviceCapabilities somente para impedir que os usuários instalem seu aplicativo em dispositivos nos quais não possam funcionar adequadamente.

Sair em vez de pausar

Quando um usuário sai de um aplicativo do AIR, o aplicativo vai para o segundo plano e pausa. Se você quiser que o seu aplicativo seja encerrado completamente, em vez de pausar, defina a propriedade UIApplicationExitsOnSuspend como YES :

<key>UIApplicationExitsOnSuspend</key> 
                            <true/>

Minimizar o tamanho do download carregando SWFs externos com somente ativos

Você pode minimizar o tamanho inicial de download do aplicativo ao empacotar um subconjunto dos SWFs usados por seu aplicativo e carregar os SWFs externos restantes (apenas ativos) no runtime usando o método Loader.load() . Para usar esse recurso, é necessário empacotar o aplicativo para que o ADT mova todo o ActionScript ByteCode (ABC) dos arquivos SWF carregados externamente para o aplicativo SWF principal, deixando um arquivo SWF que contenha todos os recursos. Isso é feito para obedecer à regra da Apple Store que proíbe o download de códigos depois que um aplicativo é instalado.

O ADT realiza o seguinte procedimento para ser compatível com os SWFs carregados externamente (também chamados de SWFs sem código):

  • Lê o arquivo de texto especificado no sub-elemento <externalSwfs> do elemento <iPhone> para acessar a lista determinada por linhas dos SWFs que serão carregados no momento de execução:

    <iPhone> 
                                           ... 
                                           <externalSwfs>FilewithPathsOfSWFsThatAreToNotToBePackaged.txt</externalSwfs> 
                                        </iPhone>
  • Transfere o código ABC de cada SWF carregado externamente para o executável principal.

  • Omite o SWF carregado externamente do arquivo .ipa.

  • Copia os SWFs sem código para o diretório .remoteStrippedSWFs . Você hospeda esses SWFs em um servidor da Web e seu aplicativo os carrega, conforme necessário, no runtime.

Você indica que os arquivos SWF devem ser carregados no runtime especificando seus nomes, um por linha em um arquivo de texto, conforme o exemplo a seguir:

assets/Level1/Level1.swf 
                            assets/Level2/Level2.swf 
                            assets/Level3/Level3.swf 
                            assets/Level4/Level4.swf

O caminho do arquivo especificado é relativo ao arquivo do descritor do aplicativo. Além disso, esses SWFs devem ser especificados como ativos no comando adt .

Nota: Esse recurso se aplica apenas ao empacotamento padrão. Para um empacotamento rápido (usando por exemplo, o intérprete, o simulador ou o depurador) o ADT não cria SWFs sem código.

Suporte à geolocalização

Para usar o suporte à geolocalização, adicione um dos seguintes pares de valores-chave ao elemento InfoAdditions :

<InfoAdditions> 
                            <![CDATA[ 
                            <key>NSLocationAlwaysUsageDescription</key> 
                            <string>Sample description to allow geolocation always</string> 
                            <key>NSLocationWhenInUseUsageDescription</key> 
                            <string>Sample description to allow geolocation when application is in foreground</string>               
                            ]]> 
                            </InfoAdditions>