ios - 如何解决来自 Cocoapods lint 命令的链接器错误?
问题描述
我有一个用 Objective-C 为 iOS 编写的库,我们通过 Cocoapods 发布,最近当我尝试使用pod lib lint
命令验证 pod 时,我遇到了一对链接错误。这两个错误看起来像这样(更改名称以保护无辜者):
Ld /Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/x86_64/Binary/App normal x86_64 (in target 'App' from project 'App')
cd /var/folders/4v/jcw9j9x126j5wsmpqmhhswx40000gn/T/CocoaPods-Lint-20191211-37020-sasgf-FooBarSDK
/Applications/Xcode-11.2.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -target x86_64-apple-ios8.0-simulator -isysroot /Applications/Xcode-11.2.1.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator13.2.sdk -L/Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Products/Release-iphonesimulator -L/Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Products/Release-iphonesimulator/FooBarSDK -L/Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Products/Release-iphonesimulator/TFooBarSDK -L/var/folders/4v/jcw9j9x126j5wsmpqmhhswx40000gn/T/CocoaPods-Lint-20191211-37020-sasgf-FooBarSDK/Pods/TFooBarSDK/FooBar -F/Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Products/Release-iphonesimulator -filelist /Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/x86_64/App.LinkFileList -Xlinker -rpath -Xlinker @executable_path/Frameworks -dead_strip -Xlinker -object_path_lto -Xlinker /Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/x86_64/App_lto.o -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -ObjC -lFooBar_1.2.4 -lFooBarSDK -lTFooBarSDK -lz -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker /Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/App.app-Simulated.xcent -framework Foundation -lPods-App -Xlinker -dependency_info -Xlinker /Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/x86_64/App_dependency_info.dat -o /Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/x86_64/Binary/App
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_FooBar", referenced from:
l_OBJC_$_CATEGORY_FooBar_$_ForceLoad in libFooBarSDK.a(FooBarEmpty.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
当我将项目从 Xcode 9.x 升级到 Xcode 10.3 或 11.2(两个版本相同)时,问题可能已经开始,或者这可能是一个红鲱鱼。
我的理解是,在其他健全性检查中,pod lib lint
创建一个包含相关库(libFooBarSDK
在本例中)并尝试构建它的应用程序项目,看起来该项目的链接阶段是导致此错误的原因。但是,我们的测试应用程序链接到库没有问题。
pod --version
顺便说一句,我正在使用 Cocoapods 的 1.7.5 版。
我的问题:
- 这个问题是否与切换到较新的 Xcode 版本有关?
- 我该如何解决这个错误?
解决方案
添加选项--verbose
以获取有关失败的更详细日志。添加选项--no-clean
以保存 Xcode 工作区,您可以从中调试链接器符号问题。