CocoaPods大家应该都用过,就是用来方便我们去管理第三方开源库的一个工具,相同的还有npm就是随同node.js一起安装的包管理工具,node.js其实就是一个服务器端的、非阻断式I/O的、事件驱动的JavaScript运行环境。
如果我们想查看我们的CocoaPods的版本的话用下面的指令,下面都是用终端进行操作的
pod --version
我们如果在安装CocoaPods前一般都会去更改下ruby的镜像地址,因为由于原本的镜像地址服务器在国外,我们直接从rubygems.org下载gem文件会比较慢,所以我们选择去更换ruby的镜像源,原本我们是用的是淘宝的源,但是现在淘宝的ruby镜像已经不更新了,所以我们现在一般用ruby china的镜像,由社区的开发者进行共同的一个维护。
下面是查看当前的镜像地址
gem sources -l
如果我们之前用的是淘宝的源的话,我们可以这样进行移除
gem sources --remove https://ruby.taobao.org/
安装ruby china的源
gem sources -a https://gems.ruby-china.org/
先简单的说一下CocoaPods的一些机制,我们在使用pod search的时候其实是从本地索引库去寻找相应的框架的信息的。其实还会根据本地的索引库会去生成一个检索的索引文件
因为我们使用pod search 框架名 肯定不可能是直接去进行遍历的,那会很慢,所以就需要一个检索的索引文件是以键值的形式存储的。当我们使用pod install的时候,就是先去搜索索引文件,找到了之后我们就可以去根据本地索引库的描述文件去进行安装下载。我们有的时候需要去更新自己的本地索引库,那是因为,如果远程的索引库有更新,而我们的本地没有更新,我们去搜索框架的最新的版本的时候肯定是搜索不到的。
我们在进行组件化的时候,也是需要自己去创建一个spec文件的,然后上传到我们自己构建的一个私有远程索引库。然后本地索引库肯定也是需要去更新的。
还有就是在我们去安装CocoaPods的时候应该都会用到一个指令也是至关重要的那就是,这个就是将github上的远程索引库安装到本地来。这个远程索引库只有第三方库的描述文件,是没有第三方库的代码的。
pod setup
也就是这么个东西,这个就是远程索引库
我们再随便点进去一个去看,会看到其中的描述信息。就是有关平台,版本,tag ,以及源码所在的地址。
在安装了之后其实我们在本地的文件夹中也是可以看到的我们的本地索引库,在用于的根目录下的.cocoapods文件夹下面一直往里面点进入到Specs文件夹里面就是了。和我们远程的索引库几乎一模一样
以及在我们的用户根目录下的library文件夹中我们进入Cache文件夹,我们会看到下面的目录结构,这个search_index.json就是那个检索的索引文件,用键值的方式来一一对应,我们pod search就是通过这个文件来找的
下面的指令可以去初始化一个Podfile文件
pod init
我们需要在这个文件里面去写我们所需要的第三方库的名字和版本。
之后我们需要进入项目的文件夹,然后去使用pod install,当然pod update也是可以安装的,但是最好不要这样,因为如果我们的Podfile文件当中没有指定第三方库的版本,而且我们安装的其实并不是最新的版本,然后就这样去更新了,会出现问题。
第一次pod install命令执行成功后,会看到项目的目录下多出.xcworkspace、Podfile.lock文件和Pods目录,之后我们要写代码就是都在xcworkspace这里面写了,对于Podfile.lock文件的话其实在我们每次运行pod install命令的时候,在下载、安装新的库的同时,就会把你安装的每个库的版本都会写在了Podfile.lock文件里面。在这个文件中去记录你每个安装库的版本号,并且锁定了这些版本。我们在移除库的时候用的也应该是pod install
当我们使用pod update的时候也会去更新这个Podfile.lock文件,如果我们只是使用了pod update,后面没有跟库的名字,CocoaPods就会更新每一个Podfile里面写到的第三方库到最新版本。
如果我们的pod update 后面跟了某个第三方库的名字的话,CocoaPods会帮你去更新到这个库的新版本,而不需要去考虑Podfile.lock里面的限制,它会更新到这个库只要符合Podfile里面的版本限制的最新版本。
我们在使用git的使用可以不用提交第三方库,但一定要把Podfile文件和Podfile.lock文件进行commit和push。因为我们的框架的描述其实都在这两个文件里面的,我们完全可以根据这两个文件再重新去下载相应的第三方库。当然如果我们改了框架的源码,传过去还是有必要的。
当我们在Podfile文件中添加一个三方库时,我们应该是去用pod install命令去安装新的三方库,而不是pod update,这里为了避免把已经安装的第三方库的更新。
还有就是在我们使用pod install和pod update的时候都会去更新本地的索引库文件,也就是说默认会去执行pod repo update,这样速度会变的很慢,如果我想让速度变快的话,我们可以去使用显示的声明pod install --no-repo-update和pod update --no-repo-update。
其实我们的pod install是根据Podfile.lock文件来的。我们可以在终端输入pod --help去查看帮助,我们会发现后面都有说明了,还有就是一个update,更新新的第三库的时候会去创建一个新的Podfile.lock文件
引用:
在CocoaPods中其实它会把第三方库会被编译成.a静态库来让我们进行使用,CocoaPods会将所有的第三方库以target的方式组成一个名为Pods的工程,这个工程就放在我们第一次通过pod install产生的Pods目录下。整个第三方库工程会生成一个名称为libPods.a的静态库提供给我们的项目使用。下面也可以看出是会产生.a文件的
如果是资源文件,CocoaPods提供了一个名为Pods-resources.sh的bash脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。
CocoaPods通过一个名为Pods.xcconfig的文件来在编译时设置所有的依赖和参数。