iOS:如何从 URL 调试"freshly launching"应用



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

我的问题是,如何调试来自URL的"新启动"的过程?在Xcode中点击"Run"会自动打开应用程序。然后,我必须暂停该应用程序才能访问Safari并访问我的测试网站。但是,如果我关闭挂起的应用程序,Xcode将不再连接到它,我将无法调试。

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

  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

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

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

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

对我来说最有效的是在我的mac上打开Console.app,并使用OSLogAPI从模拟器中获得可靠的caveman调试流。

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

它不漂亮,但非常可靠。

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

最新更新