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:
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.
Para obter mais informações sobre esse recurso, incluindo amostras de código, consulte
Hospedagem externa de SWFs secundários para os aplicativos AIR no iOS
, uma postagem de blog do engenheiro da Adobe, Abhinav Dhandh.
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>
|
|
|