主角:大概有 20 個庫git
原由:前段時間在給某 App 作組件化,發了一堆奇怪的 CocoaPods 庫,今天到了某個版本發佈,而後將這些庫引入了主工程,用測試機進行編譯 / 打包 / 提測,嗯,沒有任何問題,開心。而後發佈系統編譯打包,嗯,失敗了。編譯失敗嘛,很正常,查日誌啦。唉,打開日誌發現,並無返回任何錯誤日誌...啥狀況?調了一天,無果,找 CI 大佬們幫忙解決,而後發現打包系統是用直接下載 zip 壓縮包的方式進行編譯的,沒有走 git,咱們心想:有什麼不一樣麼,本地都能編譯成功啊?而後試了試,臥槽,真的編不過,而後爲啥不返回錯誤信息的問題也找到了,由於 Xcode 真的沒有返回錯誤信息啊喂!緩存
如上圖所示,就一句:bash
Build operation failed without specifying any errors. Individual build tasks may have failed for unknown reasons.
複製代碼
展開之後的詳情爲:服務器
Build operation failed without specifying any errors. Individual build tasks may have failed for unknown reasons.
One possible cause is if there are too many (possibly zombie) processes; in this case, rebooting may fix the problem.
Some individual build task failures (up to 12) may be listed below.
複製代碼
而後就開始了一下午的排錯之路...組件化
通過:post
一開始,咱們懷疑是本地 CocoaPods 版本和 CI 服務器的 CocoaPods 衝突致使的,而後發現服務端沒有安裝 CocoaPods,壓根不須要 pod install
操做。測試
而後咱們嘗試在本地從新 pod install
,以爲多是咱們哪裏緩存沒清除,固然,通過了半小時的掙扎後後咱們排除了這個愚蠢的想法;ui
以後咱們對比了最近的幾回提交,觀察到 Build Phases
中的 [CP] Copy Pods Resources
部分,貌似有大量的資源文件引用方式的變動,遂發現,貌似有資源文件被重複引用了唉...this
最後發現,若 CocoaPods 庫中資源文件夾(默認是 Assets)中包含 .xcassets 類型的文件,則不能使用 s.resources = '[庫名]/Assets/**/*' 遞歸引用全部文件,這樣會形成對 .xcassets 文件中資源文件的重複添加,反正因爲一系列奇怪的緣由最後會致使咱們的 CI 沒法正常編譯和打包咱們的 App。spa
這個問題十分具備隱蔽性,由於咱們在本機編譯 / 打包 / Lint / Push 是徹底沒有問題不會報任何錯誤的,因此若是資源文件夾中包含 .xcassets 類型的文件,只能指定一級目錄的包含 s.resources = '[庫名]/Assets/*' 或者麻煩一些,手動指定 / 匹配全部資源文件。
接下來的工做就簡單(並不)了,排查全部的 Pod 庫,把資源引用方式有問題的庫進行修改 / Lint / PR / 發版 / 引入,而後就浪費了一天的時間,開心(並不),🙄。
結論:原來 Xcode 還能夠在不報任何具體錯誤的狀況下強行構建失敗...
若有任何知識產權、版權問題或理論錯誤,還請指正。 https://juejin.im/post/5a67544a6fb9a01ca10b1072 轉載請註明原做者及以上信息。