Cocoapods:找不到重复的库

Posted

技术标签:

【中文标题】Cocoapods:找不到重复的库【英文标题】:Cocoapods : Library Not found Repeated 【发布时间】:2018-09-12 11:39:40 【问题描述】:

我有一个 ios 项目已经成功使用 cocoapods 几年了。

我的 macbook 屏幕死了,所以我暂时将其克隆到新的 macbook 并且无法再构建项目。对于我使用的每个 pod,我都会收到如下警告:

ld: warning: directory not found for option '-L/Users/chris/Library/Developer/Xcode/DerivedData/Bloc-dwchsantxfnowlfgcxthlhtnypue/Build/Products/Debug-iphoneos/AWSCognito'

第一个错误:

ld: library not found for -lAWSCognito
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我意识到有几个与此类似的问题,但我已经尝试了大部分答案,包括:退出 XCode、清理项目、pod 更新、pod 安装、pod deintegrate、检查我有最新的 cocoapods、尝试了 beta 版本然后 cocoapods 恢复到最新版本 (1.5.3)(以各种组合多次重复上述所有操作)。

我已经完成了pod init,并且在podfile中放入了正确的目标。

我总是通过双击 .xcworkspace 而不是 .xcodeproj 文件来启动 XCode

我已经根据this suggestion 检查了 $(inherited) 是否在“库搜索路径”中(尽管问题实际上是库没有在正确的位置生成,而不是在那里找不到 - 在事实上,我根本不相信它们正在生成)。

我已按照this suggestion 删除了 Frameworks 组下的 -lPods-Projectname.a(它是红色的...)

根据the accepted answer here,我有:

rm -rf Pods/ Podfile.lock ; pod install

然后将我的 project.xcworkspace 移动到备份位置,重新安装 cocoapods,rm -rf Pods/ Podfile.lock ; pod install

一个奇怪的事实是,让 cocoapods 生成新的工作空间后,并没有项目的方案(新 macbook 上唯一的方案是手动添加的库)。

我的播客文件:

# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'

target 'Bloc' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!

# Pods for Bloc

    pod 'CCBottomRefreshControl'
    #pod 'ReactiveCocoa'
    pod 'UIView+TKGeometry'
    pod 'Branch'
    pod 'AWSCognito'
    pod 'AWSDynamoDB' 
    pod 'AWSS3'
    pod 'Firebase/Core' #, '~> 4.13.0'
    pod 'Firebase/Messaging'
    pod 'AppsFlyerFramework'
    pod 'TwitterKit', '<3.3.0' # probably 3.2.2
    pod 'TwitterCore', '<3.1.0' # probably 3.0.3
    pod 'FBSDKCoreKit'
    pod 'FBSDKLoginKit'
    pod 'FBSDKShareKit'
    pod 'QBImagePickerController' 
    pod 'SDWebImage'

    post_install do |installer|
         installer.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
            end
         end
     end    
 end

意识到问题在于未构建 pod,我查看了我的目标依赖项 - 有 0 个项目。当我尝试添加依赖项时,没有要添加的 pod 相关项。如果我查看 Pods 目标,它也有 0 个依赖项。在这里,我可以添加依赖项,因此为 libPods-Bloc.a 目标选择了所有 pod 库 .a 文件。然后我为 libPods-Bloc.a 制定了一个新方案并构建了它,我需要的所有库都构建在正确的位置。但是,我仍然无法向我的项目目标依赖项添加任何内容以自动构建 pod(即,我无法拖动 libPods-Bloc.a 并且它不在要选择的列表中)。然而,libPods-Bloc.a 在链接框架和库中

但是,这不能完全工作(显然不是一个好的解决方案) - 库被构建并包含在我的目标中,但随后我得到一个“无效的位码签名”链接错误。我将 Enable Bitcode 设置为 0,我的部署目标是 9.0,并且我在 podfile 中有循环将每个 pod 的部署目标设置为 9.0,这会在某个时候解决这个问题。

【问题讨论】:

【参考方案1】:

终于找到了解决方案,感谢this question 中的回答。我已经阅读了那里接受的答案,但重要的信息在其他几个答案中,直到拼命阅读我能找到的关于该主题的所有内容时我才看到。

问题在于确保 Pods 目标和项目目标的 Build Active Architectures Only 设置相同。 debug -> Yes 是明智的,但 release-> No 很重要。 debug 与 release 不同是可以的。在我的情况下,Pods 都设置为 Yes。这大概是 cocoapods 的默认设置,确实应该被视为错误。

这以某种方式解决了我所有的问题。我不确定它是如何修复依赖项的 - 但所有库都是在必要时构建的,而且我也没有可以理解的“无效的位码签名”错误。

【讨论】:

以上是关于Cocoapods:找不到重复的库的主要内容,如果未能解决你的问题,请参考以下文章

cocoapods - ld:找不到框架

Cocoapods - 找不到框架 FirebaseCoreDiagnostics

无法在 CocoaPods 中找到规范

使用 cocoapods 时找不到 Mantle/Mantle.h' 文件

Cocoapods:找不到“Firebase/Core”的规范

在添加的 CocoaPods 项目中找不到一些导入