在真正的 Apple Watch 上调试 WatchKit - 没有任何反应
Debug WatchKit on real Apple Watch - Nothing happens
我正在努力在真正的 Apple Watch 上调试我的 WatchKit Extension/App。使用模拟器调试 iPhone 应用程序和 WatchKit 扩展没有问题:
- Select WatchKit 应用配置文件和模拟器中的 运行 ==> 应用程序在 Watch Simulator 中启动,我可以在 扩展代码中使用断点 进行调试。
- 为了调试 iPhone 应用程序,我在模拟器中启动应用程序并手动附加调试器 ==> 我可以在 iPhone 代码中使用断点 进行调试。
观察iPhone应用和手表应用的工作都没有问题。至少在模拟器中没有。
我想在 真正的 Apple Watch 上做同样的事情。但是当我 select WatchKit 应用程序配置文件和我真正的 iPhone (而不是模拟器)并单击“运行”时,没有任何反应。这意味着 Xcode 似乎构建并启动了应用程序,但设备上没有任何反应。 Xcode 中的状态字段显示:
Building MyApp WatchKit App: MyApp WatchKit Extension
Building MyApp WatchKit App: Finishing...
Running MyApp on My iPhone 6
这就是全部。没有调试 Window,断点被忽略或不起作用,应用程序在 iPhone 或 Apple Watch 上都没有启动。
我发现了其他关于在真实设备上进行调试的问题(例如 ),但它们都涉及安装和签名问题。在我的例子中,iPhone 应用程序和 WatchKit 应用程序的安装都没有任何问题。当我单击手表上的应用程序图标时,我可以启动并使用该应用程序。 问题是我无法调试这个过程。
为什么我需要在真实设备上调试进程?好吧,有一件事我无法使用模拟器测试:当 Watch App 尝试联系 iPhone 应用程序使用 openParentApplication:reply:
而 iPhone 应用程序尚未 运行ning?这在模拟器中完美运行,但在真实设备上,Watch Apps 似乎没有得到 iPhone 应用程序的回复,只是永远等待。
我已经找到 来解决这个问题,但无法调试 Watch App 并查看代码的执行方式,我无法确定发生了什么...
我遇到了同样的问题,但为了稍微改善调试体验,我通常会重启我的设备几次。尝试重新启动您的 Apple Watch 或 iPhone.
在从 Xcode 启动您的应用程序之前,请确保该应用程序在您的 Apple Watch 上完全关闭(例如未卡在加载屏幕)。为此,您必须强制关闭应用程序:进入您的应用程序,按住侧边按钮直到出现关闭手表的菜单,然后再按同一侧边按钮几秒钟,直到手表返回到主屏幕并强制关闭您的应用程序。
现在您可以尝试从 Xcode 构建和 运行 应用程序,它应该可以更可靠地工作。
watchOS 3+:
强制退出是长按侧边按钮(数码表冠正下方的按钮)直到出现关机界面,然后
松开侧边按钮,然后按住数码表冠。
这里有一种技术对我来说似乎是最可靠的,尽管它仍然只有大约 25% 的时间有效(Xcode 7 beta 4、7A165t):
- 运行 调试中的 phone 目标(当然是在你实际的 iPhone 上)
- 当 iPhone 应用程序仍在 运行ning 时,切换到监视目标并 运行 处于调试状态。
- 安装应用程序时请密切注意手表主屏幕。安装该应用程序后,点击它以将其打开。这有时会 "kickstart" 手表应用程序并允许调试器捕获它。此时,您应该能够同时调试 iPhone 应用和 watchOS 应用。
感谢您的回答。我终于设法在我真正的 Apple Watch 上调试 运行ning(大部分时间)。然而,它非常麻烦并且不是很可靠。评论中没有足够的 space 所以我将使用这个答案来描述我的解决方案。也许对其他人有帮助:
- 确保您手表上的应用不是 运行ning(如 BalestraPatrick 所述)。启动应用程序并按住侧边按钮几秒钟以调出 "Turn off your Watch" 对话框。再按住侧边按钮几秒钟以关闭应用程序并 return 到手表主屏幕。
确保 iPhone 没有被锁定。
Select WatchKit App
目标和您真正的 iPhone 和 运行 项目。
- 运行 Watch App 经常导致错误
SPErrorInvalidBundleNoGizmoBinaryMessage
。重新启动 Xcode 并清理 Watch App 和 App 目标解决了这个问题。
- 如果 Watch App 构建成功,Xcode 中会出现一条短消息,但您的 iPhone 或 Watch 上不会显示任何消息。如果您对 Watch 应用程序进行了更改,则需要几秒钟的时间来刷新 Watch 上的应用程序。这由覆盖在应用程序图标上的进度圆圈指示。如果您在应用程序传输后未进行任何更改:通过点击图标手动启动手表应用程序。不会自动启动。
- 在大多数情况下,Xcode 将识别应用程序启动并将其调试器附加到它。这将允许使用断点、检查代码等。
在我的例子中,我想检查 iPhone 应用程序如何在应用程序 之前未激活时处理 application:handleWatchKitExtensionRequest:reply:
调用 。这很重要,因为使用模拟器无法做到这一点。如果应用程序需要很长时间来处理请求,手表将不会收到有效响应。
完成上述步骤后 Xcode 仅附加手表应用程序,不会在 iPhone 应用程序代码中的断点处保持。为此,必须手动将调试器附加到手表应用发送调用时启动的 iPhone 应用进程。
为了能够附加调试器,我向应用程序的主要功能添加了延迟:[NSThread sleepForTimeInterval:5]
:
Watch App 中的 - Select 函数将开始调用 iPhone App
- iPhone 应用程序将在后台启动。延迟给您 5 秒的时间来附加调试器。
- 在 Xcode 中选择
Debug\Attach To Process\Likely Targes\Your iPhone App
以附加调试器。
- 5 秒延迟后,该过程将继续,您也可以在 iPhone 应用代码中使用断点。
- 不要忘记在完成测试后删除延迟代码:-)
注意:
您将无法从 iPhone 应用程序中看到 NSLog
输出(或任何控制台输出),因为附加调试器不会重新路由控制台输出。
祝您测试这款出色的 Apple 新产品愉快:-P
这个问题有不同的答案。都很好。
原因是:根据我的经验,至少有两个不同的问题会阻止在真实手表上进行调试。两者都需要不同的策略。
此答案试图帮助您决定何时使用哪种策略。
- XCode 安装,短时间告诉您它是 运行,然后停止显示 "running..."。
- 从 BalestraPatrick 的回答开始:
- 重新启动您的设备。
- 不要忘记重新启动您的 iPhone。我第一次遇到这个问题时就成功了。
- XCode 安装,告诉你它是 运行 更长的时间:“运行
在 的 Apple Watch 上。
- 从 Jay Hickey 或 Andrei Herford 的回答开始
- 手动启动手表应用程序可能会成功。
我也有过 XCode 能够在没有我帮助的情况下启动手表应用程序的情况。
奖金:
从 XCode 7.1 开始,似乎 XCode 并不总是编译所有必需的 Swift 文件(比以前更频繁)。这不是特定于手表的,它也适用于 iOS 应用程序。症状可能看起来与这个问题的症状相似。 -> 清理你的项目然后重新启动 XCode.
我正在努力在真正的 Apple Watch 上调试我的 WatchKit Extension/App。使用模拟器调试 iPhone 应用程序和 WatchKit 扩展没有问题:
- Select WatchKit 应用配置文件和模拟器中的 运行 ==> 应用程序在 Watch Simulator 中启动,我可以在 扩展代码中使用断点 进行调试。
- 为了调试 iPhone 应用程序,我在模拟器中启动应用程序并手动附加调试器 ==> 我可以在 iPhone 代码中使用断点 进行调试。
观察iPhone应用和手表应用的工作都没有问题。至少在模拟器中没有。
我想在 真正的 Apple Watch 上做同样的事情。但是当我 select WatchKit 应用程序配置文件和我真正的 iPhone (而不是模拟器)并单击“运行”时,没有任何反应。这意味着 Xcode 似乎构建并启动了应用程序,但设备上没有任何反应。 Xcode 中的状态字段显示:
Building MyApp WatchKit App: MyApp WatchKit Extension
Building MyApp WatchKit App: Finishing...
Running MyApp on My iPhone 6
这就是全部。没有调试 Window,断点被忽略或不起作用,应用程序在 iPhone 或 Apple Watch 上都没有启动。
我发现了其他关于在真实设备上进行调试的问题(例如
为什么我需要在真实设备上调试进程?好吧,有一件事我无法使用模拟器测试:当 Watch App 尝试联系 iPhone 应用程序使用 openParentApplication:reply:
而 iPhone 应用程序尚未 运行ning?这在模拟器中完美运行,但在真实设备上,Watch Apps 似乎没有得到 iPhone 应用程序的回复,只是永远等待。
我已经找到
我遇到了同样的问题,但为了稍微改善调试体验,我通常会重启我的设备几次。尝试重新启动您的 Apple Watch 或 iPhone.
在从 Xcode 启动您的应用程序之前,请确保该应用程序在您的 Apple Watch 上完全关闭(例如未卡在加载屏幕)。为此,您必须强制关闭应用程序:进入您的应用程序,按住侧边按钮直到出现关闭手表的菜单,然后再按同一侧边按钮几秒钟,直到手表返回到主屏幕并强制关闭您的应用程序。
现在您可以尝试从 Xcode 构建和 运行 应用程序,它应该可以更可靠地工作。
watchOS 3+:
强制退出是长按侧边按钮(数码表冠正下方的按钮)直到出现关机界面,然后 松开侧边按钮,然后按住数码表冠。
这里有一种技术对我来说似乎是最可靠的,尽管它仍然只有大约 25% 的时间有效(Xcode 7 beta 4、7A165t):
- 运行 调试中的 phone 目标(当然是在你实际的 iPhone 上)
- 当 iPhone 应用程序仍在 运行ning 时,切换到监视目标并 运行 处于调试状态。
- 安装应用程序时请密切注意手表主屏幕。安装该应用程序后,点击它以将其打开。这有时会 "kickstart" 手表应用程序并允许调试器捕获它。此时,您应该能够同时调试 iPhone 应用和 watchOS 应用。
感谢您的回答。我终于设法在我真正的 Apple Watch 上调试 运行ning(大部分时间)。然而,它非常麻烦并且不是很可靠。评论中没有足够的 space 所以我将使用这个答案来描述我的解决方案。也许对其他人有帮助:
- 确保您手表上的应用不是 运行ning(如 BalestraPatrick 所述)。启动应用程序并按住侧边按钮几秒钟以调出 "Turn off your Watch" 对话框。再按住侧边按钮几秒钟以关闭应用程序并 return 到手表主屏幕。
确保 iPhone 没有被锁定。
Select
WatchKit App
目标和您真正的 iPhone 和 运行 项目。- 运行 Watch App 经常导致错误
SPErrorInvalidBundleNoGizmoBinaryMessage
。重新启动 Xcode 并清理 Watch App 和 App 目标解决了这个问题。 - 如果 Watch App 构建成功,Xcode 中会出现一条短消息,但您的 iPhone 或 Watch 上不会显示任何消息。如果您对 Watch 应用程序进行了更改,则需要几秒钟的时间来刷新 Watch 上的应用程序。这由覆盖在应用程序图标上的进度圆圈指示。如果您在应用程序传输后未进行任何更改:通过点击图标手动启动手表应用程序。不会自动启动。
- 在大多数情况下,Xcode 将识别应用程序启动并将其调试器附加到它。这将允许使用断点、检查代码等。
在我的例子中,我想检查 iPhone 应用程序如何在应用程序 之前未激活时处理 application:handleWatchKitExtensionRequest:reply:
调用 。这很重要,因为使用模拟器无法做到这一点。如果应用程序需要很长时间来处理请求,手表将不会收到有效响应。
完成上述步骤后 Xcode 仅附加手表应用程序,不会在 iPhone 应用程序代码中的断点处保持。为此,必须手动将调试器附加到手表应用发送调用时启动的 iPhone 应用进程。
为了能够附加调试器,我向应用程序的主要功能添加了延迟:[NSThread sleepForTimeInterval:5]
:
-
Watch App 中的
- Select 函数将开始调用 iPhone App
- iPhone 应用程序将在后台启动。延迟给您 5 秒的时间来附加调试器。
- 在 Xcode 中选择
Debug\Attach To Process\Likely Targes\Your iPhone App
以附加调试器。 - 5 秒延迟后,该过程将继续,您也可以在 iPhone 应用代码中使用断点。
- 不要忘记在完成测试后删除延迟代码:-)
注意:
您将无法从 iPhone 应用程序中看到 NSLog
输出(或任何控制台输出),因为附加调试器不会重新路由控制台输出。
祝您测试这款出色的 Apple 新产品愉快:-P
这个问题有不同的答案。都很好。
原因是:根据我的经验,至少有两个不同的问题会阻止在真实手表上进行调试。两者都需要不同的策略。
此答案试图帮助您决定何时使用哪种策略。
- XCode 安装,短时间告诉您它是 运行,然后停止显示 "running..."。
- 从 BalestraPatrick 的回答开始:
- 重新启动您的设备。
- 不要忘记重新启动您的 iPhone。我第一次遇到这个问题时就成功了。
- XCode 安装,告诉你它是 运行 更长的时间:“运行
在 的 Apple Watch 上。 - 从 Jay Hickey 或 Andrei Herford 的回答开始
- 手动启动手表应用程序可能会成功。
我也有过 XCode 能够在没有我帮助的情况下启动手表应用程序的情况。
奖金:
从 XCode 7.1 开始,似乎 XCode 并不总是编译所有必需的 Swift 文件(比以前更频繁)。这不是特定于手表的,它也适用于 iOS 应用程序。症状可能看起来与这个问题的症状相似。 -> 清理你的项目然后重新启动 XCode.