【问题标题】:Debugging App When Launched by Push Notification通过推送通知启动时调试应用程序
【发布时间】:2010-11-17 08:41:48
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ios iphone push-notification


    【解决方案1】:

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

    HTH - 干杯,大安

    【讨论】:

    • 也是一个好主意,但模仿总是第二好调试真实的东西!编码快乐!
    【解决方案2】:

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

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

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

    【讨论】:

    • 我知道这可能不合适,但我爱你。 :)
    • 当您以这种方式启动时,您的应用程序的标准输入、标准输出、标准错误不会路由到 GDB 的控制台,它们会被指向它们在正常应用启动时所在的位置。通过在管理器中查看设备,您可以在设备的系统控制台中看到 NSLog()。
    • 你在这里教会了我一些非常有价值的观点。谢谢。在过去的 2 天里,我试图调试一些我能够在您发布帖子后 20 分钟内修复的东西。
    • @stigi 在模拟器中为我工作,用于测试 URL 方案。如果这很重要,我正在使用 xcode 4.5
    • @dreyln 我的评论来自 2009 年 :) 自那以后发生了很多变化。但是感谢您的提醒!
    【解决方案3】:

    对于 Xcode 4,您必须:

    1. 通过以下方式编辑您的活动方案 “方案”下拉菜单。 (+)
    2. 比选择您的产品 - '运行 MyApp.app' 在左侧。
    3. 选择右侧的“信息”标签。
    4. 最后选择“等待 MyApp.app 启动”选项。

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

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

    【讨论】:

    • 我使用的是 Xcode 4.2 for Lion,尽管应用程序从 URL 方案正确启动并且调试器执行没有停止,但控制台没有显示任何内容。我错过了什么吗?
    • @LoDani 和这里一样,你知道为什么吗?
    • @LoDani, Davis G.:你看到 Louis 对已接受答案的评论了吗? stackoverflow.com/questions/1239000/… 以这种方式启动时,stdin/out/err 不会被重定向到控制台。
    • 谢谢你,你拯救了我的一天!试图解决一个仅在我的应用程序由 url 处理程序启动时发生的错误。
    • @delirus - 感谢您为 XCode 4 更新此内容。
    【解决方案4】:

    在 Xcode 6 中:

    1. 使用 USB 将 iPhone 连接到 Macbook
    2. 点击图标在 iPhone 上启动应用程序
    3. 在 Xcode 菜单中,Debug > Attach to Process > 选择您的应用程序

    【讨论】:

    • 您将无法使用此方法调试关键启动路径。
    【解决方案5】:

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

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

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

    【讨论】:

    • 这个答案给我带来了很多麻烦,尽管它通常让我走上了正确的道路。第 3 步有点误导。当然,你必须这样做;在左侧面板中选择运行。但是,还应该有一个概念性措辞非常相似的第 5 步:在期待结果之前单击 xcode 的“运行”按钮……因为一开始它对我不起作用,我向其他同事征求意见……他们问如果我做了 Run 事情,我回答是,考虑选项 no。 3... 真的,真的,真的应该是第 5 步...
    • @FlorinOdagiu 好电话。添加了第 5 步。谢谢!
    • 如果 Xcode 恢复不同的方案选项卡,启动选项位于信息选项卡下。
    • 当我手动启动应用程序时,调试器窗口中没有任何输出。
    【解决方案6】:

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

    1. 选择方案选项。

    2. 选择编辑方案。

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-31
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多