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

使用bundle管理多版本Cocoapods之间的协助开发 使用bundle管理多版本的Cocoapods 阅读详情

需求场景

之前在集成集团的各种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 cocoapods
gem uninstall cocoapods-core
gem uninstall cocoapods-downloader
gem uninstall cocoapods-plugins
gem uninstall cocoapods-search
gem uninstall cocoapods-stats
gem uninstall cocoapods-trunk
gem 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的实际使用展开:

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

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

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

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

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

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

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

    rvm gemset create Gemset0 Gemset1 Gemset2
    
  2. 使用rvm gemset use Gemset1命令来使用“Gemset1”这个gem集

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

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


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

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

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

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

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

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

    source "https://rubygems.org"
    gem 'cocoapods', '0.35.0'
    
  4. 和pod install一样的,执行bundle install

  5. 想要运行刚刚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"
    

    效果:
    _1
    可以看到,每次输入命令前,我们都可以知道当前使用的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】Fastlane一键打包上传到TestFlight、蒲公英 废话不多说,能知道fastlane的,代表您已经对fastlane的用处有了初步了解,并且想使用在自己项目中,本文只适用于iOS项目的fastlane配置(Android端未验证),直接开始配置。 阅读详情

相关推荐

关于iOS的CocoaPods版本冲突的解决方案

意思是,安装了CocoaPods,但它不工作。如果安装CocoaPods的Ruby版本与用于调用它的版本不同,就会发生这种情况。1,首先查看CocoaPods的版本。

xiangzhihong8的专栏 1666

iOS自动化测试方案及其环境搭建 - Cucumber

什么是Cucumber? Cucumber 是一个能够理解用普通语言描述的测试用例的行为驱动开发(BDD)的自动化测试工具,用Ruby**编写,支持Java和·Net等多种开发语言。

人生不怕起点低,就怕没追求 1100

论文阅读--射频电源在半导体领域的应用

射频电源(RF Power Supply)是能够输出300kHz~300GHz正弦波电压的高频交流电源,在半导体制造领域,射频电源的典型工作频率范围为400kHz∼60 MHz,主要由射频发生器(功率源)、匹配器及配套控制电路组件构成,其关键组件包括变压器与电抗器、晶闸管、绝缘栅双极型晶体管(IGBT)、钣金件、铜材及各种电子元器件。射频电源是刻蚀和薄膜沉积工艺的核心,主要用于产生等离子体,以增强气体反应活性,其性能直接影响反应腔体内等离子体的浓度、均匀性和稳定性。

伊丽莎白的学习之路 2337

iOS实现pod库以framework集成,提高Xcode编译效率

iOS开发过程中,随着项目的业务复杂度不断提高,引入的第三方库也逐渐增多,之前是通过源码的形式集成进行编译,每次切换分支,或者切换scheme时,编译时间特别的长,严重的影响了开发效率。最近通过cocoapod插件的形式实现了通过framework的形式集成pod库 主要原理使用cocoapod插件cocoapods-binary将pod库在pod install的时候编译成framework. 1 安装 bundler sudo gem install bundler 2 创建gemfile .

BianHuanShiZhe的专栏 777

多雷达协同探测技术研究进展:认知跟踪与资源调度算法

源自:雷达学报作者:易伟 袁野 刘光宏 葛建军 孔令讲 杨建宇雷达是信息感知的千里眼,具有极高的军用和民用价值,广泛应用在防空预警、遥感测绘、反恐维稳等领域[1–5]。雷达信息获取与探测技术也一直是大国竞相抢占的前沿技术,同时是信息科学的重要组成部分。随着科学技术不断进步,先进电子对抗装备的不断问世和广泛列装,雷达的生存与发展正面临日益严峻的挑战。从生存环境上看,雷达面临通信等各类民用电磁干扰以及复杂的军用电磁干扰;从探测对象上看,集群、微弱、隐身、高空、低空等多样化目标的出现也给雷达探测与识别带来困难。

renhongxia1的博客 2782

【chatgpt代码系列】磁导航纠偏算法推导

例如,可以根据AGV偏离路径的方向和距离,计算出需要进行的修正角度和移动距离,然后通过控制算法实现对AGV的纠偏。具体来说,磁导航AGV的行驶是通过磁场传感器感知地面磁场信号,然后根据信号的强度和方向来确定AGV的位置和方向,进而控制AGV的行驶。但是,在实际应用中,由于地面磁场信号的变化和干扰等因素,磁导航AGV可能会出现偏离路径的情况,导致行驶不稳定甚至出现误差。磁导航AGV纠偏公式是通过对AGV行驶中偏离路径的原因进行分析,结合磁导航AGV的工作原理和控制算法,推导出来的。假设AGV的目标方向为。

少磊的博客 2806

Mac 上 Ruby、gem、rvm、CocoaPods 四者关系通俗讲清楚

Homebrew 是 Mac(还有 Linux)上最主流的第三方软件包管理器。作用: 一台电脑安装。

