背景
前段时间苹果推出了Xcode 9正式版,兴冲冲地下载下来体验,感觉编辑器颜值升高了很多,整体运行也很稳定,但是很快发现一个问题,公司的库工程在Xcode 9下编译不过,到时候在Xcode 8.3.3下缺能编译通过,后来因为赶项目,没有过多的去看,前几天闲下来了,正式去搞这个编译不过的问题。
原因
废话不多说,过程也不描述。
其实很简单,错误就指向AVFoundation框架下面声明在AVMediaFormat.h下一个枚举:
typedef NSString* AVMediaType NS_EXTENSIBLE_STRING_ENUM;
然而,在FFmpeg 3.x版本下,avcodec头文件中也声明了一个枚举类型:
enum AVMediaType...
这就是导致这个编译错误的罪魁祸首。
解决办法
还能怎么办,AVFoundation改不了,就只能改FFmpeg的源码咯。
把FFmpeg的源码拖进编辑器,全局搜索AVMediaType,加个前缀就好。这里有个地方要注意,FFmpeg源码中有一个avfoundation.m的文件,里面的AVMediaType是引用AVFoundation框架下的AVMediaType枚举,是不能更改的,不然编译修改后FFmpeg源码就会报错。
最后,把原来工程里边的FFmpeg相关内容替换成重新编译好的FFmpeg静态库和头文件就OK了。
那么问题来了,为啥Xcode 8不会报错呢?...