Library not found for xxx / pod 常用命令学习

前言

文章看着有点长,但我想应该能帮助到部分朋友吧,耐心看吧,笔者文采有限,所以排版上也有些不足,望赐教!!!

问题背景

接手一个项目,二次开发过程中由于需要加入新的框架,执行命令pod update --no-repo-update重新编译后,出现该问题,具体错误如下图。

图片1-1.png

解决步骤

第一步:分析错误

根据图1-1可知,该错误是说有个库找不到了,蓝色框起来部分格式化后是这样子的-l|jpush-ios-3.2.1。意思是jpush这个库3.2.1的版本,找不到了,通过搜索jpush发现,真的找不到3.2.1这个版本了,搜出来的是3.2.8的库,如下图1-2:

图1-2.png

而你项目中集成的库却是3.2.1版本的,如下图1-3:
图1-3

这样一来,问题就出现了。

那为什么找不到3.2.1版本了呢?
因为这个项目在集成JPush框架时,并没有指定版本,如下图:

图1-4.png

所以一旦执行pod update --no-repo-update以后,JPush就会下载最新的版本(是cocopods本地库最新的那个版本,这个版本不一定就是网上JPush的最新版本,若想安装网络上的最新版本,需执行pod update)。这样一来你集成的库就不再是这个版本了,而是上图1-2中的3.2.8的版本。

第二步:解决问题

解决问题的方式有二,根据需求决定。

  • 方式一:到图1-3这个地方去,把jpush的版本号,从3.2.1改成3.2.8,执行pod update --no-repo-update,执行完后编译一下项目,如果没有再报错,那问题就算是解决了。

  • 方式二 :如果方式一存在新库没有很好的向下兼容老库,导致项目依旧报错且难以处理,那么我们就得使用这种方式了(这也是笔者这次解决这个问题采用的方式)

    • 1、寻找该框架以前集成的版本号是多少?
      根据图1-2可知,以前的版本是3.2.1。或者查看你接手项目之前的备份(这里要说一个好习惯,接手新项目时,一定要备份个版本放起来,这样以后开发过程中出问题了,可以参考最初的版本)中的Podfile.lock文件,使用文本编辑器打开它,然后搜索jpush,如下图1-5
      图1-5
  • 2、给框架指定版本号,如图1-4那样。然后执行pod update --no-repo-update,执行完后编译一下项目。基本上就大功告成。

文章至此结束,有错误请大家指出,共同进步,谢谢~


最后的忠告

  • 忠告1:接手项目,一定要备份

  • 忠告2:pod集成项目,最好指定版本范围

  • 忠告3:
    集成pod的项目,不能一昧的追求简单,上来就是pod update --no-repo-update,还是得根据实际情况去选择性的执行命令,也许你会说我不了解这些命令的意思,只会执行,我想说,我一开始也是不知道,都是靠百度去查去学习的。所以,笔者建议新同学,花点时间了解pod命令的作用。

下面列出一些常用命令供大家学习,有错之处,请大家指出

pod --help #该命令可以帮助你了解更好的了解pod,执行一下看看,你不亏的
pod install --help #查看install命令的详情作用
pod update --help #查看update命令的详情作用
#以此类推可以通过--help学习任何你想了解的pod命令作用

pod init #安装初始化pod

pod install #根据Podfile.lock中的版本,安装框架(原文:Install project dependencies according to versions from a Podfile.lock)
pod install --verbose --no-repo-update #该命令只安装新添加的库,已更新的库忽略。注意:加--verbose可以显示详细的检测过程,出错时会显示详细的错误信息,执行时也可以不加--verbose。(原文:--verbose:Show more debugging information。-repo:Manage spec-repositories)
#pod install笔者亲自实践结果:执行后会下载未下载的第三框框架,已下载过的框架,不过任何处理


pod update #更新pod本地库(原文:Update outdated project dependencies and create new Podfile.lock)
pod update SDWebImage #更新指定库
pod update SDWebImage --verbose --no-repo-update #该命令只更新指定的库,其它库忽略

#pod update --no-repo-updat笔者亲自实践结果:会下载未下载过的框架,但是同时会更新其他框架。
#pod update SDWebImage --verbose --no-repo-update笔者亲自实践结果:如果SDWebImage未下载过,是不可以执行该命令的(简单说就是你在podfile文件中增加pod 'SDWebImage'之后,不能使用pod的uodate命令下载SDWebImage框架),会提示The `SDWebImage` Pod is not installed and cannot be updated。换而言之,该命令是做更新框架使用的,不具备下载框架的功能。

下面给大家介绍下安装第三方库指定版本,大家也可查看官方文档

pod 'AFNetworking' //不显式指定依赖库版本,表示每次都获取最新版本
pod 'AFNetworking', '2.0' //只使用2.0版本
pod 'AFNetworking', '> 2.0' //使用高于2.0的版本
pod 'AFNetworking', '>= 2.0' //使用大于或等于2.0的版本
pod 'AFNetworking', '< 2.0' //使用小于2.0的版本
pod 'AFNetworking', '<= 2.0' //使用小于或等于2.0的版本
pod 'AFNetworking', '~> 0.1.2' //使用大于等于0.1.2但小于0.2的版本
pod 'AFNetworking', '~>0.1' //使用大于等于0.1但小于1.0的版本
pod 'AFNetworking', '~>0' //版本在0~1.0之前,但不包括1.0及更高版本

参考/推荐文章

pod 指定第三方库的版本

pod install 和pod update 配合 --verbose --repo-update 或者 --verbose --no-repo-update使用

CocoaPods 使用教程,Podfile语法大全,常用命令,基本使用,2020最新教程,超详细注释

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容