qq_32587659的博客 269

【关于四足机器人那些事】足端轨迹规划-八次多项式轨迹

系列文章目录 文章目录系列文章目录前言一、多项式曲线二、八次多项式曲线总结 前言 在四足机器人的研究中,有一个很关键的问题,就是如何减少足端在触地瞬间的冲击,避免把机器人把自己给蹬倒了?这时候就需要一个合理的足端轨迹规划。本篇将会介绍几种足端轨迹。 本文将对四足机器人的足端轨迹进行规划。将数学中的复合摆线和多项式曲线引入到足端轨迹的规划中,根据零冲击原则[2],规划出 3 条满足要求的足端轨迹,包括: 复合摆线轨迹 八次多项式轨迹 分段五次多项式轨迹 本篇先介绍 - 八次多项式轨迹 一、多项式曲

LiuZ的博客 2954

解锁CocoaPods:iOS开发依赖管理神器

CocoaPods 作为 iOS 开发中强大的依赖管理工具,极大地简化了第三方库的集成过程,显著提高了开发效率。通过它,我们可以轻松管理项目中的各种依赖,避免繁琐的手动操作和版本冲突问题。从安装配置到日常使用,尽管可能会遇到一些小问题,但只要掌握了正确的方法,都能迎刃而解。希望大家通过这篇教程,能够熟练掌握 CocoaPods 的使用技巧,将其更好地运用到实际项目开发中,让开发之路更加顺畅。如果你在学习过程中有任何疑问或心得,欢迎在评论区留言分享,让我们一起交流进步。

大雨淅淅的博客 1362

基于立创开源ESP32步进电机驱动板硬件设计与优化实践

本文详细介绍了基于立创开源平台的ESP32步进电机驱动板硬件设计与优化实践。重点解析了ESP32-PICO-D4与A4950驱动芯片的选型搭配、电源电路噪声隔离、PCB布局布线技巧以及保护电路设计,为开发者提供了从原理图到PCB的完整优化方案,有效提升驱动板的性能与稳定性。

7z8x2c4v6b9的博客 645

SLUB DEBUG 检测slab 内存泄漏

文章介绍如何定位linux 内核中slab 内存泄漏。

一叶知秋的博客 1489

ruby 、gem 和 cocoapods的联系与区别

名称类型功能Ruby编程语言运行脚本、解析文件、操作 Xcode/DartgemRuby 包管理器安装、管理 Ruby 库或工具CocoaPodsRuby gemiOS 依赖管理工具,通过 Ruby/gem 安装CocoaPods 是一个 Ruby gemgem 是 Ruby 的工具,用来安装/管理 CocoaPodsRuby 是语言,运行 gem、运行脚本Ruby (语言)↓gem (包管理器)↓CocoaPods (gem 包,依赖管理工具)

u010194271的博客 578

仿真模型简单介绍

同时,各种以伯克利的Spice仿真程序的算法为核心的商用Spice电路仿真工具也随之产生,运行在PC和UNIX平台,许多都是基于原始的SPICE2G6版的源代码,这是一个公开发表的版本,它们都在Spice的基础上做了很多实用化的工作,比较常见的Spice仿真软件有HSpice、Pspice、Spectre、Tspice、SmartSpcie、IsSpice等,虽然它们的核心算法雷同,但仿真速度、精度和收敛性却不一样,其中以Synopsys公司的Hspice和Cadence公司的Pspice最为著名。...

小幽余生不加糖 8001

IOS 开发学习十八 包管理工具 CocoaPods的使用

一、简介 开发IOS应用时,经常会用到一些第三方开源类库,如JSONKit、AFNetWorking、QRCode等。一个类库可能还会引用其它类库。手动去一个个加载就显得比较麻烦。而CocoaPods就是用来解决类库引用总是的,它类似于PHP上的Composer、JAVA上的Maven,也许与Linux平台的apt-get命令也有相似之处。 官网地址: https://cocoapods.o...

猿来这样-谢厂节的博客 5410

PreScan快速入门到精通第十一讲之PreScan道路标记,建筑物、抽象物体及交通标识

道路标记目的:路标是为了完善智能驾驶实验场景。用途:道路标记是附加在道路段上的。标记的大小{小、大}、颜色,以及相对于路段的位置和方向可以在属性编辑器中设置。也可以指定褪色和孔洞,类似于路段自动添加标记的配置。在GUI中的位置:作为一个预定义的库元素格式:NAMBOX: 汇编表中不知道。PreScan包含三个不同国家的标记:荷兰、日本和美国。可以通过在国家首选项中切换国家来隐藏或显示。附件道路标线附在路段上,并相对于路段原点定位。默认情况下,道路标记被固定在路段上,用小锚点表示。11.2 建筑物目...

小明师兄的博客 1804

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

CocoaPods:iOS项目依赖管理的利器

