2009-05-21 2 views
5

私はカスタムURL経由で起動できるiPhoneアプリを書いています。したがって、上書きする - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)urlhandleOpenURLメッセージの実装時にどのようにデバッグしますか?

変更をテストするには、シミュレータでアプリを実行してからSafariを起動する必要があります。次にアドレスバーにカスタムURLを入力してアプリを起動します。

しかし、私が起動するたびに、アプリケーションがクラッシュします。理由を理解しようとしていますが、ブレークポイントを設定してホーム画面(XCodeではなく)からアプリを起動すると、添付されていないようです。

私もhandleOpenURLメッセージでのNSLog文を入れてみましたが、彼らは、コンソールに出力されません。

私はむ〜、ええ...私はUIAlertViewsを作成することができたとしますが。シミュレータのデバッグセッションに接続する他の方法はありますか?

答えて

14

をXcodeの4では、あなたのターゲットのスキームを編集し、「ファイル名を指定して実行」セクション、「情報」タブですることができますこれは、デバッガがアプリの次回起動時まで待ってから作成するよりも、そのプロセスにはむしろ添付するようになります

enter image description here

:、あなたは「MyApp.appが起動するのを待ちます」オプションを選択することができますあなたのための新しいプロセス。これにより、Safariからアプリを手動で起動し、デバッガを使用できます。

[NSThread sleepForTimeInterval:30.0]

+0

AppleがこれをXcode 4で修正したので、これは新しい答えになるはずです。ずっと簡単です! – ageektrapped

+1

これはデバッガをフックしますが、NSLogとstdoutが失われているように見えます: –

7

Console.app(「ユーティリティ」フォルダ内)を開きます。ログメッセージがそこに表示されます。

+0

は、 'NSLog'文は標準XCodeのコンソールに表示されません。 –

+0

これは私のためには機能しませんでしたが、XCodeオーガナイザウィンドウのConsoleタブを使用しました... –

1

あなたはあなたのAppDelegateの機能を行使するユニットテストを書くことができますか?

+0

私は実際に似ている別の方法を試みました - 私はapplicationDidFinishの起動メッセージにhandleOpenURLを呼び出し、私は踏みにてることができました。そのようにしても何もクラッシュしなかったのですが、それは上記の手順でクラッシュするだけでした。 – bpapa

+0

handleOpenURLハンドラは、applicationDidFinishLaunchingで設定されているものに依存していますか? –

+0

また、コンソールにログオンする代わりに、情報をファイルに保存できますか? –

1

私はこれを試してみましたが、どのようにあなたのコードにブレークポイント命令をインラインで追加する方法についてしていない:

#if TARGET_CPU_ARM == 1 
#define breakpoint() __asm__ volatile ("bkpt 0") 
#else // !ARM - assume INTEL. Everything else will break 
#define breakpoint() __asm__ volatile ("int3"); 
#endif 
1

はhadleOpenURLの最初の行として以下を追加し と後の次の行にブレークポイントを置きます。

アプリケーションが呼び出された後、あなたはXCodeのに移動し、メニューから選択する30秒を持っています:実行は、/「プロセスにアタッチ」、リストからアプリケーション名を選択します。 デバッガはブレークポイントで停止する必要があります。

が終了したらsleepForTimeIntervalを削除することを忘れないでください!アプリが(すなわち、携帯電話上またはシミュレータ内)XCodeのから起動されなかった場合は、この時に拡大すること

関連する問題