(Pod造成的)One of the two will be used. Which one is undefined.


前因

因爲項目裏,需要一個圖表控件。項目的圖表部分不是重點,沒必要花費大量時間自己去寫一個,所以去找第三方的圖表。 安卓使用的是一個功能比較強大的第三方MPAndroidChart。ios裏沒有功能這麼全面的,最後我找到了這個。

danielgindi/Charts

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"

把所有第三方改掉,問題解決。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章