Impostazioni iOS

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:

  • Audio

  • Aggiornamenti della posizione

  • Connettività di rete

  • Possibilità di non eseguire l'app in 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.

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>