本人是个升级控,只要有需要升级的看看日志没啥问题就开整,等了大半年的Cocoapods1.0.0终于出正式版本了,介于0.38.00.39.0的痛苦过程,心里有点小担心,不过那时还好是Objective-C,问题出在配置上都可以stackoverflow解决,这次要面对这次还要多面临Swift的挑战,废话太多了,直接开整。

升级的过程还是老套路:

1
sudo gem install cocoapods

老套路还是还是老问题/usr下路径权限不够,试着改变权限:

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

改变/usr/local的权限没有问题,新提示的/usr/bin通过这种方式没办法改权限,由于OS X EI Capitan安全措施Rootless机制,导致/usr/bin不能随意写文件操作,但是想改还是有办法的,网上去年就贴出了这个解决方法,就是在安全模式下操作终端命令,这里不想误导非程序狗去操作这个大风险的玩意儿,所以这里我简单给出苹果官方解决方案,看看就好,我就不详细介绍了,有需要的搜索关键字Operation not permitted

由于我洁癖比较严重,既然官方不让搞咱们就另辟蹊径,对于gem来说,其实是可以在install的时候使用-n参数来指定路径的,那么这里我们就选择/usr/local/bin这个可写的路径来操作,废话不多说,直接上命令:

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

这个命令也是大多数人多于安装Cocoapods1.0.0版本报权限问题给出的解决方案,但是这里有个小问题,由于以前的老版本是默认安装在/usr/bin,我们这要操作之后就有两个pod,实际使用的时候系统就傻傻分不清了,很多人觉得改下系统的bashsource不久好了,其实我最讨厌这种做法,我的原则不到万不得已不做额外的操作,经过我一晚上的跳坑,得到的解决方案就是先删除老版本的Cocoapods,然后直接用上面的命令安装即可。

新版是安装好了,那必须得pod update一下啊,不然咋体验升级的快感,你说是不,结果可想而知的肯定是报错,提示需要指明target才能执行pod,对于新版本的严谨我很欣赏,于是乎就得改改我们老的Podfile

1
2
3
4
5
6
7
platform :ios, '8.0'
use_frameworks!

target 'EShop' do
pod 'xxx'

end

use_frameworks加不加看你自己需求,如果是版本都用到8.0了还不用动态库就是脑壳有屎,不知道动态库和静态库的自己查资料。或者说还有人在8.0下坚持写Swift的我也很是佩服。

Bingo,果不其然,这盘顺利update了之后Build新工程,得到如下的煞笔提示:

![](/images/2016-05-31-Failed-Import-Bridging-Header/1.png)

踏马的提示桥接文件找不到,于是乎上stackoverflow各种找答案啊,最后得来的都是让确保如下配置是否正确:

![](/images/2016-05-31-Failed-Import-Bridging-Header/2.png)

我踏马升级之前都是好的,工程配置和文件肯定是好的啊,看到各种复制粘贴的答案那叫一个暴躁,作为程序狗这个时候必须点根烟冷静一盘,突然定睛一看其实不是找不到桥接文件,而是failed to import bridging header导入出错,仔细分析了一下踏马的原来是找不到头文件儿导致桥接文件导入出错。由于Cocoapods新版本的问题是根据targetinstall的,所以在头文件导入上较以前严谨太多了,所以上述的解决方案就是用库的方式引入,不要用相对导入,学过C的应该在第一课的时候就知道这个事情了,所以上述问题就这么改:

1
#import "MJExtension.h"

改为

1
#import <MJExtension/MJExtension.h>

其实这种问题在纯Objective-C项目里即便是新版本也没有问题的,主要是1.0.0以后的Cocoapods强制的target的概念,又由于Objective-CSwift混编的项目需要xxx-Bridging-Header.h这个桥接文件,所以import的时候必须要用的引入方式才能正常导入。

其实平时只要是用到库,不管是静态还是动态我都是用<>库的方式来导入,为啥这里会煞笔呢,那就安利一款快速添加头文件的插件,对于写纯Objective-C的同学来说是很提高效率的插件:Peckham

PS:不过Xcode 7.3以后因为Xcode自身的原因,猜测可能是项目解析慢或者是预处理不及时,导致像FuzzyAutocomplete这类插件都有点力不从心了,7.3以后的版本使用Peckham也开始蛋疼起来,如果是新添加的.h.m文件找不到,直接Command + Bbuild一盘就好了。