Andy矢倉

老板 来杯董小姐 去冰 少糖 多放点小姐

曾梦想 仗贱走天涯 看尽女人和繁华


Failed to import bridging header 的奇葩解决方案

本人是个升级控,只要有需要升级的看看日志没啥问题就开整,等了大半年的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新工程,得到如下的煞笔提示:



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



我踏马升级之前都是好的,工程配置和文件肯定是好的啊,看到各种复制粘贴的答案那叫一个暴躁,作为程序狗这个时候必须点根烟冷静一盘,突然定睛一看其实不是找不到桥接文件,而是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一盘就好了。

最近的文章

UITableViewCell - 自适应速成大法

原文地址:https://www.raywenderlich.com/129059/self-sizing-table-view-cells转载地址:http://www.rockerhx.com/2016/12/12/2016-12-12-Self-sizing-Table-View-Cells/ 最近滚回成都忙房子的事情,一直没时间更新,今天在群里开到好多人在聊很多培训机构都已经辞掉iOS培训老师,关闭iOS培训课程。这尼玛回想在乔帮主时代,开发iOS还是件可以装好几年逼,而如今,日落黄昏啊。纵观近几年,有太多培训机构当搅屎棍进来瞎掺和贵国的全民创业,伪造简历不说,那帮菜鸟的技术真的是辣眼睛,卧槽,好像跑偏了,今天不是来申讨培训党的,我们是正经教程,还是回到主路继续开车~~~ …

于  Cell, TableView, iOS 继续阅读
更早的文章

UIView transitionFromView导致子视图Constraints失效

项目开发需要实现一个简单的效果,一个音乐专辑,需要实现定时反复3D旋转的效果,这个效果很简单,利用iOS自带的动画接口对应的Flip动画即可,效果如下: 开发的时候用Xib管理专辑两个子View,在使用UIView快速动画接口1+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^ __nullable)(BOOL finished))completion; 和UIViewAnimationOptionTransitionFlipFromLeft搭配使用的时候出现第一个奇怪的问题:动画执行之后在使用UIViewAnimationOptionTransitionFlipFromRight反转翻转效果出现的情况就是翻转一般View消失了,经过调试后发现,因为是使用Xib管理,所以Property声明是weak,就像这样:1@property (weak, nonatomic) IBOutlet UIView *coverContainer; 所以fromView对应的子视图被系统管理在动画执行之后就被释放掉了,导致动画反转两次之后正反两个View都消失了。 …

于  Animation, Layout 继续阅读