2009-08-06 163 views
116

我目前正在开发一个接收推送通知的应用程序。我通过一个PHP页面全部工作。我的应用可以接收几种不同类型的推送通知。 PHP处理这些信息并向我的应用程序发送不同的信息包,这些信息都收到了。但是,当用户“查看”通知和我的应用程序启动时,我显然希望采取与用户只需手动启动应用程序的操作不同的操作 - 此外,根据不同的操作推送通知类型。我有这个工作很好......在结构上。通过推送通知启动调试应用程序

我的推送类型之一应该是打开一个UIView,它可以连接几个不同的服务器并来回协商数据。这个UIView可以正常工作,例如,当从主菜单触发时 - 但是当我的推送通知触发此UIView出现时,套接字连接不按预期方式工作。

现在我的问题不是关于套接字,而是更多 - 你如何调试这样的问题?从我可以告诉(我相对较新)时,从推送通知启动的应用程序无法将该执行链接到调试器/控制台/等...我有一个非常困难的时间试图调试代码使用UIAlertViews,因为在各种服务器之间有许多来回的通信线路。

您对我的任何建议将不胜感激。

回答

138

在Xcode < 4.0(对了XCode> = 4,请参阅下面delirus答案),你现在可以配置Xcode中的调试器附加到应用程序在启动后,而不是通过调试器启动应用程序。这使您可以根据应用程序的启动状态调试各种不同的内容,例如URL方案,粘贴板和推送通知。

  1. 在Xcode中查看源代码栏和下面的目标将会出现可执行文件。
  2. 在可执行文件中为您的应用程序启动检查器。
  3. 单击检查器中的调试选项卡选项卡。
  4. 取消选中,当你在Xcode中单击而不是启动应用程序将显示一个窗口,告诉它是调试“开始启动调试程序后执行”
  5. 检查“等待下一次发射/推送通知”

现在等待应用程序启动。然后,您可以正常启动手机上的应用程序和Xcode的重视它

+31

我知道这可能不合适,但我爱你。 :) – Dutchie432 2009-08-06 17:19:16

+0

哦,有一个问题,但我的NSLog的似乎不打印...? – Dutchie432 2009-08-06 17:25:16

+15

当你以这种方式启动时,你的应用程序的stdin,stdout,stderr不会被路由到GDB的控制台,它们被指向它们在正常的应用程序启动中的位置。您可以通过查看组织器中的设备在设备的系统控制台中查看NSLog()。 – 2009-08-06 17:35:21

3

我没有使用推送通知,所以我不知道推送通知的确切工作。不过,我会尝试通过让程序的主要方法假装发布通知(如果可能),或者从applicationDidFinishLaunching:方法中调用应用程序:didFinishLaunchingWithOptions:UIApplicationDelegate方法来模仿收到推送通知。

HTH - 干杯,大安

+0

也是一个好主意,但模仿总是第二好的调试真实的东西!快乐编码! – Dutchie432 2009-08-06 17:24:36

114

有关的Xcode 4,你必须:

  1. 编辑通过 “方案”下拉您的活动方案。( + <
  2. 不是选择你的产品 - '运行 MyApp.app' 在左边。
  3. 选择右侧的'信息'选项卡。
  4. 最后选择“等待 MyApp.app启动”选项。

更多here“自定义Scheme编辑器中的可执行文件”部分。

编辑:
如果您在GDB错过日志,看到路易斯Gerbarg的comment给他的答案。

+1

我使用Xcode 4.2 for Lion,尽管该应用程序正确地从URL方案启动并且调试器执行没有停止,但控制台没有显示任何内容。我错过了什么吗? – LoDani 2011-10-28 15:07:56

+0

@LoDani同样在这里,你有没有想过为什么? – davis 2011-12-04 04:48:51

+3

@LoDani,戴维斯G .:你看到路易斯对接受的答案发表评论吗? http://stackoverflow.com/questions/1239000/debugging-app-when-launched-by-push-notification/1239555#comment1066462_1239555当以这种方式启动时,stdin/out/err不会被重定向到控制台。 – 2012-04-20 12:19:34

3

在Xcode中6:

  1. 将iPhone连接使用USB的MacBook
  2. 推出iPhone上的应用程序通过点击图标
  3. 在Xcode的菜单,Debug>Attach to Process>选择您的应用程序
+0

您将无法使用此方法调试关键启动路径。 – Zorayr 2017-01-19 06:41:31

75

For XCode 9,8,7 & 6:

  1. 工具栏(刚出你与调试设备)
  2. 选择编辑方案
  3. 选择运行在左侧面板
  4. 对于上选择的方案启动选项,选择等待可执行文件被启动
  5. 关闭Scheme Editor和运行 XCode项目

现在,你可以从一个通知,自定义网址或通过触摸应用程序图标启动时进行调试。

+5

这个答案给我带来了很多麻烦,尽管它通常会让我走上正确的道路。 第3步有点误导。当然,你必须这样做;选择左侧面板中的运行。 但是,还应该有一个步骤5与非常类似的概念措辞:点击Xcode的运行按钮,在期待结果之前... 因为在一开始它并没有为我工作,我征求其他同事的意见..他们问我是否做了润滑的事情,我回答说是,考虑选项否。 3 ... 应该真的,真的,真的,这是一个步骤5 ... – 2016-08-09 07:51:04

+0

@FlorinOdagiu良好的通话。新增第5步。谢谢! – bgolson 2017-04-29 21:36:20

+1

OMFG !!!!! 我很笨!并高兴地找到这个答案! THNX !!! – Andrew 2017-10-14 15:08:57