自從開始使用 SwiftUI 後,Xcode 內的 Preview 就變得非常重要,且它本身也是非常好用的東西,可以即時顯示 UI的樣式,大多數的情況下,可以說是完全反應結果,真的很好用。
但是在某些情況下就是無法顯示出來,會讓人覺得很煩燥,有一種解決方式是把 Perviews simulator 刪除,讓它自動重新再產生。
有不少人覺得Preview 不好用,主要有幾個理由:如果不是 M系列 CPU 根本很難出現、電腦會變慢、三步五十就壞掉…等等。我自己剛開始在用的時候,也常常不知道為什麼它會跑不出來或是壞掉,簡單去研究一下才知道一些事情,也大概知道為什麼會這樣。
如果你的 Xcode 也常常Preview 上一秒還可以用下一秒就跑不出來的話,接下來要說的方法,說不定可以解決你的煩惱!
認識一下 Xcode Preview
在使用 SwiftUI 時,Xcode 畫面右邊這區就是 Preview畫面出現的地方,在 Xcode 裡是叫 Canvas,它是用來呈現寫在 #Preview
裡的程式碼,雖然不知道是不是大家都這樣,但我習慣叫它Preview 而不是 Canvas。實際上它也是把模擬器跑起來,所以若不是使用Apple 的 M 系列核心,會很難跑起來…

Preview的一些問題
Preview 算是可以即時顯示出程式碼修改後的結果,是真的很方便,但是有時候也是會跑不出來,當然語法寫錯或是有些資料沒有給它(Preview 使用到得資料需要寫在 #Preview
裡,它是獨立的),就無法顯示出來。這樣的問題可以檢查一下基本上就可以解決了,但有時候就是明明沒什麼問題,但一直轉半天畫面都沒有出現。
在個人經驗裡有二個情況比較容易發生
- 在二、三個專案中切換
- 在不同的Git branch 中切換
實作過程中難免會需要在不同的專案或不同的 Branch 中切換,就可能會遇到上一秒還顯示出現,下一秒就顯示不出來情況。
解決方式
如果是在同一個專案發生這個情況可以先試試 Clear Build + Delete DerivedData ,也許就可以解決這個問題,但如果怎麼樣都無法解決的話,可以試試下面方式。
順便提一下,想刪除 DerivedData 可以從下圖開啟資料夾,再把資料夾裡的東西全丟到垃圾筒即可


剛剛有說到,其實Preview 也是跑模擬器,所以直接全部刪除讓它們重新產生,就和Delete DerivedData 的作法差不多,因為不確定到底是什麼問題就直接全刪,和「重開機治百病」一樣的感覺 🙂
首先,開啟Terminal,不需要移動到其他位置,然後輸入以下指令
xcrun simctl --set previews delete unavailable
會需要跑一點點時間,跑完之後會出現以下文字
Using Previews Device Set: '/Users/userName/Library/Developer/Xcode/UserData/Previews/Simulator Devices'
這樣當你重新開啟 Xcode 之後,Preview 的模擬器就會再重新Create,這樣也許可以解決 Preview 轉半天沒有出現的情況。
希望這個方式能有幫助~
最後,祝大家 Coding 愉快!!