看懂Podfile.lock

一、前言

这是 CocoaPods 创建的最重要的文件之一。它记录了需要被安装的 pod 的每个已安装的版本。如果你想知道已安装的 pod 是哪个版本,可以查看这个文件。推荐将 Podfile.lock 文件加入到版本控制中,这有助于整个团队的一致性。
Podfile.lock文件最大得用处在于多人开发。当团队中的某个人执行完pod install命令后,生成的Podfile.lock文件就记录下了当时最新Pods依赖库的版本,这时团队中的其它人check下来这份包含Podfile.lock文件的工程以后,再去执行pod install命令时,获取下来的Pods依赖库的版本就和最开始用户获取到的版本一致。如果没有Podfile.lock文件,后续所有用户执行pod install命令都会获取最新版本的依赖库,这就有可能造成同一个团队使用的依赖库版本不一致,这对团队协作来说绝对是个灾难!

二、理解Podfile.lock文件

打开Podfile.lock文件你会发现如下的几个Key,我来解释下分别是什么意思。

1、PODS:

例如: 下面是一部分内容 意思是: 你的AFNetworking引用的是3.1.0的版本,这个是你应用实际应用的版本,这里要注意的是,Podfile里面的版本区间,执行pod installpod update区别,install 不会更新区间版本,update则会更新到可升区间的最大版本。 尤其在多人开发的大项目有之中,如果Podfile里面没有锁死版本,很容易造成版本被动升级。

// AFNetworking 是被安装的是3.1.0版本,这是在你的源下面搜到的podspec文件下的版本号,并且包括依赖AFNetworking的依赖。
PODS:
      - AFNetworking (3.1.0):
        - AFNetworking/NSURLSession (= 3.1.0)
        - AFNetworking/Reachability (= 3.1.0)
        - AFNetworking/Security (= 3.1.0)
        - AFNetworking/Serialization (= 3.1.0)
        - AFNetworking/UIKit (= 3.1.0)

2、DEPENDENCIES

这个Key下面的其实就是你Podfile里面引用的版本,你可以清楚的看到 他们的版本区间,因为后面会有= < > 比较符号标记,这是因为 它和 Podfile里面引用版本的方式有关,具体可以看Podfile引用版本的细节,可以设置一个版本区间,可以定死版本。

3、SPEC REPOS

这个Key是表示 你这个项目有用到源有哪些,有些私有源,有些公有源,例如 默认的 Github cocoapods的源,私有源就是这个源实在私人服务器上并且不对外开放,公有源就是你这个源可以对任何人开发,对不对外开放这个取决于你的源放在哪里,例如我下面的私有源是在公司内部的gitlab中搭建的,对于外面的人来说肯定就是私有源,因为他们不能访问到我公司的git源。

SPEC REPOS:
    "git@git.nevint.com:DOMOBILE-FeiDian/DOMOBILE-FeiDian-FDSpec.git": //私有源
        - Alita
    "git@git.nevint.com:ios/nio-lib-repo.git": //私有源
        - CCUtil
    https://github.com/cocoapods/specs.git: // 公有源
        - AFNetworking
        - Aspects
        - Bugly
        - CocoaSecurity
        - DBPrivacyHelper
4、EXTERNAL SOURCES

在Podfile引用的版本使用的git的引用,没有上传到源的这种引用,会被放在 external sources 。 例如: pod 'RNShop', :git => 'git@git.nevint.com:DOMOBILE-FeiDian/do-otd-mer-nioapp-ios.git', :tag => '0.4.1' 像这种引用,它明确了使用哪个git但是,这个pod并没有上传到私有源版本,所以他会在 外部源里面。 如何发布到私有源 或者 公有源 可以去Cocoapods文档自行查找。

EXTERNAL SOURCES:
    AutopartsStoreLib:
        :git: "git@git.nevint.com:DOMOBILE-FeiDian/DOIOS-Nioapp-AutopartsStore-Maintenance.git"
        :tag: 0.6.29
    CodePush:
        :path: "../../do-otd-mer-nioapp-rn/node_modules/react-native-code-push"
    Debug:
        :git: "git@git.nevint.com:DOMOBILE-FeiDian/DOIOS-Nioapp-Debug.git"
        :tag: 1.11.8
    DeepLinkKit:
        :git: "git@git.nevint.com:ios/DeepLinkKit.git"
        :tag: 1.2.2.1
    libwebp:
        :git: "git@git.nevint.com:ios-libs/libwebp.git"
        :tag: v0.6.0
