La configuración que solo se aplica a los dispositivos de iOS se sitúa en el elemento
<iPhone>
en el descriptor de la aplicación. El elemento
iPhone
puede tener un elemento
InfoAdditions
, un elemento
requestedDisplayResolution
, un elemento
Entitlements
, un elemento
externalSwfs
y un
forceCPURenderModeForDevices
como elementos secundarios.
El elemento
InfoAdditions
permite especificar pares clave-valor que se añaden al archivo de configuración Info.plist para la aplicación. Por ejemplo, los siguientes valores definen la barra de estado de la aplicación y establecen que la aplicación no requiere acceso permanente a redes Wi-Fi.
<InfoAdditions>
<![CDATA[
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleBlackOpaque</string>
<key>UIRequiresPersistentWiFi</key>
<string>NO</string>
]]>
</InfoAdditions>
Los parámetros de InfoAdditions se encierran entre etiquetas
CDATA
.
El elemento
Entitlements
permite especificar pares clave-valor al archivo de configuración Entitlements.plist para la aplicación. El archivo de configuración Entitlements.plist proporciona acceso a la aplicación a determinadas funciones de iOS, como las notificaciones push.
Para obtener información más detallada sobre otros parámetros de Info.plist y el archivo de configuración Entitlements.plist, consulte la documentación para desarrolladores de Apple.
Soporte para tareas en segundo plano en iOS
Adobe AIR 3.3 y versiones posteriores admiten la multitarea en iOS si se habilitan ciertos comportamientos en segundo plano:
Nota:
Con SWF versión 21 y anteriores, AIR no admite la ejecución de iOS y Android en segundo plano cuando se ha establecido renderMode direct. Debido a esta restricción, las aplicaciones basadas en Stage3D no pueden ejecutar tareas en segundo plano como la reproducción de audio, actualizaciones de ubicación, carga o descarga de red, etc. iOS no permite llamadas OpenGLES o de representación en segundo plano. El sistema iOS cierra las aplicaciones que intentan hacer llamadas OpenGL en segundo plano. Android no restringe ni las llamadas OpenGLES ni otras tareas de aplicaciones en segundo plano, como la reproducción de audio. Con SWF versión 22 y posteriores, las aplicaciones de AIR móviles pueden ejecutarse en un segundo plano cuando se ha establecido renderMode direct. El tiempo de ejecución de AIR iOS produce un error de ActionScript (3768: la API Stage3D no se puede usar durante la ejecución en segundo plano) si las llamadas OpenGLES se realizan en segundo plano. Sin embargo, no hay errores en Android porque sus aplicaciones nativas pueden realizar llamadas OpenGLES en segundo plano. Para el uso óptimo de recursos móviles, no realice llamadas de procesamiento cuando una aplicación se está ejecutando en segundo plano.
Audio en segundo plano
Para habilitar la reproducción de audio y la grabación en segundo plano, incluya el siguiente par clave-valor en el elemento
InfoAdditions
:
<InfoAdditions>
<![CDATA[
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
]]>
</InfoAdditions>
Actualizaciones de ubicación en segundo plano
Para habilitar las actualizaciones de ubicación en segundo plano, incluya el siguiente par clave-valor en el elemento
InfoAdditions
:
<InfoAdditions>
<![CDATA[
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
]]>
</InfoAdditions>
Nota:
utilice esta función solo cuando sea necesario, ya que las API de ubicación consumen mucha batería.
Redes en segundo plano
Para ejecutar tareas cortas en segundo plano, la aplicación establece la propiedad
NativeApplication.nativeApplication.executeInBackground
en
true
.
Por ejemplo, la aplicación puede iniciar una operación de carga de archivo tras la cual el usuario acceder a otra aplicación en primer plano. Cuando la aplicación recibe un evento de finalización de carga, puede establecer
NativeApplication.nativeApplication.executeInBackground
en
false
.
Establecer la propiedad
NativeApplication.nativeApplication.executeInBackground
en
true
no garantiza que la aplicación se ejecute indefinidamente, ya que iOS impone un límite de tiempo a las tareas en segundo plano. Cuando iOS detiene el procesamiento en segundo plano, AIR distribuye el evento
NativeApplication.suspend
.
Anulación de la ejecución en segundo plano
La aplicación puede anular de forma explícita la ejecución en segundo plano si incluye el siguiente par clave-valor en el elemento
InfoAdditions
:
<InfoAdditions>
<![CDATA[
<key>UIApplicationExitsOnSuspend</key>
<true/>
]]>
</InfoAdditions>
Configuración reservada de InfoAdditions de iOS
AIR establece varias entradas en el archivo Info.plist generado para garantizar que las funciones del motor de ejecución y la aplicación funcionan correctamente. No se pueden definir las siguientes opciones:
CFBundleDisplayName
CFBundleExecutable
CFBundleIconFiles
CFBundleIdentifier
CFBundleInfoDictionaryVersion
CFBundlePackageType
CFBundleResourceSpecification
CFBundleShortVersionString
CFBundleSupportedPlatforms
CFBundleVersion
CTAutoOrients
|
CTInitialWindowTitle
CTInitialWindowVisible
CTIosSdkVersion
CTMaxSWFMajorVersion
DTPlatformName
DTSDKName
MinimumOSVersion (reservado hasta 3.2)
NSMainNibFile
UIInterfaceOrientation
UIStatusBarHidden
UISupportedInterfaceOrientations
|
Nota:
Puede definir MinimumOSVersion. La definición de MinimumOSVersion se proporciona en AIR 3.3 y posterior.
Compatibilidad con diferentes modelos de dispositivo de iOS
Para la compatibilidad con iPad, incluya la configuración adecuada de clave-valor para
UIDeviceFamily
en el elemento
InfoAdditions
. La configuración de
UIDeviceFamily
se expresa en un conjunto de cadenas. Cada cadena define los dispositivos admitidos. La configuración
<string>1</string>
define la compatibilidad con el iPhone y el iPod touch. La configuración
<string>2</string>
define la compatibilidad con iPad.La configuración
<string>3</string>
define la compatibilidad con tvOS. Si especifica solo una de estas cadenas, solo se admitirá dicha familia de dispositivos. Por ejemplo, la siguiente configuración limita la compatibilidad al iPad:
<key>UIDeviceFamily</key>
<array>
<string>2</string>
</array>>
La siguiente configuración admite ambas familias de dispositivos (iPhone/iPod touch e iPad):
<key>UIDeviceFamily</key>
<array>
<string>1</string>
<string>2</string>
</array>
Además, en AIR 3.7 y posterior, puede utilizar la etiqueta
forceCPURenderModeForDevices
para forzar el modo de representación de CPU para un conjunto de dispositivos específicos y activar el modo de representación de GPU para los restantes dispositivos iOS.
Esta etiqueta se agrega como un elemento secundario de la etiqueta
iPhone
y se especifica una lista de nombres de modelos de dispositivos separados por espacios. Para obtener una lista de nombres de modelos de dispositivos válidos, consulte
forceCPURenderModeForDevices
.
Por ejemplo, para utilizar el modo de CPU en iPod, iPhons y iPad antiguos, y activar el modo de GPU para todos los demás dispositivos, especifique lo siguiente en el descriptor de la aplicación:
...
<renderMode>GPU</renderMode>
...
<iPhone>
...
<forceCPURenderModeForDevices>iPad1,1 iPhone1,1 iPhone1,2 iPod1,1
</forceCPURenderModeForDevices>
</iPhone>
Pantallas de alta resolución
El elemento requestedDisplayResolution
especifica si la aplicación debe utilizar el modo de resolución
estándar
o
alta
en los dispositivos de iOS con pantallas de alta resolución.
<requestedDisplayResolution>high</requestedDisplayResolution>
En el modo de alta resolución, cada píxel se puede tratar en una pantalla de alta resolución de forma individual. En el modo estándar, la pantalla del dispositivo aparecerá en la aplicación como pantalla de resolución estándar. Al dibujar un solo píxel en este modo, se establecerá el color de cuatro píxeles en la pantalla de alta resolución.
El valor predeterminado es
standard
. Cuando se piensa en dispositivos iOS,
requestedDisplayResolution
se usa como elemento secundario del elemento
iPhone
(no del elemento
InfoAdditions
initialWindow
).
Si quiere usar configuraciones distintas en dispositivos diferentes, especifique el valor predeterminado como valor del elemento
requestedDisplayResolution
. Use el atributo
excludeDevices
para especificar dispositivos que deberían usar el valor opuesto. Por ejemplo, con el código siguiente se usa el modo de alta resolución para todos los dispositivos que lo admiten, excepto para iPads de tercera generación, que usan el modo estándar:
<requestedDisplayResolution excludeDevices="iPad3">high</requestedDisplayResolution>
El atributo
excludeDevices
está disponible a partir de AIR 3.6.
Esquemas de URI personalizados de Android
Es posible registrar un esquema de URI personalizado para permitir que la aplicación se invoque mediante un vínculo en una página web u otra aplicación nativa en el dispositivo. Para registrar un esquema de URI, añada una clave CFBundleURLTypes al elemento InfoAdditions. En el siguiente ejemplo se registra un esquema de URI denominado
com.example.app
para permitir que una aplicación se pueda invocar mediante las direcciones URL con la 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>
Cuando la aplicación se invoca mediante un URI personalizado, el objeto NativeApplication distribuye un evento
invoke
. La URL del vínculo, incluyendo parámetros de consulta, se ubica en el conjunto
arguments
del objeto InvokeEvent. Se puede utilizar cualquier número de esquemas de URI personalizadas.
Nota:
los vínculos de una instancia de StageWebView no pueden abrir direcciones URL que utilicen un esquema URI personalizado.
Nota:
si otra aplicación ya ha registrado un esquema, la aplicación no puede reemplazarlo, ya que la aplicación ya registró ese esquema de URI.
Filtro de compatibilidad con iOS
Añada entradas a un conjunto UIRequiredDeviceCapabilities en el elemento
InfoAdditions
si la aplicación solo se debe utilizar en dispositivos con capacidades de hardware o software específicas. Por ejemplo, la siguiente entrada indica que una aplicación requiere una cámara fija y un micrófono:
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>microphone</string>
<string>still-camera</string>
</array>
Si un dispositivo no tiene la capacidad correspondiente, la aplicación no podrá instalarse. Entre las opciones de configuración de capacidad relevantes para las aplicaciones de AIR se incluyen:
Telefonía
Wifi
sms
Cámara fija
Cámara de enfoque automático
Cámara orientada al frente
|
Flash de cámara
Videocámara
Acelerómetro
Servicios de localización
gps
Micrófono
|
AIR 2.6+ añade automáticamente
armv7
y
opengles-2
a la lista de capacidades requeridas.
Nota:
no es necesario incluir estas capacidades en el descriptor de la aplicación para que la aplicación las utilice. Utilice la configuración UIRequiredDeviceCapabilities solo para evitar que los usuarios instalen la aplicación en dispositivos en los que no puedan funcionar adecuadamente.
Salida en lugar de pausa
Cuando un usuario cambia de una aplicación de AIR, se sitúa de fondo y se detiene. Si desea que la aplicación se cierre completamente en lugar de detenerse, establezca la propiedad
UIApplicationExitsOnSuspend
en
YES
:
<key>UIApplicationExitsOnSuspend</key>
<true/>
Reducir tamaño de descarga mediante la carga externa, los archivos SWF solo de recurso
Puede minimizar el tamaño de descarga inicial de la aplicación mediante el empaquetamiento de un subconjunto de los archivos SWF usados por su aplicación y la carga del resto (solo activos) de archivos SWF externos en tiempo de ejecución con el método
Loader.load(),
. Para utilizar esta función, se debe empaquetar la aplicación de tal manera que ADT mueva todo el código de bytes ActionScript (ABC) de los archivos SWF cargados de forma externa al SWF de la aplicación principal, dejando un archivo SWF que contenga únicamente activos. Esto se hace para cumplir con la regla de la Apple Store que prohíbe descargar código después de que una aplicación esté instalada.
ADT hace lo siguiente para admitir archivos SWF cargados externamente (también denominados archivos SWF quitados):
-
Lee el archivo de texto especificado en el subelemento
<externalSwfs>
del elemento
<iPhone>
para acceder a la lista delimitada por líneas de los archivos SWF que se deben cargar en tiempo de ejecución:
<iPhone>
...
<externalSwfs>FilewithPathsOfSWFsThatAreToNotToBePackaged.txt</externalSwfs>
</iPhone>
-
Transfiere el código ABC desde cada archivo SWF cargado externamente al ejecutable principal.
-
Omite los archivos SWF cargados de forma externa en el archivo .ipa.
-
Copia los archivos SWF quitados al directorio
.remoteStrippedSWFs
. Estos archivos SWF se alojan en un servidor web y la aplicación los carga, según el caso, en tiempo de ejecución.
Los archivos SWF que se deben cargar en tiempo de ejecución se indican mediante la especificación de sus nombres, uno por línea en un archivo de texto, como se muestra en el siguiente ejemplo:
assets/Level1/Level1.swf
assets/Level2/Level2.swf
assets/Level3/Level3.swf
assets/Level4/Level4.swf
La ruta de archivo especificada es relativa al archivo descriptor de la aplicación. Además, debe especificar estos archivos SWF como activos en el comando
adt
.
Nota:
Esta función solo afecta a los embalajes estándar. Para un empaquetado rápido (utilizando por ejemplo, intérprete, simulador o depurar) ADT no crea archivos SWF quitados.
Para obtener más información sobre esta función, incluido código de ejemplo, consulte
Alojamiento externo de archivos SWF secundarios para aplicaciones de AIR en iOS
, publicado en un blog del ingeniero de Adobe Abhinav Dhandh.
Compatibilidad con geolocalización
Para la compatibilidad con geolocalización, añada uno de los pares clave-valor siguientes al 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>
|
|
|