プッシュ通知によって起動されたアプリのデバッグ


135

現在、プッシュ通知を受信するアプリを開発しています。私はこれをすべてPHPページを通じて100%機能させています。アプリが受信できるプッシュ通知にはいくつかの種類があります。PHPはこれを処理し、さまざまな情報パケットをアプリに送信します。これらのパケットはすべて正常に受信されます。

ただし、ユーザーが通知を「表示」し、アプリを起動するとき、ユーザーがアプリを手動で起動した場合とは異なるアクションを実行したいのは明らかです。それに加えて、プッシュ通知のタイプに応じて異なるアクションを実行します。私はこれをうまく機能させています...構造的に。

私のプッシュタイプの1つは、複数の異なるサーバーへの複数の接続を作成し、データをやり取りするUIViewを開くことになっています。このUIViewは、たとえばメインメニューからトリガーされたときに正常に機能しますが、プッシュ通知によってこのUIViewがトリガーされて表示されると、ソケット接続が期待どおりに機能しません。

今、私の質問はソケットについてではなく、もっとそうです-どのようにそのような問題をデバッグしますか?私が言えること(私は比較的新しい)がプッシュ通知からアプリを起動したとき、その実行をデバッガー/コンソール/などにリンクする方法がありません...を使用してコードをデバッグしようとして非常に困難な時間を費やしていますUIAlertViews。さまざまなサーバー間で多くの通信回線がやり取りされるためです。

私へのアドバイスをいただければ幸いです。

回答:


147

XCode <4.0(XCode> = 4については、下記のdelirusによる回答を参照)では、デバッガーを介してアプリを起動する代わりに、起動後にアプリにデバッガーをアタッチするようにXcodeを構成できるようになりました。これにより、URLスキーム、ペーストボード、プッシュ通知など、アプリケーションの起動状態に基づいて変化するものをデバッグできます。

  1. Xcodeのソースバーを見て、ターゲットの下に実行可能ファイルがあります。
  2. 実行可能ファイルでアプリのインスペクターを起動します。
  3. インスペクタの[デバッグ]タブタブをクリックします。
  4. 「デバッガーの起動後に実行可能ファイルを開始する」のチェックを外します
  5. 「次の起動/プッシュ通知を待つ」を確認してください

アプリを起動する代わりにXcodeからデバッグをクリックすると、アプリの起動を待機していることを示すウィンドウが表示されます。次に、通常は電話でアプリを起動し、Xcodeがそれに接続します


37
これは適切ではないかもしれませんが、私はあなたを愛しています。:)
Dutchie432 2009

17
この方法で起動すると、アプリケーションのstdin、stdout、stderrがGDBのコンソールにルーティングされず、通常のアプリの起動時の場所にポイントされます。オーガナイザでデバイスを見ると、デバイスのシステムコンソールでNSLog()を確認できます。
Louis Gerbarg、2009

1
ここで非常に貴重なポイントを教えてくれました。ありがとうございました。私は過去2日間を費やして、投稿から20分以内に修正できる何かをデバッグしようとしました。
Dutchie432 2009

1
@stigiは、URLスキームをテストするためのシミュレータで動作します。問題がある場合は、xcode 4.5を使用しています
dreyln '29

1
@dreyln私のコメントは2009年からのものでした:)以降、多くの変更がありました。しかし、頭を上げてくれてありがとう!
stigi 2012年

124

Xcode 4の場合:

  1. 「スキーム」ドロップダウンからアクティブなスキームを編集します。(+ <
  2. あなたの製品を選択するよりも-左側の「Run MyApp.app」。
  3. 右側の[情報]タブを選択します。
  4. 最後に、「MyApp.appの起動を待つ」オプションを選択します。

詳細について、「Scheme Editorでの実行可能ファイルのカスタマイズ」セクションを参照してください。

編集:
GDBのログを見逃した場合は、彼の回答に対するLouis Gerbargのコメントを参照してください。


1
Xcode 4.2 for Lionを使用していますが、アプリはURLスキームから正しく起動し、デバッガーの実行は停止しませんが、コンソールには何も表示されません。何か不足していますか?
LoDani、2011年

@LoDaniも同じですが、その理由を理解したことはありますか?
デイビス、

3
@ LoDani、Davis G .:受け入れられた回答に対するLouisのコメントを見ましたか?stackoverflow.com/questions/1239000/…この方法で起動すると、stdin / out / errはコンソールにリダイレクトされません。
IvanVučica2012

ありがとう、あなたは私の日を救った!アプリがURLハンドラーによって起動された場合にのみ発生するバグを発見しようとしています。
エリオット

@delirus-XCode 4用にこれを更新していただきありがとうございます
Dutchie432 '19

112

XCode 10、9、8、7、6の場合:

  1. ツールバーのスキーム選択します(デバッグしているデバイスのすぐ左)
  2. スキームの編集を選択
  3. 左側のパネルで[ 実行]を選択します
  4. [ 起動 ]オプションで、[ 実行可能ファイル起動を待つ ]を選択します
  5. スキーマエディターを閉じて、XCodeプロジェクトを実行します。

通知、カスタムURLから起動するとき、またはアプリのアイコンをタッチすることでデバッグできるようになりました。


9
この回答は、一般的には正しい道に進んだとしても、多くの問題を引き起こしました。ステップ3は少し誤解を招きます。もちろん、あなたはそれをしなければなりません。左側のパネルで[実行]を選択します。しかし、非常によく似た概念的な言い回しの手順5も必要です。結果を期待する前に、xcodeの[実行]ボタンをクリックします...最初はうまくいかなかったので、他の同僚にアドバイスを求めました...私が実行することをした場合、私はそれに対して答えた。3 ...これには本当に、本当に、本当にステップ5が必要です...
Florin Odagiu

@FlorinOdagiuグッドコール。手順5を追加しました。ありがとうございます。
bgolson

Xcodeが別のスキームタブを復元する場合、[起動]オプションは[情報]タブの下にあります。
Nate Whittaker

3
アプリを手動で起動しても、デバッガーウィンドウに何も出力されません。
dvdblk 2018年

3

私はプッシュ通知を使用していないので、プッシュ通知の正確な動作がわかりません。ただし、可能であれば通知が投稿されたようにプログラムのメインメソッドに通知させるか、applicationDidFinishLaunching:メソッド内からapplication:didFinishLaunchingWithOptions:UIApplicationDelegateメソッドを呼び出して、プッシュ通知の受信を模倣してみます。

HTH-乾杯、大安


また、良い考えですが、本物をデバッグするには模倣が常に2番目に最適です!ハッピーコーディング!
Dutchie432 2009

3

Xcode 6の場合:

  1. iPhoneをUSBでMacbookに接続する
  2. アイコンをタップしてiPhoneでアプリを起動します
  3. Xcodeメニューで、Debug>> Attach to Processアプリを選択

1
このアプローチでは、重要な起動パスをデバッグすることはできません。
Zorayr 2017年

2

XCode 11および10の場合、次の操作を実行できます。

  1. 「スキーム」オプションを選択します。
  2. 「スキームの編集」を選択します。

  3. 左側のパネルから[実行]オプションを選択します

  4. 起動部分で、[ 実行可能ファイルが起動するのを待つ]を選択し、ダイアログを閉じます。

  5. プロジェクトをビルドして実行します。アプリのアイコンをタップするか、通知メッセージをタップして、アプリを起動できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.