Inställningar för iOS

Inställningar som bara gäller iOS-enheter placeras inuti <iPhone> -elementet i programbeskrivningen. iPhone -element kan innehålla elementen InfoAdditions , requestedDisplayResolution , Entitlements , externalSwfs och ett underordnat forceCPURenderModeForDevices -element.

Med InfoAdditions -elementet kan du ange nyckelvärdepar som läggs till i inställningsfilen Info.plist för programmet. Följande värden anger till exempel statusfältets format i programmet och att programmet inte kräver ständig trådlös nätverksåtkomst.
<InfoAdditions> 
                            <![CDATA[ 
                            <key>UIStatusBarStyle</key> 
                            <string>UIStatusBarStyleBlackOpaque</string> 
                            <key>UIRequiresPersistentWiFi</key> 
                            <string>NO</string> 
                            ]]> 
                            </InfoAdditions>

InfoAdditions-inställningarna anges i en CDATA -tagg.

Elementet Entitlements använder du för att ange nyckelvärdepar tillagda i inställningsfilen Entitlements.plist för programmet. Inställningar i Entitlements.plist ger programåtkomst till vissa iOS-funktioner, till exempel som push-meddelanden.

Mer information om Info.plist- och Entitlements.plist-inställningar finns i Apples dokumentation för utvecklare.

Stöd för bakgrundsåtgärder på iOS

Adobe AIR 3.3 och senare versioner har stöd för flera samtidiga åtgärder på iOS när vissa bakgrundsbeteenden är aktiverade:

  • Ljud

  • Platsuppdateringar

  • Nätverk

  • Välja bort programkörning i bakgrunden

Obs! Med swf-version 21 och dess tidigare versioner har AIR inte stöd för bakgrundskörning på iOS och Android med återgivningsläget Direkt. På grund av den här begränsningen kan Stage3D-baserade program inte köra bakgrundsåtgärder som exempelvis ljuduppspelning, platsuppdateringar och nätverksöverföringar. iOS tillåter inte OpenGLES eller återgivningsanrop i bakgrunden. Program som försöker köra OpenGL-anrop i bakgrunden avslutas av iOS. Android begränsar inte program från att köra OpenGLES-anrop i bakgrunden eller från att köra andra bakgrundsåtgärder (som ljuduppspelning). Med swf-version 22 och senare kan AIR-mobilprogram köras i bakgrunden med återgivningsläget Direkt. AIR iOS-miljön genererar ett ActionScript-fel (3768 – Programmeringsgränssnittet för Stage3D kan inte användas under bakgrundskörning) om OpenGLES-anrop sker i bakgrunden. Däremot genereras inget fel på Android, eftersom Android-program tillåts köra OpenGLES-anrop i bakgrunden. För att utnyttja mobilresurserna optimalt bör återgivningsanrop inte ske när ett program körs i bakgrunden.

Bakgrundsljud

Om du vill aktivera uppspelning och inspelning av ljud i bakgrunden inkluderar du följande nyckelvärdepar i elementet InfoAdditions :

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

Platsuppdateringar i bakgrunden

Om du vill aktivera platsuppdateringar i bakgrunden inkluderar du följande nyckelvärdepar i elementet InfoAdditions :

<InfoAdditions> 
                                <![CDATA[ 
                                <key>UIBackgroundModes</key> 
                                <array> 
                                <string>location</string> 
                                </array> 
                                ]]> 
                                </InfoAdditions>
Obs! Använd bara den här funktionen när det behövs, eftersom plats-API:er tär på batteriet.

Bakgrundsnätverk

För att korta åtgärder ska kunna köras i bakgrunden anges egenskapen NativeApplication.nativeApplication.executeInBackground som true i programmet.

Till exempel kan en filöverföringsåtgärd startas i programmet, varefter användaren placerar ett annat program i fokus. När programmet tar emot en händelse om slutförd överföring, kan det ställa in false för NativeApplication.nativeApplication.executeInBackground .

Att egenskapen NativeApplication.nativeApplication.executeInBackground anges som true garanterar inte att programmet körs oavbrutet, eftersom det finns en tidsgräns i iOS för bakgrundsåtgärder. När iOS avslutar bakgrundsbearbetningen skickas händelsen NativeApplication.suspend i AIR.

