iOS开发中如何管理多个版本的Cocoapods、gem

iOS开发中如何管理多个版本的Cocoapods、gem - The Life with iOS - 博客频道 - CSDN.NET

需求场景

之前在集成集团的各种pod库时,发现如果不使用0.35.0版本的Cocoapods,就无法成功集成,所以无奈将自己机器上刚安装的最新版Cocoapods降级。可是好景不长,过了些许日子后,发现在学习Swift的过程中,0.35.0的Cocoapods是不支持集成有swift的pod的。一会儿升级到最新的Cocoapods,一会儿降级到0.35.0,既耗时又容易出错,更谈不上优雅了。

具体多繁琐呢?你需要用

gemlist--local | grep cocoapods

列出目前gem中安装的所有Cocoapods的组件

你可能会看到这样的命令行输出

cocoapods(0.39.0, 0.35.0)cocoapods-core(0.39.0, 0.35.0)cocoapods-downloader(0.9.3, 0.8.1)cocoapods-plugins(0.4.2, 0.3.2)cocoapods-search(0.1.0)cocoapods-stats(0.6.2)cocoapods-trunk(0.6.4, 0.4.1)cocoapods-try(0.5.1, 0.4.5)

然后,你需要一个个的卸载一遍

gemuninstallcocoapodsgemuninstallcocoapods-coregemuninstallcocoapods-downloadergemuninstallcocoapods-pluginsgemuninstallcocoapods-searchgemuninstallcocoapods-statsgemuninstallcocoapods-trunkgemuninstallcocoapods-try

然后再重新安装一遍你需要的特定版本Cocoapods

geminstallcocoapods-v0.35.0

思路

我们现在需要的是实现在公司项目中使用特定版本(0.35.0)的Cocoapods,而在自学Swift用到的项目中使用其他版本(一般为最新)的Cocoapods。此外,如果能够支持不止两个版本,甚至于每个项目都可以有自己需要的特定版本Cocoapods是最好不过的了。

废话不多说,在实践中,我发现了两种方案:

随时随地切换不同版本的Cocoapods

每个项目通过配置,安装作用域仅限该项目的Cocoapods

第一种方案(随时随地切换所需Cocoapods)

由于Cocoapods是一个ruby的gem,所以“随时随地切换不同版本的Cocoapods”也就是“随时随地切换不同版本的gem”的另一种说法,而实现“随时随地切换不同版本的gem”的最简单方法,就是找个能实现“随时随地切换不同版本ruby”的工具。

巧的是,这种工具真的存在,还不止一个,哈哈哈哈哈哈哈哈……

这类工具有rvm、rbenv、ruby-build、chruby、ruby-install等,而笔者使用的是rvm,其他工具我也没尝试过,欢迎大家前去尝试。下面也就根据rvm的实际使用展开:

如果没有安装rvm,打开终端,安装rvm

安装rvm成功后,安装多个版本的ruby,你需要几个版本的Cocoapods,就安装几个版本的ruby(数量不要太多,原因后面会讲到)

不同版本的ruby下安装不同版本的Cocoapods

想用哪个版本的Cocoapods,就切换到相应的ruby版本就行了(rvm use命令)

(可选步骤)用rvm给用到的ruby加上别名(rvm alias系列命令)

是不是有点儿傻?是的,这是最笨的方法。其实使用rvm还可以用到gemset,这样的话,就可以只安装一个ruby版本,但是拥有多个gem集了。步骤也很简单:

使用下面这行命令同时创建三个gemset

rvm gemsetcreateGemset0 Gemset1 Gemset2

使用rvm gemset use Gemset1命令来使用“Gemset1”这个gem集

使用gem install命令安装你需要的特定版本Cocoapods(以及其他gem)

注意:rvm安装的每个ruby里,都是有两个叫做default、global的gemset的,一个默认gemset,一个全局gemset

第二种方案(每个项目都有自己的Cocoapods)

第一种方案比较直观,主体思路就是使用方便我们切换Cocoapods版本的工具,着手点主要在“切换”上。下面要讲到的第二种方案,着手点主要在“配置”上。

大家知道Cocoapods的核心是一个叫做Podfile的文件,通过在Podfile上写入项目所需pod的配置,我们可以通过简单的pod installpod update命令来集成项目所需的pod。Cocoapods的这个思路其实是借鉴了一个叫做Bundler的工具,而Bundler就是实现第二种方案的关键。具体步骤如下:

安装Bundler:Bundler本身就是一个gem,通过gem install bundler命令即可安装

类似Cocoapods的Podfile文件,我们需要创建一个Gemfile文件,文件位置和Podifle所在位置相同即可。(通过在项目主目录下执行bundle init命令也可)

在Gemfile文件中,我们想配置所需pod一样配置我们所需的gem:

source"https://rubygems.org"gem'cocoapods','0.35.0'

和pod install一样的,执行bundle install

想要运行刚刚Bundler安装的cocoapods的话,在相应位置,执行bundle exec pod install即可(除了有bundle exec这个前缀,其他和你平时使用pod命令一样,当然,去掉bundle exec这个前缀,你运行的就是你之前全局安装的Cocoapods了)

利用oh-my-zsh弥补方案的不足

事实上,两个方案都是有不足的。比如第一个方案,我们需要记住自己当前使用的ruby版本是哪个版本(或者当前使用的是哪个gemset),偶尔忘记的时候,会让我们做不少无用功;而第二个方案,最明显的就是,需要每次都额外敲入bundle exec这两个单词。

针对第一个方案:

由于笔者同时使用了zsh和oh-my-zsh,直接在.zshrc文件配置一下风格就好了。

我使用的是oh-my-zsh内置的amuse主题:

ZSH_THEME="amuse"

效果:

可以看到,每次输入命令前,我们都可以知道当前使用的ruby版本,以及哪个gemset

针对第二个方案:

设置一下alias就好了,同样的,由于笔者使用了zsh和oh-my-zsh,直接在.zshrc里面配置命令的alias就好了

我的alias配置如下:

aliaszshconfig="mate ~/.zshrc"aliasohmyzsh="mate ~/.oh-my-zsh"aliasbe="bundle exec"aliasbp="bundle exec pod"

之后,bundle exec pod install就可以写成be pod install,甚至是bp install

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

推荐阅读更多精彩内容