本文共 2507 字,大约阅读时间需要 8 分钟。
在进行iOS开发的时候,一定离不开第三方库的使用,如果没有CocoaPods
,我们将要进行的工作是:
framework
framework
但是现在CocoaPods
已经帮我们把上面的动作执行了,我们只需要执行配置podfile
等工作,其他的都不用亲自操作了
CocoaPods
就是一个管理第三方依赖库的工具 ,它在执行第三方库配置的同时会为我们创建一个workspace
文件来将第三方库和我们的工程连接起来,供我们开发使用。其存在的目的就是让开发者能自动化、集中的、直观的管理第三方开源库 CocoaPods
是用Ruby写的,并由若干个Ruby包构成
CocoaPods/Specs
podspec
文件的仓库,每引入一个第三方库,都会传一份podspec
文件给CocoaPods
,在这里面会有每个第三方库的每个版本,在podspec
文件中会有source
属性,通过source
属性中的链接去下载该第三方库 Specs
采用集中式管理 tips:打开隐藏文件夹的方式shift+command+.
CocoaPods/CocoaPods
CocoaPods/Core
gem
组件提供支持与CococaPods
相关文件的处理。比如,执行pod install
命令,Core
组件会解析podspec文件和podfile
文件,确定引入的文件。除此之外,执行与这些文件相关的命令也由该组件处理,比如pod spec lint
,检测podspec
文件的有效性 CocoaPods/Xcodeproj
CocoaPods
中负责所有工程文件的整合。如果想写一个脚本来方便的修改文件,可以单独下载这个gem文件并使用 CocoaPods
之后,只能使用workspace
因为workspace
下的project
会共享build
(通常为 ~/Library/Xcode/DerivedData/
),Xcode通过这种方式发现隐式依赖并按序构建。如果使用project
就得手动将pod工程的产物拖入到link library with libraries
添加引用,并拷贝modulemap
等文件
podfile.lock
生成:在第一次pod install
时自动生成,会标注项目当前依赖库的准确版本(包括podfile
中直接标注需要使用的库和这些库依赖的其他库)
pod update
命令或修改podfile
文件里使用的依赖库后会生成新的podfile.lock
文件 好处:如果是多人共同开发,那么别人同步了你的podfile.lock
之后,直接执行pod install
就可以保证你们的库是同一版本的,是同步的,可以防止因为依赖库版本不同而产生的问题 例子:甲乙使用两个分支开发,甲添加了A库,在podfile中
指定版本1.0.1,A1.0.1依赖于B库,但是没有指明版本dependency 'A1', '~> 3.0'
,CocoaPods
会使用满足条件的最新版本,比如B 3.2。等乙在合并分支的时候,B已经有了3.3版本,CocoaPods
会使用B3.3版本,同样的podfile
,安装的版本不同。但是如果使用podfile.lock
的话,会记录你目前使用的库的准确版本,并且配置时也使用这个版本,就不会出错 manifest.lock
manifest.lock
是podfile.lock
文件的副本,在pods/
文件夹下,没有纳入git的版本控制,只有本地的改动会影响该文件,而podfile.lock
是会被别人的改动影响的。在项目bulid时,如果两个文件不同就会报the-sandbox-is-not-in-sync-with-the-podfile-lock
错
podfile.lock
文件和manifest.lock
文件不同,也就是当前podfile.lock
文件和上次安装pod后的podfile.lock
不同),及时更新,防止依赖库版本不同造成的崩溃 第三方库安装时会在其对应的podspec
文件中找到它的resource
属性,在那里下载它的对应源,podspec
文件存储在repo
中
pod install
只会改变podfile
中新改变的东西
podfile.lock
存在,直接从文件中读取信息下载,只会下载文件中指定版本,对于不在podflie.lock
文件中的库,pod install
命令会搜索这个pod库在podfile
文件中指定的版本来安装,在安装之后会根据podfile
中的描述解析,并在podfile.lock
中增加对应的内容podfile.lock
不存在,会读取podfile
文件内的框架信息,下载好之后生成podflie.lock
文件podfile.lock
文件后,都会生成一个与之相同的manifest.lock
文件pod repo update
从远程仓库更新本地的repo
(同步)
pod update
首先执行pod repo install
,接着会根据podfile
的规则更新所有库,不会理睬podfile.lock
,根据安装后的情况生成新的 podfile.lock
我和同学共用一个子分支,他昨天合并了develop
分支,今早我pod install
报错,pod repo update
后就可以pod install
了
podspec
文件中只有1.0.1版本,拿不到resource
属性中的对应源,无法下载。这时候就得同步远程仓库,将远程仓库中的podspec
文件clone到本地,之后pod install
就可以了 转载地址:http://hkkti.baihongyu.com/