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:
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.
Zie
Secundaire SWF-bestanden extern hosten voor AIR-apps op iOS
, een door Adobe-technicus Abhinav Dhandh geplaatst blog met meer informatie over deze functie, inclusief voorbeeldcode.
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>
|
|
|