前因
因爲項目裏,需要一個圖表控件。項目的圖表部分不是重點,沒必要花費大量時間自己去寫一個,所以去找第三方的圖表。 安卓使用的是一個功能比較強大的第三方MPAndroidChart。ios裏沒有功能這麼全面的,最後我找到了這個。
Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart.
這個包含MPAndroidChart的所有功能。
當然這不是重點,重點是,這是個Swift寫的。正好練一下混編集成吧。
用pod集成Swift第三方庫,網上有很多,我就不說了。原理就是用動態庫的方式,把swift項目打成framework,再鏈接。大家想知道的自己去查一下。
關鍵在於podfile ,舉例:
platform
:ios,’8.0’
use_frameworks!
pod 'AFNetworking'
pod 'Charts'
項目中#import<>方式導入的pod內第三方會報錯 改爲#import"" 或@import即可。
正文
集成好了之後,運行的時候報出這樣的問題。
objc[3524]: Class AFCachedImage is implemented in both /private/var/containers/Bundle/Application/531B5E93-B456-4642-BBA6-0A8F63E43D85/Inroad.app/Frameworks/AFNetworking.framework/AFNetworking and /var/containers/Bundle/Application/531B5E93-B456-4642-BBA6-0A8F63E43D85/Inroad.app/Inroad. One of the two will be used. Which one is undefined.
objc[3524]: Class AFAutoPurgingImageCache is implemented in both /private/var/containers/Bundle/Application/531B5E93-B456-4642-BBA6-0A8F63E43D85/Inroad.app/Frameworks/AFNetworking.framework/AFNetworking and /var/containers/Bundle/Application/531B5E93-B456-4642-BBA6-0A8F63E43D85/Inroad.app/Inroad. One of the two will be used. Which one is undefined.
仔細看了一下所有的pod第三方文件都有類似報錯。貌似是重複了。去網上找了半天,說的方法都不好使。
我自己肯定不會重複。於是就想到pod的問題。我猜測是pod改成framework編譯方式,但是原來的方式也保留了,所以造成重複。新建了一個項目,用framework的方式集成了幾個第三方。沒有類似錯誤。通過對比找到了問題。
問題出在other linker flags。之前的編譯方式是這樣寫的
-l"AFNetworking"
新工程裏是這樣的
-framework
"AFNetworking"
把所有第三方改掉,問題解決。