必要条件

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

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

ユーザーレベル

すべて

iOSアプリ開発において実機による動作検証は不可欠です。しかし、修正するたびに実機へのインストール作業が発生します。1~2台ならまだしも、十数台ともなると、その作業だけで非常に手間がかかります。そんなときは、テスト機へのiOSアプリの配信をサポートしてくれるサービス「TestFlight」が便利です。

【TestFlightでできること】
<デバイス管理>

  • テスト機のUDIDを一括管理できる。
  • テスト機へのアプリのインストール状況を確認できる。
  • アプリのアップデートの際には、テスト機へメールでアプリを一斉配信できる。

<デバッグ機能>

  • アプリの終了後、ログ出力を自動的にアプリ内からTestFlightサイトへ送信。
  • アプリに対するフィードバックを自動/手動でアプリ内からTestFlightサイトへ送信。
  • 特定のチェックポイントを通過したら、自動的にアプリ内からTestFlightサイトへ送信。

そして、2012年12月にリリースされたAdobe Gaming SDKにはネイティブ拡張「BetaTesting.ane」が同梱されており、これを使えばAIR for iOSからTestFlightのAPIを簡単に利用できます。本記事では、TestFlightとBetaTesting.aneを活用した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経由で行えます。
※執筆時点のバージョンは12.0.2.529です。
AIR SDK 3.4以降 上記CS6のアップデータを適用すると、AIR SDK 3.4がインストールされます。なお、本記事では最新のAIR SDK 3.5を使用しています。AIR SDK 3.5は、Adobe Gaming SDK内に同梱されているほか、Adobe AIR Developer Centerより入手できます。AIR SDK 3.5をインストールするには、CS6の[ヘルプ]メニュー→[AIR SDK を管理...]を選び、AIR SDK 3.5のあるフォルダーを追加します。
BetaTesting.ane Creative CloudからAdobe Gaming SDKをダウンロードし、その中にあるBetaTesting.aneを使用します。「Adobe Gaming SDK 1.0」→「Native Extensions (ANEs)」→ BetaTesting.ane
iOS Developer Programへの登録 デバイスへアプリを転送する際に必要となります(iOSシミュレーターでテストするだけなら不要です)。年間参加費は8400円(2012年9月時点)です。
※iOS Developer Programへ登録する際の登録情報は日本語ではなく、半角英数字を使用してください。日本が含まれていると問題が発生することがあります。
※iOS Developer Programへ未登録の方は、「日本のApple StoreでiOS Developer Programを購入しActivateするまでの全スクリーンショット」が参考になります。

【TestFlightとBetaTesting.aneを活用した、iOSアプリの開発から動作検証までの流れ】

※なお、実機での動作検証には、iOS DevProgramへの登録と登録後に取得できる証明書が必要です。

【参考リンク】

※TestFlight SDKの最新バージョンは1.1ですが、BetaTesting.aneが対応しているTestFlight SDK はバージョン1.0です。上記ANEのAPIドキュメントと合わせて確認しましょう。

ステップ0:TestFlightでアカウントを作成する

まず、TestFlightのアカウントが必要です。「TestFlight とりあえずどんなものか|MUSHIKAGO APPS MEMO」を参考にアカウントを作成します。

この手順の中で「Team」を作成することになります。Teamを作成すると、自動的に「Team Token」も発行されます。このTeam Tokenは、ActionScriptの中でTestFlightインスタンスを作成する際に必要になります。

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

ここでは、BetaTesting.aneのフィードバック機能とチェックポイント機能がわかりやすいアプリを作成しましょう。

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

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

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

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

ステップ2:ANEファイル(BetaTesting.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)ファイルを参照]ダイアログボックスが開くので、BetaTesting.aneを選択します。

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

BetaTesting.aneは、TestFlightのSDKとAIRアプリの橋渡しをするためのものです。ここでは具体例を交えて説明します。

3-1 BetaTesting.aneに用意されているメソッド

BetaTesting.aneに用意されているメソッドは、「All Packages - API Documentation」に記載されています。

BetaTesting.aneに用意されているメソッド
TestFlight(takeOffToken:String, setDeviceIdentifierToken:Boolean) TestFlightインスタンスを作成する。「takeOffToken」は、TestFlightサイト上で発行される「Team Token」のこと。
log(logStr:String) ログは、アプリ終了後、自動的にTestFlightサイトへ送信される。log()の機能を有効にするには、出力する内容をsetOptions()で設定する必要がある。
setOptions(options:Array) 引数のArrayの値は、key「"logToSTDERR","logToConsole"」とvalue「"YES","NO"」の2つ。 keyの値は、"logToSTDERR"だと標準エラー出力となり、"logToConsole"だと開発者が引数で渡す文字列の出力となる。valueは初期値は"YES"で、TestFlightの標準出力のみとなる。"NO"にすると、TestFlightの標準出力に、keyで指定した内容が追加される。
passCheckPoint(checkPoint:String) チェックポイントの通過時に、引数の文字列をリアルタイムでTestFlightへ送信する。チェックポイントの通過日時は、TestFlightサイト上の[Checkpoints]欄にて、引数の文字列ごとに区分けされた状態で確認できる。
submitCustomFeedBack(feedbackString:String) 引数の文字列をリアルタイムでTestFlightへ送信する。その内容は、TestFlightサイト上の[Feedback]欄で確認でき、テスト者へのメール通知機能もある。
openFeedBackView() アプリの使用者が不具合報告や感想など自由な文字列を送信するためのメッセージフォームを表示する。送信された文字列は、TestFlightサイト上の[Feedback]欄で確認でき、テスト者へのメール通知機能もある。

