iOS-Einstellungen

Einstellungen, die nur für iOS-Geräte gelten, werden innerhalb des <iPhone> -Elements im Anwendungsdeskriptor platziert. Das iPhone -Element kann ein InfoAdditions -Element, ein requestedDisplayResolution -Element, ein Entitlements -Element, ein externalSwfs -Element und ein forceCPURenderModeForDevices -Element als untergeordnete Elemente aufweisen.

Mithilfe des InfoAdditions -Elements können Sie Schlüssel-Wert-Paare angeben, die der Einstellungsdatei „Info.plist“ für die Anwendung hinzugefügt werden. Zum Beispiel legen die folgenden Werte den Statusleistenstil der Anwendung fest und geben an, dass die Anwendung keinen ständigen Wi-Fi-Zugang benötigt.
<InfoAdditions> 
                            <![CDATA[ 
                            <key>UIStatusBarStyle</key> 
                            <string>UIStatusBarStyleBlackOpaque</string> 
                            <key>UIRequiresPersistentWiFi</key> 
                            <string>NO</string> 
                            ]]> 
                            </InfoAdditions>

Die InfoAdditions-Einstellungen sind in einem CDATA -Tag enthalten.

Mit dem Entitlements -Element können Sie Schlüssel-Wert-Paare angeben, die der Einstellungsdatei „Entitlements.plist“ für die Anwendung hinzugefügt werden. Die Einstellungen aus „Entitlements.plist“ ermöglichen Anwendungen den Zugriff auf bestimmte iOS-Funktionen, zum Beispiel Push-Benachrichtigungen.

Ausführlichere Informationen zu weiteren Entitlements.plist-Einstellungen finden Sie in der Entwicklerdokumentation von Apple.

Unterstützung von Hintergrundaufgaben unter iOS

Adobe AIR 3.3 und höher unterstützt Multitasking unter iOS, indem bestimmte Hintergrundverhalten aktiviert werden:

  • Audio

  • Standortaktualisierungen

  • Netzwerke

  • Beenden der Ausführung von Apps im Hintergrund

Hinweis: Für die SWF-Version 21 und die früheren Versionen davon, wird von AIR nicht die Ausführung im Hintergrund unter iOS und Android unterstützt, wenn der Rendermodus direkt festgelegt wird. Aufgrund dieser Einschränkung konnten Stage3D-basierte Apps keine Hintergrundaufgaben wie die Audiowiedergabe, die Suche nach Updates, das Hoch- und Herunterladen über das Netzwerk usw. ausführen. iOS lässt OpenGLES oder das Rendern von Aufrufen im Hintergrund nicht zu. Anwendungen, die versuchen OpenGL-Aufrufe im Hintergrund auszuführen, werden durch iOS beendet. Android verhindert nicht, dass Anwendungen OpenGLES-Aufrufe oder andere Aufgaben (wie die Audiowiedergabe) im Hintergrund ausführen. Bei der SWF-Version 22 und höher können AIR-Mobilanwendungen im Hintergrund ausgeführt werden, wenn der Rendermodus direkt festgelegt ist. Die AIR iOS-Laufzeit führt zu einem ActionScript-Fehler (3768 Das Stage3D API darf während der Ausführung im Hintergrund nicht verwendet werden), wenn OpenGLES-Aufrufe im Hintergrund ausgeführt werden. Es gibt jedoch keine Fehler auf Android, da die nativen Anwendungen OpenGLES-Aufrufe im Hintergrund ausführen können. Führen Sie zur optimalen Nutzung der mobilen Ressource keine Render-Aufrufe durch, wenn die Anwendung im Hintergrund ausgeführt wird.

Hintergrundaudio

Um die Wiedergabe und Aufnahme von Audio im Hintergrund zu ermöglichen, schließen Sie das folgende Schlüssel-Wert-Paar in das InfoAdditions -Element ein:

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

Standortaktualisierung im Hintergrund

Um die Aktualisierung von Standortdaten im Hintergrund zu ermöglichen, schließen Sie das folgende Schlüssel-Wert-Paar in das InfoAdditions -Element ein:

