【问题标题】:iOS: How to debug "freshly launching" an app from a URLiOS:如何从 URL 调试“新启动”应用程序
【发布时间】:2013-09-02 11:55:15
【问题描述】:

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

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

【问题讨论】:

    标签: ios xcode debugging ios-simulator openurl


    【解决方案1】:

    可以在设备上执行这些步骤。成立于link

    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

    【讨论】:

    • 为了方便使用 iOS 模拟器进行测试,我们可以使用终端并粘贴命令 xcrun simctl openurl booted http://yourdomain/path 以使用我们想要的 URL 启动应用程序。
    • 但是当我像这样启动应用程序时 Xcode 不会立即附加 - 当我希望它在 url 解析/路由代码中的断点处停止时该怎么办?
    • @fabb 如果您正确地按照步骤操作,它应该会在 url 解析中遇到断点。
    • xcrun simctl openurl booted http://yourdomain/path 不适用于我的真实设备:(
    • 非常重要的注意事项。如果您进行任何代码更改,您必须关闭“等待可执行文件”并构建并运行然后停止。然后重新打开“等待...”。否则 Xcode 不会在您的测试设备上安装更新的二进制文件(至少在 Xcode 10.1 中)
    【解决方案2】:

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

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

    【讨论】:

    • 如果您在模拟器上调试,这里有一个提示:Yu 还可以编辑保存的网络剪辑的 URL。它们只是 ~/Library/Application Support/iPhone Simulator/7.1-64/Library/WebClips 中的 plist。 (根据需要调整 7.1-64。)
    • 谢谢!你拯救了我的一天!
    • 提示:我在 ~/Library/Developer/CoreSimulator/Devices/{GUID}/data/Library/WebClips 中找到了我的 WebClips。(Xcode 7.1.1/Simulator 9.1)
    • 记住,链接失效了...想用链接的内容更新你的答案吗?
    • Internet 存档链接,因为原始链接已消失:web.archive.org/web/20160311071930/http://blogmobile.itude.com/…
    【解决方案3】:

    虽然提到激活“等待可执行文件启动”的答案在理论上是好的,但由于各种原因,这些对我不起作用。在模拟器上,尽管 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 wiki)并像往常一样编写测试和断言行为。

    【讨论】:

    • “穴居人调试”适用于很多情况,好的建议和好习惯
    • 谢谢我花了 2 天时间试图弄清楚如何做到这一点,起初很难,但本指南显示了所有内容:avanderlee.com/workflow/oslog-unified-logging
    猜你喜欢
    • 2013-01-17
    • 2012-09-07
    • 1970-01-01
    • 2010-12-30
    • 2018-06-01
    • 2012-04-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    相关资源
    最近更新 更多