iOS 模拟器黑屏问题 Workaround|XCode Build & Run 卡黑屏快速重启模拟器技巧
解决 XCode 多次 Build & Run iOS 模拟器卡黑屏问题,透过自动关闭重启模拟器脚本,避免手动重启浪费时间,提升开发效率并确保每次执行都顺利显示画面。
Click here to view the English version of this article.
點擊這裡查看本文章正體中文版本。
基于 SEO 考量,本文标题与描述经 AI 调整,原始版本请参考内文。
[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 本身也需要些时间,这些时间很够模拟器重开了。
有任何问题及指教欢迎 与我联络 。
本文首次发表于 Medium (点击查看原始版本),由 ZMediumToMarkdown 提供自动转换与同步技术。