Ustawienia odnoszące się wyłącznie do urządzeń z systemem iOS są umieszczane w elemencie
<iPhone>
w deskryptorze aplikacji. Element
iPhone
może mieć elementy potomne
InfoAdditions
,
requestedDisplayResolution
,
Entitlements
,
externalSwfs
i
forceCPURenderModeForDevices
.
Element
InfoAdditions
umożliwia określanie par klucz-wartość, które są dodawane do pliku ustawień Info.plist aplikacji. Na przykład poniższe wartości powodują ustawienie stylu paska stanu aplikacji oraz określają, że aplikacja nie wymaga stałego dostępu do sieci Wi-Fi.
<InfoAdditions>
<![CDATA[
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleBlackOpaque</string>
<key>UIRequiresPersistentWiFi</key>
<string>NO</string>
]]>
</InfoAdditions>
Ustawienia InfoAdditions są umieszczone w znaczniku
CDATA
.
Element
Entitlements
umożliwia określenie par klucz-wartość dodanych do pliku ustawień Entitlements.plist aplikacji. Plik ustawień Entitlements.plist udostępnia aplikacjom niektóre funkcje systemu iOS, takie jak powiadomienia w trybie push.
Więcej informacji na temat plików ustawień Info.plist i Entitlements.plist zawiera dokumentacja dla programistów udostępniana przez firmę Apple.
Zadania pomocnicze działające w tle w systemie iOS
Od wersji 3.3 środowisko Adobe AIR obsługuje mechanizm wielozadaniowy systemu iOS. W związku z tym są dostępne pewne opcje związane z działaniem w tle:
Uwaga:
W przypadku wersji 21 i starszych formatu SWF środowisko AIR nie obsługuje wykonywania w tle w systemach iOS i Android, gdy jest ustawiony bezpośredni tryb renderowania. Z powodu tego ograniczenia aplikacje używające mechanizmu Stage3D nie mogą realizować zadań w tle, takich jak odtwarzanie dźwięku, aktualizacja lokalizacji czy wysyłanie lub pobieranie danych przez sieć. System iOS nie umożliwia wywoływania procedur interfejsu OpenGL ES ani realizacji innych funkcji wyświetlania obrazu w tle. Próby wykonania takich operacji są przerywane przez system iOS. Takie ograniczenie nie występuje w systemie Android, który umożliwia wywoływanie w tle procedur interfejsu Open GL ES lub innych zadań, na przykład odtwarzania dźwięku. W przypadku wersji 22 i starszych formatu SWF aplikacje AIR dla urządzeń przenośnych mogą działać w tle, gdy jest ustawiony bezpośredni tryb renderowania. Środowisko wykonawcze AIR w systemie iOS powoduje błąd języka (3768 — nie można używać interfejsu API obiektu Stage3D podczas działania w tle) w przypadku wywołań OpenGL ES w tle. W systemie Android nie występują takie błędy, ponieważ jego aplikacje natywne mogą używać wywołań OpenGL ES podczas działania w tle. Aby optymalnie używać zasobu na urządzeniu przenośnym, nie należy stosować wywołań renderowania, gdy aplikacja działa w tle.
Dźwięk w tle
Aby włączyć odtwarzanie i nagrywanie dźwięków w tle, należy dołączyć następującą parę kluczy do elementu
InfoAdditions
:
<InfoAdditions>
<![CDATA[
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
]]>
</InfoAdditions>
Aktualizacje lokalizacji w tle
Aby włączyć aktualizacje lokalizacji w tle, należy dołączyć następującą parę kluczy do elementu
InfoAdditions
:
<InfoAdditions>
<![CDATA[
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
]]>
</InfoAdditions>
Uwaga:
Tej funkcji należy używać tylko wtedy, gdy jest potrzebna, ponieważ stosowanie interfejsów API lokalizacji powoduje zużywanie dużej ilości energii akumulatora.
Operacje sieciowe w tle
Aby wykonywać w tle krótkie zadania, aplikacja powinna ustawić właściwość
NativeApplication.nativeApplication.executeInBackground
na
true
.
Użytkownik może na przykład przenieść aplikację do tła (przejść do innej aplikacji) po rozpoczęciu operacji wysyłania pliku. Gdy aplikacja odbierze zdarzenie ukończenia wysyłania, może przestawić właściwość
NativeApplication.nativeApplication.executeInBackground
na
false
.
Ustawienie wartości
true
dla właściwości
NativeApplication.nativeApplication.executeInBackground
nie gwarantuje, że aplikacja będzie działać dowolnie długo. System iOS przydziela limit czasowy dla zadań działających w tle. Gdy system iOS zatrzymuje przetwarzanie w tle, środowisko AIR wywołuje zdarzenie
NativeApplication.suspend
.
Wyłączanie wykonywania operacji w tle
Aplikacja może jawnie zrezygnować z działania w tle. W tym celu należy dołączyć następującą parę kluczy do elementu
InfoAdditions
:
<InfoAdditions>
<![CDATA[
<key>UIApplicationExitsOnSuspend</key>
<true/>
]]>
</InfoAdditions>
Zarezerwowane ustawienia InfoAdditions systemu iOS
Środowisko AIR ustawia w tworzonym pliku Info.plist kilka pozycji w celu zapewnienia prawidłowego działania funkcji środowiska wykonawczego i aplikacji. Nie można definiować następujących ustawień:
CFBundleDisplayName
CFBundleExecutable
CFBundleIconFiles
CFBundleIdentifier
CFBundleInfoDictionaryVersion
CFBundlePackageType
CFBundleResourceSpecification
CFBundleShortVersionString
CFBundleSupportedPlatforms
CFBundleVersion
CTAutoOrients
|
CTInitialWindowTitle
CTInitialWindowVisible
CTIosSdkVersion
CTMaxSWFMajorVersion
DTPlatformName
DTSDKName
MinimumOSVersion (zarezerwowane do wersji 3.2)
NSMainNibFile
UIInterfaceOrientation
UIStatusBarHidden
UISupportedInterfaceOrientations
|
Uwaga:
Można zdefiniować parametr MinimumOSVersion. Definicja MinimumOSVersion funkcjonuje w środowisku AIR 3.3 lub nowszym.
Obsługa różnych modeli urządzeń z systemem iOS
W celu obsługi tabletu iPad należy podać prawidłowe ustawienia klucz-wartość dla ustawienia
UIDeviceFamily
w elemencie
InfoAdditions
.
UIDeviceFamily
jest tablicą ciągów znaków. Każdy ciąg definiuje obsługiwane urządzenia. Ustawienie
<string>1</string>
oznacza obsługę urządzeń iPhone i iPod Touch. Ustawienie
<string>2</string>
oznacza obsługę tabletu iPad. Ustawienie
<string>3</string>
oznacza obsługę platformy tvOS. W wypadku określenia tylko jednego z tych ustawień, obsługiwana będzie wyłącznie wskazana w ten sposób rodzina urządzeń. Na przykład poniższe ustawienie oznacza, że obsługiwany będzie tylko iPad:
<key>UIDeviceFamily</key>
<array>
<string>2</string>
</array>>
Następujące ustawienie obsługuje obie rodziny urządzeń (iPhone/iPod Touch oraz iPad):
<key>UIDeviceFamily</key>
<array>
<string>1</string>
<string>2</string>
</array>
Ponadto w środowisku AIR 3.7 lub nowszym można za pomocą znacznika
forceCPURenderModeForDevices
wymusić tryb renderowania przy użyciu procesora dla określonego zbioru urządzeń, a także włączyć tryb renderowania oparty na GPU dla pozostałych urządzeń z systemem iOS.
Ten znacznik można dodać jako obiekt potomny znacznika
iPhone
, wskazując rozdzieloną spacjami listę nazw modeli urządzeń. Listę prawidłowych nazw modeli urządzeń można znaleźć w opisie elementu
forceCPURenderModeForDevices
.
Aby na przykład użyć trybu procesora w przypadku starszych odtwarzaczy iPod, telefonów iPhone i tabletów iPad, a jednocześnie włączyć tryb GPU dla wszystkich pozostałych urządzeń, w deskryptorze aplikacji należy określić następujące ustawienia:
...
<renderMode>GPU</renderMode>
...
<iPhone>
...
<forceCPURenderModeForDevices>iPad1,1 iPhone1,1 iPhone1,2 iPod1,1
</forceCPURenderModeForDevices>
</iPhone>
Wyświetlacze o wysokiej rozdzielczości
Element
requestedDisplayResolution
określa, czy na urządzeniach z systemem iOS wyposażonych w wyświetlacz o wysokiej rozdzielczości aplikacja powinna korzystać z trybu rozdzielczości
standard
czy
high
.
<requestedDisplayResolution>high</requestedDisplayResolution>
W trybie wysokiej rozdzielczości można oddzielnie odwoływać się do każdego piksela na wyświetlaczu o wysokiej rozdzielczości. W trybie standardowym wyświetlacz urządzenia będzie dla aplikacji wyświetlaczem o standardowej rozdzielczości. W tym trybie narysowanie pojedynczego piksela spowoduje ustawienie koloru czterech pikseli na wyświetlaczu o wysokiej rozdzielczości.
Ustawienie domyślne to
standard
. W aplikacjach dla urządzeń z systemem iOS element
requestedDisplayResolution
jest elementem potomnym elementu
iPhone
(nie elementu
InfoAdditions
ani
initialWindow
).
Aby używać różnych ustawień na różnych urządzeniach, należy określić wartość domyślną jako wartość elementu
requestedDisplayResolution
. Korzystając z atrybutu
excludeDevices
, można wskazać urządzenia, na których ma być używana wartość odwrotna. Poniższy przykładowy kod stosuje tryb wysokiej rozdzielczości na obsługujących go urządzeniach oprócz tabletów iPad 3. generacji, na których jest używany tryb standardowy.
<requestedDisplayResolution excludeDevices="iPad3">high</requestedDisplayResolution>
Atrybut
excludeDevices
jest dostępny w środowisku AIR 3.6 lub nowszym.
Własne schematy identyfikatorów URI w systemie iOS
Rejestrując własny schemat identyfikatora URI, można pozwolić na wywoływanie aplikacji przez łącze na stronie internetowej lub przez inną aplikację natywną na urządzeniu. Aby zarejestrować schemat identyfikatora URI, należy dodać do elementu InfoAdditions klucz CFBundleURLTypes. W poniższym przykładzie jest rejestrowany schemat identyfikatora URI o nazwie
com.example.app
, dzięki czemu aplikacja może być wywoływana przez adresy URL w postaci
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>
W przypadku wywołania aplikacji przez własny schemat URI obiekt NativeApplication wywołuje zdarzenie
invoke
. Adres URL łącza, łącznie z parametrami zapytania, jest umieszczany w tablicy
arguments
obiektu InvokeEvent. Można korzystać z dowolnej liczby własnych schematów identyfikatora URI.
Uwaga:
Łącza w wystąpieniu klasy StageWebView nie umożliwiają otwierania adresów URL korzystających z własnego schematu URI.
Uwaga:
Jeśli dany schemat identyfikatora URI został już zarejestrowany dla innej aplikacji, nie ma możliwości zarejestrowania go dla własnej aplikacji przez zastąpienie poprzedniej.
Filtrowanie zgodności w systemie iOS
Jeśli dana aplikacja powinna być używana wyłącznie na urządzeniach o konkretnych funkcjach sprzętowych lub programowych, należy dodać odpowiednie wpisy do tablicy UIRequiredDeviceCapabilities w elemencie
InfoAdditions
. Na przykład poniższy wpis wskazuje, że aplikacja wymaga aparatu fotograficznego i mikrofonu.
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>microphone</string>
<string>still-camera</string>
</array>
Jeśli urządzenie nie jest wyposażone w odpowiednie funkcje, nie można zainstalować aplikacji. Niektóre ustawienia funkcji odnoszące się do aplikacji AIR:
telephony
wifi
sms
still-camera
auto-focus-camera
front-facing-camera
|
camera-flash
video-camera
accelerometer
location-services
gps
microphone
|
Środowisko AIR 2.6+ automatycznie dodaje do listy wymaganych funkcji pozycje
armv7
i
opengles-2
.
Uwaga:
Nie ma potrzeby dodawania tych funkcji w deskryptorze aplikacji, aby aplikacja mogła ich używać. Ustawień UIRequiredDeviceCapabilities należy używać wyłącznie po to, aby uniemożliwiać użytkownikom instalowanie aplikacji na urządzeniach, na których nie może ona prawidłowo działać.
Kończenie zamiast wstrzymywania
Gdy użytkownik przełącza się z aplikacji AIR, przechodzi ona do trybu działania w tle i jest wstrzymywana. Jeśli zamiast wstrzymania danej aplikacji ma następować jej zakończenie, dla właściwości
UIApplicationExitsOnSuspend
należy ustawić wartość
YES
:
<key>UIApplicationExitsOnSuspend</key>
<true/>
Minimalizowanie ilości pobieranych danych przez wczytywanie zewnętrznych plików SWF zawierających tylko zasoby
Aby zminimalizować wstępny rozmiar pobieranej aplikacji, można spakować podzbiór plików SWF używanych przez aplikację, a do wczytywania pozostałych zewnętrznych plików SWF (zawierających tylko zasoby) stosować metodę
Loader.load()
w czasie wykonywania. W celu skorzystania z tej funkcji trzeba spakować aplikację w taki sposób, aby narzędzie ADT przeniosło cały kod bajtowy ActionScript (ABC) z zewnętrznych plików SWF do głównego pliku SWF aplikacji, co pozwoli uzyskać plik SWF zawierający tylko zasoby. Sposób ten zapewnia zgodność z obowiązującą w sklepie Apple Store regułą, która zabrania pobierania jakiegokolwiek kodu do zainstalowanej aplikacji.
Aby umożliwić obsługę wczytywania zewnętrznych plików SWF (zwanych również uproszczonymi plikami SWF), narzędzie ADT wykonuje następujące czynności:
-
Odczytuje plik tekstowy określony w elemencie
<iPhone>
przy użyciu elementu potomnego
<externalSwfs>
w celu uzyskania dostępu do rozdzielonej znakami końca wiersza listy plików SWF, które mają być wczytywane w czasie wykonywania:
<iPhone>
...
<externalSwfs>FilewithPathsOfSWFsThatAreToNotToBePackaged.txt</externalSwfs>
</iPhone>
-
Przenosi kod ABC z wszystkich zewnętrznie wczytywanych plików SWF do głównego pliku wykonywalnego.
-
Pomija zewnętrznie wczytywane pliki SWF w pliku IPA.
-
Kopiuje uproszczone pliki SWF do katalogu
.remoteStrippedSWFs
. Programista udostępnia te pliki SWF na serwerze internetowym. W razie potrzeby aplikacja wczytuje je w czasie wykonywania.
Programista wskazuje pliki SWF, które mają być wczytywane w czasie wykonywania, podając ich nazwy w oddzielnych wierszach pliku tekstowego, tak jak pokazano w następującym przykładzie:
assets/Level1/Level1.swf
assets/Level2/Level2.swf
assets/Level3/Level3.swf
assets/Level4/Level4.swf
Ścieżka do pliku jest podana względem pliku deskryptora aplikacji. Ponadto w poleceniu
adt
należy wskazać te pliki SWF jako zasoby.
Uwaga:
Ta funkcja dotyczy tylko pakowania standardowego. W przypadku pakowania szybkiego (na przykład z użyciem interpretatora, symulatora lub debugera) narzędzie ADT nie tworzy uproszczonych plików SWF.
Więcej informacji o tej funkcji oraz przykładowy kod zawiera wpis na blogu autorstwa Abhinava Dhandha z firmy Adobe:
Przechowywanie dodatkowych plików SWF aplikacji AIR dla systemu iOS na serwerze zewnętrznym
.
Obsługa sprawdzania lokalizacji geograficznej
W celu korzystania z lokalizacji geograficznej dodaj jedną z następujących par klucz-wartość do elementu
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>
|
|
|