5

我正在编写一个可以通过自定义 URL 启动的 iPhone 应用程序。所以,我覆盖 -(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

要测试我的更改,我必须在模拟器中运行应用程序,然后退出并启动 Safari。然后我在地址栏中输入我的自定义 URL 以启动应用程序。

但是每次我启动时,应用程序都会崩溃。我试图找出原因,但是当我设置断点并从主屏幕(而不是在 XCode 中)启动应用程序时,它似乎没有附加。

我什至尝试将 NSLog 语句放在 handleOpenURL 消息中,但它们不会打印到控制台。

我想我可以创建 UIAlertViews 但是......是的,哎呀。在模拟器中连接到调试会话的任何其他方式?

4

5 回答 5

14

在 Xcode 4 中,您可以编辑目标的方案,在“运行”部分的“信息”选项卡中,您可以选择“等待 MyApp.app 启动”选项:

在此处输入图像描述

这将导致调试器等到您的应用程序下次启动时,然后附加到该进程而不是为您创建新进程。这将允许您从 Safari 手动启动您的应用程序并使用调试器。

于 2011-04-19T14:25:50.473 回答
7

打开 Console.app(在 Utilities 文件夹中)。您的日志消息应该出现在那里。

于 2009-05-21T18:30:33.567 回答
1

你能写一个单元测试来锻炼你的 AppDelegate 的功能吗?

于 2009-05-21T18:36:00.420 回答
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
于 2009-05-21T21:01:02.873 回答
1

在 hadleOpenURL 中添加以下内容作为第一行:

[NSThread sleepForTimeInterval:30.0] 并将断点放在之后的下一行。

调用应用程序后,您将有 30 秒的时间转到 XCode 并从菜单中选择:运行/“附加到进程”并从列表中选择您的应用程序名称。您的调试器应该在您的断点处停止。

完成后不要忘记删除 sleepForTimeInterval !

于 2011-09-16T16:40:01.817 回答