iOS|Black Launch Screenバグの一時的回避策:複数起動後の問題を即解決
iOSアプリの複数回起動後に発生する黒い起動画面の問題を抱える開発者向けに、XCodeでのビルド&実行時の黒画面を一時的に回避する具体的な手法を紹介し、スムーズなデバッグ環境を実現します。
本記事は AI による翻訳をもとに作成されています。表現が不自然な箇所がありましたら、ぜひコメントでお知らせください。
記事一覧
[iOS] 複数回起動後の黒い起動画面バグの一時的対処法
XCode Build & Run アプリの黒画面問題の一時的な回避策
Photo by Etienne Girardet
問題
XCode のどのバージョンからかは不明ですが(おそらく14以降)、一部のプロジェクトでシミュレーターに対して何度も Build & Run を行うと、黒画面で「Launching Application…」から進まなくなる問題が発生します。再度 Build & Run をしても改善せず、シミュレーターを手動で完全に終了して再起動しないと直りません。
XCode 14.1:「Launching Ap. . .」で停止 \| Apple Developer Forums
チームの皆さんへ、Xcode 14.1でプロジェクトをビルドした後、シミュレーターが起動すると真っ黒な画面が表示されます… forums.developer.apple.com
新しいプロジェクトや新しいプロジェクト設定ではこの問題はあまり発生しません。古いプロジェクトでよく起きますが、歴史が長く設定も複雑なため、ネットで確実な原因は見つかりません。多くは XCode のバグ(または M1 チップの影響)と推測されています。しかし、この問題は非常に厄介で、ビルド&ランして成果を確認しようとすると真っ暗な画面になり、最初からやり直さなければならず、毎回1〜2分ほど無駄になり、開発が大きく中断されます。
回避策
こちらは回避策のご提案です。問題の黒画面は避けられず、かつ黒画面はシミュレーターの初回起動時の 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 シェルスクリプトファイルを新規作成します
cd /あなたがこのスクリプトを置きたいディレクトリ/vi auto-reboot.sh
以下のスクリプトを貼り付けてください:
[Device UUID]を使用したいシミュレーターのデバイス UUID に置き換えてくださいエミュレーターを変更した場合は、このスクリプトの Device UUID を必ず変更してください。そうしないと無効になります。
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
## 使用したいシミュレーターのデバイスUUIDを調べるには、以下のコマンドを使います:
## xcrun simctl list devices
# シミュレーターをシャットダウン
xcrun simctl shutdown [Device UUID]
# シミュレーターを再起動
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 /あなたがこのスクリプトを置きたいディレクトリ/auto-reboot.sh を直接設定することも可能です。
XCodeのビヘイビア
- XCode -> Behaviors -> Behaviorsを編集…
Runningセクションを見つけるCompletesオプションを選択
Completes のタイミング = Stop または Rebuild右側の「Run」にチェックを入れる
Choose Script…を選択し、先ほど作成したauto-reboot.shファイルの場所を指定してください完了
原理と結論
Demo はクリーンなプロジェクトなので、ビルド時間が非常に短いです。
私たちは XCode Behaviors を利用して、Completes (Stop or Rebuild) のタイミングでシミュレーターを再起動しています。再起動はビルド開始前に行われ、ほとんどの場合、Build → Run が終わる前に再起動が完了します。
再起動ボタンを連打すると、再起動が遅すぎて Run がターゲットを見つけられず、別の黒画面が発生する可能性もありますが、その場合は考慮しません。少なくともこの方法で日常的な使用では Build & Run が正常に動作します。
速度への影響はあまり気になりません。Build & Run 自体に時間がかかるため、その間にシミュレーターを再起動する十分な時間があります。
ご質問やご意見がございましたら、こちらからご連絡ください 。
Post は ZMediumToMarkdown によって Medium から変換されました。
本記事は Medium にて初公開されました(こちらからオリジナル版を確認)。ZMediumToMarkdown による自動変換・同期技術を使用しています。







