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 以前では、レンダリングモードがダイレクトに設定されている場合、AIR は iOS と Android でのバックグラウンドでの実行をサポートしません。この制約から、Stage3D ベースのアプリでは、オーディオ再生、位置の更新、ネットワークアップロードまたはダウンロードなどのバックグラウンドタスクを実行できません。iOS ではバックグラウンドで OpenGLES またはレンダリングを呼び出すことはできません。バックグラウンドで OpenGL を呼び出そうとしたアプリケーションは、iOS によって終了されます。Android では、バックグラウンドでの OpenGLES の呼び出し、またはその他のバックグラウンドタスク(オーディオ再生など)の実行について、アプリケーションへの制約はありません。swf バージョン 22 以降では、レンダリングモードがダイレクトに設定されている場合、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.executeInBackgroundfalse に設定します。

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 の配列です。各 string ではサポートするデバイスを定義します。<string>1</string> 設定は、iPhone および iPod Touch のサポートを定義します。<string>2</string> 設定は、iPad のサポートを定義します。これらの設定の一方のみを指定した場合、そのデバイス群のみがサポートされます。例えば、次の設定では 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 デバイスで標準解像度モードと解像度モードのどちらを使用するのかを指定します。

<requestedDisplayResolution>high</requestedDisplayResolution>

高解像度モードでは、高解像度ディスプレイの各ピクセルを個別に処理できます。標準解像度モードでは、デバイスの画面は、アプリケーションに対して標準解像度画面として示されます。標準モードで単一のピクセルを描画すると、高解像度画面で 4 つのピクセルの色が設定されます。

デフォルト設定は、standard(標準)です。iOS デバイスを対象とする場合は、requestedDisplayResolution エレメントを、(InfoAdditions エレメントや initialWindow エレメントではなく)iPhone エレメントの子として使用します。

デバイスごとに異なる設定を使用する場合は、requestedDisplayResolution エレメントの値としてデフォルト値を指定します。また、excludeDevices 属性を使用して、その逆の値を使用するデバイスを指定します。例えば、以下のコードでは、第 3 世代 iPad 以外の高解像度モードをサポートするすべてのデバイスで高解像度モードを使用し、第 3 世代 iPad では標準モードを使用します。

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

excludeDevices 属性は、AIR 3.6 以降で使用できます。

iOS カスタム URI スキーム

カスタム URI スキームを登録することにより、デバイス上にある Web ページ内のリンクやその他のネイティブアプリケーションからアプリケーションを呼び出せるようになります。URI スキームを登録するには、InfoAdditions エレメントに CFBundleURLTypes キーを追加します。次の例では、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 以降では、必須機能のリストに armv7opengles-2 が自動的に追加されます。

注意: アプリケーションでこれらの機能を使用するために、アプリケーション記述子にこれらの機能を含める必要はありません。UIRequiredDeviceCapabilities 設定は、適切に機能しないデバイス上へのアプリケーションのインストールを防ぐ目的でのみ使用してください。

一時停止せずに終了

ユーザーが AIR アプリケーションから切り替えると、AIR アプリケーションはバックグラウンドモードに入り一時停止します。アプリケーションを一時停止せずに完全に終了する場合は、UIApplicationExitsOnSuspend プロパティを YES に設定します。

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

外部の、アセットのみの SWF をロードすることでダウンロードサイズを最小限にする

アプリケーションによって使用される SWF のサブセットをパッケージ化し、Loader.load() メソッドを使用してランタイムでその他の(アセットのみの)外部 SWF をロードすることで、最初のアプリケーションのダウンロードサイズを最小限に抑えることができます。この機能を使用するには、ADT がアセットのみを含む SWF ファイルを残し、外部でロードされた SWF ファイルからメインアプリケーションの SWF にすべての ActionScript バイトコード(ABC)を移動するアプリケーションをパッケージ化する必要があります。これは、アプリケーションがインストールされた後にコードをダウンロードすることを禁じる Apple Store のルールに従うためです。

ADT は、外部でロードされた SWF(除外された SWF とも呼ばれます)をサポートするために以下を行います。

  • <iPhone> エレメントの <externalSwfs> サブエレメント内で指定されたテキストファイルを読み取って、実行時にロードされる SWF の行区切りリストにアクセスします。

    <iPhone> 
                                           ... 
                                           <externalSwfs>FilewithPathsOfSWFsThatAreToNotToBePackaged.txt</externalSwfs> 
                                        </iPhone>
  • 外部でロードされた各 SWF からメインの実行可能ファイルに ABC コードを転送します。

  • 外部でロードされた SWF を .ipa ファイルから除外します。

  • 除外された SWF を .remoteStrippedSWFs ディレクトリにコピーします。これらの SWF を Web サーバーでホストすると、アプリケーションはこれらを必要に応じてランタイムにロードします。

以下の例のように、テキストファイルで 1 行に 1 つずつ名前を指定して、ランタイムでロードする SWF ファイルを指定します。

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

指定するファイルパスは、アプリケーション記述ファイルからの相対パスです。また、これらの swf は adt コマンドでアセットとして指定する必要があります。

注意: この機能は、標準のパッケージ化にのみ適用されます。高速のパッケージ化(インタープリター、シミュレーター、デバッグを使用する場合など)では、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>