Настройки iOS

Настройки, которые применяются только для устройств с ОС iOS, указываются в элементе <iPhone> дескриптора приложения. Элемент iPhone может иметь следующие дочерние элементы: InfoAdditions , requestedDisplayResolution , Entitlements , externalSwfs и forceCPURenderModeForDevices .

Элемент InfoAdditions позволяет указывать пары «ключ-значение», которые добавляются в файл настроек Info.plist для приложения. Например, следующие значения задают стиль строки состояния приложения и указывают, что приложению не требуется постоянный доступ к Wi-Fi.
<InfoAdditions> 
                            <![CDATA[ 
                            <key>UIStatusBarStyle</key> 
                            <string>UIStatusBarStyleBlackOpaque</string> 
                            <key>UIRequiresPersistentWiFi</key> 
                            <string>NO</string> 
                            ]]> 
                            </InfoAdditions>

Настройки InfoAdditions заключены в тег CDATA .

Элемент Entitlements позволяет указать пары «ключ-значение», добавляемые в файл настроек приложения Entitlements.plist. Настройки Entitlements.plist предоставляют приложению доступ к различным функциям ОС iOS, например push-уведомлениям.

Дополнительные сведения о настройках Info.plist и Entitlements.plist см. в документации для разработчиков Apple.

Поддержка в iOS задач, выполняемых в фоновом режиме

Adobe AIR 3.3 и более поздних версий поддерживает многозадачность в iOS, обеспечивая выполнение определенных действий в фоновом режиме:

  • Аудио

  • Обновления сведений о расположении

  • Компьютерные сети

  • Отказ от работы приложения в фоновом режиме

Примечание. Для SWF версии 21 и более ранних AIR не поддерживает выполнение в фоновом режиме на платформах iOS и Android, когда выбран прямой режим визуализации. Из-за этого приложения на основе Stage3D не могут выполнять фоновые задачи, в частности, воспроизведение аудио, отправку местоположения, передачу данных по сети и пр. Системой iOS запрещены вызовы, обращенные к графическому интерфейсу OpenGLES или визуализации в фоновом режиме. Работа приложений, предпринимающих попытку вызова OpenGL в фоновом режиме, прерывается системой iOS. Система Android разрешает приложениям выполнять как вызовы OpenGLES в фоновом режиме, так и другие фоновые задачи (такие как воспроизведение аудио). Для SWF версии 22 или более поздней мобильные приложения AIR могут выполняться в фоновом режиме, когда выбран прямой режим визуализации. В среде выполнения AIR iOS возникает ошибка ActionScript (3768 — API-интерфейс Stage3D нельзя использовать при выполнении в фоновом режиме), если вызовы OpenGLES отправляются в фоновом режиме. Однако на платформе Android ошибки не возникают, так как ее собственным приложениям разрешается вызывать OpenGLES в фоновом режиме. Чтобы обеспечить оптимальное использование ресурсов мобильных устройств, не вызывайте методы визуализации, пока приложение работает в фоновом режиме.

Воспроизведение и запись аудио в фоновом режиме

Чтобы включить воспроизведение и запись аудио в фоновом режиме, добавьте следующую пару «ключ-значение» в элемент InfoAdditions :

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

Обновления сведений о расположении в фоновом режиме

Чтобы включить обновления сведений о расположении в фоновом режиме, добавьте следующую пару «ключ-значение» в элемент InfoAdditions :

<InfoAdditions> 
                                <![CDATA[ 
                                <key>UIBackgroundModes</key> 
                                <array> 
                                <string>location</string> 
                                </array> 
                                ]]> 
                                </InfoAdditions>
Примечание. Используйте данную функцию только при необходимости, так как API-интерфейсы определения расположения в немалой степени расходуют заряд батареи.

Работа с сетями в фоновом режиме

Для выполнения несложных задач в фоновом режиме приложение задает свойство NativeApplication.nativeApplication.executeInBackground равным true .

Например, приложение может начать операцию отправки файла, после которой пользователь переводит другое приложение в активный режим. Когда приложение получает сведения о событии отправки, оно может задать свойство NativeApplication.nativeApplication.executeInBackground равным false .

