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:
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.
Weitere Informationen zu dieser Funktion, einschließlich Samplecode, finden Sie in einem Blog von Adobe-Ingenieur Abhinav Dhandh
Externes Hosting von sekundären SWF-Dateien für AIR-Apps unter iOS
.
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>
|
|
|