未定义的符号:_OBJC_CLASS_$_WKInterfaceController 在将 Xcode 更新到版本 11.1 后出现错误
Undefined symbol: _OBJC_CLASS_$_WKInterfaceController error after updating Xcode to version 11.1
我将 Xcode 更新到版本 11.1 并收到预期错误:
WatchKit is not available when building for iOS Simulator.
然后我按照建议从 iOS 应用程序目标中删除了 WatchKit。从那以后我遇到了这个错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_WKInterfaceController", referenced from:
objc-class-ref in INFOnlineLibrary(IOLWatchKitHelper.o) ld: symbol(s) not found for architecture x86_64 clang: error: linker
command failed with exit code 1 (use -v to see invocation)
Undefined symbol: _OBJC_CLASS_$_WKInterfaceController
PS:x86_64 部分取决于 device/simulator 选择。如果我选择一个真实的设备,它会为 arm64 提供相同的错误。所以我不认为这是一个架构问题,因为包含 WKInterfaceController 的框架只是一个标准的 watchOS 框架,它是 Watchkit。
PS_2:iOS应用中没有使用WKInterfaceController甚至WatchKit。仅在WatchAppExtension部分使用
到目前为止我尝试了什么:
- 第一件事是将 WatchKit 框架添加到 WatchApp 和
WatchAppExtension 目标。
- 当我搜索 Undefined symbols for architecture x86_64 类型的错误时,通常会有许多不同的建议。尽管我认为这不是依赖于体系结构的事情,但我尝试在所有目标中只设置 building active architecture no。最建议的将$(inherited) 放入搜索路径之前已经完成了。
- 检查了.m文件的目标。他们都很好。
- 我什至还评论了所有使用 WKInterfaceController 的代码。之后什么都没有改变。我还删除了手表应用程序,它仍然在寻找 _OBJC_CLASS_$_WKInterfaceController 但我不确定它是否正确。
- 我用
file WatchKit.framework
命令检查了WatchKit.framework Device Supporting Files,发现它支持arm64。然后将该库手动添加到库中,运行 在设备上但仍然无效。
请检查"Build Phaes"中的"Link Binary With Libraries"。是否有任何库仍然使用 WKInterfaceController 或依赖于 Watchkit?
我在使用另一个框架时遇到了同样的错误。您只需确保错误文件具有所需的框架在您的 Link 二进制文件中 .
在我的例子中,我有错误 Undefined symbol: OBJC_CLASS$_SKStoreProductViewController 与 StoreKit。
我所要做的就是将 StoreKit.framework 添加到带有库的 Link 二进制文件中
我遇到了类似的错误,但在我的情况下,它可能是添加/删除依赖项后存在的一些不干净的库。所以我做了 Xcode -> Product -> Clean Build Folder ,并重建了项目。成功了。
当我看到这个错误时,原来是因为我的一个 .mm
实现文件没有在选项窗格的“目标成员资格”部分中选中,因此没有被构建。
我不得不将框架拖放到框架组下的 Xcode 中。它已添加到 Target > Build Phases > Embedded Frameworks 下,但显然这还不够。
如果您确定在应用程序的“目标成员资格”部分中检查了构建文件的实现文件,请确保某处存在头文件的实现。我 运行 遇到了这个问题,当时我有一个 class 和另一个 class 在同一个文件中定义并且忘记将其实现放在相关的 .m
文件中classes.
我将 Xcode 更新到版本 11.1 并收到预期错误:
WatchKit is not available when building for iOS Simulator.
然后我按照建议从 iOS 应用程序目标中删除了 WatchKit。从那以后我遇到了这个错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_WKInterfaceController", referenced from: objc-class-ref in INFOnlineLibrary(IOLWatchKitHelper.o) ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)Undefined symbol: _OBJC_CLASS_$_WKInterfaceController
PS:x86_64 部分取决于 device/simulator 选择。如果我选择一个真实的设备,它会为 arm64 提供相同的错误。所以我不认为这是一个架构问题,因为包含 WKInterfaceController 的框架只是一个标准的 watchOS 框架,它是 Watchkit。
PS_2:iOS应用中没有使用WKInterfaceController甚至WatchKit。仅在WatchAppExtension部分使用
到目前为止我尝试了什么:
- 第一件事是将 WatchKit 框架添加到 WatchApp 和 WatchAppExtension 目标。
- 当我搜索 Undefined symbols for architecture x86_64 类型的错误时,通常会有许多不同的建议。尽管我认为这不是依赖于体系结构的事情,但我尝试在所有目标中只设置 building active architecture no。最建议的将$(inherited) 放入搜索路径之前已经完成了。
- 检查了.m文件的目标。他们都很好。
- 我什至还评论了所有使用 WKInterfaceController 的代码。之后什么都没有改变。我还删除了手表应用程序,它仍然在寻找 _OBJC_CLASS_$_WKInterfaceController 但我不确定它是否正确。
- 我用
file WatchKit.framework
命令检查了WatchKit.framework Device Supporting Files,发现它支持arm64。然后将该库手动添加到库中,运行 在设备上但仍然无效。
请检查"Build Phaes"中的"Link Binary With Libraries"。是否有任何库仍然使用 WKInterfaceController 或依赖于 Watchkit?
我在使用另一个框架时遇到了同样的错误。您只需确保错误文件具有所需的框架在您的 Link 二进制文件中 .
在我的例子中,我有错误 Undefined symbol: OBJC_CLASS$_SKStoreProductViewController 与 StoreKit。 我所要做的就是将 StoreKit.framework 添加到带有库的 Link 二进制文件中
我遇到了类似的错误,但在我的情况下,它可能是添加/删除依赖项后存在的一些不干净的库。所以我做了 Xcode -> Product -> Clean Build Folder ,并重建了项目。成功了。
当我看到这个错误时,原来是因为我的一个 .mm
实现文件没有在选项窗格的“目标成员资格”部分中选中,因此没有被构建。
我不得不将框架拖放到框架组下的 Xcode 中。它已添加到 Target > Build Phases > Embedded Frameworks 下,但显然这还不够。
如果您确定在应用程序的“目标成员资格”部分中检查了构建文件的实现文件,请确保某处存在头文件的实现。我 运行 遇到了这个问题,当时我有一个 class 和另一个 class 在同一个文件中定义并且忘记将其实现放在相关的 .m
文件中classes.