79

从 URL 启动应用程序时,URL 是新启动应用程序还是恢复已处于暂停状态的应用程序是有区别的。

我的问题是,如何URL 调试“全新启动”的过程?在 Xcode 中点击“运行”会自动打开应用程序。然后,我必须暂停应用程序才能访问 Safari 并访问我的测试站点。但是如果我关闭我暂停的应用程序,Xcode 将不再附加到它并且我无法调试。

4

3 回答 3

136

可以在设备上执行这些步骤。在此链接成立。

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

在 Marc-Alexandre Bérubé 建议的模拟器上。

  1. 在模拟器上运行您的应用程序。
  2. 强制退出模拟器上的应用程序。按cmd+shift+(hit h twice)。向上滑动应用程序。
  3. 打开你的终端并输入这个xcrun simctl openurl booted http://yourdomain/path
于 2016-10-14T08:10:00.833 回答
30

您需要配置您的 Xcode 应用程序方案以等待手动启动应用程序。这是您的操作方法:http: //blogmobile.itude.com/2013/09/03/how-to-debug-deep-linking-in-ios/

然后,您需要复制启动 URL 并将其粘贴到 Mobile Safari。这将启动您的应用程序,并使 Xcode 附加到正在运行的应用程序进程。

于 2013-10-22T08:12:28.710 回答
8

虽然提到激活“等待可执行文件启动”的答案在理论上是好的,但由于各种原因,这些对我不起作用。在模拟器上,尽管 Xcode 声称它已“附加”,但从未显示任何日志或断点。在设备上,我运行的是 iOS 13,从 Xcode 10 构建,并使用 Xcode 11 加载,所以我没有任何调试符号。这更像是一个个人问题,我怀疑设备调试可能有效。

最适合我的是在我的 Mac 上打开Console.app,并使用OSLogAPI 从模拟器中获得稳定的穴居人调试流。

  1. 在模拟器上从 Xcode 运行应用程序。
  2. 然后通过启动的应用程序立即在模拟器上退出它(Cmd-Shift-H * 2)
  3. 通过点击我通过消息应用发送给自己的深层链接来启动应用
  4. 在 Console.app 中观察我的日志

它不漂亮,但它非常可靠。

还值得一提的是,您可以通过 XCUITest 测试冷启动深度链接来保护这个有用的功能。您可以调用app.terminate您的 XCUITests,然后打开一个深层链接(通常通过您设置的静态网页,我为此使用公共 GitHub wiki)并像平常一样编写测试和断言行为。

于 2019-10-09T15:56:40.673 回答