<InfoAdditions> 
                                <![CDATA[ 
                                <key>UIBackgroundModes</key> 
                                <array> 
                                <string>location</string> 
                                </array> 
                                ]]> 
                                </InfoAdditions>
Hinweis: Verwenden Sie diese Funktion nur, wenn Sie sie wirklich brauchen, da Standort-APIs sehr viel Akkuenergie benötigen.

Netzwerkaufgaben im Hintergrund

Um kurze Aufgaben im Hintergrund auszuführen, setzt Ihre Anwendung die NativeApplication.nativeApplication.executeInBackground -Eigenschaft auf true .

Zum Beispiel kann Ihre Anwendung mit dem Hochladen einer Datei beginnen, und danach holt der Benutzer eine andere Anwendung in den Vordergrund. Wenn die Anwendung ein Uploadabschlussereignis empfängt, kann sie NativeApplication.nativeApplication.executeInBackground auf false setzen.

Das Setzen der NativeApplication.nativeApplication.executeInBackground -Eigenschaft auf true garantiert nicht, dass die Anwendung unbegrenzt lange ausgeführt wird, da iOS ein Zeitlimit für Hintergrundaufgaben durchsetzt. Wenn iOS die Hintergrundverarbeitung beendet, setzt AIR das NativeApplication.suspend -Ereignis ab.

Beenden der Ausführung im Hintergrund

Ihre Anwendung kann ausdrücklich aus der Ausführung im Hintergrund aussteigen, wenn Sie das folgende Schlüssel-Wert-Paar in das InfoAdditions -Element einschließen:

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

Reservierte iOS-InfoAdditions-Einstellungen

AIR legt verschiedene Einträge in der generierten Datei „Info.plist“ fest, um sicherzustellen, dass die Funktionen der Anwendung und der Laufzeitumgebung korrekt arbeiten. Sie können die folgenden Einstellungen nicht definieren:

CFBundleDisplayName

CFBundleExecutable

CFBundleIconFiles

CFBundleIdentifier

CFBundleInfoDictionaryVersion

CFBundlePackageType

CFBundleResourceSpecification

CFBundleShortVersionString

CFBundleSupportedPlatforms

CFBundleVersion

CTAutoOrients

CTInitialWindowTitle

CTInitialWindowVisible

CTIosSdkVersion

CTMaxSWFMajorVersion

DTPlatformName

DTSDKName

MinimumOSVersion (reserviert bis 3.2)

NSMainNibFile

UIInterfaceOrientation

UIStatusBarHidden

UISupportedInterfaceOrientations

Hinweis: Sie können die MinimumOSVersion definieren. Die MinimumOSVersion-Definition wird in einer Air 3.3 und höher berücksichtigt.

Unterstützung unterschiedlicher iOS-Gerätemodelle

Zur iPad-Unterstützung geben Sie die richtigen Schlüssel-Wert-Einstellungen für UIDeviceFamily innerhalb Ihres InfoAdditions -Elements an. Die UIDeviceFamily -Einstellung ist ein Array von Strings. Jeder String definiert unterstützte Geräte. Die Einstellung <string>1</string> definiert Unterstützung für iPhone und iPod Touch. Die Einstellung <string>2</string> definiert die Unterstützung für das iPad. Die Einstellung <string>3</string> definiert die Unterstützung für das tvOS. Wenn Sie nur einen dieser Strings angeben, wird nur die jeweilige Gerätefamilie unterstützt. Die folgende Einstellung limitiert die Unterstützung zum Beispiel auf das iPad:

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

Mit der folgenden Einstellung werden beide Gerätefamilien (iPhone/iPod Touch und iPad) unterstützt:

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

Zusätzlich in AIR 3,7 und höher können Sie den forceCPURenderModeForDevices Tag verwenden, um die CPU zu erzwingen, übertragen Modus für eine bestimmte Gerätegruppe und Aktivieren der GPU gerendert Modus für verbleibende iOS-Geräte.

