Xcode10和iOS12踩坑

原文同步發佈在devhy.com/2018/06/05/…ios

前言

熬夜看完了WWDC 2018,睡前電腦掛着下載Xcode10。手機裝好了iOS12,體驗了一番,感受比iOS11快多了,看了一眼各家App和我司的App,鬆了一口氣,初步看來今年應該不須要作太多的適配工做,而後就睡了。(然而, 果真不能立flag!😂)c++

早上晚到了一些,Xcode10解壓了一下,開始初步評估一下適配。emmmm,工程跑不起來了...好了果真不能低估,開幹。git

問題與解決

重複文件報錯

一上來就是build沒2秒就報錯了,看報錯的說法是有重複的info.plist。 github

xcode10_ios12_01

咱們組件化後把一些三方庫和封裝方法打成了一個私有庫。進去看了一下,咱們使用了阿里雲統計 + 推送 + Alipay,裏面確實有好幾個info.plist,刪除了就行了。xcode

xcode10_ios12_02

補充

臨時解決方案也能夠參考 掘金@來來來小牛仔 在評論中提到的:app

參考Stack Overflow中Xcode 10 Error: Multiple commands produce,修改Xcode編譯配置Xcode->File->Project Settings/Workspace Setting-> Build System -> Legacy Build System.工具

這裏定義爲臨時解決方案的緣由是:使用了Xcode10編譯的新特性而拋出錯誤,既然是編譯器的特性,那麼最好仍是接受它的報錯去修復。做爲短暫的過渡使用老的編譯方式是能夠的,長期我我的以爲是不合適的。組件化

c++.6.0.9消失了?

報錯:library not found for -lstdc++.6.0.9ui

xcode10_ios12_03

第一反應是去Build Phases裏的Link Binary With Libraries進行添加,而後發現選擇frameworks and libraries裏已經沒有了這個庫了😂,又回去看了一下Xcode9裏是有的。阿里雲

xcode10_ios12_04

可是由於以前在Xcode9上是正常跑的項目,並且咱們組件化後,依賴是在私有庫的podspec裏定義的,全局搜了下全部的podspec並無依賴過這個lib。

想起來pod isntall後會有一個Pods-xxxx.xcconfig文件,果真找到了這個-l stdc++.6.0.9,可是這邊是彙總了全部的依賴,沒法找到源頭。

xcode10_ios12_05

那若是直接在這裏刪掉這個依賴呢?是否是會爆出更清晰的錯? 答案是就以下圖,由於刪掉了這個依賴,那依賴這個lib的源碼就出現了一些調用方法的報錯,以下圖,很明顯的發現了這個叫libQYSDK.a的庫。恩,就是三方庫七魚客服了😂,趕忙聯繫了一波工具提供方。

xcode10_ios12_06

補充

臨時方案能夠參考:掘金@End 在評論區提到

將Xcode9的libstdc++6.0.9.tbd拷貝到Xcode10中使用。

感謝 掘金@vvveiii 提醒,以前在文檔裏沒有查到相關信息,剛剛再去開發者論壇中看到Where is libstdc++.6.dylib in xcode10 beta 以及 libstdc++ is not supported by the tvOS platform? 中 staff的迴應是請遷移到libc++庫。

因此Xcode10libstdc++相關的3個庫(libstdc++libstdc++.6libstdc++6.0.9)應該都是被完全廢棄了,若是你使用的三方庫中有依賴,請儘快和提供方溝通,告知他們遷移吧。若是本身開發使用,也儘快考慮遷移的事宜吧。

Copy Pods Resources失效

通過上面一波操做後,終於編譯經過了,也跑起來,就在覺得一切都正常起來的時候,忽然 崩!潰!了!

一看報錯緣由,是Profile.StoryBoard沒有找到,咱們作了組件化後不少資源文件是在各自的pod裏的,理論上這個sb應該在執行Copy Pods Resources後被copy到在*.app的包裏

xcode10_ios12_07

因而去查看了一下編譯後生成的Product,全部組件庫的資源文件 都!不!在!

懷疑是這個指令沒有執行,而後clear從新編譯,盯着編譯過程。果真,只執行了Check Pods Manifest.lockEmbed Pods Frameworks

xcode10_ios12_08

看了下CocoaPods的issues裏沒有人提到這些,估計新版是好的,趕忙裝了CocoaPods-1.5.3再把Pods文件夾刪了從新install一下,就行了。

補充

確實是須要升級CocoaPods版本>=1.4.0以上,可見Github上的一個issues Xcode10 beta can't load bundles from CocoaPods


至此咱們的工程已經能正常經過Xcode 10編譯,並運行在iOS 12 beta的手機上了。

粗略對一些業務場景進行了使用,沒有發現明顯須要進行處理的問題😆

後續若是有發現有意義的問題會繼續更新~

相關文章
相關標籤/搜索