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 功能,例如推送通知。

有关 Info.plist 和 Entitlements.plist 设置的更多详细信息,请参阅 Apple 开发人员文档。

支持 iOS 上的后台任务

Adobe AIR 3.3 和更高版本通过启用某些后台行为在 iOS 上支持多任务处理:

  • 音频

  • 位置更新

  • 网络

  • 选择禁止后台执行应用程序

注: 对于 SWF 21 及其之前的版本,当渲染模式设置为“direct”时,AIR 在 iOS 和 Android 上不支持后台执行。由于这一限制,基于 Stage3D 的应用程序无法执行如音频播放、位置更新、网络上传或下载等后台任务。iOS 不允许在后台进行 OpenGLES 或渲染调用。试图在后台进行 OpenGL 调用的应用程序会被 iOS 终止。Android 并不限制应用程序在后台进行 OpenGLES 调用或执行其他后台任务(如音频播放)。对于 SWF 22 及其之后的版本,当 renderMode 设置为“direct”时,AIR 移动设备应用程序可以在后台执行。如果是在后台进行 OpenGLES 调用,则 AIR iOS 运行时会导致 ActionScript 错误(3768 - 不可以在后台执行期间使用 Stage3D API)。不过,在 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,请为 InfoAdditions 元素中的 UIDeviceFamily 添加正确的键值设置。 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 标记对指定系列的设备强制启用 CPU 渲染模式,而对剩余的 iOS 设备启用 GPU 渲染模式。

您应将其作为 iPhone 标记的子标记来添加,并指定设备型号名称,各名称之间以空格分隔。有关有效设备型号名称的列表,请参阅 forceCPURenderModeForDevices

例如,若想在老式的 iPod、iPhone 及 iPad 中使用 CPU 模式,而对所有其他设备启用 GPU 模式,则可在应用程序描述符中指定以下内容:

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

高分辨率显示器

利用 requestedDisplayResolution 元素,可以指定在具有高分辨率屏幕的 iOS 设备上,应用程序是应该使用 standard 分辨率模式还是应该使用 high 分辨率模式。

<requestedDisplayResolution>high</requestedDisplayResolution>

在高分辨率模式中,您可以在高分辨率显示屏上逐个处理每个像素。在标准模式中,设备屏幕将以标准分辨率显示应用程序。在该模式中绘制单个像素会在高分辨率屏幕上设置四个像素的颜色。

默认设置为 standard 。请注意,如果目标设备是 iOS 设备,则应使用 requestedDisplayResolution 元素作为 iPhone 元素(并非 InfoAdditions 元素或 initialWindow 元素)的子元素。

如果想在不同的设备上使用不同的设置,可将您的默认值指定为 requestedDisplayResolution 元素的值。使用 excludeDevices 属性可指定应使用相反值的设备。例如,使用以下代码,将对所有支持高分辨率模式的设备使用这一模式,第三代 iPad 除外,它使用标准分辨率模式:

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

excludeDevices 属性可用在 AIR 3.6 和更高版本中。

iOS 自定义 URI 方案

您可以注册自定义 URI 方案,以便允许您的应用程序由网页中的链接或设备上的其他本机应用程序进行调用。若要注册 URI 方案,请将 CFBundleURLTypes 键添加到 InfoAdditions 元素中。下面的示例注册了一个名为 com.example.app 的 URI 方案,从而允许应用程序由 example://foo 形式的 URL 进行调用。

<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(包括查询参数)放在 InvokeEvent 对象的 arguments 数组中。您可以使用任意多个自定义 URI 方案。

注: StageWebView 实例中的链接无法打开使用自定义 URI 方案的 URL。
注: 如果另一个应用程序已注册某个方案,则您的应用程序不能将其替换成为该 URI 方案注册的应用程序。

iOS 兼容性筛选

如果您的应用程序只能在具有特定硬件或软件功能的设备上使用,则请将条目添加到 InfoAdditions 元素的 UIRequiredDeviceCapabilities 数组中。例如,以下条目表示应用程序需要静态摄像头和麦克风:

<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 子集进行打包,并在运行时使用 Loader.load() 方法加载剩余的(仅包含资源)外部 SWF。要使用此功能,您在打包应用程序时,必须让 ADT 将所有 ActionScript 字节码 (ABC) 从外部加载的 SWF 文件移动到主应用程序 SWF,留下只包含资源的 SWF 文件。这是为了遵守 Apple Store 禁止在安装应用程序之后再下载任何代码的这一规则。

ADT 会通过以下操作来支持外部加载的 SWF(也称为去除代码的 SWF):

  • 读取 <iPhone> 元素的 <externalSwfs> 子元素中指定的文本文件,以访问要在执行时加载的 SWF(它是一个行分隔列表):

    <iPhone> 
                                           ... 
                                           <externalSwfs>FilewithPathsOfSWFsThatAreToNotToBePackaged.txt</externalSwfs> 
                                        </iPhone>
  • 将 ABC 码从每个外部加载的 SWF 中转移到主执行程序。

  • 忽略掉 .ipa 文件中的外部加载 SWF。

  • 将去除代码的 SWF 复制到 .remoteStrippedSWFs 目录。您将这些 SWF 通过一个 Web 服务器来托管,并让您的应用程序必要时在运行时加载它们。

您指出要在运行时加载的 SWF 文件,方法是在一个文本文件中指定它们的名称(每行一个),如下例所示:

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

指定的文件路径相对于应用程序描述符文件。另外,您必须在 adt 命令中将这些 swf 指定为资源。

注: 此功能仅适用于标准打包。对于快速打包(例如,使用解释器、模拟器或调试),ADT 并不创建去除代码的 SWF。

Geolocation 支持

为实现 Geolocation 支持,可将下面一个键值对添加到 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>