iOS-instellingen

Instellingen die alleen van toepassing zijn op iOS-apparaten worden in het <iPhone> -element in het descriptorbestand van de toepassing geplaatst. Het iPhone -element kan de volgende onderliggende elementen hebben: een InfoAdditions -element, een requestedDisplayResolution -element, een Entitlements -element, een externalSwfs -element en een forceCPURenderModeForDevices -element.

Met het InfoAdditions -element kunt u specifieke sleutel-waardeparen opgeven die worden toegevoegd aan het instellingenbestand Info.plist voor de toepassing. De volgende waarden stellen bijvoorbeeld de stijl van de statusbalk van de toepassing in en geven aan dat voor de toepassing geen permanente Wi-Fi-toegang is vereist.
<InfoAdditions> 
                            <![CDATA[ 
                            <key>UIStatusBarStyle</key> 
                            <string>UIStatusBarStyleBlackOpaque</string> 
                            <key>UIRequiresPersistentWiFi</key> 
                            <string>NO</string> 
                            ]]> 
                            </InfoAdditions>

De InfoAdditions-instellingen worden opgenomen in een CDATA -tag.

Met het Entitlements -element kunt u specifieke sleutelwaardeparen opgeven die worden toegevoegd aan het instellingenbestand Entitlements.plist voor de toepassing. Entitlements.plist-instellingen zorgen ervoor dat de toepassing toegang krijgt tot bepaalde iOS-functies, zoals de functie voor pushberichten.

Zie de documentatie voor ontwikkelaars van Apple voor gedetailleerde informatie over Info.plist- en Entitlements.plist-instellingen.

Ondersteuning voor achtergrondtaken in iOS

Adobe AIR 3.3 en hoger biedt ondersteuning voor multitasking in iOS door bepaalde achtergrondfuncties mogelijk te maken:

  • Audio

  • Locatie-updates

  • Netwerken

  • Uitvoering van apps op achtergrond uitschakelen

Opmerking: in SWF-versie 21 en eerder biedt AIR op iOS en Android geen ondersteuning voor achtergronduitvoering als de rendermodus Direct is ingesteld. Daarom kunnen op Stage3D gebaseerde apps geen achtergrondtaken uitvoeren, zoals het afspelen van audio, het bijwerken van de locatie, het uploaden en downloaden naar en van het netwerk, enz. Op iOS is het uitvoeren van OpenGLES-/renderingaanroepen op de achtergrond niet toegestaan. Toepassingen die proberen OpenGL-aanroepen uit te voeren op de achtergrond worden door iOS beëindigd. Android beperkt toepassingen niet in het uitvoeren van OpenGLES-aanroepen op de achtergrond of in het uitvoeren van andere achtergrondtaken, zoals het afspelen van audio. In SWF-versie 22 en hoger kunnen mobiele AIR-toepassingen op de achtergrond worden uitgevoerd wanneer de renderMode Direct is ingesteld. De AIR iOS-runtime resulteert in een ActionScript-fout (3768 - De Stage3D API kan niet worden gebruikt tijdens uitvoering op de achtergrond) als OpenGLES-aanroepen worden uitgevoerd op de achtergrond. Op Android is echter geen sprake van fouten, omdat native toepassingen OpenGLES-aanvragen kunnen uitvoeren op de achtergrond. Voor optimaal gebruik van mobiele resources kunt u beter geen renderingaanroepen uitvoeren als een toepassing op de achtergrond wordt uitgevoerd.

Achtergrondaudio

Neem het volgende sleutelwaardepaar op in het element InfoAdditions om het afspelen en opnemen van achtergrondaudio in te schakelen:

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

Locatie-updates op de achtergrond

Neem het volgende sleutelwaardepaar op in het element InfoAdditions om locatie-updates op de achtergrond in te schakelen:

<InfoAdditions> 
                                <![CDATA[ 
                                <key>UIBackgroundModes</key> 
                                <array> 
                                <string>location</string> 
                                </array> 
                                ]]> 
                                </InfoAdditions>
Opmerking: gebruik deze functie alleen als het nodig is, aangezien locatie-API's veel van de batterij vergen.

Netwerktaken op de achtergrond

De eigenschap NativeApplication.nativeApplication.executeInBackground wordt door de toepassing ingesteld op true om korte taken op de achtergrond te kunnen uitvoeren.

Het kan bijvoorbeeld wel eens voorkomen dat uw toepassing begint met het uploaden van een bestand, waarna de gebruiker een andere toepassing op de voorgrond plaatst. Als de toepassing een gebeurtenis ontvangt ten tekenen dat het uploaden is voltooid, kan deze NativeApplication.nativeApplication.executeInBackground instellen op false .

Het instellen van de eigenschap NativeApplication.nativeApplication.executeInBackground op true betekent niet dat de toepassing voor onbeperkte tijd wordt uitgevoerd, aangezien iOS een tijdlimiet oplegt aan achtergrondtaken. Als iOS de achtergrondverwerking stopzet, verzendt AIR de gebeurtenis NativeApplication.suspend .

