iOS开发中如何管理多个版本的Cocoapods、gem
来源:互联网 发布:ucosiii软件定时器 编辑:程序博客网 时间:2024/05/02 01:57
需求场景
之前在集成集团的各种pod库时,发现如果不使用0.35.0版本的Cocoapods,就无法成功集成,所以无奈将自己机器上刚安装的最新版Cocoapods降级。可是好景不长,过了些许日子后,发现在学习swift的过程中,0.35.0的Cocoapods是不支持集成有swift的pod的。一会儿升级到最新的Cocoapods,一会儿降级到0.35.0,既耗时又容易出错,更谈不上优雅了。
具体多繁琐呢?你需要用
gem list --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)
然后,你需要一个个的卸载一遍
gem uninstall cocoapodsgem uninstall cocoapods-coregem uninstall cocoapods-downloadergem uninstall cocoapods-pluginsgem uninstall cocoapods-searchgem uninstall cocoapods-statsgem uninstall cocoapods-trunkgem uninstall cocoapods-try
然后再重新安装一遍你需要的特定版本Cocoapods
gem install cocoapods -v 0.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 gemset create Gemset0 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 install
pod 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配置如下:alias zshconfig="mate ~/.zshrc"alias ohmyzsh="mate ~/.oh-my-zsh"alias be="bundle exec"alias bp="bundle exec pod"
之后,
bundle exec pod install
就可以写成be pod install
,甚至是bp install
- iOS开发中如何管理多个版本的Cocoapods、gem
- iOS开发中如何管理多个版本的Cocoapods、gem
- iOS 如何在一个存在多个project的workspace中引入cocoapods管理第三方类库
- ios开发时,在Xcode中添加多个targets进行版本控制,管理多个相同内容的项目
- iOS库的介绍以及如何使用CocoaPods管理库(2016最新版本)
- IOS开发中CocoaPods的使用
- iOS开发中使用cocoaPods管理第三方库
- Cocoapods 执行不同的版本,安装多个版本
- cocoapods版本更新,以及多个版本的问题
- ruby gem files中版本的写法
- IOS开发中如何区分IOS版本
- IOS开发中如何区分IOS版本
- 如何在xcode中安装多个ios版本
- iOS 开发中 Versions 版本管理详解
- ios开发依赖管理的工具cocoapods安装记录
- iOS开发对于第三方类库的管理-cocoapods
- 转载ios开发如何使用Xcode的Targets来管理开发和生产版本的构建
- 如何将自定义的三方库加入到cocoapods中管理
- 关于Cocoapods安装的小细节错误
- 计算机视觉--图像导数-图像梯度向量
- 手机安全卫士02
- 素数环问题
- 数组型队列(queue)的使用(支持自定义数据类型)(C++版)
- iOS开发中如何管理多个版本的Cocoapods、gem
- HDU 1754 I Hate It 线段树
- 二叉树遍历
- iOS语言国际化
- 扣丁音乐(一)——闪屏页SplashActivity(欢迎界面)
- cmake 提示gcc或交叉编译 broken
- leetcode(1),reverse(python)
- cf 666A
- 桶排序