[iOS] TemporaryWorkaround for Black Launch Screen Bug After Several Launches
暫時 Workaround 解決 XCode Build & Run App 卡黑屏問題
Photo by Etienne Girardet
問題
不知道是 XCode 幾開始 (應該是 14?) 有些專案在 Build & Run 到模擬器多次之後會出現卡死在黑屏的問題,狀態卡在 Launching Application… 就沒有反映了;重新 Build & Run 也沒用,需要手動砍掉整個模擬器讓他重啟才能修復。
XCode 14.1: Stuck at “Launching Ap. . . | Apple Developer Forums Hello team, On Xcode 14.1, After building the project and when the simulator launches, it shows blank black screen… forums.developer.apple.com
新專案、新的專案設定比較少遇到這問題;舊的專案比較常踩到,但舊專案礙於歷史悠久、設定複雜,查網路資料也查不到確定的 Root Caused,多半推測是 XCode Bug (or M1?);但是這個問題實在太煩了,時常 Build & Run 要看成果,結果一片黑暗,要整個重來過,每次大概要浪費個 1–2 分鐘,很中斷開發。
Workaround
這邊提供一個山不轉路轉的 Workaround,思路是既然避不開黑屏問題,並且黑屏不會出現在模擬器第一次啟動的 Build & Run,所以我們只要確保每次 Build & Run 都是全新重開過的模擬器即可。
首先我們要取得你想要執行的模擬器的 Device UUID
在 Terminal 執行:
1
xcrun simctl list devices
- 找到你想用的模擬器裝置及它的 Device UUID
- 這邊以我的 iPhone 15 Pro (iOS 17.5) 為例 Device UUID =
08C43D34–9BF0–42CF-B1B9–1E92838413CC
再來我們新增一個 auto-reboot.sh
Shell Script 檔案
cd /你想放此 Script 的目錄/
vi auto-reboot.sh
貼上以下 Scirpt:
- 將
[Device UUID]
替代成你想用的模擬器 Device UUID - 記得如果模擬器有更換要改這個腳本的 Device UUID,否則就無效了
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
## Use the command below to find the Device UUID of the simulator you want to use:
## xcrun simctl list devices
# shutdown simulator
xcrun simctl shutdown [Device UUID]
# reboot simulator
xcrun simctl boot [Device UUID]
- 腳本邏輯簡單粗暴,就是 關掉&重啟 你想用的模擬器
ESC
&:wq!
調整 auto-reboot.sh
執行權限:
1
chmod +x auto-reboot.sh
回 XCode 設定
因為每個人習慣用的模擬器不同,因此我是設定在 XCode Behaviors,不會更動到專案的設定,也不會上到 git 影響團隊其他夥伴;但如果要簡單、全團隊同步也可以直接設定在 Scheme -> Build -> Pre-actions -> sh /你想放此 Script 的目錄/auto-reboot.sh
。
XCode Behaviors
- XCode -> Behaviors -> Edit Behaviors…
- 找到
Running
區塊 - 選擇
Completes
選項 Completes 時機 = Stop or Rebuild - 右邊勾選
Run
- 選擇
Choose Script…
選擇剛剛新建的auto-reboot.sh
檔案位置 - 完成
原理與結語
Demo 是乾淨專案所以 Build 時間很短
我們運用 XCode Behaviors 在 Completes (Stop or Rebuild) 的時機點重開模擬器,時間在開始 Build 之前,幾乎都能在 Build -> Run 結束前完成重啟。
如果狂按重開的確也有機會重啟太慢,導致 Run 找不到目標而出現另一種黑屏,不過這情況就不考慮了,至少這方案能在日常正常使用保持 Build & Run App 正常執行。
對速度的影響我覺得還好,因為 Build & Run 本身也需要些時間,這些時間很夠模擬器重開了。
有任何問題及指教歡迎 與我聯絡 。
===
View the English version of this article here.
本文首次發表於 Medium ➡️ 前往查看