Paramètres iOS

Les paramètres réservés aux périphériques iOS sont placés dans l’élément <iPhone> du descripteur de l’application. L’élément iPhone peut avoir un élément InfoAdditions, un élément requestedDisplayResolution, un élément Entitlements, un élément externalSwfs et un élément forceCPURenderModeForDevices comme enfants.

L’élément InfoAdditions permet de spécifier des paires clé-valeur ajoutées au fichier de paramètres Info.plist associé à l’application. Les valeurs suivantes déterminent, par exemple, le style de la barre d’état de l’application et stipulent que cette dernière ne nécessite pas un accès Wi-Fi permanent.
<InfoAdditions> 
                            <![CDATA[ 
                            <key>UIStatusBarStyle</key> 
                            <string>UIStatusBarStyleBlackOpaque</string> 
                            <key>UIRequiresPersistentWiFi</key> 
                            <string>NO</string> 
                            ]]> 
                            </InfoAdditions>

Les paramètres InfoAdditions sont entourés d’une balise CDATA.

L’élément Entitlements permet de spécifier les paires clé-valeur ajoutées au fichier de paramètres Entitlements.plist de l’application. Les paramètres Entitlements.plist permettent à certaines fonctions d’iOS, notamment aux notifications Push, d’accéder à l’application.

Pour plus d’informations sur les paramètres Info.plist et Entitlements.plist, voir la documentation Apple destinée aux développeurs.

Prise en charge de tâches en arrière-plan sous iOS

Adobe AIR 3.3 et les versions ultérieures prennent en charge les multitâches sous iOS en permettant certains comportements en arrière-plan :

  • Audio

  • Mises à jour de l’emplacement

  • Mise en réseau

  • Annulation de l’exécution d’une application en arrière-plan

Remarque : avec les versions 21 et antérieures de SWF, AIR ne prend pas en charge l’exécution en arrière-plan sur iOS et Android lorsque le mode de rendu est défini sur direct. En raison de cette restriction, les applications basées sur Stage3D ne peuvent pas exécuter des tâches en arrière-plan telles que la lecture de l’audio, les mises à jour d’emplacement, les téléchargements vers/depuis le réseau, etc. iOS n’autorise pas les appels OpenGLES/de rendu en arrière-plan. Il interrompt ainsi les applications qui tentent de lancer des appels en arrière-plan. Android ne restreint pas les appels OpenGLES ou toute autre tâche en arrière-plan lancée par les applications (telle que la lecture d’audio). Avec les versions 22 et ultérieures de SWF, les applications mobiles AIR peuvent s’exécuter en arrière-plan lorsque renderMode est définir sur direct. Le moteur d’exécution AIR iOS entraîne une erreur ActionScript (3768 - L’API Stage3D ne peut pas être utilisée lors d’une exécution en arrière-plan) si les appels OpenGLES sont effectués en arrière-plan. Cependant, aucune erreur ne se produit sur Android car ses applications natives sont autorisées à effectuer des appels OpenGLES en arrière-plan. Pour une utilisation optimale des ressources mobiles, n’effectuez pas d’appels de rendu lorsqu’une application s’exécute en arrière-plan.

Son en arrière-plan

Pour activer la lecture et l’enregistrement audio en arrière-plan, incluez la paire clé-valeur suivante à l’élément InfoAdditions :

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

Mises à jour de l’emplacement en arrière-plan

Pour activer les mises à jour de l’emplacement en arrière-plan, incluez la paire clé-valeur suivante à l’élément InfoAdditions :

<InfoAdditions> 
                                <![CDATA[ 
                                <key>UIBackgroundModes</key> 
                                <array> 
                                <string>location</string> 
                                </array> 
                                ]]> 
                                </InfoAdditions>
Remarque : utilisez cette fonction uniquement lorsque cela est nécessaire, car les API d’emplacement consomment énormément de batterie.

Mise en réseau en arrière-plan

Pour exécuter de brèves tâches en arrière-plan, votre application définit la propriété NativeApplication.nativeApplication.executeInBackground sur true.

Par exemple, votre application peut lancer une opération de mise à jour d’un fichier après que l’utilisateur place au premier plan une autre application. Lorsque l’application reçoit un événement de fin de téléchargement, elle peut définir NativeApplication.nativeApplication.executeInBackground sur false.

Définir la propriété NativeApplication.nativeApplication.executeInBackground sur true ne garantit pas l’exécution indéfinie de l’application, car iOS impose une limite temporelle aux tâches en arrière-plan. Lorsque iOS arrête le traitement en arrière-plan, AIR distribue un événement NativeApplication.suspend.

