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

iRe*_*nor 7 xcode objective-c ios watchkit

我将 Xcode 更新到 11.1 版并得到了这个预期的错误:

为 iOS 模拟器构建时 WatchKit 不可用。

然后我按照建议从 iOS 应用程序目标中删除了 WatchKit。从那以后我遇到了这个错误:

体系结构 x86_64 的未定义符号:
“_OBJC_CLASS_$_WKInterfaceController”,引用自:INFOnlineLibrary(IOLWatchKitHelper.o) 中的 objc-class-ref ld:未找到体系结构 x86_64 的符号 clang:错误:链接器命令失败,退出代码 1(使用 -v 查看调用)

未定义符号:_OBJC_CLASS_$_WKInterfaceController

PS:x86_64 部分取决于设备/模拟器的选择。如果我选择一个真实的设备,它会为 arm64 提供相同的错误。所以我不认为这是一个架构问题,因为包含 WKInterfaceController 的框架只是一个标准的 watchOS 框架,即 Watchkit。

PS_2:iOS 应用中没有使用 WKInterfaceController 甚至 WatchKit。仅用于 WatchAppExtension 部分

到目前为止我尝试过的:

  • 首先是将 WatchKit 框架添加到 WatchApp 和 WatchAppExtension 目标。
  • 当我搜索架构 x86_64类型错误的未定义符号时,通常有许多不同的建议。尽管我认为这不是架构相关的事情,但我尝试在所有目标中仅设置构建活动架构 no。最建议将 $(inherited) 放在搜索路径之前已经完成了。
  • 检查 .m 文件的目标。他们都很好。
  • 我什至走得很远,评论了所有使用 WKInterfaceController 的代码。之后什么都没有改变。我也删除了手表应用程序,它仍然在寻找 _OBJC_CLASS_$_WKInterfaceController 但我不确定它是否正确。
  • 我用file WatchKit.framework命令检查了 WatchKit.framework 设备支持文件,看到它支持 arm64。然后将该库手动添加到库中,在设备上运行但仍然无法正常工作。

Tim*_*ter 16

当我看到这个错误时,结果发现是因为我的一个.mm实现文件没有在选项窗格的“目标成员资格”部分中检查,因此没有被构建。

  • 我的 .m 文件之一未在“目标会员资格”中检查 (2认同)

小智 5

请在“Build Phaes”中勾选“Link Binary With Libraries”。是否有任何库仍然使用 WKInterfaceController 或依赖于 Watchkit?

  • 事实上,这是一个澄清问题,而不是答案。您也许可以[编辑]此内容并将其转换为条件答案,例如“如果问题是......那么解决方案是......”。否则你将面临被举报和否决的风险。 (2认同)

upl*_*com 2

尽管使用另一个框架,我也遇到了同样的错误。您只需确保错误文件具有所需的框架位于您的Link Binary with Libraries中。

就我而言,我遇到了与StoreKit相关的错误Undefined symbol: OBJC_CLASS $_SKStoreProductViewController。我所要做的就是将 StoreKit.framework 添加到带有库的链接二进制文件中