【问题标题】:Undefined symbol: _OBJC_CLASS_$_WKInterfaceController error after updating Xcode to version 11.1未定义符号:将 Xcode 更新到 11.1 版后出现 _OBJC_CLASS_$_WKInterfaceController 错误
【发布时间】:2020-02-18 17:30:02
【问题描述】:

我将 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 目标。
  • 当我搜索 Undefined symbols for architecture x86_64 类型的错误时,通常会有许多不同的建议。尽管我认为它不依赖于架构,但我尝试在所有目标中设置仅构建活动架构。最建议将 $(inherited) 放入搜索路径之前已经完成。
  • 检查 .m 文件的目标。他们都很好。
  • 我什至还评论了所有使用 WKInterfaceController 的代码。之后什么都没有改变。我还删除了手表应用,它仍然在寻找 _OBJC_CLASS_$_WKInterfaceController 但我不确定它是否正确。
  • 我用file WatchKit.framework 命令检查了WatchKit.framework 设备支持文件,发现它支持arm64。然后将该库手动添加到库中,在设备上运行但仍然无法正常工作。

【问题讨论】:

    标签: ios objective-c xcode watchkit


    【解决方案1】:

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

    【讨论】:

    • 事实上,这是一个澄清问题而不是答案。您也许可以edit this 并将其转换为有条件的答案,例如“如果问题是......那么解决方案是......”。否则,您将面临被举报和投反对票的风险。
    • 是的,实际上错误中的“IOLWatchKitHelper.o”提示将我引导到使用它的库。谢谢。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      在我的例子中,我遇到了与 StoreKit 相关的错误Undefined symbol: OBJC_CLASS$_SKStoreProductViewController。 我所要做的就是将 StoreKit.framework 添加到 Link Binary with Libraries

      【讨论】:

        【解决方案4】:

        我遇到了类似的错误,但在我的情况下,添加/删除依赖项后可能是一些不干净的库。所以我做了 Xcode -> Product -> Clean Build Folder ,并重建了项目。成功了。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2021-11-24
            • 2011-10-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-09-23
            • 1970-01-01
            • 1970-01-01
            • 2023-03-14
            相关资源
            最近更新 更多