ZhgChg.Li

iOS|Black Launch Screenバグの一時的回避策:複数起動後の問題を即解決

iOSアプリの複数回起動後に発生する黒い起動画面の問題を抱える開発者向けに、XCodeでのビルド&実行時の黒画面を一時的に回避する具体的な手法を紹介し、スムーズなデバッグ環境を実現します。

iOS|Black Launch Screenバグの一時的回避策:複数起動後の問題を即解決
本記事は AI による翻訳です。お気づきの点があればお知らせください。

[iOS] 複数回起動後のブラック起動画面バグに対する一時的な対処法

XCode Build & Run アプリの黒画面問題を一時的に回避する方法

Photo by Etienne Girardet

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 の問題)と推測されています。しかし、この問題は非常に厄介で、成果を確認するために Build & Run しても画面が真っ暗になり、最初からやり直さなければならず、毎回1〜2分ほど無駄になり、開発の妨げになります。

回避策

ここでは、山を動かせないなら道を変えるというワークアラウンドを紹介します。問題の黒画面は避けられず、また黒画面はシミュレーターの初回起動時の Build & Run では発生しないため、毎回 Build & Run の前にシミュレーターを完全に再起動すれば問題を回避できます。

まず、実行したいシミュレーターの Device UUID を取得します

ターミナルで実行:

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] を使用したいシミュレーターの Device UUID に置き換えてください。

  • シミュレーターを変更した場合は、このスクリプト内の Device UUID を必ず更新してください。そうしないと動作しません。

#!/bin/bash

## 使用するシミュレーターのデバイスUUIDを確認するには、以下のコマンドを使います:
## xcrun simctl list devices

# シミュレーターをシャットダウン
xcrun simctl shutdown [Device UUID]

# シミュレーターを再起動
xcrun simctl boot [Device UUID]
  • スクリプトのロジックはシンプルで単純です。使いたいシミュレーターをシャットダウンして再起動するだけです。

  • ESC:wq!

auto-reboot.sh の実行権限を変更:

chmod +x auto-reboot.sh

XCode の設定に戻る

人それぞれ使うシミュレーターが違うため、私は XCode Behaviors に設定しており、プロジェクト設定を変更せず、git にも影響を与えずチームメンバーに迷惑をかけません。しかし、簡単にチーム全体で同期したい場合は、Scheme -> Build -> Pre-actions に直接 sh /あなたがこのスクリプトを置きたいディレクトリ/auto-reboot.sh を設定しても構いません。

XCodeの動作設定

  • XCode -> Behaviors -> Edit Behaviors…
    XCode -> Behaviors -> 動作を編集…

  • Running ブロックを見つける

  • Completes オプションを選択
    Completes のタイミング = Stop または Rebuild

  • 右側の「Run」にチェックを入れる

  • Choose Script… を選択し、先ほど作成した auto-reboot.sh ファイルの場所を指定します

  • 完了

原理と結論

Demoはクリーンなプロジェクトなのでビルド時間が非常に短い

Demo はクリーンなプロジェクトなので、ビルド時間が非常に短いです。

私たちは XCode Behaviors を利用して、Completes (停止または再ビルド) のタイミングでシミュレーターを再起動しています。再起動の時間はビルド開始前であり、ほとんどの場合、ビルドから実行が終わる前に再起動が完了します。

連続で再起動ボタンを押すと、再起動が遅すぎて Run がターゲットを見つけられず、別の黒画面になる可能性もありますが、その状況は考慮しません。少なくとも、この方法で日常的な使用時に Build & Run が正常に動作することは維持できます。

速度への影響はあまり気になりません。Build & Run自体に時間がかかるので、その間にシミュレーターを再起動する時間は十分あります。

Post は Medium から ZMediumToMarkdown によって変換されました。

GitHub で編集
この記事を改善
本記事は Medium で初公開
オリジナルを読む
この記事をシェア
リンクをコピー · SNS でシェア
ZhgChgLi
著者

ZhgChgLi

An iOS, web, and automation developer from Taiwan 🇹🇼 who also loves sharing, traveling, and writing.

コメント