Välja bort programkörning i bakgrunden

Du kan ange att programmet explicit ska välja bort körning i bakgrunden genom att inkludera följande nyckelvärdepar i elementet InfoAdditions :

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

Reserverade inställningar för InfoAdditions i iOS

AIR anger flera poster i den genererade filen Info.plist för att garantera att programmet och körningsfunktionerna fungerar korrekt. Du kan inte definiera följande inställningar:

CFBundleDisplayName

CFBundleExecutable

CFBundleIconFiles

CFBundleIdentifier

CFBundleInfoDictionaryVersion

CFBundlePackageType

CFBundleResourceSpecification

CFBundleShortVersionString

CFBundleSupportedPlatforms

CFBundleVersion

CTAutoOrients

CTInitialWindowTitle

CTInitialWindowVisible

CTIosSdkVersion

CTMaxSWFMajorVersion

DTPlatformName

DTSDKName

MinimumOSVersion (reserveras för 3.2)

NSMainNibFile

UIInterfaceOrientation

UIStatusBarHidden

UISupportedInterfaceOrientations

Obs! Du kan definiera MinimumOSVersion. Definitionen MinimumOSVersion kan användas i Air 3.3 och senare.

Stöd för olika iOS-modeller

För iPad-stöd inkluderar du korrekt nyckelvärdesinställning för UIDeviceFamily inuti InfoAdditions -elementet. Inställningen UIDeviceFamily är en array med strängar. Varje sträng definierar enheter som stöds. Inställningen <string>1</string> definierar stöd för iPhone och iPod touch. Inställningen <string>2</string> definierar stöd för iPad. Inställningen <string>3</string> definierar stöd för tvOS. Om du bara anger en av dessa strängar stöds bara den enhetsgruppen. Följande sträng begränsar till exempel stödet till iPad:

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

Följande inställning har stöd för båda enhetsgrupperna (iPhone/iPod Touch och iPad):

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

Dessutom kan du i AIR 3.7 och senare använda taggen forceCPURenderModeForDevices om du vill framtvinga CPU-återgivningsläget för en angiven uppsättning enheter och aktivera GPU-återgivningsläget för återstående iOS-enheter.

Du lägger till denna tagg som underordnad till iPhone -taggen och skapar en blankstegsavgränsad lista över enhetsmodellnamnen. Se forceCPURenderModeForDevices om du vill få en lista över godkända enhetsmodellnamn.

Om du till exempel vill använda CPU-läget i gamla iPod-, iPhone- och iPad-modeller och aktiverar GPU-läget för alla andra enheter ska du ange följande i programbeskrivningen:

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

Skärmar med hög upplösning

Elementet requestedDisplayResolution anger om ditt program ska använda standardupplösning eller hög upplösning på iOS-enheter med högupplösta skärmar.

<requestedDisplayResolution>high</requestedDisplayResolution>

I läget med hög upplösning kan du adressera varje högupplöst pixel individuellt. I standardläget visas enhetens skärm som en skärm med standardupplösning för programmet. När en enda pixel ritas i det här läget anges färgen för fyra pixlar på den högupplösta skärmen.

Standardinställningen är standard . Tänk på att om målenheterna är iOS-enheter använder du elementet requestedDisplayResolution som ett underordnat element till elementet iPhone (inte elementet InfoAdditions eller initialWindow ).

Om du vill använda olika inställningar för olika enheter anger du standardvärdet som värdet för elementet requestedDisplayResolution . Använd attributet excludeDevices för att ange de enheter som ska använda motsatt värde. Med följande kod används till exempel läget med hög upplösning för alla enheter som har stöd för detta, utom 3:e generationens iPad-enheter, som använder standardläget:

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

Attributet excludeDevices finns i AIR 3.6 och senare versioner.

Anpassade URI-scheman för iOS

