iOS: 如何调试从URL中“全新启动”的应用程序

81

当从URL启动应用程序时,有一种区别是URL是否是新启动应用程序,还是恢复了已被挂起的应用程序。

我的问题是,我该如何调试从URL“重新启动”的“全新启动”过程?在Xcode中点击“运行”会自动打开应用程序。然后,我必须挂起应用程序才能到达Safari并访问我的测试网站。但是,如果我关闭了挂起的应用程序,Xcode将不再与其连接,我将无法进行调试。

3个回答

148

这些步骤可以在设备上执行。可在此链接 https://forums.developer.apple.com/thread/21129 找到。

  1. 从 Xcode 运行应用程序将其安装到设备上,然后停止 Xcode 中的运行。
  2. 在设备的应用程序切换器 UI 中强制退出应用程序。
  3. 导航到 Xcode 中项目的 scheme。在 Run 部分的 Info 标签下,有一个名为“等待可执行文件启动”的单选按钮。请确保选中此选项,而不是“自动”选项。
  4. 从 Xcode 运行应用程序。它不会在设备上打开,但调试器将等待它打开,然后附加到它。

在模拟器上按照 Marc-Alexandre Bérubé 的建议操作。

  1. 在模拟器上运行您的应用程序。
  2. 在模拟器上强制退出应用程序。按下cmd+shift+(连续两次按h),向上滑动应用程序。
  3. 打开终端并输入此命令xcrun simctl openurl booted http://yourdomain/path

6
为了更容易地在 iOS 模拟器上进行测试,我们可以使用终端并粘贴命令 xcrun simctl openurl booted http://yourdomain/path 来使用我们想要的 URL 启动应用程序。 - Marc-Alexandre Bérubé
2
但是当我这样启动应用程序时,Xcode不会立即附加 - 当我想要在URL解析/路由代码中停止断点时该怎么办? - fabb
2
xcrun simctl openurl booted http://yourdomain/path 对我来说在真实设备上不起作用 :( - Hlung
4
非常重要的提示:如果您进行任何代码更改,必须关闭“等待可执行文件”选项并构建和运行,然后停止。然后再打开“等待...”。否则,在 Xcode 10.1 中,Xcode 将无法将更新的二进制文件安装到您的测试设备上。 - n8tr
2
如果我这样做,Xcode会等待。但它不会在控制台上显示任何调试日志。 - waldgeist
显示剩余4条评论

31

如果您正在模拟器上进行调试,这里有一个提示:您也可以编辑已保存的 Web 剪辑的 URL。它们只是位于 ~/Library/Application Support/iPhone Simulator/7.1-64/Library/WebClips 中的 plist 文件。(根据需要调整 7.1-64)。 - Steven Fisher
谢谢你!你救了我的一天! - Aladdin Gallas
提示:我在~/Library/Developer/CoreSimulator/Devices/{GUID}/data/Library/WebClips找到了我的WebClips。(Xcode 7.1.1/Simulator 9.1) - Matt Montag
9
当链接消失时,记得更新答案并补充链接内容吗? - Phlippie Bosman
5
由于原始链接已失效,以下是Internet Archive的链接:http://web.archive.org/web/20160311071930/http://blogmobile.itude.com/2013/09/03/how-to-debug-deep-linking-in-ios/如何在iOS中调试深层链接?请参考该文章。您可以通过该链接访问存档版本。 - Reid Ellis
这个还能用吗?将URL粘贴到Safari中只会在此打开网站。将其作为消息发送给假的消息联系人Kate Bell / John Appleseed,然后单击链接就可以了。但是UIAppDelegate中的断点没有被触发 :-/ - fabb

9
虽然提到激活“等待可执行文件启动”的答案在理论上是好的,但由于各种原因,这些对我没有起作用。在模拟器上,尽管Xcode声称已经“附加”,但从未显示任何日志或断点。在设备上,我正在运行iOS 13,从Xcode 10构建,并使用Xcode 11进行加载,因此我没有任何调试符号。那更多是个人问题,我怀疑设备上的调试可能会起作用。
对我最有效的方法是在我的Mac上打开Console.app,并使用OSLog API从模拟器中获取稳定的原始调试流。
  1. 在模拟器上从Xcode运行应用程序。
  2. 然后通过应用程序启动立即在模拟器上退出(Cmd-Shift-H * 2)
  3. 通过消息应用程序向自己发送深链接来启动应用程序
  4. 在Console.app中观察我的日志
这不太美观,但非常可靠。
值得一提的是,您可以通过 XCUITest 测试冷启动深度链接来保护这个有用的功能。您可以在 XCUITests 中调用 app.terminate,然后打开一个深度链接(通常通过您设置的静态网页,我使用公共 GitHub wikis),编写测试并像正常情况一样进行断言。

1
“穴居人调试”在许多情况下都很有效,是一个好的建议和良好的习惯。 - lewis
非常感谢!我花了两天的时间试图弄清楚如何完成这个任务,刚开始确实有些困难,但是这份指南包含了所有的内容: https://www.avanderlee.com/workflow/oslog-unified-logging/ - ZeroCooL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接