iOS 用の ANE をデバッグする方法

AIR のネイティブ拡張を利用することにした場合、ActionScript のデバッグは AIR の SDK を使って行えますが、ネイティブコードのデバッグはネイティブのツールを利用することになるでしょう。

iOS 用の ANE を XCode を使ってデバッグする方法が公開されていましたので、その内容をご紹介します。元のブログ記事はこちらです。 (Debugging Native Extensions for AIR iOS

---- ここから ----

ANE を含む IPA を ADT で生成する際、IPA と同じディレクトリに dSYM ファイルが生成されます。dSYM ファイルの名前は、アプリケーションバンドル名に .dSYM を付けたものになります。(アプリ名が MyApp.app ならば、MyApp.app.dSYM)

dSYM リソースは、ネイティブの iOS アプリのクラッシュログの解析で使われます。この記事 (Symbolicating iPhone App Crash Reports) には、クラッシュログの分析方法がいくつか議論されています。

さて、ANE のデバッグをする際、ジェイルブレイク無しで、XCode の外で gdb から iOS デバイス上のアプリを起動する方法は無いようです。ジェイルブレイクは、多くの人にとって望ましい手段ではないでしょうから、XCode から AIR アプリを起動しなければなりません。

そのため、XCode プロジェクト内でダミーのターゲットを作成し、AIR のアプリケーションをそこから起動できるように構成をします。

作業を始める前に、重要な注意項目があります。

AIR 3.1 では、ANE からの例外をサポートしません。どのような例外もキャッチされず、さらに、アプリをクラッシュさせることでしょう。

そこで、ANE のデバッグを行う際は、例外をコード内で使わないだけではなく、プロジェクト設定から C++ と Objective-C++ の例外を全て無効にします。

もし、この手順を正しく行わなければ、以下のような状況が起こります。

  • 設定したブレークポイントを無視されることがある
  • デバッガ内に表示される変数の値に怪しいものが混じる
  • 次のようなメッセージがしばしば表示される “Error from Debugger: Previous frame inner to this frame (gdb could not unwind past this frame)”

それでは、以下が iOS 用の ANE をデバッグする手順です。

  1. ANE 用の XCode プロジェクトを開き、新しいターゲットとして "Empty Application" を追加する
  2. 追加したターゲットのビルド設定の画面を開き、"product name" にアプリ名を記述する (アプリケーション記述子の <filename> タグに指定したもの)
  3. ターゲットのビルドフェーズに、新しく "Run Script" を追加。その際、他のビルドフェーズは全て削除する
  4. 追加したビルドフェーズに以下のスクリプトを足す。このスクリプトが実行されると、XCode から起動可能な状態に IPA のコンテンツが展開される
# ディレクトリの変更
pushd ~/testproject/build
# IPAのパッケージ、既にパッケージ済みの場合ここはスキップ
adt -package -target ipa-debug-interpreter
 -provisioning-profile ~/certs/MyProfile.mobileprovision
 -storetype pkcs12 -keystore ~/certs/Certificates.p12
 -storepass XXX AnotherApp.ipa Main-app.xml Main.swf
 -extdir ext
# IPAを展開
cp AnotherApp.ipa AnotherApp.ipa.zip
unzip -o AnotherApp.ipa.zip
rm AnotherApp.ipa.zip
# IPAに含まれていたコンテンツをXCode用にコピー
cp -r Payload/AnotherApp.app/* "${CONFIGURATION_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/"
cp -r AnotherApp.app.dSYM "${CONFIGURATION_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/"
# 余分なファイルやフォルダを削除
rm "${CONFIGURATION_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/_CodeSignature/CodeResources"
rmdir "${CONFIGURATION_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/_CodeSignature"
rm "${CONFIGURATION_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/CodeResources"
rm "${CONFIGURATION_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/PkgInfo"
# 元のディレクトリに復帰
popd 
  1. パス名やファイル名など、スクリプト中にイタリックで書かれた箇所を、実際の環境に合わせて修正する。スクリプト内では、adt コマンドを使って IPA をパッケージしているので、Flash Pro 等を使ってパッケージする場合は、該当箇所をスキップする

以上で設定は完了です。ターゲットをビルドしてデバッグを開始してみて下さい。通常、ビルドステップを実行すると、アプリケーションファイルは、プロジェクトディレクトリの中の build/Debug-iphoneos に展開されます。

---- ここまで ----

 

トラックバック(0)

トラックバックURL: http://cuaoar.jp/mt4/mt-tb.cgi/239

コメントする

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261