Uitvoering op achtergrond uitschakelen

Uw toepassing kan er expliciet voor kiezen het uitvoeren op de achtergrond uit te schakelen door het volgende sleutelwaardepaar op te nemen in het element InfoAdditions :

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

Gereserveerde InfoAdditions-instellingen voor iOS

Door AIR worden verschillende vermeldingen in het gegenereerde Info.plist-bestand ingesteld om te garanderen dat de toepassings- en runtimefuncties correct werken. U kunt de volgende instellingen niet definiëren:

CFBundleDisplayName

CFBundleExecutable

CFBundleIconFiles

CFBundleIdentifier

CFBundleInfoDictionaryVersion

CFBundlePackageType

CFBundleResourceSpecification

CFBundleShortVersionString

CFBundleSupportedPlatforms

CFBundleVersion

CTAutoOrients

CTInitialWindowTitle

CTInitialWindowVisible

CTIosSdkVersion

CTMaxSWFMajorVersion

DTPlatformName

DTSDKName

MinimumOSVersion (gereserveerd tot 3.2)

NSMainNibFile

UIInterfaceOrientation

UIStatusBarHidden

UISupportedInterfaceOrientations

Opmerking: U kunt MinimumOSVersion definiëren. De MinimumOSVersion-definitie wordt ondersteund in Air 3.3 en hoger.

Verschillende modellen iOS-apparaten ondersteunen

Neem voor iPad-ondersteuning de juiste sleutel-waarde-instellingen voor UIDeviceFamily op in het InfoAdditions -element. De instelling UIDeviceFamily is een array van tekenreeksen. In elke tekenreeks worden ondersteunde apparaten gedefinieerd. De instelling <string>1</string> definieert ondersteuning voor de iPhone en de iPod touch. De instelling <string>2</string> definieert ondersteuning voor de iPad. De instelling <string>3</string> definieert ondersteuning voor de tvOS. Als u slechts één van deze tekenreeksen definieert, wordt alleen de desbetreffende apparaatfamilie ondersteund. Bij de volgende instelling is er bijvoorbeeld alleen ondersteuning voor de iPad:

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

En bij deze instelling is er ondersteuning voor beide apparaatfamilies (de iPhone/iPod touch en iPad):

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

Bovendien kunt u in AIR 3.7 en hoger de tag forceCPURenderModeForDevices gebruiken om de CPU-rendermodus te forceren voor een opgegeven serie apparaten en de GPU-rendermodus in te schakelen voor de resterende iOS-apparaten.

U voegt deze tag toe als een onderliggend element van de iPhone -tag en geeft een lijst op waarin de modelnamen van apparaten met een spatie van elkaar zijn gescheiden. Zie forceCPURenderModeForDevices voor een lijst met geldige modelnamen van apparaten.

Geef bijvoorbeeld het volgende op in het descriptorbestand van de toepassing als u de CPU-modus wilt gebruiken in oudere iPods, iPhones en iPads en de GPU-modus voor alle andere apparaten:

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

Weergave met hoge resolutie

Het element requestedDisplayResolution geeft op of uw toepassing de modus voor standaard of hoge resolutie moet gebruiken op iOS-apparaten met hoge-resolutieschermen.

<requestedDisplayResolution>high</requestedDisplayResolution>

In de hoge-resolutiemodus kunt u elke pixel op een scherm met hoge resolutie afzonderlijk verwerken. In de standaardmodus komt het apparaatscherm op uw toepassing over als een scherm met standaardresolutie. Wanneer u één pixel tekent in deze modus, wordt de kleur van vier pixels op het scherm met hoge resolutie ingesteld.

De standaardinstelling is standard . Merk op dat u voor het plaatsen van iOS-apparaten het requestedDisplayResolution -element gebruikt als een onderliggend element van het iPhone -element (niet het InfoAdditions -element of initialWindow -element).

Als u verschillende instellingen wilt gebruiken op verschillende apparaten, geeft u uw standaardwaarde op als de waarde van het requestedDisplayResolution -element. Gebruik het excludeDevices -attribuut om apparaten op te geven die de tegenovergestelde waarde moeten gebruiken. Met de volgende code, bijvoorbeeld, wordt de modus voor hoge resolutie gebruikt voor alle apparaten die deze ondersteunen, behalve iPad's van de derde generatie, die de standaardmodus gebruiken:

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

Het excludeDevices -attribuut is beschikbaar in AIR 3.6 en later.

Aangepaste URI-schema's voor iOS

U kunt een aangepast URI-schema registreren, zodat uw toepassing kan worden aangeroepen door een koppeling op een webpagina of in een andere, native toepassing op het apparaat. U registreert een URI-schema door een CFBundleURLTypes-sleutel toe te voegen aan het InfoAdditions-element. Het volgende voorbeeld registreert het URI-schema com.example.app , zodat een toepassing kan worden aangeroepen door URL's met de notatie: 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>

