138

我目前正在开发一个接收推送通知的应用程序。我通过 PHP 页面让这一切都 100% 正常工作。我的应用可以接收多种不同类型的推送通知。PHP 处理这个并将不同的信息包发送到我的应用程序,这些信息都可以正常接收。

但是,当用户“查看”通知并且我的应用程序启动时,我显然想采取与用户手动启动应用程序不同的操作 - 最重要的是,根据推送通知类型采取不同的操作。我已经让这个工作正常......在结构上。

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

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

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

4

6 回答 6

147

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

  1. 在 Xcode 中查看 Source 栏,在 Targets 下方会有 Executables。
  2. 在可执行文件中为您的应用程序打开检查器。
  3. 单击检查器中的“调试”选项卡选项卡。
  4. 取消选中“启动调试器后启动可执行文件”
  5. 检查“等待下一次启动/推送通知”

现在,当您从 Xcode 中单击调试而不是启动应用程序时,将显示一个窗口,告诉它正在等待应用程序启动。然后您在手机上正常启动应用程序,Xcode 会附加到它

于 2009-08-06T15:10:17.437 回答
124

对于 Xcode 4,您必须:

  1. 通过“方案”下拉菜单编辑您的活动方案。(⌘</kbd>+<)
  2. 然后选择您的产品 - 左侧的“运行 MyApp.app”。
  3. 选择右侧的“信息”选项卡。
  4. 最后选择“等待 MyApp.app 启动”选项。

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

编辑:
如果您错过 GDB 中的日志,请参阅 Louis Gerbarg对他的回答的评论。

于 2011-06-23T08:59:13.237 回答
114

对于 Xcode 10、9、8、7 和 6:

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

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

于 2015-04-24T17:31:45.500 回答
3

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

HTH - 干杯,大安

于 2009-08-06T14:12:50.007 回答
3

在 Xcode 6 中:

  1. 使用 USB 将 iPhone 连接到 Macbook
  2. 通过点击图标在 iPhone 上启动应用程序
  3. 在 Xcode 菜单中,Debug> Attach to Process> 选择您的应用程序
于 2015-04-14T16:18:39.920 回答
2

对于 Xcode 11 和 10,您可以执行以下操作:

  1. 选择方案选项。

  2. 选择编辑方案。

  3. 从左侧面板中选择运行选项

  4. 在启动部分,选择等待可执行文件被启动,然后关闭对话框。

  5. 构建并运行项目。您现在可以通过点击应用程序图标或点击通知消息来启动该应用程序。

于 2019-10-10T23:42:33.567 回答