本人是个升级控,只要有需要升级的看看日志没啥问题就开整,等了大半年的Cocoapods
的1.0.0
终于出正式版本了,介于0.38.0
到0.39.0
的痛苦过程,心里有点小担心,不过那时还好是Objective-C
,问题出在配置上都可以stackoverflow
解决,这次要面对这次还要多面临Swift
的挑战,废话太多了,直接开整。
升级的过程还是老套路:
sudo gem install cocoapods
老套路还是还是老问题/usr
下路径权限不够,试着改变权限:
sudo chown $(whoami):admin /usr/local && sudo chown -R $(whoami):admin /usr/local
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
这个可写的路径来操作,废话不多说,直接上命令:
sudo gem install -n /usr/local/bin cocoapods
这个命令也是大多数人多于安装Cocoapods
的1.0.0
版本报权限问题给出的解决方案,但是这里有个小问题,由于以前的老版本是默认安装在/usr/bin
,我们这要操作之后就有两个pod
,实际使用的时候系统就傻傻分不清了,很多人觉得改下系统的bash
再source
不久好了,其实我最讨厌这种做法,我的原则不到万不得已不做额外的操作,经过我一晚上的跳坑,得到的解决方案就是先删除老版本的Cocoapods
,然后直接用上面的命令安装即可。
新版是安装好了,那必须得pod update
一下啊,不然咋体验升级的快感,你说是不,结果可想而知的肯定是报错,提示需要指明target
才能执行pod
,对于新版本的严谨我很欣赏,于是乎就得改改我们老的Podfile
:
platform :ios, '8.0'
use_frameworks!
target 'EShop' do
pod 'xxx'
end
use_frameworks
加不加看你自己需求,如果是版本都用到8.0
了还不用动态库就是脑壳有屎,不知道动态库和静态库的自己查资料。或者说还有人在8.0
下坚持写Swift
的我也很是佩服。
Bingo
,果不其然,这盘顺利update
了之后Build
新工程,得到如下的煞笔提示:
踏马的提示桥接文件
找不到,于是乎上stackoverflow
各种找答案啊,最后得来的都是让确保如下配置是否正确:
我踏马升级之前都是好的,工程配置和文件肯定是好的啊,看到各种复制粘贴的答案那叫一个暴躁,作为程序狗这个时候必须点根烟冷静一盘,突然定睛一看其实不是找不到桥接文件
,而是failed to import bridging header
导入出错,仔细分析了一下踏马的原来是找不到头文件儿导致桥接文件
导入出错。由于Cocoapods
新版本的问题是根据target
来install
的,所以在头文件导入上较以前严谨太多了,所以上述的解决方案就是用库的方式引入
,不要用相对导入
,学过C
的应该在第一课的时候就知道这个事情了,所以上述问题就这么改:
#import "MJExtension.h"
改为
#import <MJExtension/MJExtension.h>
其实这种问题在纯Objective-C
项目里即便是新版本也没有问题的,主要是1.0.0
以后的Cocoapods
强制的target
的概念,又由于Objective-C
和Swift
混编的项目需要xxx-Bridging-Header.h
这个桥接文件
,所以import
的时候必须要用库
的引入方式才能正常导入。
其实平时只要是用到库,不管是静态还是动态我都是用<>
库的方式来导入,为啥这里会煞笔呢,那就安利一款快速添加头文件的插件,对于写纯Objective-C
的同学来说是很提高效率的插件:Peckham
PS:不过Xcode 7.3
以后因为Xcode
自身的原因,猜测可能是项目解析慢或者是预处理不及时,导致像FuzzyAutocomplete
这类插件都有点力不从心了,7.3
以后的版本使用Peckham
也开始蛋疼起来,如果是新添加的.h
和.m
文件找不到,直接Command + B
build一盘就好了。