Sie fügen diesen Tag als untergeordnetes Element des iPhone -Tags hinzu und geben eine Liste von durch Leerzeichen getrennte Gerätemodellnamen ein. Eine Liste gültiger Gerätenmodellnamen finden Sie unter forceCPURenderModeForDevices .

Wenn Sie beispielsweise den CPU-Modus in alten iPods, iPhones und iPads verwenden möchten und den GPU-Modus für alle anderen Geräte aktivieren, geben Sie Folgendes im Anwendungsdeskriptor ein:

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

Hochauflösende Bildschirme

Das requestedDisplayResolution -Element gibt an, ob Ihre Anwendung auf iOS-Geräten mit hochauflösendem Bildschirm den standardmäßigen oder den hohen Auflösungsmodus verwenden soll.

<requestedDisplayResolution>high</requestedDisplayResolution>

Im hochauflösenden Modus können Sie jedes Pixel eines hochauflösenden Bildschirms einzeln ansprechen. Im Standardmodus erscheint der Gerätebildschirm für die Anwendung als ein Bildschirm mit Standardauflösung. Das Zeichnen eines einzelnen Pixels legt in diesem Modus die Farbe von vier Pixeln auf dem hochauflösenden Bildschirm fest.

Die Standardeinstellung ist standard . Beachten Sie, dass Sie für iOS-Zielgeräte das requestedDisplayResolution -Element als untergeordnetes Element des iPhone -Elements verwenden (und nicht das InfoAdditions -Element oder initialWindow -Element).

Falls Sie für jedes Gerät unterschiedliche Einstellungen verwenden möchten, legen Sie den Standardwert als den Wert des Elements requestedDisplayResolution fest. Geben Sie mithilfe des Attributs excludeDevices Geräte an, die den entgegengesetzten Wert verwenden sollten. Mit dem folgenden Code wird z. B. der hohe Auflösungsmodus auf alle Geräte angewendet, die diesen unterstützen (mit Ausnahme von iPads der 3. Generation, die den Standardmodus verwenden):

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

Das Attribut excludeDevices ist in AIR 3.6 und höher verfügbar.

Benutzerdefinierte URI-Schemas unter iOS

Sie können ein benutzerdefiniertes URI-Schema registrieren, damit Ihre Anwendung durch einen Hyperlink auf einer Webseite oder durch eine andere, native Anwendung auf dem Gerät aufgerufen werden kann. Um ein URI-Schema zu registrieren, fügen Sie einen CFBundleURLTypes-Schlüssel zum InfoAdditions-Element hinzu. Im folgenden Beispiel wird ein URI-Schema mit dem Namen com.example.app registriert, damit eine Anwendung durch URLs in der Form example://foo aufgerufen werden kann.

<key>CFBundleURLTypes</key> 
                            <array> 
                            <dict> 
                            <key>CFBundleURLSchemes</key> 
                            <array> 
                            <string>example</string> 
                            </array> 
                            <key>CFBundleURLName</key> 
                            <string>com.example.app</string> 
                            </dict> 
                            </array>

Wenn Ihre Anwendung über einen benutzerdefinierten URI aufgerufen wird, setzt das NativeApplication-Objekt ein invoke -Ereignis ab. Die URL des Hyperlinks, einschließlich Abfrageparameter, wird im arguments -Array des InvokeEvent-Objekts platziert. Sie können beliebig viele benutzerdefinierte URI-Schemas verwenden.

Hinweis: Hyperlinks in einer StageWebView-Instanz können keine URLs öffnen, die ein benutzerdefiniertes URI-Schema verwenden.
Hinweis: Wenn eine andere Anwendung bereits ein Schema registriert hat, kann Ihre Anwendung dies nicht als die Anwendung, die für diesen URI registriert wurde, ersetzen.

iOS-Kompatibilitätsfilterung

Fügen Sie einem UIRequiredDeviceCapabilities-Array innerhalb des InfoAdditions -Elements Einträge hinzu, wenn Ihre Anwendung nur auf Geräten mit bestimmten Hardware- oder Softwarefähigkeiten verwendet werden soll. Der folgende Eintrag gibt zum Beispiel an, dass eine Anwendung eine Fotokamera und ein Mikrofon benötigt:

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