Annulation de l’exécution en arrière-plan

Votre application peut annuler explicitement l’exécution en arrière-plan en incluant la paire clé-valeur suivante à l’élément InfoAdditions :

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

Paramètres InfoAdditions iOS réservés

AIR définit plusieurs entrées dans le fichier Info.plist généré pour s’assurer que les fonctionnalités de l’application et du moteur d’exécution fonctionnent correctement. Il est impossible de définir les paramètres suivants :

CFBundleDisplayName

CFBundleExecutable

CFBundleIconFiles

CFBundleIdentifier

CFBundleInfoDictionaryVersion

CFBundlePackageType

CFBundleResourceSpecification

CFBundleShortVersionString

CFBundleSupportedPlatforms

CFBundleVersion

CTAutoOrients

CTInitialWindowTitle

CTInitialWindowVisible

CTIosSdkVersion

CTMaxSWFMajorVersion

DTPlatformName

DTSDKName

MinimumOSVersion (réservé jusqu’à 3.2)

NSMainNibFile

UIInterfaceOrientation

UIStatusBarHidden

UISupportedInterfaceOrientations

Remarque : Vous pouvez définir MinimumOSVersion. La définition de MinimumOSVersion est prise en charge dans Air 3.3 et les versions ultérieures.

Prise en charge de différents modèles de périphérique iOS

Pour prendre en charge l’iPad, incluez les paramètres clé-valeur appropriés de UIDeviceFamily dans l’élément InfoAdditions. Le paramètre UIDeviceFamily est un tableau de chaînes. Chaque chaîne définit les périphériques pris en charge. Le paramètre <string>1</string> définit la prise en charge de l’iPhone et de l’iPod touch. Le paramètre <string>2</string> définit la prise en charge de l’iPad. Si vous spécifiez uniquement l’un de ces paramètres, seule cette famille de périphériques est prise en charge. Par exemple, le paramètre suivant limite la prise en charge à l’iPad :

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

Le paramètre suivant prend en charge les deux familles de périphériques (iPhone/iPod Touch et iPad) :

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

En outre, dans AIR 3.7 et les versions ultérieures, vous pouvez utiliser la balise forceCPURenderModeForDevices balise pour forcer le mode de rendu UC pour un ensemble de périphériques spécifiés et activer le mode de rendu GPU les périphériques iOS restants.

Vous ajoutez cette balise comme enfant de la balise iPhone et spécifiez une liste de noms de modèles séparés par des espaces. Pour obtenir une liste de noms de modèle valides, reportez-vous à forceCPURenderModeForDevices.

Par exemple, pour utiliser le mode UC dans les anciens iPods, iPhones et iPads, et activer le mode GPU pour tous les autres périphériques, spécifiez ce qui suit dans le descripteur d’application :

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

Affichages à haute résolution

L’élément requestedDisplayResolution indique si l’application doit utiliser le mode de résolution standard ou high sur les périphériques iOS équipés d’un écran à haute résolution.

<requestedDisplayResolution>high</requestedDisplayResolution>

Le mode Haute résolution permet d’adresser individuellement chaque pixel d’un écran à haute résolution. En mode Standard, l’écran du périphérique est assimilé par l’application à un écran à résolution standard. Dessiner un pixel unique en ce mode définit la couleur de quatre pixels sur un écran à haute résolution.

Le paramètre par défaut est standard. Notez que, afin de cibler les périphériques iOS, vous utilisez l’élément requestedDisplayResolution en tant qu’enfant de l’élément iPhone (et non de l’élément InfoAdditions ou initialWindow).

Si vous voulez utiliser d’autres paramètres sur d’autres périphériques, spécifiez la valeur par défaut comme la valeur de l’élément requestedDisplayResolution. Utilisez l’attribut excludeDevices afin de spécifier les périphériques qui doivent utiliser la valeur opposée. Par exemple, avec le code suivant, le mode haute résolution est utilisé sur tous les périphériques qui le prennent en charge, sauf les iPad de 3e génération, qui utilisent le mode standard.

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

L’attribut excludeDevices est disponible dans AIR 3.6 et ultérieur.

Modèles d’URI personnalisés iOS

L’enregistrement d’un modèle d’URI personnalisé permet d’appeler l’application à l’aide d’un lien inséré dans une page Web ou d’une autre application native installée sur le périphérique. Pour enregistrer un modèle d’URI, ajoutez une clé CFBundleURLTypes à l’élément InfoAdditions. L’exemple suivant enregistre un modèle d’URI, com.example.app, afin de permettre l’appel d’une application par le biais d’URL de type : 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>