Настройка свойства NativeApplication.nativeApplication.executeInBackground со значением true не гарантирует, что приложение будет работать неопределенно долго, так как iOS накладывает ограничение по времени выполнения задач в фоновом режиме. Когда iOS останавливает обработку в фоновом режиме, AIR отправляет событие NativeApplication.suspend .

Отказ от работы в фоновом режиме

Приложение может явным образом отклонить выполнение в фоновом режиме, добавив следующую пару «ключ-значение» в элемент InfoAdditions :

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

Зарезервированные настройки iOS InfoAdditions

AIR настраивает несколько параметров в созданном файле Info.plist, чтобы обеспечить корректную работу приложения и среды выполнения. Можно определить следующие настройки:

CFBundleDisplayName

CFBundleExecutable

CFBundleIconFiles

CFBundleIdentifier

CFBundleInfoDictionaryVersion

CFBundlePackageType

CFBundleResourceSpecification

CFBundleShortVersionString

CFBundleSupportedPlatforms

CFBundleVersion

CTAutoOrients

CTInitialWindowTitle

CTInitialWindowVisible

CTIosSdkVersion

CTMaxSWFMajorVersion

DTPlatformName

DTSDKName

MinimumOSVersion (зарезервировано до 3.2)

NSMainNibFile

UIInterfaceOrientation

UIStatusBarHidden

UISupportedInterfaceOrientations

Примечание. Можно определить MinimumOSVersion. Определение MinimumOSVersion учитывается в Air 3.3 и более поздних версий.

Поддержка разных моделей устройств с ОС iOS

Для поддержки iPad добавьте корректные настройки пар «ключ-значение» для UIDeviceFamily в элемент InfoAdditions . Параметр UIDeviceFamily является массивом строк. Каждая строка определяет поддерживаемые устройства. Параметр <string>1</string> определяет поддержку iPhone и iPod Touch. Параметр <string>2</string> определяет поддержку iPad. Параметр <string>3</string> определяет поддержку tvOS. Если указать только одну из этих строк, будет поддерживаться только одно семейство устройств. Например, следующий параметр означает, что поддерживается только iPad:

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

Следующий параметр поддерживает оба семейства устройств (iPhone/iPod Touch и iPad):

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

Кроме того, в AIR 3.7 и более поздних версий, можно использовать тег forceCPURenderModeForDevices для принудительного включения режима визуализации с использованием ЦП для указанного набора устройств и включения режима визуализации с использованием графического процессора для остальных устройств iOS.

Этот тег необходимо добавить к тегу iPhone в качестве дочернего тега и указать перечень моделей устройств, разделенный пробелами. Список допустимых наименований моделей устройств см. в описании forceCPURenderModeForDevices .

Например, чтобы использовать режим ЦП в старых устройствах iPod, iPhone и iPad и включить режим графического процессора для всех остальных устройств, в дескрипторе приложения укажите следующее:

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

Экраны с высоким разрешением

Элемент requestedDisplayResolution указывает, какой режим разрешения следует использовать в приложении ( стандартное или высокое разрешение) на устройствах iOS с высоким разрешением.

<requestedDisplayResolution>high</requestedDisplayResolution>

В режиме высокого разрешения каждый пискел экрана с высоким разрешением можно обрабатывать отдельно. В режиме стандартного разрешения экран устройства для приложения представляется экраном со стандартным разрешением. При отрисовке отдельного пикселя в этом режиме задается цвет для четырех пикселей на экране с высоким разрешением.

Параметр по умолчанию — standard . Обратите внимание, что при разработке для устройств под управлением iOS элемент requestedDisplayResolution должен быть дочерним к элементу iPhone (не к элементам InfoAdditions или initialWindow ).

Если вы планируете использовать различные настройки для различных устройств, в качестве элемента requestedDisplayResolution укажите значение по умолчанию. Задайте устройства, для которых значение будет противоположным, с помощью атрибута excludeDevices . К примеру, в следующем коде режим высокого разрешения применяется для всех устройств, поддерживающих его, кроме планшетов iPad 3-го поколения, для которых задан стандартный режим:

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

Атрибут excludeDevices доступен в версии AIR 3.6 и более поздних.

Пользовательские URI-схемы для iOS

