一、 libstdc++ 庫
項目用到了c++,依賴了libstdc++.tbd和libstdc++.6.0.9.tbd,導致整個工程編譯不通過,報出Undefined symbols,C++ 的 List 找不到了,原因是蘋果在XCode10和iOS12中移除了libstdc++這個庫,由libc++這個庫取而代之,蘋果的解釋是lib轉載自斗玩網stdc++已經標記為廢棄有5年了,建議大家使用經過了llvm優化過并且全面支持C++11的libc++
庫。
網上看到其他兄dei用Xcode9里面的導入到Xcode10
拷貝過去后,你就可以在新XCode10下面看到libstdc++了,放心的添加到工程里
顯然,這方法并不是我們老中醫的套路
正確解決辦法
如果你自己的業務模塊使用了libstdc++,那么就把模塊代碼重新調整為依賴libc++,然后重新檢查是否存在問題,重新編譯
如果你引用的三方庫使用了libstdc++,那么向三方庫尋求支持,進行升級
https://juejin.im/post/5b1634f0f265da6e61788998
問題與解決
重復文件報錯
一上來就是build沒2秒就報錯了,看報錯的說法是有重復的info.plist。
<article data-v-13f76525="" itemscope="itemscope" itemtype="http://schema.org/Article" class="article" data-v-3f216172="">
一上來就是build沒2秒就報錯了,看報錯的說法是有重復的info.plist。
<figure><figcaption></figcaption>
</figure>
我們組件化后把一些三方庫和封裝方法打成了一個私有庫。進去看了一下,我們使用了阿里云統計 + 推送 + Alipay
,里面確實有好幾個info.plist
,刪除了就好了。
<figcaption></figcaption>
</figure>
補充
臨時解決方案也可以參考 掘金@來來來小牛仔在評論中提到的:
參考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.9
<figcaption></figcaption>
</figure>
第一反應是去Build Phases
里的Link Binary With Libraries
進行添加,然后發現選擇frameworks and libraries
里已經沒有了這個庫了??,又回去看了一下Xcode9里是有的。
<figcaption></figcaption>
</figure>
但是因為之前在Xcode9上是正常跑的項目,而且我們組件化后,依賴是在私有庫的podspec里定義的,全局搜了下所有的podspec并沒有依賴過這個lib。
想起來pod isntall
后會有一個Pods-xxxx.xcconfig
文件,果然找到了這個-l stdc++.6.0.9
,但是這邊是匯總了所有的依賴,無法找到源頭。
<figcaption></figcaption>
</figure>
那如果直接在這里刪掉這個依賴呢?是不是會爆出更清晰的錯? 答案是就如下圖,因為刪掉了這個依賴,那依賴這個lib的源碼就出現了一些調用方法的報錯,如下圖,很明顯的發現了這個叫libQYSDK.a
的庫。恩,就是三方庫七魚客服
了??,趕緊聯系了一波工具提供方。
<figcaption></figcaption>
</figure>
補充
臨時方案可以參考:掘金@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++
庫。
所以Xcode10
中libstdc++
相關的3個庫(libstdc++
、libstdc++.6
、libstdc++6.0.9
)應該都是被徹底廢棄了,如果你使用的三方庫中有依賴,請盡快和提供方溝通,告知他們遷移吧。如果自己開發使用,也盡快考慮遷移的事宜吧。
Copy Pods Resources失效
經過上面一波操作后,終于編譯通過了,也跑起來,就在以為一切都正常起來的時候,突然 崩!潰!了!
一看報錯原因,是Profile.StoryBoard
沒有找到,我們做了組件化后很多資源文件是在各自的pod里的,理論上這個sb應該在執行Copy Pods Resources
后被copy到在*.app
的包里
<figcaption></figcaption>
</figure>
于是去查看了一下編譯后生成的Product,所有組件庫的資源文件 都!不!在!
懷疑是這個指令沒有執行,然后clear重新編譯,盯著編譯過程。果然,只執行了Check Pods Manifest.lock
和Embed Pods Frameworks
。
<figcaption></figcaption>
</figure>
看了下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
的手機上了。
粗略對一些業務場景進行了使用,沒有發現明顯需要進行處理的問題??
后續如果有發現有意義的問題會繼續更新~
</article>
作者:寰宇
鏈接:https://juejin.im/post/5b1634f0f265da6e61788998
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。