開發(fā)中遇到的一些看似不起眼的警告,往往卻是問題的所在!
這不,這次我就遇到了這個坑,為了提醒自己不要輕易忽略警告,以此文章記錄一下,埋坑的艱辛。
我是在集成友盟分享SDK的時候,使用cocoapods導入的友盟分享組件,在命令行敲下pod install只會,安裝也完成了,就是出現(xiàn)以下一些警告,我大概瀏覽了一下,看不出所以然,就沒管, 繼續(xù)在集成。
[!] The ULife [Debug] target overrides the OTHER_LDFLAGS build setting defined in Pods/Target Support Files/Pods-ULife/Pods-ULife.debug.xcconfig'. This can lead to problems with the CocoaPods installation - Use the$(inherited)` flag, or - Remove the build settings from the target.
[!] The ULife [Release] target overrides the OTHER_LDFLAGS build setting defined in Pods/Target Support Files/Pods-ULife/Pods-ULife.release.xcconfig'. This can lead to problems with the CocoaPods installation - Use the$(inherited)` flag, or - Remove the build settings from the target.
直到我開始使用友盟的一些類庫時,使用也是沒有問題的,可當我編譯時,卻出現(xiàn)了以下錯誤信息:
Undefined symbols for architecture arm64: “OBJC_CLASS$_UMSocialManager”, referenced from: objc-class-ref in AppDelegate.o ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
咋一看,還以為是不支持64位呢,可是官方明明寫著支持64位的,也就沒有去懷疑官方,就開始各種清理緩存,重復編譯,各種谷歌,百度,可終究沒有可行的辦法。去友盟問客服,溝通成本太高,每次掉線,重新連接又是一個新人,也未能解決。
實在沒有辦法了,我又重新pod update一下,這次發(fā)現(xiàn)依然是上面提到的警告信息,這次我沒有忽略,而是仔細的看了下,大概知道了,產(chǎn)生此警告的原因是項目 Target 中的一些設置,CocoaPods 也做了默認的設置,如果兩個設置結(jié)果不一致,就會造成問題。
警告中,提示要想使用cocoapods中的設置,需要在項目中定義PODS_ROOT 和 Other Linker Flags的地方,把他們的值用$(inherited)替換掉。
大致解決辦法知道了, 開始在Build Settings中的PODS_ROOT和Other Linker Flags處進行修改,添加一項$(inherited),Other Linker Flags我這里沒有替換掉,而是添加一項,怕我本來的項也是有用的,就沒有替換。
最后修改后,我再次編譯,竟然通過了,我喜極而泣的寫下了這篇文章來記錄下這次忽略警告的教訓經(jīng)歷。
注:在我在網(wǎng)上搜索時,有說,點擊項目文件 project.xcodeproj,右鍵顯示包內(nèi)容,用文本編輯器打開project.pbxproj,刪除OTHER_LDFLAGS的地方,保存,回到 Xcode,編譯也能通過。這種刪除內(nèi)容的解決辦法,我一般不輕易使用的,所以我沒有去證實這種做法,若有興趣,你可以嘗試下,不過做好備份哦~~