在真正的Apple Watch上调试WatchKit - 没有任何事情发生

时间:2015-07-31 08:39:44

标签: ios objective-c xcode cocoa-touch watchkit

我正在努力在真正的Apple Watch上调试我的WatchKit扩展/应用程序。使用模拟器调试iPhone App和WatchKit Extension,模拟器不是问题:

  1. 选择WatchKit应用程序配置文件并在Simulator中运行==>应用程序在Watch Simulator中启动,我可以使用扩展代码中的断点进行调试。
  2. 要调试iPhone应用程序,我也会在模拟器中启动应用程序并手动附加调试器==>我可以在 iPhone代码中使用断点进行调试。
  3. 观察iPhone应用程序和手表应用程序的工作是没有问题的。至少不在模拟器中。

    我想在真正的Apple Watch 上做同样的事情。但是,当我选择WatchKit应用程序配置文件和我的真实iPhone(而不是模拟器)并单击“运行”时,没有任何反应。这意味着Xcode似乎构建并启动了应用程序,但设备上没有任何反应。 Xcode中的状态字段显示:

      

    构建MyApp WatchKit应用程序:MyApp WatchKit扩展

         

    构建MyApp WatchKit应用程序:完成......

         

    在我的iPhone 6上运行MyApp

    这就是全部。没有调试窗口,断点被忽略或不起作用,并且应用程序既不在iPhone上也不在Apple Watch上启动。

    我发现了有关在真实设备上调试问题的其他问题(例如here),但它们都处理安装和签名问题。在我的情况下,iPhone App和WatchKit App都安装没有任何问题。当我点击Watch上的应用程序图标时,我可以启动并使用该应用程序。 问题是我无法调试此过程。

    为什么我需要在真实设备上调试过程?有一件事我无法使用模拟器进行测试:当Watch App尝试使用{{1}联系iPhone应用程序时会发生什么当iPhone应用尚未运行时?这在模拟器中完美运行,但在真实设备上,Watch Apps似乎没有得到iPhone应用程序的回复,只是永远等待。

    我已经找到hints来解决这个问题,但是无法调试Watch App并看看代码是如何执行的,我无法确定发生了什么......

3 个答案:

答案 0 :(得分:15)

谢谢你的回答。我终于设法在我真正的Apple Watch上运行调试(大部分时间)。然而,它非常麻烦且不太可靠。评论中没有足够的空间,所以我将使用这个答案来描述我的解决方案。也许这对其他人有帮助:

  1. 确保您手表上的应用程序未运行(如BalestraPatrick所述)。启动应用程序并按住侧面按钮几秒钟以显示“关闭手表”对话框。按住侧面按钮几秒钟以关闭应用程序并返回到Watch主屏幕。
  2. 确保iPhone未锁定。

  3. 选择WatchKit App目标和真正的iPhone并运行项目。

  4. 运行Watch App经常导致错误SPErrorInvalidBundleNoGizmoBinaryMessage。重新启动Xcode并清理Watch App和App目标解决了这个问题。
  5. 如果Watch App的构建成功,Xcode中会有一条短消息,但iPhone或Watch上没有消息。如果您对Watch App进行了更改,则需要几秒钟的时间来刷新Watch上的应用程序。这通过应用程序图标上的进度圆覆盖来指示。如果您在应用程序转移后未进行任何更改:通过点击图标手动启动监视应用程序。没有自动启动。
  6. 在大多数情况下,Xcode会识别应用程序启动并将其调试程序附加到它。这将允许使用断点,检查代码等。
  7. 在我的情况下,我想知道当应用程序之前未激活时,iPhone应用程序如何处理application:handleWatchKitExtensionRequest:reply:电话。这很重要,因为使用模拟器无法做到这一点。如果应用程序需要很长时间来处理请求,Watch将不会收到有效响应。

    按照上述步骤操作后,Xcode仅附加到手表应用程序,并且不会保留iPhone应用程序代码中的断点。要做到这一点,必须手动将调试器连接到手表应用程序发送呼叫时启动的iPhone应用程序进程。

    为了能够附加调试器,我在应用程序主要功能中添加了一个延迟:[NSThread sleepForTimeInterval:5]

    1. 在Watch App中选择将启动对iPhone App的调用的功能
    2. iPhone应用程序将在后台启动。延迟使您可以在5秒内连接调试器。
    3. 在Xcode中选择Debug\Attach To Process\Likely Targes\Your iPhone App以附加调试器。
    4. 延迟5秒后,该过程将继续,您也可以在iPhone应用程序代码中使用断点。
    5. 请勿忘记在完成测试后删除延迟代码: - )
    6. 注意: 您将无法从iPhone应用程序中看到NSLog输出(或任何控制台输出),因为连接调试器不会重新路由控制台输出。

      使用这款令人敬畏的新Apple产品进行快乐测试:-P

答案 1 :(得分:5)

我遇到了同样的问题,但为了改善一点调试经验,我通常会重启设备几次。尝试重新启动Apple Watch或iPhone。

在从Xcode启动应用程序之前,请确保Apple Watch上的应用程序已完全关闭(例如,未插入加载屏幕)。要做到这一点,你必须强制关闭应用程序:进入你的应用程序,按住侧面按钮,直到出现关闭手表的菜单,然后按下同一侧按钮几秒钟直到手表将返回到主屏幕和强制关闭你的应用程序。

现在您可以尝试从Xcode构建和运行应用程序,它应该更可靠地工作。

watchOS 3 +:

按下并按住侧面按钮(数字表冠下方的按钮)直到关机屏幕出现,然后再按 松开侧面按钮,然后按住数字冠。

答案 2 :(得分:3)

这里的技术对我来说似乎是最可靠的,尽管它仍然只能在25%的时间内运行(Xcode 7 beta 4,7A165t):

  1. 在调试中运行手机目标(当然是在您的实际iPhone上)
  2. 当iPhone应用程序仍在运行时,切换到监视目标并在调试中运行它。
  3. 随着应用安装,请密切注意您的手表主屏幕。安装应用程序后,点按它即可打开它。这有时候会引发" kickstart"手表应用程序,并允许调试器捕获它。此时,您应该能够同时调试iPhone应用程序和watchOS应用程序。