ios - 如何解决 Cocoapods lint 命令中的链接器错误?

标签 ios objective-c cocoapods

我有一个用 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 工作区,您可以从中调试链接器符号问题。

关于ios - 如何解决 Cocoapods lint 命令中的链接器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59299875/

相关文章:

ios - 通过应用内购买将现有的 iOS 付费应用转换为免费增值模式

php - 适用于 Linux/Ubuntu 的 iPhone 测试仪

swift - 为什么桥接 header 中的附加#import swift 失败?

ios - Swift pod 还不能集成为静态库 FirebaseCoreInternal-library

ios - 是否可以通过 API 在应用程序内进行转发?

ios - 如何在不发送请求的情况下拦截Moya请求并返回失败响应

iOS 连接到蜂窝网络

ios - 从 autoreleasepool block 中设置 NSError outparam 的正确方法是什么?

iOS为什么这个属性需要很强

ios - cocoa pod : No such file or directory