Action Extensionをデバッグする

新しいiPhoneやiOS8のリリースも正式にアナウンスされドタバタしています。

iOS8の新機能、Extension。
例えば「写真」アプリで写真を選択し、アクションボタンをタップすると
iOS Simulator Screen Shot 2014.09.12 8.43.47-01このようにTwitterやFacebookに投稿したり、印刷したりする機能が現れます。
iOS8ではアプリケーションが提供するExtensionを追加出来るようになりました。
例えばiOSが提供している以外のSNSに投稿するShare Extensionを追加したり、画像にフィルターを掛けるAction Extensionを提供したり出来るようになりました。

さて、このExtension、Appleのアナウンスではホスト・アプリを選んでXcodeで起動させればソースコードレベルでデバッグ出来る事になっているのですが、私がドキュメントをちゃんと読みこなせていないのか、なかなかうまくデバッグする事が出来ません。

そこで強引にデバッグする手法です。

まず、Extensionが稼働しているプロセスを特定するため、PIDを取得します。
viewDidLoadの最初にでも下記のようなコードを埋め込みます。

- (void)viewDidLoad {
    [super viewDidLoad];

#ifdef DEBUG
    pid_t pid;
    pid = getpid();
    NSLog(@"%s : pid = %ld", __func__, (long)pid);
#endif

次にXcodeからExtensionを実行します。
スクリーンショット 2014-09-12 9.09.04
するとホストアプリをどれにするか聞いてきます。
スクリーンショット 2014-09-12 9.09.20

UIActivityViewControllerを使ってAction Extensionを起動出来るアプリを選んでやります。

次にコンソールのメッセージを見るためにXcodeのWindowメニューからDeviceを選びます。

先ほどでバッグ用に起動したデバイスで目的のExtensionをタップし、Active Extensionを起動します。

スクリーンショット 2014-09-12 9.19.30のコピー
コンソールには先ほどviewDidLoadに仕込んだメッセージが表示され、Prosess IDが 4924 だと判明しました。

“Debugメニュー” -> “Attache To Process” -> “By Process ID(Identifier) or Name..”
で先ほどのPIDを指定して目的のプロセスにAttacheします。

スクリーンショット 2014-09-12 9.27.34

以上でブレークポイントを掛けてデバッグ出来るようになります。

スクリーンショット 2014-09-12 9.36.41のコピー

 

ただ、この方法ではExtensionが起動した直後からデバッグを行う事は出来ません。
今回の事で分かったのは、Action Extensionはホスト・アプリの中で動いているのではなく、別プロセスとして立ち上げられていると言う事です。
これによるメリットはホスト・アプリが非常にメモリーを使う物であっても、それに影響されずメモリーなどの資源を使う事が出来ると言う事です。またAction Extensionにバグがあり、強制終了させられた場合でもホスト・アプリの動作には影響が無いのでしょう。

Leave a Reply

Your email address will not be published. Required fields are marked *

*

CAPTCHA


WP-SpamFree by Pole Position Marketing