CocoaPods的安装使用以及应该注意的点

前言:好久没写点什么,17年要多“提笔”了,无论是记录自己学习的点滴,还是分享一些技术感悟~给自己定个小目标,今年至少要完成50篇文章。也就是说基本每周出一篇。💪 最近项目中在用CocoaPods,这篇文章再温习一下吧~🤓

night.jpg

What ?

CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具,类似PHP的Composer,Java的Maven,NodeJs的npm。


Why ?

使用CocoaPods的目的是让我们能自动化的、集中的、直观的管理第三方库
在工程中引入第三方库会涉及到许多内容。针对 Objective-C 初级开发者来说,工程文件的配置会让人很沮丧。在配置 build phases 和 linker flags 过程中,会引起许多人为因素的错误。CocoaPods 简化了这一切,它能够自动配置编译选项。而且方便管理第三方库的版本,方便升级与控制。
例如实际开发中需要导入一些第三方库,在没有使用 CocoaPods 以前,我们需要:
1.把这些第三方开源库的源代码文件复制到项目中,或者设置成 git 的 submodule。
2.对于这些开源库通常需要依赖系统的一些 framework,我需要手工地将这些 framework 分别增加到项目依赖中,比如通常情况下,一个网络库就需要增加以下 framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。
3.对于某些开源库,我还需要设置-licucore或者 -fno-objc-arc等编译参数
4.管理这些依赖包的更新。
5.检测重复是否添加,是否有多个版本

这些体力活虽然简单,但毫无技术含量并且浪费时间。在使用 CocoaPods 之后,我们只需要将用到的第三方开源库放到一个名为 Podfile 的文件中,然后执行pod install。CocoaPods 就会自动将这些第三方开源库的源码下载下来,并且为我的工程设置好相应的系统依赖和编译参数。【片段摘自巧神博客😉】


How ?

CocoaPods安装:

CocoaPods是用Ruby实现的,要想使用它首先需要有Ruby的环境,我们的MacOS都自带了Ruby环境。请尽可能用比较新的 RubyGems 版本,建议 2.6.x 以上,打开你的终端

gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
gem sources -l https://gems.ruby-china.org
# 确保只有 gems.ruby-china.org
sudo gem update --system # 这里可能要翻墙一下
gem -v

注意,如果遇到 SSL 证书问题,你又无法解决,请直接用 http://gems.ruby-china.org避免 SSL 的问题。
接下来执行安装CocoaPods命令:

sudo gem install cocoapods
pod setup

这步等待时间可能有点长,因为要下载大概几百M的文件,下载到 ~/.cocoapods目录下,如果你等太久,可以试着 cd 到那个目录,用du -sh *来查看下载进度。

当然我们也可以使用CocoaPods国内的镜像索引来加速下载速度

pod repo remove master
pod repo add master https://git.coding.net/CocoaPods/Specs.git
pod repo update

使用CocoaPods:

首先在你的项目目录下执行如下代码:

pod init

然后你会发现刚才的命令创建了一个Podfile 文件
Podfile 文件可以很简单:

target 'MyApp' 
  do pod 'ObjectiveSugar'
end

Podfile文件也可以很复杂:

platform :ios, '9.0'
inhibit_all_warnings!
target 'MyApp' do
  pod 'ObjectiveSugar', '~> 0.5'

  target "MyAppTests" do
    inherit! :search_paths
    pod 'OCMock', '~> 2.0.1'
  end
end
post_install do |installer|
  installer.pods_project.targets.each do |target|
    puts "#{target.name}"
  end
end

具体语法可以参考Podfile指南

这里简单说明一下常用的写法

  • 保持使用最新版:
pod 'MBProgressHUD',
  • 使用固定版本:
pod 'MBProgressHUD', '0.9.2'
  • 指定最小版本:(实际中在0.92跟1.0.0之间,不包含1.0.0)
pod 'MBProgressHUD', '~>0.9.2'

对于版本号的个人理解:比如说0.9.2,0.x.x到1.x.x几这样跨度的应该是一个改动很大的版本,有可能会废弃一些老的API,可能会造成一些兼容性需适配问题。0.8.x到0.9.x这样的是增加了一些新功能,同时可能修复了一些bug。0.9.1到0.9.2这样增加版本号的,只是修复了一些bug没太多影响。


写好了Podfile文件之后执行命令:

pod install --verbose
#--verbose参数代表查看这个命令执行的详细过程

然后会生成xxx.xcworkspace,和Podfile.lock以及Pods文件夹。以后打开工程用xxx.xcworkspace

关于Podfile 与 Podfile.lock需注意:

Podfile文件以及Podfile.lock文件应该加入到版本控制中(SVN or Git...),这一点也是官方文档中强调的。Podfile.lock文件记录了当前所依赖的第三方库版本。当团队合作时,务必要保证大家版本一致性,不然可能会造成各种奇奇怪怪的bug以及隐患。


什么时候用pod install 什么时候用pod update ?

当你使用pod install它只解决了Podfile里面,但不在Podfile.lock文件里面的那些库之间的依赖。对于在Podfile.lock里面所列出的那些库,会下载在Podfile.lock里面明确的版本,并不会去检查是否该库有新的版本。

比如说:Podfile文件如下

target 'testCocoaPods' do
  pod 'MBProgressHUD', '~>0.9.1'
end

你当前 Podfile.lock里面已经是0.9.1版本,你再执行pod install的时候,Podfile.lock里面的版本符合Podfile要求就等于没什么操作,即使有0.9.2版本更新也不会下载

当你运行 pod update PODNAME 命令时,CocoaPods会帮你更新到这个库的新版本,而不需要考虑Podfile.lock里面的限制,它会更新到这个库尽可能的新版本,只要符合Podfile里面的版本限制。

如果你运行pod update,后面没有跟库的名字,CocoaPods就会更新每一个Podfile里面的库到尽可能的最新版本。
比如:上面的例子运行 pod update时候,如果有0.9.2版本,CocoaPods会按照你Podfile文件的配置去更新,然后更改Podfile.lock

需要注意的事项:

运行 pod update 有时候你会感觉到特别慢,是因为它首先会去更新podspec,使用--no-repo-update参数可以禁止其做索引更新操作


EOF:文中难免会有一些错误的之处,欢迎大家拍砖~

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

推荐阅读更多精彩内容

  • 一. CocoaPods的介绍 什么是CocoaPods?CocoaPods是一个负责管理iOS项目中第三方开源库...
    辉712阅读 3,922评论 0 7
  • 项目组件化、平台化是技术公司的共同目标,越来越多的技术公司推崇使用pod管理第三方库以及私有组件,一方面使项目架构...
    swu_luo阅读 21,722评论 0 39
  • CocoaPods 是什么? CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具。CocoaPo...
    朝洋阅读 25,678评论 3 51
  • 前言 前几天发布我的开源库<最简单方便的iOS轮播开源库:JYCarousel>到CocoaPods的时候。对Co...
    Dely阅读 17,175评论 12 82
  • 身边每个人都希望有足够的自由,希望有足够的时间和票子,然后可以在某一个烦躁的时间,挪动去另外一个空间,另一个自己不...
    saillin104阅读 248评论 0 2