推送通知启动时调试应用程序

Dut*_*432 131 iphone push-notification ios

我目前正在开发一个接收推送通知的应用程序.我通过PHP页面100%全部工作.我的应用可以接收几种不同类型的推送通知.PHP处理这个并向我的应用程序发送不同的信息包,这些信息都被收到了.

但是,当用户"查看"通知并启动我的应用时,我显然想要采取与用户手动启动应用时不同的操作 - 最重要的是,根据推送通知类型执行不同的操作.我在结构上做得很好......

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

现在我的问题不是关于套接字,而是更多 - 如何调试这样的问题?从我所知道的(我相对较新)当应用程序从推送通知启动时,没有办法将该执行链接到调试器/控制台/等...我正在尝试使用调试代码进行调试时非常困难UIAlertViews,因为在各种服务器之间来回通信很多.

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

Lou*_*arg 145

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

  1. 在Xcode中查看源栏,在目标下面会有可执行文件.
  2. 在可执行文件中为您的应用程序启动检查器.
  3. 单击检查器中的"调试"选项卡选项卡.
  4. 取消选中"启动调试器后启动可执行文件"
  5. 检查"等待下次启动/推送通知"

现在,当您从Xcode单击调试而不是启动应用程序时,将显示一个窗口,告知它正在等待应用程序启动.然后,您可以在手机上正常启动应用程序,并将Xcode连接到它

  • 我知道这可能不合适,但我爱你.:) (37认同)
  • 以这种方式启动时,应用程序的stdin,stdout,stderr不会路由到GDB的控制台,它们指向正常应用程序启动的位置.您可以通过查看组织器中的设备在设备的系统控制台中查看NSLog(). (17认同)

mat*_*atm 121

对于Xcode 4,你必须:

  1. 通过"方案"下拉列表编辑您的活动方案.(+ <)
  2. 比选择你的产品 - 左边的'Run MyApp.app'.
  3. 选择右侧的"信息"标签.
  4. 最后选择"等待MyApp.app启动"选项.

更多信息请参见"在方案编辑器中自定义可执行文件"部分.

编辑:
如果您错过了GDB中的日志,请参阅Louis Gerbarg 对其答案的评论.

  • @LoDani,Davis G.:您是否看到路易斯对已接受答案的评论?http://stackoverflow.com/questions/1239000/debugging-app-when-launched-by-push-notification/1239555#comment1066462_1239555以这种方式启动时,stdin/out/err不会被重定向到控制台. (3认同)

bgo*_*son 109

对于XCode 10,9,8,7和6:

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

现在,您可以在从通知,自定义URL或触摸应用程序图标启动时进行调试.

  • 这个答案给我带来了很多麻烦,尽管它通常让我走上了正确的道路.第3步有点误导.当然,你必须这样做; 选择左侧面板中的"运行".但是,还应该有一个非常类似的概念措辞的第5步:点击xcode的运行按钮,然后期待结果...因为在开始它不适合我,我问其他同事的建议......他们问如果我做了Run的话,我回答是的,想到选项号.3 ......真的,真的,真的应该是这个的第5步...... (7认同)
  • 手动启动应用程序时,在调试器窗口中没有任何输出。 (2认同)