Si l’application est appelée par le biais d’un URI personnalisé, l’objet NativeApplication distribue un événement invoke. L’URL du lien, paramètres d’interrogation inclus, est placée dans le tableau arguments de l’objet InvokeEvent. Vous disposez d’un nombre illimité de modèles d’URI.

Remarque : les liens dans une occurrence de StageWebView ne peuvent pas ouvrir les URL qui font appel à un modèle d’URI personnalisé.
Remarque : si une autre application a déjà enregistré un modèle d’URI, il est impossible d’associer votre application au modèle.

Filtrage de la compatibilité iOS

Ajoutez des entrées à un tableau UIRequiredDeviceCapabilities dans l’élément InfoAdditions si l’application doit être réservée aux périphériques dotés de fonctionnalités matérielles ou logicielles déterminées. L’entrée suivante indique, par exemple, qu’une application requiert un appareil photo et un microphone :

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

Si le périphérique n’est pas équipé de ces fonctionnalités, il est impossible d’installer l’application. Les paramètres de fonctionnalités associés aux applications AIR sont les suivants :

telephony

wifi

sms

still-camera

auto-focus-camera

front-facing-camera

camera-flash

video-camera

accelerometer

location-services

gps

microphone

AIR 2.6+ ajoute automatiquement armv7 et opengles-2 à la liste des fonctionnalités requises.

Remarque : il est inutile d’inclure ces fonctionnalités dans le descripteur de l’application pour que cette dernière les utilise. Ne faites appel aux paramètres UIRequiredDeviceCapabilities que pour interdire aux utilisateurs d’installer l’application sur un périphérique sur lequel elle ne peut pas fonctionner correctement.

Fermeture plutôt que mise en pause

Lorsqu’un utilisateur quitte par basculement une application AIR, elle s’exécute en arrière-plan et est mise en pause. Pour que l’application se ferme complètement au lieu d’être mise en pause, définissez la propriété UIApplicationExitsOnSuspend sur YES :

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

Réduire la taille des téléchargements en chargeant des fichiers SWF externes d’actifs uniquement

Vous pouvez réduire la taille de téléchargement initiale de l’application en compressant un sous-ensemble des fichiers SWF utilisées par votre application et en chargeant les fichiers SWF externes restants (actif uniquement) lors de l’exécution à l’aide de la méthode Loader.load(). Pour utiliser cette fonction, vous devez compresser l’application de telle sorte qu’ADT déplace tout le pseudo-code ActionScript (ABC) depuis les fichiers SWF chargés en externe vers le fichier SWF principal de l’application, laissant un fichier SWF qui contient uniquement des actifs. Cela est nécessaire pour respecter la règle de l’Apple Store qui interdit le téléchargement tout code une fois qu’une application est installée.

ADT effectue les opérations suivantes pour prendre en charge les fichiers SWF chargés en externe (également appelés fichiers SWF démunis) :

  • Lit le fichier texte spécifié dans le sous-élément <externalSwfs> de l’élément <iPhone> pour accéder à la liste de fichiers SWF séparés par une ligne à charger à la prochaine exécution :

    <iPhone> 
                                           ... 
                                           <externalSwfs>FilewithPathsOfSWFsThatAreToNotToBePackaged.txt</externalSwfs> 
                                        </iPhone>
  • Transfert le code ABC de chaque fichier SWF chargé en externe vers l’exécutable principal.

  • Omet les fichiers SWF chargés en externe du fichier .ipa.

  • Copie les fichiers SWF démunis dans le répertoire .remoteStrippedSWFs. Vous hébergez ces fichiers SWF sur un serveur Web et votre application les charge, au besoin, au moment de l’exécution.

Vous devez indiquer les fichiers SWF à charger au moment de l’exécution en spécifiant leurs noms, un par ligne dans un fichier texte, comme le montre l’exemple suivant :

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

Le chemin d’accès du fichier spécifié est relatif au fichier descripteur de l’application. En outre, vous devez spécifier ces fichiers SWF comme actifs dans la commande adt.

Remarque : Cette fonction s’applique aux compressions standard uniquement. Pour une compression rapide (par exemple à l’aide d’un interpréteur, d’un simulateur, ou d’un débogueur) ADT ne crée pas de fichiers SWF démunis.

Prise en charge de la géolocalisation

Pour la prise en charge de la géolocalisation, ajoutez l’une des paires clé-valeur suivantes à l’élément 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>