使用 @available 導(dǎo)致舊版本 Xcode 編譯出錯。
在 Xcode 11 的 SDK 工程的代碼里面使用了 @available 判斷當(dāng)前系統(tǒng)版本陡蝇,打出來的靜態(tài)庫放在低版本 Xcode 中編譯膨报,會出現(xiàn)一下錯誤:
Undefine symbols for architecture i386:
"__isPlatformVersionAtLeast", referenced from:
...
ld: symbol(s) not found for architecture i386
從錯誤信息來看糙置,是 __isPlatformVersionAtLeast 方法沒有具體的實現(xiàn)撩匕,但是工程里根本沒有這個方法蜓堕。實際測試無論在哪里使用@available 蜂嗽,并使用 Xcode 11 打包成動態(tài)庫或靜態(tài)庫苗膝,把打包的庫添加到 Xcode 10 中編譯都會出現(xiàn)這個錯誤,因此可以判斷是 iOS 13 的 @available 的實現(xiàn)中使用了新的 api植旧。
- 解決方案
如果你的 SDK 需要適配舊版本的 Xcode辱揭,那么需要避開此方法离唐,通過獲取系統(tǒng)版本來進(jìn)行判斷:
if ([UIDevice currentDevice].systemVersion.floatValue >= 13.0) {
...
}
坑的一批