5、CHECKOUT OPTIONS

这个字段,其实是对应 当有些pod库没有在源(公有源/私有源)当中 PS: 比如你在Podfile里面引入版本用的是tag或者commit,下面的内容是 是真正装在你app当中的三方库代码,从哪个git,哪个tag,哪个commit。 比如你现在要确定你的 AutopartsStoreLib,Debug 具体版本代码从哪里来,那么你就应该看下面的信息来找到具体下载你本地的库的版本 它是从哪里来的。

    yaml
    CHECKOUT OPTIONS:
        AutopartsStoreLib:
            :git: "git@git.nevint.com:DOMOBILE-FeiDian/DOIOS-Nioapp-AutopartsStore-Maintenance.git"
            :tag: 0.6.29
        Debug:
            :git: "git@git.nevint.com:DOMOBILE-FeiDian/DOIOS-Nioapp-Debug.git"
            :tag: 1.11.8
        DeepLinkKit:
            :git: "git@git.nevint.com:ios/DeepLinkKit.git"
            :tag: 1.2.2.1
        libwebp:
            :git: "git@git.nevint.com:ios-libs/libwebp.git"
            :tag: v0.6.0
6、SPEC CHECKSUMS

这个hash值怎么来的呢,我来解释一下,例如: Alita: 577f02fd587c7722d9c063c70a278a0ef6f35ef9,那么这个hash值是对 我们本地/Users/yongpeng.zhu/.cocoapods/repos/nevint-domobile-feidian-fdspec/Alita/0.2.1/Alita.podspec这个文件的SHA1的值来保证,你的podspec文件是一致的。 如果这个地方发生了改变,那么只可能是你的podspec文件发生了改变。

    SPEC CHECKSUMS:
        AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67
        Alita: 577f02fd587c7722d9c063c70a278a0ef6f35ef9
        Aspects: 7595ba96a6727a58ebcbfc954497fc5d2fdde546
        AutopartsStoreLib: 4663847a6d03364760affc5b4cefda84e1d6d214
        Bugly: 3ca9f255c01025582df26f9222893b383c7e4b4e
        CCUtil: 5c83684e2e5e514fe20a16de0c95a250faf2cf75

7、PODFILE CHECKSUM

这个字段就是对Podfile文件的SHA1的值。用来对比Podfile是否有过改变。

最后

上面我对Podfile.lock文件每个字段都介绍了一下,其实它最主要的功能就是告诉你,你当前的app使用的三方库的版本,来源,和他们生成的hash值,用在多人协作中,来确定版本是否被更改等等。 因为这份文件才是 你真正在app当中的三方库版本,而不是Podfile文件里面写的。 Podfile更像是一个版本约束,而Podfile.lock才是你真正使用的版本。 如果让你去确定你app使用某一个三方库的版本,你不应该找Podfile,而是应该找Podfile.lock文件。 即使你Podfile使用的定死版本的方式。

补充

本地源版本管理地址: 例如:/Users/zyc/.cocoapods/repos/

  1. 存放着各个源的版本,对应的Podspec文件

本地源缓存地址: 例如:/Users/zyc/Library/Caches/CocoaPods/Pods

  1. External文件夹: 存放外部源的代码,例如,你引用的Pod模块是直接用 Commit/Tag 去引用的,它并没有上传到源上,pod 'ABCKit', :git => 'git@git.nevint.com:ios-libs/ABCKit.git', :commit => '76a7c550c98030e606477f4506d1060846253b3b' 或者 pod 'libwebp', :git => 'git@git.nevint.com:ios-libs/libwebp.git', :tag => 'v0.6.0'像这种引用方式 其实这个Pod并没有上传到源上,而是直接从git上拉的,所以算作外部源上面,你可以参考上面Podfile.lock文件里面的External字段就知道了。
  2. Release文件夹: 上传到源上面版本的Pod源代码
  3. Specs文件夹: 存放这些外部的或者发布在源伤的 的Podspec文件的JSON文件,这个JSON文件其实就是把Podspec文件解析然后组成的。
  4. VERSION文件:存放着当前的cocoapods版本
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容