3-2 アプリを作成する

サンプルは、前述のメソッドを網羅的に確認できるように作成してあります。作成するアプリ名は「BetaTesting」としています。

XMLでの指定:
log()のデータは、アプリの終了後にTestFlightサイトへ送信されます。しかし、通常のiOSアプリだと、実機の[Home]ボタンを押してもアプリはバックグラウンドにまわるだけで終了はしません。ここでは、[Home]ボタンでアプリが終了するように.flaと同階層に作成される、BetaTesting-app.xmlに「<key>UIApplicationExitsOnSuspend</key><true/>」を追加しています。

TestFlightに関係する部分のActionScriptコード:

import com.adobe.ane.testFlight.TestFlight; var extension:TestFlight; function setTestFlight():void { //TestFlight(takeOffToken:String, setDeviceIdentifierToken:Boolean)の例//takeOffTokenはappの識別子 extension = new TestFlight(" TeamTokenを入れる ",true); //setOptions(options:Array)の例 //keyの値"logToSTDERR"(標準エラー出力)or"logToConsole"(TFLogの出力) //valueは初期値YES。TestFlightの標準出力のみ。出力を付加する場合は"NO"にする extension.setOptions([{key:"logToConsole",value:"NO"}]); //log(logStr:String):の例 extension.log("log:StartTestFlight"); } feedButton.addEventListener( MouseEvent.CLICK, openFeedBackHandler); //実機の[Home]ボタンを押した際の終了はEvent.DEACTIVATEでとれる stage.addEventListener(Event.DEACTIVATE , deactivateHandler); //openFeedBackView()の例 function openFeedBackHandler( evt:Event ):void { extension.log("func:openFeedBackHandler"); extension.openFeedBackView(); } //passCheckPoint(checkPoint:String);の例 function checkPassedTime(timeStr:String):void { extension.passCheckPoint("CheckPoint:TimerCountUp"); } //submitCustomFeedBack()の例 function swipeEnd():void { extension.log("func:swipeEnd"); extension.submitCustomFeedBack("feedBack:swipe" + outPutfld.text + "page"); } function deactivateHandler(e:Event):void { extension.log("log:deactivate"); }

ステップ4:.ipaファイルをTestFlightにアップロードする

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

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

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

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

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

  1. [証明書][パスワード][プロビジョニングプロファイル]の箇所には、iOS Provisioning Portalやキーチェーンアクセスから入手した証明書や利用するためのパスワードを指定します。
  2. [デプロイ-アドホック]を選択します。

4-3 .ipaファイルをTestFlightにアップロードする

パブリッシュを行うと、.flaと同階層にBetaTesting.ipaが作成されます。このファイルをTestFlightサイトにアップロードします。

アップロードが終わると、プロビジョニングプロファイルに含まれているメンバーのUDIDもしくはアカウント名の一覧に切り替わります。[User]欄の左にあるチェックボックスで配信対象を選択し、「Just Update(告知なしでインストールのみ許可する)」か「Update & Notify(メール告知を行いインストールを許可する)」を実行します。

ステップ5:TestFlightで動作検証する

ステップ0でTestFlightアカウントを作成した際、デバイスを登録する手順の中で、TestFlightのiOSアプリがインストールされます。CS6で作成したアプリの初回インストールは、このTestFlightアプリ経由で行います(2回目以降は、TestFlightアプリ経由、もしくは開発中のアプリ経由のいずれでも可能となります)。

ここでは、デバイスへのアプリのインストールと、TestFlightサイト上に表示されるフィードバックやセッションなどについて説明します。

5-1 作成したアプリをインストールする

デバイス上のTestFlightアプリから、ステップ4でTestFlightにアップロードしたアプリをインストールします。TestFlightアプリを起動すると、インストール可能なアプリの一覧が表示されます。作成した[BetaTesting]アプリの右側にある[INSTALL]ボタンを押します。

5-2 アプリを起動し、TestFlightサイトで出力を確認する

アプリを起動するとSessionが始まります。サンプルアプリでは、アプリの終了時にSessionが終了するようになっています。log()の内容は、Session終了後にTestFlightサイトに送信されます。その他の出力は、Session接続中にリアルタイムにTestFlightサイト上で確認できます。

サンプルアプリは次のような仕組みになっています。

  1. ページをスワイプすると、TestFlightサイトの[Feedback]に「feedBack:swipe1page」などの文字列を送信する。
  2. [FeedBack]ボタンを押すと、メッセージフォームが表示され、任意の文字列をフィードバックに送信できる。
  3. チェックポイントとして「アプリの起動時」と「秒が1秒増える時」を設定しており、それを通過する度にTestFlightサイトの[Checkpoints]に送信する。

以下は、TestFlightサイトで確認できる情報です。

※Session Logは、タイミングにより表示されないことがあります。[Session Events]での最後の出力で「Ended Session」の表示がないときは、TestFlight側でアプリの終了イベントを受け取れていないようです。この場合は再度テストを行う必要があります。