模塊化平常:CocoaPods 庫資源引用問題

主角:大概有 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

  1. 一開始,咱們懷疑是本地 CocoaPods 版本和 CI 服務器的 CocoaPods 衝突致使的,而後發現服務端沒有安裝 CocoaPods,壓根不須要 pod install 操做。測試

  2. 而後咱們嘗試在本地從新 pod install,以爲多是咱們哪裏緩存沒清除,固然,通過了半小時的掙扎後後咱們排除了這個愚蠢的想法;ui

  3. 以後咱們對比了最近的幾回提交,觀察到 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 轉載請註明原做者及以上信息。

相關文章
相關標籤/搜索