必要条件

この記事に必要な予備知識

必要なものついては、記事冒頭をご覧ください。

ユーザーレベル

すべて

Adobe AIRを使えば、iOS/Android/Windows/Mac OSなど、様々なプラットフォーム向けにアプリを開発することができます。さらに、Adobe AIR 3.0からはネイティブ拡張(ANE)が搭載され、Adobe AIRが標準ではサポートしていないプラットフォーム固有の機能でも、ネイティブ拡張経由で利用することも可能です。

Flash Professionalでは、CS6からネイティブ拡張を利用できるようになりました。本記事では、Flash Professional CS6 version 12.0.2.529(2012/11/05時点)を使って、iOSアプリ開発にネイティブ拡張を使用する方法について説明します。

※iOSアプリ開発を例にしていますが、他のプラットフォーム向けのアプリ開発でも参考にできる箇所があります。

準備するもの
iOSデバイス iOSデバイスはARMプロセッサを利用しており、そのアーキテクチャのバージョンはデバイスごとに異なります。Adobe AIRはarmv6アーキテクチャに対応していないため、古いデバイスではAdobe AIRで作成したアプリが動作しません。Adobe AIRのアプリが動作するデバイスについては、「Adobe AIRの必要システム構成」ページをご覧ください。
Flash Professional CS6 2012年9月に公開された、Flash Professional CS6のアップデータを適用してください。このアップデータには、本記事で説明する機能が追加されています。アップデートは、Flash Professional CS6のメニューから[ヘルプ]→[アップデート...]を選び、Adobe Application Manager経由で行えます。
ネイティブ拡張のファイル ここでは「iBattery for iOS」を使用します。ネイティブ拡張のファイル(.ane)は「AIR Native Extension Example: iBattery for iOS」から入手できます。その他にも「Native extensions for Adobe AIR」で様々なネイティブ拡張を紹介しています。
iOS Developer Programへの登録 デバイスへアプリを転送する際に必要となります(iOSシミュレーターでテストするだけなら不要です)。年間参加費は8400円(2012年9月時点)です。
※iOS Developer Programへ登録する際の登録情報は日本語ではなく、半角英数字を使用してください。日本が含まれていると問題が発生することがあります。
※iOS Developer Programへ未登録の方は、「日本のApple StoreでiOS Developer Programを購入しActivateするまでの全スクリーンショット」が参考になります。

【iOSアプリでネイティブ拡張を使用するときの流れ】

※ステップ4以降の作業を行うには、iOS Developer Programへの登録が必要です。

なお、本記事ではMacをベースに解説します。

ステップ1:Flash Professional CS6 でアプリ制作を開始

「iBattery for iOS」を使用して、端末のバッテリー状態を表示するアプリを作成しましょう。

1-1 「AIR for iOS」を選択してファイルを新規に作成する

Flash Professional CS6を起動したら、新規作成で「AIR for iOS」を選択して、ファイルを新規に作成します。

1-2 スクリプト言語はActionScript 3.0を使用する

スクリプト言語はActionScript 3.0を使用します。プロパティパネルで、[ターゲット]を[AIR3.4 for iOS]、[スクリプト]を[ActionScript 3.0]に設定します。

ステップ2:使用するANEファイルをFlashドキュメントと関連付ける

ネイティブ拡張を使用するには、Flashドキュメントに該当ANEファイルを関連付ける必要があります。

2-1 ANEファイルの関連付けは[ActionScript 3.0の詳細設定]ダイアログボックスで行う

ANEファイルの関連付けは、プロパティパネルの[スクリプト]の横にある[スパナ]ボタンから行います。

2-2 新規パスを追加する

[ActionScript 3.0の詳細設定]ダイアログボックスでANEファイルへのパスを指定します。指定するには、まず、[+]ボタンから新規パスを追加します。

2-3 ANEファイルへのパスを指定する

空白の「新規パス」欄ができました。次にANEファイルへのパスを指定します。

2-4 ANEファイルを選択する

[ネイティブ拡張(ANE)ファイルを参照]ダイアログボックスが開くので、iBattery for iOSのANEファイル「ibatteryextension.ane」を選択します。

ステップ3:ネイティブ拡張を使って開発する

ネイティブ拡張は、OSのAPIとAIRアプリの橋渡しをするためのものです。ネイティブ拡張ごとに目的のAPIの値を取得するためのメソッドが用意されています。メソッドをActionScriptから呼ぶ方法や戻り値の意味などは、通常、開発者のWebサイトに記されています。

3-1 iBattery for iOSに用意されているメソッド

iBattery for iOSのサイトを見ると、ネイティブライブラリファイルのメソッドとその戻り値の意味、ActionScriptのコードが書かれています。

iBattery for iOSに用意されているメソッド
getBatteryLife() ネイティブライブラリ内のGetBatteryLife()を呼び出し、バッテリーの容量を0.00~1.00の数値で返す。
getBatteryState() ネイティブライブラリ内のGetBatteryInfo()を呼び出し、バッテリーの充電状態を0-3の数値で返す。数値の意味は「0 : Unknown(不明)」「1 : Unplugged(未接続)」「2 : Charging(充電中)」「3 : Full(満タン)」。

3-2 アプリの作成