Du kan registrera ett anpassat URI-schema om du vill tillåta ditt program att anropas av en länk på en webbsida eller ett annat, inbyggt program på enheten. Om du vill registrera ett URI-schema lägger du till en CFBundleURLTypes-nyckel i InfoAdditions-elementet. I följande exempel registreras ett URI-schema med namnet com.example.app för att tillåta ett program att anropas av webbadresser med adressformatet: 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>

När ditt program anropas via en anpassad URI skickar NativeApplication-objektet en invoke -händelse. URL:en för den länken, inklusive frågeparametrar, placeras i arguments -arrayen för InvokeEvent-objektet. Du kan använda valfritt antal anpassade URI-scheman.

Obs! Länkar i en StageWebView-instans kan inte öppna URL:er där egna URI-scheman används.
Obs! Om ett annat program redan har registrerat ett schema kan ditt program inte ersätta det som registrerat program för det URI-schemat.

Kompatibilitetsfiltrering för iOS

Lägg till poster i en UIRequiredDeviceCapabilities-array inuti InfoAdditions -elementet om ditt program bara ska användas på enheter med vissa maskinvaru- eller programvarufunktioner. Följande post talar till exempel om att ett program kräver en stillbildskamera och en mikrofon:

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

Om en enhet saknar dessa funktioner kan programmet inte installeras. De funktionsinställningar som rör AIR-program är:

telefoni

wifi

sms

stillbildskamera

kamera med autofokus

framåtriktad kamera

kamerablixt

videokamera

accelerometer

platstjänster

gps

mikrofon

I AIR 2.6+ läggs armv7 och opengles-2 automatiskt till i listan över obligatoriska funktioner.

Obs! Du behöver inte inkludera dessa funktioner i programbeskrivningen för att ditt program ska kunna använda dem. Använd bara UIRequiredDeviceCapabilities-inställningarna för att hindra användare från att installera ditt program på enheter som programmet inte fungerar korrekt på.

Avsluta i stället för att pausa

När en användare växlar från ett AIR-program placeras detta i bakgrunden och pausas. Om du vill att ditt program ska avslutas helt i stället för att pausas anger du egenskapen UIApplicationExitsOnSuspend som YES :

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

Minimera nedladdningstorleken genom att läsa in externa, resursexklusiva SWF-filer

Du kan minimera storleken på den första programnedladdningen genom att förpacka en delmängd av SWF-filerna som används i programmet och läsa in de återstående (resursexklusiva) externa SWF-filerna i miljön med metoden Loader.load () . Om du vill använda den här funktionen måste du förpacka programmet så att ADT flyttar all ActionScript ByteCode (ABC) från de externt inlästa SWF-filerna till huvudprogrammet för SWF och lämnar en SWF-fil som endast innehåller resurser. Detta görs för att anpassa till regelverket för Apple Store som förbjuder att kod laddas ned sedan programmet har installerats.

ADT gör efterföljande för att stödja externt inlästa SWF-filer (kallas även för "strippade" SWF-filer):

  • Läser in textfilen som anges i <iPhone> -elementets <externalSwfs> -delelement för att komma åt den radavgränsade listan med SWF-filer som ska läsas under körningen:

    <iPhone> 
                                           ... 
                                           <externalSwfs>FilewithPathsOfSWFsThatAreToNotToBePackaged.txt</externalSwfs> 
                                        </iPhone>
  • Överför ABC-koden från varje externt inläst SWF-fil till huvudfilen.

  • Utelämnar den externt inlästa SWF-filen från .ipa-filen.

  • Kopierar de strippade SWF-filerna till .remoteStrippedSWFs -katalogen. Du har dessa SWF-filer på en webbserver och programmet läser in dem vid behov under körningen.

Du anger vilka SWF-filer som ska läsas in under körningen genom att ange deras namn, en per rad i en textfil. Se följande exempel:

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

Den angivna filsökvägen är relativ till programbeskrivningsfilen. Dessutom måste du ange dessa SWF-filer som resurser i adt -kommandot.

Obs! Den här funktionen gäller endast för standardförpackning. För snabbpaketering (med till exempel hjälp av tolk, simulator eller felsökning) skapar ADT inte strippade SWF-filer.

Geolocation-stöd

För Geolocation-stöd ska du lägga till ett av följande nyckelvärdepar i elementet 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>