Post

iOS 模拟器黑屏问题 Workaround|XCode Build & Run 卡黑屏快速重启模拟器技巧

解决 XCode 多次 Build & Run iOS 模拟器卡黑屏问题,透过自动关闭重启模拟器脚本,避免手动重启浪费时间,提升开发效率并确保每次执行都顺利显示画面。

iOS 模拟器黑屏问题 Workaround|XCode Build & Run 卡黑屏快速重启模拟器技巧

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](https://unsplash.com/@etiennegirardet?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash){:target="_blank"}

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 时间很短

Demo 是干净专案所以 Build 时间很短

我们运用 XCode Behaviors 在 Completes (Stop or Rebuild) 的时机点重开模拟器,时间在开始 Build 之前,几乎都能在 Build -> Run 结束前完成重启。

如果狂按重开的确也有机会重启太慢,导致 Run 找不到目标而出现另一种黑屏,不过这情况就不考虑了,至少这方案能在日常正常使用保持 Build & Run App 正常执行。

对速度的影响我觉得还好,因为 Build & Run 本身也需要些时间,这些时间很够模拟器重开了。

有任何问题及指教欢迎 与我联络


Buy me a beer

本文首次发表于 Medium (点击查看原始版本),由 ZMediumToMarkdown 提供自动转换与同步技术。

Improve this page on Github.

This post is licensed under CC BY 4.0 by the author.