サンプルは、「LIFE」ボタンや「INFO」ボタンを押すと、それぞれの戻り値をステージ上のテキストフィールド(インスタンス名:console)に追記していくアプリです。ActionScriptのコードは下記のようになっています。iBattery for iOSのサイトにはMXMLでの書き方しかありませんが、BatteryTestView.mxmlの<fx:Script>タグの中の[CDATA[~]]の間の部分を参考して書いています。

import com.custardbelly.air.extensions.battery.ios.Battery; var _batteryExtension:Battery; _batteryExtension = new Battery(); lifeButton.addEventListener( MouseEvent.CLICK, handleLifeRequest, false, 0, true ); infoButton.addEventListener( MouseEvent.CLICK, handleInfoRequest, false, 0, true ); function handleLifeRequest( evt:Event ):void { trace("handleLifeRequest_start"); try { trace(_batteryExtension); console.appendText( "Battery Life Percentage: " ); console.appendText( ( _batteryExtension.getBatteryLife() * 100 ).toString() + "%\n" ); } catch (e:Error) { console.appendText( "Error: " + e.message ); } } function handleInfoRequest( evt:Event ):void { trace("handleInfoRequest_start"); console.appendText( "Battery State: " + ( _batteryExtension.getBatteryState() ).toString() + "\n" ); }

ステップ4:デバイスでの動作検証

デバイスにアプリをインストールするためには、iOS Developer Program登録後に取得できる、証明書ファイル(.p12)とプロビジョニングプロファイル(.mobileprovision)が必要になります。あらかじめ準備しておきましょう。

4-1 使用しているMacのWi-Fiのネットワーク名とIPアドレスを確認する

Flash Professional CS6を使ってデバイスでデバッグを行う場合、アプリのインストールはUSB経由、デバッグはWi-Fi経由となり、どちらにも接続されている必要があります。Wi-Fi経由でデバッグするには、次の2つが条件となります。

  1. デバイスと開発に使用しているMacが、同じWi-Fi上に接続されていること。
  2. 開発に使用しているMacのIPアドレスをあらかじめ設定しておくこと。

Macのシステム環境設定>ネットワーク環境設定を開き、Wi-Fiのネットワーク名とIPアドレスを確認します。

4-2 アプリケーション設定を編集する

AIR for iOSの設定は、プロパティパネルの[ターゲット]の横にある[スパナ]ボタンから行います。

4-3 デバイスでのデバッグ用に設定を追加する

[AIR for iOSの設定]ダイアログボックスでは以下の設定を行います。

  1. [証明書][パスワード][プロビジョニングプロファイル]の箇所には、iOS Provisioning Portalやキーチェーンアクセスから入手した証明書や利用するためのパスワードを指定します。
  2. [クイックパブリッシュ-デバイスでのデバッグ用]を選択し、その下のプルダウンメニューであらかじめ確認していたIPアドレスを選びます。
  3. パブリッシュを送信の下の[選択されたiOSデバイスにアプリケーションをインストールする]にチェックを入れます。

※ネイティブ拡張を含めたAIR for iOSアプリを[クイックパブリッシュ-デバイスでのデバッグ用]としてデバイスにインストールすると、起動時に出力先として指定されたIPアドレスのあるMacを検索します。そのため、Macがネットワーク上にない状態だと、出力先が見つからないため起動に時間がかかります。テストでアプリを配布する際には[クイックパブリッシュ-デバイスでのテスト用]にしてからパブリッシュしましょう。

4-4 デバイスにアプリをインストールする

MacにデバイスをUSBケーブルで接続します。[パブリッシュ]を行うと、USBケーブル経由でデバイスにアプリがインストールされます。パブリッシュは、[AIR for iOSの設定]ダイアログボックスからでも、メニューの[ファイル]→[パブリッシュ]のどちらでも構いません。お好きな方で実行してください。

※AIR for iOSが対応していない古いデバイス(armv6アーキテクチャのもの)にインストールしようすると、「デバイスエラー:デバイスに十分な容量があるか確認してください」とエラーが表示されることがあります

4-5 リモートデバッグセッションを開始する

[デバッグ]メニュー→[リモートデバッグセッションを開始]→[ActionScript 3.0]を選択し、[デバッグ]ウィンドウを開いて、リモートデバッグセッションを待機状態にします。

4-6 デバイスでアプリを操作し、[出力]パネルにtrace()などの内容を出力する

デバイス上でアプリを操作すると、[デバッグ]ウィンドウの[出力]パネルにtrace()などの内容が出力されます。

iOS向けのネイティブ拡張を使う際の注意点

ネイティブ拡張は、2011年9月頃にリリースされたAdobe AIR 3.0で搭載されました。現在公開されているネイティブ拡張の多くが、その時期に作成されたものです。当時のiOSの最新版はiOS5.xであり、ネイティブ拡張の動作検証は当時のiOSに対して行われています。2012年11月現在はiOS6ですので、iOS6で仕様が変わったAPIを対象にしたネイティブ拡張は、開発者が意図した動作をしないものもあります。

また、ネイティブ拡張をiOSシミュレーターでも動かしたいときは、別にiOSシミュレーター用のネイティブ拡張が必要になります。iOSシミュレーター向けのネイティブ拡張も用意してあるものは少ないため、テストはデバイスでのリモートデバッグで行うのがおすすめです。