Можно зарегистрировать пользовательскую схему URI, чтобы разрешить вызов приложения по ссылке на веб-странице или другим исходным приложением на устройстве. Чтобы зарегистрировать схему URI, добавьте ключ CFBundleURLTypes в элемент InfoAdditions. В следующем примере выполняется регистрация схемы URI с именем com.example.app , чтобы разрешить вызов приложения по URL, которые имеют вид 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>

Когда приложение вызывается с помощью пользовательского URI, объект NativeApplication отправляет событие invoke . URL ссылки с параметрами запроса помещается в массив arguments объекта InvokeEvent. Можно использовать любое количество пользовательских схем URI.

Примечание. Ссылки в экземпляре StageWebView не поддерживают открытие URL-адресов, для которых используется пользовательская URI-схема.
Примечание. Если схема уже была зарегистрирована для другого приложения, ваше приложение не может его заменить, так как для этой схемы URI имеется зарегистрированное приложение.

Фильтры совместимости iOS

Добавьте параметры в массив UIRequiredDeviceCapabilities в элементе InfoAdditions , если ваше приложение может работать только на устройствах с определенными аппаратными или программными возможностями. Например, следующий параметр указывает, что приложению требуется фотокамера и микрофон:

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

Если соответствующие возможности на устройстве отсутствуют, приложение не может быть установлено. Для приложений AIR можно задать следующие параметры совместимости:

telephony

wifi

sms

still-camera

auto-focus-camera

front-facing-camera

camera-flash

video-camera

accelerometer

location-services

gps

microphone

Среда AIR 2.6 и более поздних версий автоматически добавляет armv7 и opengles-2 в список обязательных возможностей.

Примечание. Эти возможности не требуется включать в дескриптор приложения, чтобы приложение могло их использовать. Параметры UIRequiredDeviceCapabilities следует использовать, только чтобы предотвратить установку приложения на устройства, на которых оно не сможет работать корректно.

Выход вместо приостановки

Когда пользователь переключается из приложения AIR в другую программу, приложение переходит в фоновый режим, и его работа приостанавливается. Если необходимо, чтобы в этом случае вместо приостановки осуществлялся выход из приложения, установите для свойства UIApplicationExitsOnSuspend значение YES :

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

Уменьшение загружаемого объема путем загрузки внешних ресурсных SWF

Можно уменьшить первоначальный размер загружаемого приложения путем упаковки подмножества SWF-файлов, используемых приложением, и загрузки оставшихся SWF-файлов (содержащих только ресурсы) во время выполнения с помощью метода Loader.load() . Для использования этой функции необходимо упаковать приложение таким образом, чтобы ADT переместил весь код ActionScript ByteCode (ABC) из внешне загружаемых SWF-файлов в главный SWF-файл приложения, оставляя SWF-файл, содержащий только ресурсы. Этого требует правило Apple Store, запрещающее загрузку любого кода после установки приложения.

ADT выполняет следующие действия для поддержки внешне загружаемых SWF-файлов (также называемых очищенными SWF):

  • Считывает текстовый файл, указанный в подэлементе <externalSwfs> элемента <iPhone> , для доступа к списку SWF-файлов (по одному на строке), которые требуется загрузить во время выполнения:

    <iPhone> 
                                           ... 
                                           <externalSwfs>FilewithPathsOfSWFsThatAreToNotToBePackaged.txt</externalSwfs> 
                                        </iPhone>
  • Переносит код ABC из каждого внешне загружаемого SWF-файла в основной исполняемый модуль.

  • Удаляет внешне загружаемые SWF-файлы из файла ipa.

  • Копирует очищенные SWF в каталог .remoteStrippedSWFs . Эти SWF-файлы размещаются на веб-сервере, и приложение загружает их по мере необходимости во время выполнения.

Указать, какие SWF-файлы необходимо загрузить во время выполнения, можно, перечислив их в текстовом файле (по одному в строке), как показано в следующем примере:

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

Указанный путь к файлу является относительным к файлу дескриптора приложения. Также необходимо перечислить эти SWF-файлы как ресурсы в команде adt .

Примечание. Данная функция относится только к стандартной упаковке. В случае быстрой упаковки (например, при использовании интерпретатора, симулятора или отладчика) ADT не создает очищенные SWF.

Поддержка определения геоположения

Чтобы обеспечить поддержку определения геоположения, добавьте одну из следующих пар «ключ-значение» в элемент 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>