背景
前段時間蘋果推出了Xcode 9正式版,興沖沖地下載下來體驗,感覺編輯器顏值升高了很多,整體運行也很穩(wěn)定,但是很快發(fā)現(xiàn)一個問題,公司的庫工程在Xcode 9下編譯不過,到時候在Xcode 8.3.3下缺能編譯通過,后來因為趕項目,沒有過多的去看,前幾天閑下來了,正式去搞這個編譯不過的問題。
原因
廢話不多說,過程也不描述。
其實很簡單,錯誤就指向AVFoundation框架下面聲明在AVMediaFormat.h下一個枚舉:
typedef NSString* AVMediaType NS_EXTENSIBLE_STRING_ENUM;
然而,在FFmpeg 3.x版本下,avcodec頭文件中也聲明了一個枚舉類型:
enum AVMediaType...
這就是導(dǎo)致這個編譯錯誤的罪魁禍?zhǔn)住?/p>
解決辦法
還能怎么辦,AVFoundation改不了,就只能改FFmpeg的源碼咯。
把FFmpeg的源碼拖進編輯器,全局搜索AVMediaType,加個前綴就好。這里有個地方要注意,F(xiàn)Fmpeg源碼中有一個avfoundation.m的文件,里面的AVMediaType是引用AVFoundation框架下的AVMediaType枚舉,是不能更改的,不然編譯修改后FFmpeg源碼就會報錯。
最后,把原來工程里邊的FFmpeg相關(guān)內(nèi)容替換成重新編譯好的FFmpeg靜態(tài)庫和頭文件就OK了。
那么問題來了,為啥Xcode 8不會報錯呢?...