Xcode 11 Beta因WatchKit而无法构建?

17

之前使用Xcode 10时没有问题,但是在beta版中我无法编译,一直出现以下错误:

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

进入图像描述

5个回答

18

我在WatchKit Extension的一个Swift文件中遇到了同样的问题。原来该文件同时属于iOS应用程序和WatchKit扩展程序。我在目标成员部分取消了该文件对应iOS应用程序的勾选,使其仅属于WatchKit扩展程序的目标。这样项目就可以成功编译了。


11
一些用于Apple Watch与iPhone/iPad通信的功能曾经是在WatchKit框架中实现的。但在某个时候,它被移动到了WatchKitConnectivity框架中。
如果在您的目标“构建阶段”->“链接二进制文件与库”部分查看,您将看到“WatchKit.framework”的状态为“可选”。iOS13+变得更加“严格”,所以除非我完全删除“WatchKit.framework”,并改为添加“WatchConnectivity.framework”,否则无法构建。
此外,请确保您的iPhone/iPad代码使用“import WatchConnectivity”而不是“import WatchKit”。

这个解决方案对我有用,我们需要在选定的目标“Build Phase”->链接二进制部分中删除“WatchKit.framework”。 - sumanthkodi

9
我们需要使用“条件导入”来解决这个问题。 将import WatchKit头文件替换为以下代码:
#if !os(iOS)
import WatchKit
#endif

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

好的,那也可以运行,但这是一次升级,旧版 Xcode 显然不够严格。重置文件目标和一些文件对我有帮助解决了这个问题。 - jimijon

8

Xcode 11从iOS SDK中移除了WatchKit。根据发布说明

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

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

<framework src="WatchKit.framework" />

以上代码将WatchKit添加到iOS应用程序目标框架中。您需要删除此代码,并仅将WatchKit添加到您的应用程序的Watch目标中。


这个回答正是针对问题的原因,因此是最好的! - Viktor Malyi

0
我在WatchKitExtension的InterfaceController.h中包含了<WatchKit/WatchKit.h>,因为它是必须的。我取消了InterfaceController.m文件中iOS的"Test"目标的目标成员资格,错误就消失了。特别感谢ToniK的指导。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接