模組化日常:CocoaPods 庫資源引用問題

EyreFree發表於1970-01-01

主角:大概有 20 個庫

起因:前段時間在給某 App 做元件化,發了一堆奇怪的 CocoaPods 庫,今天到了某個版本釋出,然後將這些庫引入了主工程,用測試機進行編譯 / 打包 / 提測,嗯,沒有任何問題,開心。然後釋出系統編譯打包,嗯,失敗了。編譯失敗嘛,很正常,查日誌啦。唉,開啟日誌發現,並沒有返回任何錯誤日誌...啥情況?調了一天,無果,找 CI 大佬們幫忙解決,然後發現打包系統是用直接下載 zip 壓縮包的方式進行編譯的,沒有走 git,我們心想:有什麼不同麼,本地都能編譯成功啊?然後試了試,臥槽,真的編不過,然後為啥不返回錯誤資訊的問題也找到了,因為 Xcode 真的沒有返回錯誤資訊啊喂!

模組化日常:CocoaPods 庫資源引用問題

如上圖所示,就一句:

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.
複製程式碼

然後就開始了一下午的排錯之路...

經過

  1. 一開始,我們懷疑是本地 CocoaPods 版本和 CI 伺服器的 CocoaPods 衝突導致的,然後發現服務端沒有安裝 CocoaPods,壓根不需要 pod install 操作。

  2. 然後我們嘗試在本地重新 pod install,覺得可能是我們哪裡快取沒清除,當然,經過了半小時的掙扎後後我們排除了這個愚蠢的想法;

  3. 之後我們對比了最近的幾次提交,觀察到 Build Phases 中的 [CP] Copy Pods Resources 部分,貌似有大量的資原始檔引用方式的變更,遂發現,貌似有資原始檔被重複引用了唉...

最後發現,若 CocoaPods 庫中資原始檔夾(預設是 Assets)中包含 .xcassets 型別的檔案,則不能使用 s.resources = '[庫名]/Assets/**/*' 遞迴引用所有檔案,這樣會造成對 .xcassets 檔案中資原始檔的重複新增,反正由於一系列奇怪的原因最後會導致我們的 CI 無法正常編譯和打包我們的 App。

這個問題十分具有隱蔽性,因為我們在本機編譯 / 打包 / Lint / Push 是完全沒有問題不會報任何錯誤的,所以如果資原始檔夾中包含 .xcassets 型別的檔案,只能指定一級目錄的包含 s.resources = '[庫名]/Assets/*' 或者麻煩一些,手動指定 / 匹配所有資原始檔。

接下來的工作就簡單(並不)了,排查所有的 Pod 庫,把資源引用方式有問題的庫進行修改 / Lint / PR / 發版 / 引入,然後就浪費了一天的時間,開心(並不),?。

模組化日常:CocoaPods 庫資源引用問題

結論:原來 Xcode 還可以在不報任何具體錯誤的情況下強行構建失敗...


如有任何智慧財產權、版權問題或理論錯誤,還請指正。
https://juejin.im/post/5a67544a6fb9a01ca10b1072
轉載請註明原作者及以上資訊。

相關文章