目录
1.原理及说明
2.安装 Ruby 环境
3.安装 CocoaPods
4.使用 CocoaPods
5.补充 - 安装好以后在新的项目中使用
6.使用过程中遇到的各种问题 Bug
7.常用的命令行
8.私有库 Pod
1.原理及说明
原理:
每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm。随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的名字叫做:CocoaPods,CocoaPods项目的源码在Github上管理。比如通常情况下,一个网络库就需要增加以下framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。对于某些开源库,我还需要设置-licucore或者 -fno-objc-arc等编译参数管理这些依赖包的更新。这些体力活虽然简单,但毫无技术含量并且浪费时间。在使用CocoaPods之后,我只需要将用到的第三方开源库放到一个名为Podfile的文件中,然后执行pod install。CocoaPods就会自动将这些第三方开源库的源码下载下来,并且为我的工程设置好相应的系统依赖和编译参数。说明:
1、第三方库会被编译成.a静态库供我们真正的工程使用。CocoaPods会将所有的第三方库以target的方式组成一个名为Pods的工程,该工程就放在刚才新生成的Pods目录下。整个第三方库工程会生成一个名称为libPods.a的静态库提供给我们自己的CocoaPodsTest工程使用。
对于资源文件,CocoaPods提供了一个名为Pods-resources.sh的bash脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。
2、我们的工程和第三方库所在的工程会由一个新生成的workspace管理为了方便我们直观的管理工程和第三方库,CocoaPodsTest工程和Pods工程会被以workspace的形式组织和管理,也就是我们刚才看到的CocoaPodsTest.xcworkspace文件。
3、原来的工程设置已经被更改了,这时候我们直接打开原来的工程文件去编译就会报错,只能使用新生成的workspace来进行项目管理。
4、CocoaPods通过一个名为Pods.xcconfig的文件来在编译时设置所有的依赖和参数。参考链接:
1.CocoaPods详解之使用篇:http://blog.csdn.net/wzzvictory/article/details/18737437
2.CocoaPods详解之进阶篇:http://blog.csdn.net/wzzvictory/article/details/19178709
3.CocoaPods原理系列:https://juejin.cn/post/6932739864613879821
4.CocoaPods原理及组件化:https://juejin.cn/post/6861887227438301198
5.Cocoapods基础使用:https://www.jianshu.com/p/2e88be63a18e?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
6.rvm、Ruby 环境和 CocoaPods 安装使用及相关报错问题解决:https://xiaozhuanlan.com/topic/7654293801
2.安装Ruby环境
2.1 查看Mac是否安装Ruby和gem
PS:Ruby是一门开发语言,gem为Ruby第三方库管理工具,CocoaPods是用Ruby写的一个第三方工具。
在终端中输入命令:ruby --version
和gem --version
输出如下类似提示符,则表示Ruby环境已安装
$ ruby --version
ruby 2.0.0p643 (2015-02-25 revision 49749) [x86_64-darwin14.3.0]
$ gem --version
2.4.8
2.2 若提示command not found
则需要安装Ruby环境
- 安装Ruby环境需要安装Xcode及Command Line Tools。
- 安装Command Line Tools:
xcode-select --install
- 安装RVM,Ruby的多版本管理工具。
$ curl -L https://get.rvm.io | bash -s stable
$ source ~/.rvm/scripts/rvm
$ rvm install 2.0.0
$ rvm use 2.0.0
$ /bin/bash --login
3.安装CocoaPods
3.1 使用淘宝的镜像安装Ruby的第三方库,修改gem的镜像:
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
3.2 为了验证你的Ruby镜像是并且仅是淘宝,可以用以下命令查看:
$ gem sources -l
# 只有在终端中出现下面文字才表明你上面的命令是成功的:
* CURRENT SOURCES *
https://ruby.taobao.org/
如果出现多个需要将其余的源删除。
3.3 终端中执行安装CocoaPods
$ sudo gem install cocoapods
3.4 执行完成后,需要初始化CocoaPods的环境
$ pod setup
4.使用CocoaPods
4.1 创建Xcode工程并切换到该工程路径
4.2 使用命令pod init
在当前文件夹下生成一个Podfile文件
4.3 编辑该文件,在该文件中输入如下信息:
该文件中的命令格式为:
pod '第三库名称', '版本号'
;第三库名称,名称要正确,不然有可能安装失败。
其中版本号标识区别:
>= 1.0 至少版本为1.0
~> 1.0 兼容1.0版本的最新版
== 1.0或1.0 都表示指定版本
$ vim Podfile
platform :ios, '7.0'
pod "AFNetworking", "~> 2.5.4"
pod 'SDWebImage'
pod 'KVNProgress'
4.4 安装工程依赖的第三方库,若出现pods installed
字样表示安装成功
$ pod install
Updating local specs repositories
Analyzing dependencies
Downloading dependencies
Installing AFNetworking (2.5.4)
Installing KVNProgress (2.2.2)
Installing SDWebImage (3.7.3)
Generating Pods project
Integrating client project
[!] Please close any current Xcode sessions and use `CocoaPodsDemo.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There are 3 dependencies from the Podfile and 3 total
pods installed.
4.5 关闭Xcode工程,打开.xcworkspace文件。
4.6 在工程中导入第三库文件,只需要#import <AFNetworking.h>
类似的即可,开启CocoaPods之旅。
5. 补充:安装好以后在新的项目中使用
在终端中敲入命令
1.cd +项目的路径
2.pod init
3.vim Podfile(修改这个文件)
4.pod install(出现pods installed表示成功)
5.打开.xcworkspace文件就打开工程了就可使用
6.添加第三方库:点击Pods项目中的Podfile文件添加,然后点击install Pods(这种是安装了一个插件可以显示CocoaPods)
7.添加新库时,也可以添加完用端口敲命令方式(添加完成退出保存:先按esc,然后 :wq)
添加新库时候还可以直接打开写添加,opten后写完直接关掉,直接pods install即可安装成功
8.删除已安装的第三方库:终端中进入podfile文件 (vi podfile),然后直接去掉即可,再pod install。为省时间也可pod install --no-repo-update(不用每次都去仓库检测,更新...)
6.使用过程中遇到的各种问题Bug
6.1 pod setup更新设置仓库时无法成功,报错如下2种:
- 错误如图:
[!] Unable to add a source with url `https://github.com/CocoaPods/Specs.git` named `master`.
You can try adding it manually in `~/.cocoapods/repos` or via `pod repo add`.
- 错误原因:
这些错误说明某些环境原因导致pod更新不了,可能原因有:1)gem版本太低;2)github无法连接;3)cocoapods目录下的配置信息错误;我们可以一个一个来排除
- 解决办法:
敲入以上命令时,终端上是这个样子的(由于太长,仅截取前面一部分):
看到这里,说明你已经安装成功了。
相关链接:https://www.jianshu.com/p/90ca71b3b94a
6.2 因为git没有更新造成的问题
6.3 CocoaPods更新慢的解决办法
使用CocoaPods来添加第三方类库,无论是执行pod install还是pod update都卡在了Analyzing dependencies不动;原因在于当执行以上两个命令的时候会升级CocoaPods的spec仓库,加一个参数可以省略这一步,然后速度就会提升不少,加参数的命令如下;
cocoaPods安装的一些问题和具体使用时,发现很多cocoaPods的教程都不太适用,查看此链接或许有帮助:http://www.jianshu.com/p/5b3ba1297abb
pod install --verbose --no-repo-update
pod update --verbose --no-repo-update
或者
pod install --no-repo-update
pod update --no-repo-update
6.4 因为修改了项目中pods文件导致安装不上(知本家)
场景及问题:合作开发时,其他开发者的cocoapods版本为1.7.2,当前自己的版本为最新版1.9.0。项目的source在以前其他开发者的cocoapods版本中更改了source,如下图。其他开发者可以正常pods,自己pods的时候就会出现下图报错的错误提示,时间很久,pods不成功。
解决:pods的时候先将这句话 source 'https://github.com/CocoaPods/Specs.git’ 去掉,再按平时流程一样pods即可成功。成功之后再把这句话加上去,上传代码到git,这样其他小伙伴就不影响。暂时未找到比较好的解决办法。
6.5 错误之ERROR: Could not find a valid gem 'cocoapods' (>= 0)...- bad response Not Found 404(新电脑安装)
6.6 错误之[!] CDN: trunk Repo update failed(新电脑安装)
6.7 错误之inherit! :search_paths
6.8 错误之网络不好
如下图提示为网络不好的意思,需要换个快的网络或者连手机热点看看。网络正常快速即可成功
6.9 错误之cocoapods版本太低和platform
6.10 CocoaPods更新慢的解决办法
使用CocoaPods来添加第三方类库,无论是执行pod install还是pod update都卡在了Analyzing dependencies不动;原因在于当执行以上两个命令的时候会升级CocoaPods的spec仓库,加一个参数可以省略这一步,然后速度就会提升不少。加参数的命令如下:
pod install --verbose --no-repo-update
pod update --verbose --no-repo-update
或者
pod install --no-repo-update
pod update --no-repo-update
6.11 cd 项目路径不正确进行 pod install 报错
6.12 新项目进行 pod init 报错
7. 常用的命令行
1.查看cocoapods版本 pod --version
2.搜索框架 pod search AFNetworking
3.ls -a:是显示该文件夹下的所有隐藏文件,会发现有一个.git文件说明该文件夹是一个git仓库,可以使用git的方法更新该文件夹的内容
4.ls -l:可以列出目录下的所有文件的名字,还可显示文件的详细信息(文件还是目录,权限,大小,所有者,修改时间等)
5.ls -la :显示当前目录下包括隐藏文件/目录的所有文件的详细信息
6.Mac显示默认隐藏的文件:defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder
7.Mac关闭显示默认隐藏的文件:defaults write com.apple.finder AppleShowAllFiles No && killall Finder 2
8.私有库Pod
开发中可能会用到自己的私有库,可以通过直接拖入到开发的项目中集成,还有一种可以像其他第三库比如AFNetworking一样通过CocoaPods的方式pod集成导入开发的项目中。这个需要先将自己的私有库demo放在github(其他也可以如码云)上面,通过相关关联配置,最后再pod到自己的开发项目中。
相关链接:
https://blog.csdn.net/IT00544/article/details/113773892
https://juejin.cn/post/7059679100423634975
https://juejin.cn/post/7081436335721938952