先日公開された AIR 3.3 ベータの機能の中から iOS 関連の情報をご紹介します。今回ご紹介する機能は iOS 専用の機能です。
ベータ版なので、仕様どおりに動かない場合もあると思いますが、その場合はバグのレポートをお願いします。
バックグラウンドでの動作
まず、iOS 上で、バックグラウンドでの再生時に利用できる機能が追加されています。
- AIR 3.2 : マルチタスクへの対応、サウンドの再生
- AIR 3.3 : 上記に加え、位置情報、ネットワークの利用と、OS がアプリを停止させる通知
これにより、マルチタスク関連ではネイティブアプリと同様の振る舞いが実現できるようになりそうです。
新機能のうち、位置情報を利用するために、アプリケーション記述ファイルで利用できるタグが追加されました。下のように iPhone タグ内を書くことができます。
<iPhone> <InfoAdditions> <![CDATA[ <key>UIBackgroundModes</key> <array> <string>location</string> </array> ]]> </InfoAdditions> </iPhone>
UIBackgroundModes キーの値には、必要に応じて location と audio のどちらか、あるいは両方を指定できます。このキーが指定されていると、AIR アプリは、バックグラウンドにまわされると 4 fps で動作し続けます。 (ただし描画処理は一切行われません)
iOS の、10 分後には終了するらしいバックグラウンドタスク機能を使うには、以下のタグを iPhone タグ内に記述します。
<iPhone> <executeInBackground>true</executeInBackground> </iPhone>
executeInBackground タグに指定できる値は true か false です。true であれば、アプリはバックグラウンドタスクとして振る舞うようになります。
以上の変更に伴い、新しくイベントが追加されました。
これまでも、アプリケーションがバックグラウンドにまわされると、Deactivate イベントが発生していましたが、これだとアプリが停止したかまでは分かりません。そこで、iOS がアプリを停止させる際、直前に Suspend イベントがアプリに渡されるようになりました。
なお、バックグラウンドタスクとして実行される場合も、フレームレートは 4 fps におとされます。
シミュレーター向けのパッケージ
AIR 3.3 からは、iOS シミュレータ向けにアプリをパッケージできます。この場合、アプリのテストには、SDK だけダウンロードすれば、開発者証明書やプロビジョニングプロファイルは不要です。
シミュレータは iOS デバイスではなく、Mac 上で動作するため、AIR アプリはインタープリターモードでパッケージされることになります。
パッケージの際には、ADT コマンドのの -target に、以下のどちらかを指定します。通常のテスト用とデバッグ用があります。
- ipa-test-interpreter-simulator
- ipa-debug-interpreter-simulator
例えば、デバッグ用のパッケージをする場合は、以下のようなコマンドラインになります。
adt -package -target ipa-debug-interpreter-simulator -connect -storetype pkcs12 -keystore Certificates.p12 -storepass password My_ipa_name my_ipa-app.xml my_ipa.swf
パッケージされたアプリをシミュレータにインストールするには、以下のように記述します。-installApp オプションが (-uninstallApp と -launchApp も) -platform ios の指定と一緒に使えるようになりました。
その他の変更点は、-platformsdk の追加のみです。-platformsdk の後には、実際にインストールされている SDK へのパスを指定します。 (例: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk)
adt -installApp -platform ios -platformsdk path -device ios-simulator -package My_ipa_name.ipa
インストールされたアプリの実行は以下のような感じです。
adt -launchApp -platform ios -platformsdk path -device ios-simulator -appid My_ipa_name
その他、 シミュレータでもネイティブ拡張機能を使ったテストができるよう、extension.xml 内の platform タグに、iPhone-x86 が指定できるよう変更されています。
<extension xmlns="http://ns.adobe.com/air/extension/3.1"> <id>com.test.extensions</id> <versionNumber>1</versionNumber> <platforms> <platform name="iPhone-x86"> <applicationDeployment> <nativeLibrary>library.a</nativeLibrary> <initializer>TestNativeExtensionsInitializer</initializer> <finalizer>TestNativeExtensionsFinalizer</finalizer> </applicationDeployment> </platform> </platforms> </extension>
USB 接続によるデバッグ
最後に、USB デバッグ機能です。
この機能を利用するには、パッケージの際、-listen オプションを指定します。これにより、アプリ起動時に fdb からの接続を待つようになります。target に指定できるのは ipa-debug-interpreter か ipa-debug のどちらかです。
adt -package -target ipa-debug-interpreter -listen my.mobileprovision -storetype pkcs12 -keystore Certificates.p12 -storepass password My_ipa_name my_ipa-app.xml my_ipa.swf
デフォルトでは、fdb との接続に、ポート番号 7936 が使われます。パッケージの際、-listen の後に番号を指定して、任意のポートを使うこともできます。
adt -package -target (ipa-debug-interpreter | ipa-debug) -listen 16000 ...
アプリケーションがパッケージされたら、ipa ファイルをデバイスにインストールして起動します。
アプリが実行されたら、ldb を使ってデバッグの準備をします。ldb は SDK フォルダの下の lib/aot/idb です。
-devices オプションを使って USB 接続されたデバイス名を表示させたら、
idb -devices
次に -forward オプションを使って、デバイスと fdb の中継を行うよう指示します。
idb -forward FDB_PORT 7936 デバイス名
-forward の後の最初の数値が fdb 側のポート番号、2 つ目の数値が アプリをパッケージする際に -listen で指定したポート番号 (デフォルトのままなら 7936) です。
以上で、デバッグを開始するのに必要な準備は整いました。そこで、下の例のように fdb を起動します。
fdb -p FDB_PORT
-p の後には、ldb -forward で指定した fdb 側のポート番号を指定します。fdb が起動したら、r コマンドでデバッグセッションが開始されるかどうか確認してみてください。
コメントする