CocoaPods的原理与技巧(二)

下载原理

pod 'LPLineChartView', :git => 'https://github.com/xiaofei86/LPLineChartView.git', :tag => '1.0.0'

当使用 CocoaPods 导入私有库时,CocoaPods 先是根据:git => 'https://github.com/xiaofei86/LPLineChartView.git'找到对应的 Git 仓库,然后根据:tag => '1.0.0'定位到对应 tag 的提交(如果没有注明 Pod 依赖库版本则定位到最后一次的提交),然后在这次提交中检索到后缀为“.podspec”的文件(文件可以随便命名)。找到 Podspec 文件后先要验证 s.name 是否与Podfile中的一致,如果不一致则 install 时会报错“[!] Unable to find a specification for 'LPLineChartView'.”。验证成功后,就会根据 Podspec 中的 s.source_files 找到需要导入代码文件,并通过其他的数据找到对应的配置文件或资源文件等。最后,将其下载到本地项目中。如果是公有库,这些原理也相同。只是公有库需要将 Podspec 文件上传到 CocoaPods。在导入的时候通过名字 LPLineChartView 去 CocoaPods 匹配对应的 Podspec ,然后根据"s.source"去找到对应的仓库和对应的版本,然后会再去匹配新的 Podspec,后边的步骤就完全相同了。

  • 对下载原理的验证有兴趣的可以点击这里查看。

集成原理

当所有的依赖库都下载完后,CocoaPods 会将所有的依赖库都放到另一个名为 Pods 的项目中,然后让主项目依赖 Pods 项目。这样,源码管理工作都从主项目移到了 Pods 项目中。Pods 项目最终会编译成一个名为 libPods.a 的文件,主项目只需要依赖这个.a文件即可。对于资源文件,CocoaPods 提供了一个名为 Pods-resources.sh 的 bash 脚本,该脚本在每次项目编译的时候都会执行,将 Pods 依赖库的各种资源文件复制到目标目录中。CocoaPods 还通过一个名为 Pods.xcconfig 的文件来在编译时设置所有的依赖和参数。

版本控制原理

当执行完 pod install 之后,CocoaPods会生成一个名为 Podfile.lock 的文件。Podfile.lock 文件最大得用处在于多人开发。如果你没有在 Podfile 中指定 Pods 版本pod 'LPLineChartView',那么默认为获取当前 LPLineChartView 依赖库的最新版本。当团队中的某个人执行完 pod install 命令后,生成的 Podfile.lock 文件就记录下了当时最新 Pods 依赖库的版本,这时团队中的其它人 check 下来这份包含 Podfile.lock 文件的工程以后,再去执行 pod install 命令时,获取下来的 Pods 依赖库的版本就和最开始用户获取到的版本一致。如果没有 Podfile.lock 文件,后续所有用户执行 pod install 命令都会获取最新版本的 LPLineChartView,这就有可能造成同一个团队使用的依赖库版本不一致,这对团队协作来说绝对是个灾难!在这种情况下,如果团队想使用当前最新版本的 LPLineChartView 依赖库,有两种方案:1.更改 Podfile,使其指向最新版本的 LPLineChartView 依赖库;2.执行 pod update 命令;鉴于 Podfile.lock 文件对团队协作如此重要,所以应该加入到版本控制里面(This file should always be kept under version control)。

常用技巧

  • 不更新podspec

CocoaPods 在执行 pod install 和 pod update 时,会默认先更新一次 Podspec 索引。使用 --no-repo-update 参数可以禁止其做索引更新操作。如下所示:

pod install --no-repo-update
pod update --no-repo-update
  • 查看更新细节

pod install 和 pod update 的执行引发了很多操作。了解底层运行过程最简单的方式就是给 pod install 语句添加 –verbose 参数。这样就可以看到 pod install 和 pod update 执行过程的详细细节。

pod install --verbose
pod update --verbose
  • 使用私有的pods

我们可以直接指定某一个依赖的 Podspec,这样就可以使用公司内部的私有库。该方案有利于使企业内部的公共项目支持 CocoaPods。

pod 'LPLineChartView', :git => 'https://github.com/xiaofei86/LPLineChartView.git', :tag => '1.0.0'
  • 调整podfile位置

通常情况下我们都推荐 Podfile 文件都放在工程根目录。但 Podfile 也可以放在其他目录下,这时只需在 Podfile 中指定工程的路径即可。

xcodeproj "LPLineChartView/LPLineChartView.xcodeproj" 
xcodeproj "../LPLineChartView.xcodeproj" 
  • 管理Pods依赖库版本

    pod 'LPLineChartView' //不显式指定依赖库版本,表示每次都获取最新版本
    pod 'LPLineChartView', '2.0' //只使用2.0版本
    pod 'LPLineChartView', '> 2.0' //使用大于2.0的版本
    pod 'LPLineChartView', '>= 2.0' //使用大于或等于2.0的版本
    pod 'LPLineChartView', '< 2.0' //使用小于2.0的版本
    pod 'LPLineChartView', '<= 2.0' //使用小于或等于2.0的版本
    pod 'LPLineChartView', '~> 0.1.2' //使用大于等于0.1.2但小于0.2的版本
    pod 'LPLineChartView', '~> 0.1' //使用大于等于0.1但小于1.0的版本
    pod 'LPLineChartView', '~> 0' //使用大于0的版本,和什么都不写效果相同

由于 CocoaPods 建议采用pod 'LPLineChartView', '~> 0.1.2'这种写法,所以在制作 Pod 时,接口不向前兼容的更新最好修改版本号的第二位数。

博客:xuyafei.cn
简书:jianshu.com/users/2555924d8c6e
微博:weibo.com/xuyafei86
Github:github.com/xiaofei86

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容