Wenn das Gerät nicht über die entsprechenden Merkmale verfügt, kann die Anwendung nicht installiert werden. Für AIR-Anwendungen sind die folgenden Fähigkeiteneinstellungen relevant:

telephony

wifi

sms

still-camera

auto-focus-camera

front-facing-camera

camera-flash

video-camera

accelerometer

location-services

gps

microphone

AIR 2.6 und höher fügt der Liste der erforderlichen Fähigkeiten automatisch armv7 und opengles-2 hinzu.

Hinweis: Sie brauchen diese Fähigkeiten nicht in den Anwendungsdeskriptor aufzunehmen, damit Ihre Anwendung sie verwendet. Verwenden Sie die UIRequiredDeviceCapabilities-Einstellungen nur, um zu verhindern, dass Benutzer Ihre Anwendung auf Geräten installieren, auf denen sie nicht richtig funktioniert.

Beenden statt anhalten

Wenn ein Benutzer die AIR-Anwendung verlässt, wird diese in den Hintergrund verschoben und angehalten. Soll Ihre Anwendung in diesem Fall vollständig beendet und nicht nur angehalten werden, setzen Sie die UIApplicationExitsOnSuspend -Eigenschaft auf YES :

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

Minimieren der Downloadgröße durch Laden externer (nur für das Element) SWF-Dateien

Sie können Ihre anfängliche Downloadgröße für die Anwendung minimieren, indem Sie einen Teilsatz der SWF-Dateien, die von Ihrer Anwendung verwendet wird, komprimieren und die verbleibenden (nur für das Element) externen SWF-Dateien zur Laufzeit mithilfe der Loader.load() -Methode laden. Um diese Funktion verwenden zu können, müssen Sie die Anwendung so komprimieren, dass ADT alle ActionScript-ByteCode (ABC) aus den extern geladenen SWF-Dateien in die SWF-Dateien der Hauptanwendung verschiebt, wobei eine SWF-Datei, die nur Elemente enthält, verbleibt. Das entspricht der Regel des Apple Stores, die besagt, das nach dem Installieren einer Anwendung kein Code heruntergeladen werden darf.

ADT führt Folgendes durch, um extern geladene SWF-Dateien (auch freigelegte SWF-Dateien genannt) zu unterstützen:

  • Liest die Textdatei, die im <externalSwfs> -Unterelement des <iPhone> -Elements angegeben ist, um auf die Liste von SWF-Dateien mit Zeilenumbrüchen, die zur Ausführungszeit geladen werden soll, zuzugreifen.

    <iPhone> 
                                           ... 
                                           <externalSwfs>FilewithPathsOfSWFsThatAreToNotToBePackaged.txt</externalSwfs> 
                                        </iPhone>
  • Überträgt den ABC-Code von jeder extern geladenen SWF-Datei auf die ausführbare Hauptdatei.

  • Lässt die extern geladenen SWF-Dateien aus der IPA-Datei aus.

  • Kopiert die freigelegten SWF-Dateien in den .remoteStrippedSWFs -Ordner. Sie hosten diese SWF-Dateien auf einem Webserver und Ihre Anwendung lädt gegebenenfalls zur Laufzeit.

Sie geben die SWF-Dateien an, die zur Laufzeit geladen werden sollen, indem Sie deren Namen (einen pro Zeile) in einer Textdatei angeben, wie im Folgenden Beispiel gezeigt:

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

Der angegebene Dateipfad ist relativ zur Anwendungsdeskriptordatei. Außerdem müssen Sie diese SWF-Dateien als Elemente im adt -Befehl angeben.

Hinweis: Diese Funktion gilt nur für die Standardkomprimierung. Für eine schnelle Komprimierung (z. B. mit Interpreter, Simulator oder Debug) erstellt ADT keine freigelegtenSWF-Dateien.

Unterstützung für Geolocation

Für Geolocation-Unterstützung fügen Sie eines der folgenden Schlüssel-Wertpaare dem InfoAdditions -Element hinzu:

<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>