Wanneer uw toepassing wordt opgeroepen via een custom-URL, wordt door het NativeApplication-object een gebeurtenis invoke verzonden. De URL van de koppeling, inclusief queryparameters, wordt geplaatst in de array arguments van het object InvokeEvent. U kunt een willekeurig aantal aangepaste URI-schema's gebruiken.

Opmerking: koppelingen in een StageWebView-instantie kunnen geen URL's openen die een aangepast URI-schema gebruiken.
Opmerking: als een andere toepassing al een schema heeft geregistreerd, kan uw toepassing de eerste toepassing niet vervangen als de voor het desbetreffende URI-schema geregistreerde toepassing.

Filteren op iOS-compatibiliteit

Voeg vermeldingen toe aan een UIRequiredDeviceCapabilities-array in het InfoAdditions -element als uw toepassing alleen gebruikt mag worden op apparaten met specifieke hardware- of softwarefunctionaliteit. De volgende vermelding geeft bijvoorbeeld aan dat een toepassing een fototoestel en een microfoon nodig heeft:

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

De toepassing kan niet worden geïnstalleerd als een apparaat daar niet over beschikt. Enkele voor AIR-toepassingen relevante functionaliteitsinstellingen:

telefonie

Wi-Fi

sms

fototoestel

automatisch scherpstellende camera

voorwaarts gerichte camera

camera met flits

videocamera

versnellingsmeter

locatieservices

GPS

microfoon

AIR 2.6+ voegt armv7 en opengles-2 automatisch toe aan de lijst met vereiste functionaliteit.

Opmerking: u hoeft deze functionaliteit niet op te nemen in het descriptorbestand van de toepassing, uw toepassing kan deze ook benutten als dat niet het geval is. Gebruik de UIRequiredDeviceCapabilities -instellingen alleen om te voorkomen dat gebruikers uw toepassing installeren op apparaten waarop deze niet goed kan functioneren.

Afsluiten in plaats van onderbreken

Wanneer een gebruiker bij een AIR-toepassing wegklikt, wordt de toepassing op de achtergrond geplaatst en onderbroken. Als u de toepassing volledig wilt afsluiten in plaats van te onderbreken, stelt u de eigenschap UIApplicationExitsOnSuspend in op YES :

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

Downloadgrootte minimaliseren door externe SWF-bestanden met uitsluitend elementen te laden

U kunt de downloadgrootte van de aanvankelijke toepassing minimaliseren door een subset van de door uw toepassing gebruikte SWF-bestanden te verpakken en de resterende externe SWF-bestanden (met alleen elementen) tijdens de runtime te laden met behulp van de methode Loader.load () . Als u deze functie wilt gebruiken, dient u de toepassing zodanig te verpakken dat ADT alle ActionScript ByteCode (ABC) uit de extern geladen SWF-bestanden naar de SWF-hoofdtoepassing verplaatst, zodat er een SWF-bestand met uitsluitend elementen overblijft. Zo wordt voldaan aan de regel van de Apple Store die het downloaden van code verbiedt nadat een toepassing is geïnstalleerd.

ADT biedt op de volgende manieren ondersteuning voor extern geladen SWF-bestanden (ook wel gestripte SWF-bestanden genoemd):

  • Leest het tekstbestand dat is opgegeven in het subelement <externalSwfs> van het element <iPhone> voor toegang tot de lijst met via regels van elkaar gescheiden SFW-bestanden die tijdens de uitvoering moeten worden geladen:

    <iPhone> 
                                           ... 
                                           <externalSwfs>FilewithPathsOfSWFsThatAreToNotToBePackaged.txt</externalSwfs> 
                                        </iPhone>
  • Brengt de ABC-code van elk extern geladen SWF-bestand over naar het hoofduitvoeringsbestand.

  • Sluit extern geladen SWF-bestanden uit van het .ipa-bestand.

  • Kopieert gestripte SWF-bestanden naar de map .remoteStrippedSWFs . U host deze SWF-bestanden op een webserver en uw toepassing laadt deze bestanden, indien nodig, tijdens de runtime.

U geeft de SWF-bestanden op die tijdens de runtime moeten worden geladen door de desbetreffende bestandsnamen op te geven in een tekstbestand, en wel één naam per regel, zoals in het volgende voorbeeld:

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

Het opgegeven bestandspad is relatief ten opzichte van het descriptorbestand van de toepassing. Daarnaast moet u deze SWF-bestanden als elementen opgeven in de opdracht adt .

Opmerking: deze functie is alleen van toepassing op standaardpakketten. Voor snel verpakken (bijvoorbeeld met gebruik van interpreter, foutopsporing of simulator) maakt ADT geen gestripte SWF-bestanden.

Geolocation-ondersteuning

Voor Geolocation-ondersteuning, voegt u een van de volgende sleutelwaardeparen aan het element 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>