Le impostazioni che riguardano esclusivamente i dispositivi iOS vengono inserite nell'elemento
<iPhone>
del descrittore dell'applicazione. L'elemento
iPhone
può avere come elementi secondari un elemento
InfoAdditions
, un elemento
requestedDisplayResolution
, un elemento
Entitlements
, un elemento
externalSwfs
e un elemento
forceCPURenderModeForDevices
.
L'elemento
InfoAdditions
permette di specificare coppie chiave-valore che vengono aggiunte al file di impostazioni Info.plist dell'applicazione. Ad esempio, i valori seguenti impostano lo stile della barra di stato dell'applicazione e indicano che l'applicazione non richiede un accesso WiFi continuo.
<InfoAdditions>
<![CDATA[
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleBlackOpaque</string>
<key>UIRequiresPersistentWiFi</key>
<string>NO</string>
]]>
</InfoAdditions>
Le impostazioni InfoAdditions sono racchiuse in un tag
CDATA
.
L'elemento
Entitlements
permette di specificare coppie chiave-valore che vengono aggiunte al file di impostazioni Entitlements.plist dell'applicazione. Le impostazioni Entitlements.plist consentono all'applicazione di accedere a determinate funzioni iOS, quali le notifiche push.
Per informazioni più dettagliate sulle impostazioni Info.plist e Entitlements.plist, consultate la documentazione per gli sviluppatori Apple.
Supporto delle attività in background in iOS
Adobe AIR 3.3 e versioni successive supporta il multitasking in iOS mediante l'abilitazione di determinati comportamenti di background:
Nota:
Con SWF versione 21 e precedenti, AIR non supporta l'esecuzione in background su iOS e Android se l'opzione renderMode è impostata su direct. A causa di tale restrizione, le applicazioni basate su Stage3D non possono eseguire attività in background come la riproduzione audio, gli aggiornamenti della posizione, upload o download tramite rete e così via. iOS non consente OpenGLES o il rendering delle chiamate in background. Le applicazioni che cercano di effettuare chiamate OpenGL in background vengono chiuse da iOS. Android non impedisce alle applicazioni di effettuare chiamate OpenGLES in background o di eseguire altre attività in background, come la riproduzione audio. Con SWF versione 22 e successive, le applicazioni AIR per dispositivi mobili possono essere eseguite in background se l'opzione renderMode è impostata su direct. Il runtime di iOS AIR risulta in un errore ActionScript (3768: L'API Stage3D non può essere utilizzata durante l'esecuzione in background) se le chiamate OpenGLES vengono effettuate in background. Tuttavia in Android non si verificano errori in quanto le applicazioni native possono effettuare chiamate OpenGLES in background. Per un utilizzo ottimale delle risorse per dispositivi mobili, non effettuate chiamate di rendering mentre c'è un'applicazione in esecuzione in background.
Audio in background
Per abilitare la riproduzione e la registrazione in background, includete la seguente coppia chiave-valore nell'elemento
InfoAdditions
:
<InfoAdditions>
<![CDATA[
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
]]>
</InfoAdditions>
Aggiornamenti della posizione in background
Per abilitare gli aggiornamenti della posizione in background, includete la seguente coppia chiave-valore nell'elemento
InfoAdditions
:
<InfoAdditions>
<![CDATA[
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
]]>
</InfoAdditions>
Nota:
utilizzate questa funzione solo se necessario, poiché le API di localizzazione determinano un consumo notevole della batteria.
Connettività in background
Per eseguire brevi attività in background, l'applicazione imposta la proprietà
NativeApplication.nativeApplication.executeInBackground
su
true
.
Ad esempio, l'applicazione potrebbe avviare un'operazione di caricamento file dopo la quale l'utente porta in primo piano un'altra applicazione. Quando l'applicazione riceve un evento di completamento upload, può impostare
NativeApplication.nativeApplication.executeInBackground
su
false
.
L'impostazione della proprietà
NativeApplication.nativeApplication.executeInBackground
su
true
non garantisce che l'applicazione venga eseguita a tempo indefinito, poiché iOS impone un limite di tempo per le attività in background. Quando iOS arresta l'elaborazione in background, AIR invia l'evento
NativeApplication.suspend
.
Possibilità di non eseguire l'app in background
È possibile impedire esplicitamente l'esecuzione in background dell'applicazione includendo la seguente coppia chiave-valore nell'elemento
InfoAdditions
:
<InfoAdditions>
<![CDATA[
<key>UIApplicationExitsOnSuspend</key>
<true/>
]]>
</InfoAdditions>
Impostazioni iOS InfoAdditions riservate
AIR imposta varie voci del file nel file Info.plist generato, al fine di garantire che le funzioni dell'applicazione e del runtime funzionino correttamente. Non è possibile definire le seguenti impostazioni:
CFBundleDisplayName
CFBundleExecutable
CFBundleIconFiles
CFBundleIdentifier
CFBundleInfoDictionaryVersion
CFBundlePackageType
CFBundleResourceSpecification
CFBundleShortVersionString
CFBundleSupportedPlatforms
CFBundleVersion
CTAutoOrients
|
CTInitialWindowTitle
CTInitialWindowVisible
CTIosSdkVersion
CTMaxSWFMajorVersion
DTPlatformName
DTSDKName
MinimumOSVersion (riservato fino a 3.2)
NSMainNibFile
UIInterfaceOrientation
UIStatusBarHidden
UISupportedInterfaceOrientations
|
Nota:
È possibile definire MinimumOSVersion. La definizione di MinimumOSVersion viene eseguita in Air 3.3 e versioni successive.
Supporto di modelli di dispositivo iOS differenti
Per il supporto iPad, includete le impostazioni chiave-valore appropriate per
UIDeviceFamily
nell'elemento
InfoAdditions
. L'impostazione
UIDeviceFamily
è un array di stringhe. Ogni stringa definisce i dispositivi supportati. L'impostazione
<string>1</string>
definisce il supporto per l'iPhone e l'iPod Touch. L'impostazione
<string>2</string>
definisce il supporto per l'iPad. L'impostazione
<string>3</string>
definisce il supporto per tvOS. Se specificate una sola di queste stringhe, solo quella famiglia di dispositivi è supportata. Ad esempio, l'impostazione seguente limita il supporto all'iPad:
<key>UIDeviceFamily</key>
<array>
<string>2</string>
</array>>
L'impostazione seguente supporta entrambe le famiglie di dispositivi (iPhone/iPod Touch e iPad):
<key>UIDeviceFamily</key>
<array>
<string>1</string>
<string>2</string>
</array>
Inoltre, in AIR 3.7 e versioni successive, potete utilizzare il tag
forceCPURenderModeForDevices
per richiedere la modalità di rendering CPU per un insieme di dispositivi specificato e abilitare la modalità di rendering GPU per i dispositivi iOS rimanenti.
Aggiungete questo tag come tag secondario del tag
iPhone
e specificate un elenco separato da spazi contenente i nomi di modello dei dispositivi. Per un elenco di nomi di modello dei dispositivi validi, consultate
forceCPURenderModeForDevices
.
Ad esempio, per utilizzare la modalità CPU per iPod, iPhone e iPad meno recenti e attivare la modalità GPU per tutti gli altri dispositivi, specificate quanto segue nel descrittore dell'applicazione:
...
<renderMode>GPU</renderMode>
...
<iPhone>
...
<forceCPURenderModeForDevices>iPad1,1 iPhone1,1 iPhone1,2 iPod1,1
</forceCPURenderModeForDevices>
</iPhone>
Display ad alta risoluzione
L'elemento
requestedDisplayResolution
specifica se l'applicazione deve utilizzare la modalità di risoluzione
standard
o
elevata
nei dispositivi iOS con schermi ad alta risoluzione.
<requestedDisplayResolution>high</requestedDisplayResolution>
Nella modalità ad alta risoluzione, è possibile indirizzare individualmente ogni singolo pixel di un display ad alta risoluzione. Nella modalità standard, lo schermo del dispositivo apparirà all'applicazione come schermo a risoluzione standard. L'operazione di disegno di un pixel singolo in questa modalità imposta il colore di quattro pixel sullo schermo ad alta risoluzione.
L'impostazione predefinita è
standard
. Considerate che per i dispositivi iOS di destinazione, dovete utilizzare l'elemento
requestedDisplayResolution
come elemento secondario dell'elemento
iPhone
(non l'elemento
InfoAdditions
o
initialWindow
).
Se desiderate utilizzare impostazioni diverse in vari dispositivi, specificate il valore predefinito come valore dell'elemento
requestedDisplayResolution
. Utilizzate l'attributo
excludeDevices
per specificare dispositivi che dovrebbero utilizzare il valore opposto. Ad esempio, con il seguente codice, la modalità ad alta risoluzione è utilizzata per tutti i dispositivi che la supportano, eccetto gli iPad di terza generazione, che utilizzano la modalità standard:
<requestedDisplayResolution excludeDevices="iPad3">high</requestedDisplayResolution>
L'attributo
excludeDevices
è disponibile in AIR 3.6 e versioni successive.
Schemi URI personalizzati per iOS
Potete registrare uno schema URI personalizzato per consentire all'applicazione di essere chiamata da un collegamento inserito in una pagina Web o in un'altra applicazione, nativa, del dispositivo. Per registrare uno schema URI, aggiungete una chiave CFBundleURLTypes all'elemento InfoAdditions. L'esempio seguente registra uno schema URI denominato
com.example.app
per consentire a un'applicazione di essere chiamata dagli URL con il formato
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 l'applicazione viene attivata da un URI personalizzato, l'oggetto NativeApplication invia un evento
invoke
. L'URL del collegamento, inclusi i parametri di query, viene inserito nell'array
arguments
dell'oggetto InvokeEvent. Potete usare un numero illimitato di schemi URI personalizzati.
Nota:
i collegamenti in un'istanza StageWebView non possono aprire URL che impiegano schemi URI personalizzati.
Nota:
se un'altra applicazione ha già registrato uno schema, la vostra applicazione non può sostituirla come applicazione registrata per quello schema URI.
Filtro di compatibilità iOS
Aggiungete delle voci a un array UIRequiredDeviceCapabilities nell'elemento
InfoAdditions
se l'applicazione deve essere utilizzata solo con dispositivi provvisti di specifiche funzionalità hardware o software. Ad esempio, la voce seguente indica che un'applicazione richiede una fotocamera e un microfono:
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>microphone</string>
<string>still-camera</string>
</array>
Se un dispositivo non è dotato della funzionalità corrispondente, l'applicazione non può essere installata. Le impostazioni relative alle funzionalità rilevanti per le applicazioni AIR sono:
telephony
wifi
sms
still-camera
auto-focus-camera
front-facing-camera
|
camera-flash
video-camera
accelerometer
location-services
gps
microphone
|
AIR 2.6+ aggiunge automaticamente
armv7
e
opengles-2
all'elenco delle funzionalità richieste.
Nota:
non dovete obbligatoriamente includere queste funzionalità nel descrittore dell'applicazione affinché l'applicazione possa utilizzarle. Utilizzate le impostazioni UIRequiredDeviceCapabilities solo per impedire agli utenti di installare l'applicazione nei dispositivi sui quali non può funzionare correttamente.
Uscita anziché pausa
Quando un utente abbandona un'applicazione AIR, questa passa in background ed entra in pausa. Se volete chiudere completamente un'applicazione anziché metterla in pausa, impostate la proprietà
UIApplicationExitsOnSuspend
su
YES
:
<key>UIApplicationExitsOnSuspend</key>
<true/>
Riduzione delle dimensioni di download tramite il caricamento di SWF esterni di sole risorse
Potete ridurre le dimensioni iniziali di download dell'applicazione creando un pacchetto con un sottoinsieme di SWF utilizzati dall'applicazione, quindi caricando i rimanenti SWF esterni (di sole risorse) in fase di runtime mediante il metodo
Loader.load()
. Per utilizzare questa funzione, create l'applicazione in modo che ADT sposti tutti i componenti ActionScript ByteCode (ABC) dai file SWF caricati esternamente all'SWF dell'applicazione principale, dando origine a un file SWF che contiene soltanto risorse. In tal modo viene rispettata la regola di Apple Store che non consente il download di codice aggiuntivo dopo l'installazione di un'applicazione.
Per supportare i file SWF caricati esternamente (detti anche file SWF stripped) ADT effettua le seguenti operazioni:
-
Legge il file di testo specificato nell'elemento
<iPhone>
, sottoelemento
<externalSwfs>
, per accedere all'elenco delimitato da linee dei file SWF da caricare al momento dell'esecuzione:
<iPhone>
...
<externalSwfs>FilewithPathsOfSWFsThatAreToNotToBePackaged.txt</externalSwfs>
</iPhone>
-
Trasferisce il codice ABC da ciascun file SWF caricato esternamente al file eseguibile principale.
-
Omette i file SWF caricati esternamente dal file .ipa.
-
Copia i file SWF stripped nella directory
.remoteStrippedSWFs
. Potete salvare i file SWF su un server Web host. L'applicazione caricherà tali file quando necessario durante la fase di runtime.
Indicate i file SWF da caricare in fase di runtime specificandone i nomi in un file di testo, uno per riga, come mostrato nel seguente esempio:
assets/Level1/Level1.swf
assets/Level2/Level2.swf
assets/Level3/Level3.swf
assets/Level4/Level4.swf
Il percorso del file specificato è relativo al file descrittore dell'applicazione. Inoltre è necessario specificare questi file SWF come risorse nel comando
adt
.
Nota:
Questa funzione è valida soltanto per la creazione di package standard. Per la creazione di package rapida (ad esempio con utilizzo di interpreter, simulator o debug), ADT non crea file SWF stripped.
Per ulteriori informazioni su questa funzione e un esempio di codice, consultate
External hosting of secondary SWFs for AIR apps on iOS
(Hosting esterno di SWF secondari per applicazioni AIR su iOS), un post del blog creato dall'ingegnere di Adobe Abhinav Dhandh.
Supporto di localizzazione geografica
Per il supporto di localizzazione geografica, aggiungete una delle seguenti coppie chiave-valore all'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>
|
|
|