我正在努力在真正的Apple Watch上调试我的WatchKit扩展/应用程序。使用模拟器调试iPhone App和WatchKit Extension,模拟器不是问题:
观察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并看看代码是如何执行的,我无法确定发生了什么......
答案 0 :(得分:15)
谢谢你的回答。我终于设法在我真正的Apple Watch上运行调试(大部分时间)。然而,它非常麻烦且不太可靠。评论中没有足够的空间,所以我将使用这个答案来描述我的解决方案。也许这对其他人有帮助:
确保iPhone未锁定。
选择WatchKit App
目标和真正的iPhone并运行项目。
SPErrorInvalidBundleNoGizmoBinaryMessage
。重新启动Xcode并清理Watch App和App目标解决了这个问题。在我的情况下,我想知道当应用程序在之前未激活时,iPhone应用程序如何处理application:handleWatchKitExtensionRequest:reply:
电话。这很重要,因为使用模拟器无法做到这一点。如果应用程序需要很长时间来处理请求,Watch将不会收到有效响应。
按照上述步骤操作后,Xcode仅附加到手表应用程序,并且不会保留iPhone应用程序代码中的断点。要做到这一点,必须手动将调试器连接到手表应用程序发送呼叫时启动的iPhone应用程序进程。
为了能够附加调试器,我在应用程序主要功能中添加了一个延迟:[NSThread sleepForTimeInterval:5]
:
Debug\Attach To Process\Likely Targes\Your iPhone App
以附加调试器。 注意:强>
您将无法从iPhone应用程序中看到NSLog
输出(或任何控制台输出),因为连接调试器不会重新路由控制台输出。
使用这款令人敬畏的新Apple产品进行快乐测试:-P
答案 1 :(得分:5)
我遇到了同样的问题,但为了改善一点调试经验,我通常会重启设备几次。尝试重新启动Apple Watch或iPhone。
在从Xcode启动应用程序之前,请确保Apple Watch上的应用程序已完全关闭(例如,未插入加载屏幕)。要做到这一点,你必须强制关闭应用程序:进入你的应用程序,按住侧面按钮,直到出现关闭手表的菜单,然后按下同一侧按钮几秒钟直到手表将返回到主屏幕和强制关闭你的应用程序。
现在您可以尝试从Xcode构建和运行应用程序,它应该更可靠地工作。
watchOS 3 +:
按下并按住侧面按钮(数字表冠下方的按钮)直到关机屏幕出现,然后再按 松开侧面按钮,然后按住数字冠。
答案 2 :(得分:3)
这里的技术对我来说似乎是最可靠的,尽管它仍然只能在25%的时间内运行(Xcode 7 beta 4,7A165t):