在真正的Apple Watch上调试WatchKit - 没有任何反应

And*_*ord 16 xcode cocoa-touch objective-c ios watchkit

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

  1. 选择WatchKit应用程序配置文件并在模拟器中运行==>在Watch Simulator中启动应用程序,我可以在扩展代码中使用断点进行调试.
  2. 为了调试iPhone应用程序,我在模拟器中启动应用程序并手动附加调试器==>我可以使用iPhone代码中的断点进行调试.

观察iPhone应用程序和手表应用程序的工作是没有问题的.至少不在模拟器中.

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

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

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

在我的iPhone 6上运行MyApp

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

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

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

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

And*_*ord 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会识别应用程序启动并将其调试程序附加到它.这将允许使用断点,检查代码等.

在我的情况下,我想知道iPhone应用application:handleWatchKitExtensionRequest:reply:程序在以前没有活动时如何处理呼叫.这很重要,因为使用模拟器无法做到这一点.如果应用程序需要很长时间来处理请求,Watch将不会收到有效响应.

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

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

  1. 在Watch App中选择将启动对iPhone App的调用的功能
  2. iPhone应用程序将在后台启动.延迟使您可以在5秒内连接调试器.
  3. 选择Debug\Attach To Process\Likely Targes\Your iPhone AppXcode以附加调试器.
  4. 延迟5秒后,该过程将继续,您也可以在iPhone应用程序代码中使用断点.
  5. 不要忘记在完成测试后删除延迟代码:-)

注意: 您将无法NSLog从iPhone App 看到输出(或任何控制台输出),因为连接调试器不会重新路由控制台输出.

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


Bal*_*ick 5

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

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

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

watchOS 3+:

通过按住侧面按钮(数字表冠下方的按钮)直到出现关机屏幕,然后松开侧面按钮,然后按住数字表冠来完成强制退出.