2019年10月9日 星期三

for Xamarin IOS project,在VS2019 build時發生找不到檔案的錯誤

時光荏苒,從第一次在2016年用Xamarin寫ios的應用到現在已經從vs2017到vs2019 了(下文的vs2017 & vs2019都是在windows之中,不是在mac上面的)
之前在ipad上面的app一年以來都好好的,最近因為系統加了些欄位
只好重啟專案,連帶地,開發環境也「被升級」--從vs2017升到VS2019才能用圖形設計介面去拖拉修改xib檔
Xib檔可以在vs2019裡改,可是在build時就會出錯,迫於時間緊迫,只好分頭進行--改xib檔在vs2019,而build在vs2017裡進行,然後進行社內布署,先給他們用(很好笑,我知道,但事情就是這樣解決了)

現在終於有時間來看一下之前在vs2019開啟vs2017 xamarin 方案後build的錯誤及解決之道
build時錯誤訊息如下
----------------------------------------------------------------
錯誤 System.IO.FileNotFoundException: Could not find file "/Users/john/Library/Caches/Xamarin/mtbs/builds/xoxoxoxoApp/一個很長的id/obj/iPhone/Debug/actool/bundle/??????????????????60x60@2x.png"
File name: '/Users/john/Library/Caches/Xamarin/mtbs/builds/xoxoxoxoApp/一個很長的id/obj/iPhone/Debug/actool/bundle/??????????????????60x60@2x.png'
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean anonymous, System.IO.FileOptions options) [0x00259] in /Users/builder/jenkins/workspace/build-package-osx-mono/2019-06/external/bockbuild/builds/mono-x64/mcs/class/corlib/System.IO/FileStream.cs:274
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.IO.FileOptions options) [0x00000] in /Users/builder/jenkins/workspace/build-package-osx-mono/2019-06/external/bockbuild/builds/mono-x64/mcs/class/corlib/System.IO/FileStream.cs:106
....
.......
---------------------------------------------------------------
看到????就應該猜出是中文的東西了,打開info.plist檔,看到有檔案的變數應該就是「XSLaunchImageAssets」 & 「XSAppIconAssets」了
(value分別是「Resources/媒體.xcassets/Launch 影像.launchimage」 & 「Resources/媒體.xcassets/應用程式圖示.appiconset」)

既問題錯在這,那就...來人啊,把這兩個設定屬性都給殺了
然後就build成功了,YA~
是啊,build成功了,可是之前的icon就不見了,app佈署到平板去之後,只留下一個unknow的icon,
這樣能「祭孤」嗎?當然不行.

來吧,先去方案總管視窗,找一下「資產目錄」節點,雖然我知道在vs2017內應該是有子目錄,可是在vs2019因為mac & 這裡的改版之故,「資產目錄」那個節點下面是空的,所以請用滑鼠在「資產目錄」節點點右鍵,「新增一個資產目錄」,預設值就是「Assets」,create後,檔案系統就會在專案的目錄下建立一個"Assets.xcassets"資料夾,

回到vs2019的開發環境,double click「資產目錄」->「Assets」節點,左側會出現「AppIcons」,
double click 它,系統會出現各種尺寸icon檔的對應設定介面給你選
(現在請別再把png放在中文路徑了,建議是直接把之前icon png檔放在 AppIcons.appiconset目錄再選取比較快)

設定好AppIcons之後,別忘了到info.plist把「XSAppIconAssets」變數加上去,值是「Assets.xcassets/AppIcons.appiconset」
plist檔改好,Assets.xcaseets檔也設定好了,那就存檔,重新build,佈署
這樣,你的app的icon就會出現在你的設備上了



下次,不知道又是什麼時候要大改版了,希望是很久以後的事了,
大家加油吧

(相關討論請參考這裡)