通过CocoaPods,我们可以轻松地集成各种功能强大的第三方库,避免潜在的兼容性问题,并且在需要更新库时可以更加灵活地控制版本升级。同时,CocoaPods还提供了丰富的搜索和更新功能,方便我们查找和集成最新的第三方库。安装完成后,我们可以在项目中看到一个名为Pods的文件夹,里面包含了所有集成的第三方库的源码和编译后的产物。在这个文件中,我们需要添加需要集成的第三方库的名称和版本。随着第三方库的更新和修复bug,我们可能需要更新项目中使用的库版本。在需要使用这些库的代码文件中,我们可以通过。

铭渊老黄 1578

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

iOS开发必备:NMRangeSlider的CocoaPods集成与版本管理终极指南

在iOS应用开发中,自定义控件是提升用户体验的关键要素之一。NMRangeSlider作为一款功能强大的iOS范围滑块控件,为开发者提供了灵活的双滑块选择功能。本文将为您详细介绍如何通过CocoaPods快速集成NMRangeSlider,并掌握其版本管理技巧,让您的开发工作更加高效顺畅。😊 ## 为什么选择NMRangeSlider? NMRangeSlider是一款基于UISlider设

gitblog_00943的博客 376

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Proposer与CocoaPods集成:快速部署iOS权限管理框架

**Proposer**是一款让iOS权限请求变得简单的开发框架,通过与CocoaPods的无缝集成,开发者可以在几分钟内完成权限管理功能的部署。本文将详细介绍如何通过CocoaPods快速集成Proposer,让你的iOS应用轻松实现专业级权限请求流程。 ## 为什么选择Proposer? 在iOS开发中,权限管理是保障应用合规性和用户体验的关键环节。Proposer通过封装系统权限请求AP

gitblog_00190的博客 1071

WMPageController与CocoaPods集成:版本管理与依赖配置指南

WMPageController是一款轻量级的iOS页面控制器解决方案,能够帮助开发者快速实现类似网易新闻的页面切换效果。本文将详细介绍如何通过CocoaPods实现WMPageController的版本管理与依赖配置,让你轻松掌握这一强大工具的集成方法。 ## 📦 准备工作:CocoaPods环境搭建 在开始集成WMPageController之前,确保你的开发环境中已经安装了CocoaP

gitblog_00417的博客 797

CocoaPods版本升级

查看当前 Cocoapods版本 pod --version 检查当前 ruby 源,使用 gems.ruby-china.com 源 gem source -l gem sources --remove 旧源 gem sources -a 新源 更新Cocoapods sudo gem install cocoapods 回车然后输入电脑密码 再次检查当前Cocoapods版本 ...

wenbin 4085

iOS-CocoaPods的安装和使用

iOS-CocoaPods的安装和使用 cocoaPods的作用 在开发iOS项目时,会常使用到第三方类库。   惯常做法是到GitHub上或其它网站下载一个一个的类库,然后导入到工程中,并且引入各种的类库,做各种的配置。有时候还要处理ARC与MRC的问题,很麻烦。   还有一种情况,就是当第三方类库出现升级的情况时候,还需要删掉旧的,下载新的,再重新导入。   以上问题超级的烦人。

LorneNote 507

iOS开发----cocoapods的那些事儿

目录一、了解cocoapods涉及知识点1、ruby、gem、homebrew是什么?2、cocoapods是什么?工作原理是什么?二、安装cocoapods1、确认rvm2、用rvm安装ruby环境3、确认gem4、确认ruby源5、准备就绪,开始安装三、使用cocoapods1、新建cocoapods项目2、日常使用3、公开库和私有库四、cocoapods使用中的问题和注意事项1、cocoap...

木棉V笑 1110

升级iOS CocoaPods 版本

iOS CocoaPods 版本升级

u012275249的博客 1695

CocoaPods 卸载与安装

CocoaPods应该是iOS最常用第三方类库管理工具,绝大部分有名的开源类库,都支持CocoaPods,在我们iOS应用当中基本都使用到了CocoaPods来管理第三方库, sudo gem install cocoapods --version 0.39.0

c_zzjsdmj的博客 810

iOS_Terminal、Cocoapods 常用命令

文章目录一、基础命令二、快捷键三、`gem`相关:1、管理`gem`:2、配置`gem`:3、`gem`使用四、操作`CocoaPods`:1、安装或更新:2、查看版本:3、降低版本五、使用`CocoaPods`:1、了解资源配置文件:2、导入库3、安装库:4、更新5、查看库安装版本:6、列出Podfile.lock中所有库的最新版本 Terminal常用指令 作为一个开发,多多少少都得用到Terminal,小白在此记录一些常用指令,以后遇到新的会补充,以便查用~ 一、基础命令 ls # 显示当前

mikimo的博客 1227
上一篇: Mac OS 上设置 JAVA_HOME
下一篇: 深入理解RunLoop
focusjava
博客等级 码龄14年 127粉丝 528原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值