博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CocoaPods
阅读量:4141 次
发布时间:2019-05-25

本文共 2507 字,大约阅读时间需要 8 分钟。

文章目录

CocoaPods简介

在进行iOS开发的时候,一定离不开第三方库的使用,如果没有CocoaPods,我们将要进行的工作是:

  1. 下载源代码
  2. 引入工程
  3. 向工程中添加开源库使用的framework
  4. 解决依赖问题
  5. 检查重复添加的framework
  6. 如果需要更新,重复以上步骤

但是现在CocoaPods已经帮我们把上面的动作执行了,我们只需要执行配置podfile等工作,其他的都不用亲自操作了

CocoaPods就是一个管理第三方依赖库的工具 ,它在执行第三方库配置的同时会为我们创建一个workspace文件来将第三方库和我们的工程连接起来,供我们开发使用。其存在的目的就是让开发者能自动化、集中的、直观的管理第三方开源库

CocoaPods结构

CocoaPods是用Ruby写的,并由若干个Ruby包构成

  1. CocoaPods/Specs

    是保存podspec文件的仓库,每引入一个第三方库,都会传一份podspec文件给CocoaPods,在这里面会有每个第三方库的每个版本,在podspec文件中会有source属性,通过source属性中的链接去下载该第三方库
    Specs采用集中式管理
    tips:打开隐藏文件夹的方式shift+command+.
    在这里插入图片描述

  2. CocoaPods/CocoaPods

    是一个面向用户的组件,每当执行一个pod命令时,这个组件都会被激活。

  3. CocoaPods/Core

    这个gem组件提供支持与CococaPods相关文件的处理。比如,执行pod install命令,Core组件会解析podspec文件和podfile文件,确定引入的文件。除此之外,执行与这些文件相关的命令也由该组件处理,比如pod spec lint,检测podspec文件的有效性

  4. 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.lockpodfile.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不同),及时更新,防止依赖库版本不同造成的崩溃

pod命令们

第三方库安装时会在其对应的podspec文件中找到它的resource属性,在那里下载它的对应源,podspec文件存储在repo

pod install

只会改变podfile中新改变的东西

执行过程:

  1. 如果podfile.lock存在,直接从文件中读取信息下载,只会下载文件中指定版本,对于不在podflie.lock文件中的库,pod install命令会搜索这个pod库在podfile文件中指定的版本来安装,在安装之后会根据podfile中的描述解析,并在podfile.lock中增加对应的内容
  2. 如果podfile.lock不存在,会读取podfile文件内的框架信息,下载好之后生成podflie.lock文件
  3. 生成或更新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

原因:比如同学合并了分支后的A库版本是1.0.2,而我本地podspec文件中只有1.0.1版本,拿不到resource属性中的对应源,无法下载。这时候就得同步远程仓库,将远程仓库中的podspec文件clone到本地,之后pod install就可以了

参考链接

转载地址:http://hkkti.baihongyu.com/

你可能感兴趣的文章
Jackson Tree Model Example
查看>>
常用js收集
查看>>
如何防止sql注入
查看>>
springmvc传值
查看>>
在Eclipse中查看Android源码
查看>>
Android使用webservice客户端实例
查看>>
[转]C语言printf
查看>>
C 语言 学习---获取文本框内容及字符串拼接
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
一篇搞懂Java反射机制
查看>>
Single Number II --出现一次的数(重)
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
对话周鸿袆:从程序员创业谈起
查看>>