Xcode 11 Beta 不会因为 WatchKit 而构建?

Posted

技术标签:

【中文标题】Xcode 11 Beta 不会因为 WatchKit 而构建?【英文标题】:Xcode 11 Beta won't build because of WatchKit? 【发布时间】:2019-06-07 12:32:40 【问题描述】:

在 Xcode 10 上工作。现在在测试版中我无法构建我不断收到此错误:

在为 ios 模拟器构建时,“WatchKit”不可用。 考虑使用#if !os(iOS) 有条件地导入此框架。

【问题讨论】:

【参考方案1】:

我在 WatchKit 扩展中的一个 swift 文件遇到了同样的问题。事实证明,它既是 iOS 应用程序的成员,也是 WatchKit 扩展程序的成员。我在文件的目标成员资格部分取消了 iOS 应用程序的勾选,以便它只属于 WatchKit 扩展目标。现在项目构建成功。

【讨论】:

【参考方案2】:

Apple watch 与 iPhone/iPad 之间的一些通信功能曾经在 WatchKit 框架内实现。但在某个时候,它被转移到了 WatchKitConnectivity 框架中。

如果您查看目标的“构建阶段”->“将二进制文件与库链接”部分,您将看到“WatchKit.framework”处于“可选”状态。 iOS13+ 变得更加“严格”,因此除非我完全删除“WatchKit.framework”,而是添加“WatchConnectivity.framework”,否则它不会构建。

还要确保您的 iPhone/iPad 代码使用“import WatchConnectivity”而不是“import WatchKit”。

【讨论】:

这个解决方案对我有用,我们需要在选定的目标“构建阶段”-> 链接二进制部分中删除“WatchKit.framework”。【参考方案3】:

我们需要使用“条件导入”来解决问题。

import WatchKit 标头替换为以下代码:

#if !os(iOS)
import WatchKit
#endif

这解决了我的问题并在 iOS 13 中成功构建。

【讨论】:

嗯,是的,这也可以,但这是一次升级,旧的 Xcode 显然没有那么严格。我的重置文件目标和几个文件为我修复了它。【参考方案4】:

Xcode 11 从 iOS SDK 中移除了 WatchKit。来自release notes:

iOS SDK 中不再包含 WatchKit 框架。如果您在 iOS 中使用 WatchKit API,则需要删除此使用。 WatchKit 框架在 watchOS 上仍然可用。如果您使用 iOS 的 WatchKit API 来推断配对 Apple Watch 上功能的可用性,请在向 Feedback Assistant 提交反馈时包含有关您的用例的信息。 (49707950)

这包括在 plugin.xml 中引用 WatchKit 的 Cordova 插件:

<framework src="WatchKit.framework" />

上面的代码将 WatchKit 添加为 iOS 应用目标的框架。您需要删除它并将 WatchKit 仅添加到您应用的 Watch 目标中。

【讨论】:

这个答案完全符合导致问题的方向,因此最好!

以上是关于Xcode 11 Beta 不会因为 WatchKit 而构建?的主要内容,如果未能解决你的问题,请参考以下文章

无法开发应用程序,因为在 iOS 13.0/Xcode 11 beta 5 中“无法在设备上找到应用程序”[重复]

Xcode 11 Beta 3 动画不再有效

Xcode 8 Beta 6 文本断断续续且失真

Xcode 11 beta 中的“Preview Assets”资产目录有啥用?

Xcode 11 Beta - Storyboard ViewControllers 出现黑色

Xcode 11 beta:AppDelegate 文件没有窗口全局变量