LazyBlog

發生錯誤產生條件

  1. 專案內有多的Target (不確定是不是因為這樣,但基本上不會需要多個Target)
  2. 共用到了相同的一些項目圖片也整個複製過去的混亂情況

原因

圖片檔案名稱不同,但使用fastlane打包時提示CompileAssetCatalog的錯誤問題
基本上從瞎掰的角度來說,Xcode應該是認知到「欸~你的專案底下有兩張一樣的圖片噢!」
但明明已經修改了檔案名稱為什麼還會被這樣認為呢?
因為Xcode認的是圖片背後的hash!
上述所說的都是我個人亂猜

驗證

建立一個資料夾並且放一張圖片

  • 使用指令查看該圖片的hash
1
shasum 1.jpeg

結果如圖

複製該張圖片到同一個資料夾,系統會替你加上「拷貝」兩個字

  • 使用指令查看該拷貝圖片的hash
1
shasum 1拷貝.jpeg

就算檔案名稱不同,兩個hash是一樣的,Xcode就會認為是同一張圖片?

解決

  • 安裝ImageMagick
1
brew install imagemagick
  • 修改hash(但我覺得這個指令背後做的事情是有壓縮的,但不影響)
  • 修改拷貝圖片的hash
1
find . -iname 1拷貝.jpeg -exec echo {} \; -exec convert {} {} \;

再次驗證可以清楚的看到兩張圖片的hash確實已經不一樣了

  • 如果想要一次性修改當前目錄下的所有圖片
  • 注意指令內的附檔名 ex *.png or *.jpeg
1
find . -iname "*.png" -exec echo {} \; -exec convert {} {} \;

 評論