プッシュ通知などのイベントで起動した場合のデバッグ方法

こんにちは。モバイル開発チームに所属している小島です。

めったにはありませんが、たまにOSのイベントからアプリが起動されたときのデバッグを行いたいことがあります。
例えば、プッシュを受けた時や、ディープリンクで起動したときの application:didFinishLaunchingWithOptions: や Application#onCreate の挙動などです。

iOS の場合

Xcode のメニューから 「Debug > Attach to Process > By Process Identifier (PID) or Name」を選択します。

キャプチャ

「PID or Process Name」 の部分に開発中のアプリ名(プロセス名)を指定して、「Attach」ボタンを押します。
そうすると、Xcode は、アプリが未起動の場合はプロセスが起動するまでアタッチを待機してくれます。 なので、プッシュ通知などからアプリが立ち上がったときに、即時にアタッチされ起動直後の処理のデバッグが可能になります。

Android の場合

Android の場合は、ブレークポイントの手前で Debug#waitForDebugger() を仕込んでおきます。これにより、アプリはデバッガがアタッチされるまで待機するようになります。
なので、プッシュ通知などでアプリが起動後、停止している最中に Android Studio のメニューの 「Run > Attach debugger to Android process」を実行してプロセスにアタッチすれば、アプリが再び動き出しデバッグ可能な状態になります。

キャプチャ

まとめ

  • iOS の場合は、Xcode で先にアタッチを準備しプロセスが起動するまで待機。
  • Android の場合は、アプリが先にアタッチされるのを待機し Android Studio がアタッチする。

順番が異なりますが、両 OS ともにプッシュ通知などから起動したときの処理のデバッグが可能です。
あまり必要となる機会は無いと思いますが、最近必要になって調べてみたのでどなたかのお役に立てれば幸いです。