几年前,我使用watchOS 1 SDK编写并调试了Apple Watch应用程序。我现在正在使用watchOS 3 SDK开发新的手表应用程序。
可以调试Watch App部分。我可以设置断点并逐步完成它。但是,我使用WatchConnectivity框架从iOS应用程序获取信息。这不起作用,我无法调试它。
当我在Xcode中运行WatchApp方案时,会启动两个模拟器,一个用于iOS应用程序,另一个用于WatchApp。我看到WatchApp启动但不是iOS应用程序。如果iOS先前正在运行,它似乎已被杀死。
我在应用程序上设置了一个断点:didFinishLaunchingWithOptions:在iOS应用程序中,方法但是这个断点从未被击中。应该是。
我不记得几年前遇到这些问题时。
运行WatchApp方案是否应自动启动iOS应用并允许其进行调试?我的didFinishLaunchingWithOptions:断点是否应该被击中?
另一件有点奇怪的事情可能是暗示iOS模拟器中的外部显示器列表从不显示观看应用程序显示。我认为应该。
我已经尝试清理项目,重新启动Xcode甚至重新启动计算机。没有快乐。
答案 0 :(得分:5)
不,iOS和WatchApp有不同的目标,因此从Xcode运行一个不会自动启动另一个目标。
你必须以通常的方式使用Xcode启动其中一个,然后从其各自的模拟器手动启动另一个应用程序,而不是在Xcode中使用Debug>Attach to Process
来查看调试器中的两个应用程序。
答案 1 :(得分:0)
作为David答案的补充,该答案仍然有效:我使用的是Xcode 11.4,可以调试两个目标,而不必手动选择要附加的第二个进程。
首先,选择WatchKit App目标,然后单击“运行”图标。 Xcode将安装iOS应用程序而不启动它,然后将安装并启动WatchKit应用程序。
现在,选择iOS App目标并单击“运行”图标。 Xcode将再次安装iOS应用,但也会启动它,并将其附加以进行调试。
最后,在底部的Xcode调试面板中,单击目标图标(在外观图标旁边),该图标实际上是一个弹出按钮,以选择两个目标中的哪个应显示其调试输出。
根据我的经验,它有些不稳定,并不总是有效,有时一个或两个目标都没有连接。如果失败,则停止两个目标的执行,然后按顺序再次执行相同的步骤,最终它将起作用。