未定义的符号:将Xcode更新到版本11.1后出现_OBJC_CLASS_$_WKInterfaceController错误

wwodge7n  于 2022-11-18  发布在  其他
关注(0)|答案(6)|浏览(327)

我将Xcode更新为11.1版,并收到此预期错误:
为iOS模拟器构建时,WatchKit不可用。
然后我按照建议从iOS应用程序目标中删除了WatchKit。从那时起,我就遇到了这个错误:
x86_64架构的未定义符号:
OBJC_CLASS$_WK接口控制器”,引用自:在INFOnlineLibrary中的objc类别参照(IOLWatchKitHelper.o)ld:找不到体系结构x86_64的符号clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
未定义的符号:OBJC_CLASS$_WK接口控制器
PS:x86_64部分取决于设备/模拟器的选择。如果我选择一真实的设备,它会给arm 64同样的错误。所以我不认为这是一个架构问题,因为事实上,包括WKInterfaceController的框架只是一个标准的watchOS框架,即Watchkit。
PS_2:iOS应用中没有使用WKInterfaceController甚至WatchKit,仅在WatchAppExtension部分使用
到目前为止,我已经尝试过:

  • 第一件事是将WatchKit框架添加到WatchApp和WatchAppExtension目标。
  • 当我搜索 Undefined symbols for architecture x86_64 类型的错误时,通常有很多不同的建议。即使我认为这不是架构相关的事情,我也尝试在所有目标中设置building active architecture only no。最建议的是将$(inherited)放在搜索路径中,这在以前已经做过了。
  • 已检查.m文件的目标。它们都正常。
  • 我甚至走得更远,注解了所有使用WKInterfaceController的代码。之后什么都没有改变。我还删除了手表应用程序,它仍然寻找_OBJC_CLASS_$_WKInterfaceController,但我不确定是否正确。
  • 我用file WatchKit.framework命令检查了WatchKit.framework设备支持文件,发现它支持arm 64。然后将该库手动添加到库中,在设备上运行,但仍然不工作。
50pmv0ei

50pmv0ei1#

当我看到这个错误时,原来是因为我的一个.mm实现文件没有在选项窗格的“Target Membership”部分中选中,所以没有被构建。

pvabu6sv

pvabu6sv2#

请检查“构建阶段”中的“链接二进制与库”。是否有任何库仍使用WKInterfaceController或依赖于WatchKit?

aor9mmx1

aor9mmx13#

我得到了同样的错误,虽然与另一个框架。你只需要确保错误文件有所需的框架是在你的链接二进制与库
在我的例子中,我遇到了错误Undefined symbol:OBJC_CLASS$_SKStoreProductViewControllerStoreKit相关。我所要做的就是将StoreKit.framework添加到将二进制文件与库链接

8qgya5xd

8qgya5xd4#

我也遇到过类似的错误,但在我的例子中,可能是一些不干净的库在添加/删除依赖项后到处乱放。所以我做了 Xcode -〉Product -〉Clean Build Folder,并重建了项目。它成功了。

kkih6yb8

kkih6yb85#

我不得不将框架拖放到Xcode的Frameworks组下,它已经被添加到Target〉Build Phases〉Embedded Frameworks下,但显然这还不够。

8cdiaqws

8cdiaqws6#

如果您确定在应用的“Target Membership”部分检查了构建的实现文件,请确保在某个地方有头文件的实现。我遇到过这个问题,当时我在同一个文件中定义了一个类作为另一个类,但忘记将其实现放在两个类的相关.m文件中。

相关问题