Ustawienia w systemie iOS

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:

  • Dźwięk

  • Aktualizacje lokalizacji

  • Operacje sieciowe

  • Wyłączenie wykonywania aplikacji 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.

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>