iOS開發(fā)中如何管理多個版本的Cocoapods、gem

iOS開發(fā)中如何管理多個版本的Cocoapods、gem - The Life with iOS - 博客頻道 - CSDN.NET

需求場景

之前在集成集團的各種pod庫時,發(fā)現(xiàn)如果不使用0.35.0版本的Cocoapods,就無法成功集成,所以無奈將自己機器上剛安裝的最新版Cocoapods降級??墒呛镁安婚L,過了些許日子后,發(fā)現(xiàn)在學習Swift的過程中,0.35.0的Cocoapods是不支持集成有swift的pod的。一會兒升級到最新的Cocoapods,一會兒降級到0.35.0,既耗時又容易出錯,更談不上優(yōu)雅了。

具體多繁瑣呢?你需要用

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

思路

我們現(xiàn)在需要的是實現(xiàn)在公司項目中使用特定版本(0.35.0)的Cocoapods,而在自學Swift用到的項目中使用其他版本(一般為最新)的Cocoapods。此外,如果能夠支持不止兩個版本,甚至于每個項目都可以有自己需要的特定版本Cocoapods是最好不過的了。

廢話不多說,在實踐中,我發(fā)現(xiàn)了兩種方案:

隨時隨地切換不同版本的Cocoapods

每個項目通過配置,安裝作用域僅限該項目的Cocoapods

第一種方案(隨時隨地切換所需Cocoapods)

由于Cocoapods是一個ruby的gem,所以“隨時隨地切換不同版本的Cocoapods”也就是“隨時隨地切換不同版本的gem”的另一種說法,而實現(xiàn)“隨時隨地切換不同版本的gem”的最簡單方法,就是找個能實現(xiàn)“隨時隨地切換不同版本ruby”的工具。

巧的是,這種工具真的存在,還不止一個,哈哈哈哈哈哈哈哈……

這類工具有rvm、rbenv、ruby-build、chruby、ruby-install等,而筆者使用的是rvm,其他工具我也沒嘗試過,歡迎大家前去嘗試。下面也就根據(jù)rvm的實際使用展開:

如果沒有安裝rvm,打開終端,安裝rvm

安裝rvm成功后,安裝多個版本的ruby,你需要幾個版本的Cocoapods,就安裝幾個版本的ruby(數(shù)量不要太多,原因后面會講到)

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

想用哪個版本的Cocoapods,就切換到相應的ruby版本就行了(rvm use命令)

(可選步驟)用rvm給用到的ruby加上別名(rvm alias系列命令)

是不是有點兒傻?是的,這是最笨的方法。其實使用rvm還可以用到gemset,這樣的話,就可以只安裝一個ruby版本,但是擁有多個gem集了。步驟也很簡單:

使用下面這行命令同時創(chuàng)建三個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就是實現(xiàn)第二種方案的關鍵。具體步驟如下:

安裝Bundler:Bundler本身就是一個gem,通過gem install bundler命令即可安裝

類似Cocoapods的Podfile文件,我們需要創(chuàng)建一個Gemfile文件,文件位置和Podifle所在位置相同即可。(通過在項目主目錄下執(zhí)行bundle init命令也可)

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

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

和pod install一樣的,執(zhí)行bundle install

想要運行剛剛Bundler安裝的cocoapods的話,在相應位置,執(zhí)行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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容