最新消息:iOS编程开发交流群(6906921) ,Mac.Cocoa开发交流群(7758675) 欢迎iOS/macOS开发编程爱好及学习者加入!

RubyGems及CocoaPods安装与版本升级

macOS 天狐 18670浏览 2评论

RubyGems简介

b3a31b74-1091-4270-8ec5-14178b70b462

RubyGems是一个方便而强大的Ruby程序包管理器,Ruby的第三方插件是用gem方式来管理,非常容易发布和共享,一个简单的命令就可以安装上第三方的扩展库。特点:能远程安装包,包之间依赖关系的管理,简单可靠的卸载,查询机制,能查询本地和远程服务器的包信息,能保持一个包的不同版本,基于Web的查看接口,能查看你安装的gem的信息。

安装RubyGems

  • https://rubygems.org/pages/download 下载压缩包
  • 解压到一个文件并且cd进去
  • 通过运行ruby setup.rb安装 (你可能需要admin/root权限)

更新RubyGems镜像源

gem sources -l  //查看当前使用的镜像站
gem sources --remove https://rubygems.org/     //删除-l出现的所有镜像源地址
gem sources --add https://gems.ruby-china.com/      //增加国内ruby-china源

确保gem sources -l只有一个源

当然所有gem配置最后都是写入到了配置文件~/.gemrc中:

Jakey-mini:~ Jakey$ cat ~/.gemrc
---
:backtrace: false
:bulk_threshold: 1000
:sources:
- https://gems.ruby-china.org/
:update_sources: true
:verbose: true

SSL证书问题

rubygems.org需要翻墙,而ruby chinahttps://gems.ruby-china.org/http://gems.ruby-china.org/均可,但是https的地址存在证书验证问题。

笔者使用ruby china源最高升级到了gem到了2.6.7,使用httphttps地址均没有问题,也没有证书错误。

但是使用https://rubygems.org升级gem到了2.6.8之后,因为rubygems经常需要翻墙并且速度还不是那么令人满意,于是把源又切换回了ruby china源,这就意味着以后的软件包安装升级使用的是ruby china https源:

提示证书问题但是在功能上没有发现有什么影响:

Jakey-mini:~ Jakey$ gem sources --add https://gems.ruby-china.org/
ERROR:  SSL verification error at depth 1: unable to get local issuer certificate (20)
ERROR:  You must add /C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority to your local trusted store
ERROR:  SSL verification error at depth 2: self signed certificate in certificate chain (19)
ERROR:  Root certificate is not trusted (/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA)
https://gems.ruby-china.org/ added to sources
Jakey-mini:~ runlin$ sudo gem install cocoapods
Password:
ERROR:  SSL verification error at depth 1: unable to get local issuer certificate (20)
ERROR:  You must add /C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority to your local trusted store

升级更新RubyGems

使用gem命令升级rubygems,并不想使用homebrew升级。

gem update --system  //更新rubugems

会报如下错误

updating rubygems-update
Fetching: rubygems-update-2.6.8.gem (100%)
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

执行命令

sudo gem update --system

会报如下错误

Updating rubygems-update
ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/update_rubygems

显然macOS10.11之后,有一个新的安全功能称为Rootless,阻止你修改系统文件,如果你安装gems在/usr/local/bin 目录,不会出现问题,因为rootless不会影响这个路径:

解决办法

sudo gem update -n /usr/local/bin --system

如果 gem -v还是老版本,执行

sudo update_rubygems

测试发现使用ruby-china更新到了2.6.7,而使用https://rubygems.org会更新到2.6.8,我猜测ruby-china源与官方源应该存在同步问题

Rootless

简单的来说,Rootless 机制限制了 Root 账户的权限,使其没有了对系统的完全控制权:

受到权限影响的有以下几点:

  • 禁止直接对 /System, /bin, /sbin, /usr 目录的修改(/usr/local 目录除外),只有通过苹果开发者认证的 app 才有权限对其修改。
  • 禁止注入系统进程.,某些需要注入系统进程(finder, messages 等等系统级别的进程)的程序,debugger 无法使用了。
  • 禁止加载内核扩展(kexts), 除非它们被苹果开发者正确的签名。

这些修改最明显的好处就是:恶意 app 无法通过用户授权的方式从而获得所有系统权限了

当然, 它带来的副作用也是巨大的, 一些合法的 app 也无法获得系统权限了。 比如: HomebrewCocoaPods 以及所有需要在 /usr/bin 目录下有可执行权限的 app

安装或者升级CocoaPods等软件包

同样-n重写rubyGemsbindir目录,跳过rootless的影响

sudo gem install -n /usr/local/bin GEM_NAME_HERE

安装CocoaPods

sudo gem install -n /usr/local/bin cocoapods

activesupport requires Ruby version >= 2.2.2

有些电脑安装CocoaPods会提示升级:

Error installing cocoapods:  activesupport requires Ruby version >= 2.2.2.

but我的macOS 10.12并没有遇到

ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin16]

原因是由于CocoaPods依赖库版本配置错误(CocoaPods官方已修正),gem错误的安装了activesupport 5.x,而activesupport 5.x需要Ruby2.2.2支持

Jakey-mini:~ Jakey$ gem list

*** LOCAL GEMS ***

activesupport (5.0.0.1,4.2.7.1)
bigdecimal (default: 1.2.0)

最简单的方法是指定兼容的activesupport版本为4.2.6

sudo gem install -n /usr/local/bin activesupport -v 4.2.6
sudo gem install -n /usr/local/bin cocoapods

如果还是不行直接安装Ruby2.2.2即可!这里就不在讲了。

参考文献:Avoid use of `activesupport` version 5

 

 

转载请注明:天狐博客 » RubyGems及CocoaPods安装与版本升级

微信 OR 支付宝 扫描二维码
为天狐 打赏
非常感谢你的支持,哥会继续努力!
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 升级pod,根本不需要升级ruby。被其他网上的忽悠了。此处照着操作就ok
    kkk9年前 (2017-04-12)回复
    • 66666
      天狐9年前 (2017-04-14)回复