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 :
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. Le paramètre
<string>3</string>
définit la prise en charge de tvOS. 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.
Pour plus d’informations sur cette fonction, y compris un exemple de code, reportez-vous à
Hébergement externe de fichiers SWF secondaires pour applications AIR sur iOS
, une publication de blog par Abhinav Dhandh, ingénieur chez Adobe.
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>
|
|
|