[CocoaPods] copy resource 時遇到了 Failure Reason: No such file or directory 的問題

$Bug fixing meme smaller

今天下午被CocoaPods搞了很久,引用了某個 pods 後,不管怎麼修改設定,編譯時都會出現:

/aaa/bbb/ccc.xcassets: warning: Failed to read file attributes for “/aaa/bbb/ccc.xcassets"

Failure Reason: No such file or directory
/* com.apple.actool.compilation-results */

Command /bin/sh emitted errors but did not return a nonzero exit code to indicate failure

( /aaa/bbb/ccc.xcassets 當然是簡略示意路徑,原本的路徑至少超過70個字,大概有個十層,不便於閱讀)

tumblr_lwa8d1QMvx1r8uytpo1_400

一開始我以為是那個 pod 設定沒寫好,根本就沒有 ccc.xcassets 這個東西,但是後來搜尋一下,不對,這東西的確存在。

因為我是 CocoaPods 新手,所以我開始 google,但一直找不到類似的文章。

後來我開始在 XCode 裡面搜尋所有檔案,找尋所有包含 ccc.xcassets 的檔案,想找出原因,但也找不到。

仔細研究 error log,發現那個 shell script 不只複製 ccc.xcassets 這個檔案,同時還複製了十幾個其他的檔案,都沒有問題。

接著我想說,那去終端機裡面找 /aaa/bbb/ 目錄,我手動copy看看

結果 /aaa/bbb/ 目錄不存在!

奇怪了,這不合理啊,我確定 ccc.xcassets 明明就存在。

於是我開始檢查路徑,才發現一件神奇的事情

ccc.xcassets  應該是存在於

{project-path}/Pods/{pod-name}/resources/ccc.xcassets

XCode卻嘗試複製

{project-path}/{pod-name}/resources/ccc.xcassets

路徑有問題,少了一層「Pods」,當然找不到。

所以現在的問題在於,那個 copy script 在哪裡?我應該去檢查一下。

因為在 XCode 裡面找不到那個 copy script,所以我把整個專案丟給 sublime,然後搜尋全部檔案,找 ccc.xcassets 出現的位置。

找到了,大概長這樣

if [[ “$CONFIGURATION" == “Debug" ]]; then
install_resource “{pod-name}/resources/ccc.xcassets"
install_resource “{pod-name}/Localizations/en.lproj"
install_resource “{pod-name}/Localizations/es.lproj"

fi

奇怪了,這個 ccc.xcassets 的路徑設定跟其他檔案沒有不同,別的檔案複製沒有問題,他卻少了一個 Pods ?

所以我手動改成

if [[ “$CONFIGURATION" == “Debug" ]]; then
install_resource “Pods/{pod-name}/resources/ccc.xcassets"
install_resource “{pod-name}/Localizations/en.lproj"
install_resource “{pod-name}/Localizations/es.lproj"

fi

重新編譯,問題就解決了。

這是一個很奇怪的問題,解法也很怪。
我不敢打包票我的判斷一定正確,但我覺得這似乎是 CocoaPods 的 bug…
沒有道理所有檔案都用一樣的路徑寫法,只有 xcassets 檔案會出錯。

雖然這個解法有點髒,不過還是順便記錄一下,預防以後又遇到類似的問題。

也提供給可能會碰到同樣問題的朋友參考。

$Bug fixing meme smaller

Tagged with:
張貼於Moment Tagger 拍照分類記事

發表留言