Bloodline's Blog Notes and thoughts from Bloodline

升级10.11后关于cocoapods xcode plugin

Comments

瞎扯

把家里的MBPR升级了10.11,之前几款软件就不能用了,国内的软件版权保护工作的确做得不错,只好google关键字”XXX(软件名) crack”,重装这几款软件。

要命的是Xcode趁我不注意竟然自动升级到传说中坑爹的7.3,懒得退回。不过有几款插件貌似不好用,VVDocumenter-Xcode重装下就OK了。可是cocoapods-xcode-plugin不能用了,提示Resolved command path for "pod" is invalid.

折腾

刚开始以为cocoapods有问题,就通过gem卸载了重装,却发现ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/pod。明明用了sudo,为何会有权限问题呢。

stackoverflow上Cannot install cocoa pods after uninstalling, results in error有解决方案:sudo nvram boot-args="rootless=0"; sudo reboot

rootless

rootless是个什么鬼?

El Capitan开始,苹果使用了系统集成保护,苹果决定第三方应用有一些永远不会被允许的事情。第三方应用相比起来更受限制。这就是rootless一词的由来,系统在某种程度上限制了管理员账号的权限。

rootless特性使得某些操作只有苹果的应用可以被许可(通过代码签名来判断)。所以第三方应用即使是运行在root权限中,有一些操作也无法完成。

说人话:默认创建的用户虽然看上去有root权限,但实际上这个root用户无法修改/System /bin /sbin /usr (except /usr/local)目录。

在早期的beta El Capitan中可以通过sudo nvram boot-args="rootless=0"; sudo reboot关闭 rootless ,但是正式版中已经禁止(即便关闭好像也不起作用)。

看到这里,我突然觉得隐隐的蛋疼,试了下gem命令,果然有问题,于是更新RubyGems:gem update --system

关于rvm

再次执行gem install cocoapods没有了权限问题,却出现activesupport requires Ruby version >= 2.2.2.

再次google,需要通过rvm来设置下ruby的环境。

执行curl -L https://get.rvm.io | bash -s stable安装rvm。

执行rvm install 2.2.2安装ruby 2.2.2版本。

执行rvm 2.2.2 --default设置ruby 2.2.2为默认ruby版本。

$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]

再次执行gem install cocoapods成功(而且不用再加sudo了)。

并且在项目目录下执行pod install成功。

cocoapods xcode plugin

回到Xcode,菜单中选择pod install,还是有错误。于是命令行中执行where pod,原来此时的pod在rvm目录下。

$ where pod
/Users/BloodLine/.rvm/gems/ruby-2.2.2/bin/pod

将菜单中的GEM_PATH后添加~/.rvm/gems/ruby-2.2.2/bin,再次选择pod install,成功。

重装Homebrew

在此之前先google足够10.11 Homebrew的信息,包括stackoverflow。

卸载Homebrew:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

安装Homebrew:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

上一步如果有权限问题:

sudo chown -R $(whoami):admin /usr/local

参考:

About OS X System Integrity Protection (SIP, Rootless)

‘Rootless’: What it is, and why you shouldn’t care.

What is the “rootless” feature in El Capitan, really?