Configuración de iOS

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:

  • Audio

  • Actualizaciones de ubicación

  • Redes

  • Anulación de la ejecución de la aplicación 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.

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>