iOS

【Xcode】Xcodeでデバッグするときに、「couldn’t create a ClangImporter)Cannot create Swift scratch context」と表示されて、デバッグ中に値を確認できないのを直した!

xcode-cant-debug

Xcodeでデバッグするときに、「couldn’t create a ClangImporter)Cannot create Swift scratch context」と表示されて、デバッグ中に値を確認できないのを直した!

新しくM1を入手して、Xcodeを使って既存のアプリをがんばってビルドできるようにしたが、その後にブレークポイントを設定して、実行中の変数の値を po を使って確認しようとしたら、

Cannot create Swift scratch context (couldn’t create a ClangImporter)Cannot create Swift scratch context (couldn’t create a ClangImporter)

というエラーが表示され、値を確認できなくなってしまったので、それを解消するために試行錯誤したことを備忘録としてまとめようと思います。

再現環境

  • MacBook Pro(14インチ、2021)/ Apple M1 Max(macOS Monterey v12.0.1)
  • Xcode13.2.1
  • なぜかMacのデフォルトのShellがbashになっていたの、zshはHomebrewで /opt/homebrew/bin/zshにインストール

修正方法

まずエラーの内容でググったところ、こちらのサイトから、Shellの設定が怪しそうだったので、その設定を見直してみました(結果的にはこれが正しかったです)

原因としては、Xcodeが参照しているShellのパスに zshがなかったことが原因でした。
状況としては、以下のようになっていました。

  • 設定アプリ→ユーザーとグループ→詳細オプション→ログインシェルのパス(詳しい確認方法はこちら)
    • /usr/local/bin/zsh <- Xcodeはこれを参照
  • しかし/usr/local/bin/zshにzshが存在しない

なぜこのようになっているかはわからないのですが、Xcodeは存在しない/usr/local/bin/zshを参照していました。
/usr/local/bin/zshzshが存在しないので、 chsh -s /bin/zshchsh: no changes madeとなってました。

つまり修正方針としては、以下のどちらかになります。

/usr/local/bin/zshにzshをインストールする
M1でHomebrewを使ってインストールすると、 /opt/homebrew/bin/zsh にインストールされてしまうので、自分の場合は、こちらの記事を参考に手動でインストールしました(Homebrewでもできると思うが、やり方がわかりませんでした)。
その後、Homebrew経由でインストールしたzshはアンインストールし、 SHELLも上記のパスに変更しました。

②上記に記載した「設定アプリ→ユーザーとグループ」の ログインシェルのパスを変更する
上記の画面から、 ログインシェルを現在使用しているShellのパス、自分の場合は、brew経由でインストールした/opt/homebrew/bin/zshに変更します。

自分はどちらも試しましたが、ログインシェルのパスを変更するのは微妙かなと思ったので、①の対応を行いました。

上記の対応後に、Xcodeを再起動したら、無事ブレークポイントを置いて、 poで該当の変数の値を確認できるようになりました🎉

追記

上記のような設定をしたら、今度は TerminalでShellが読み取れず、Terminalが使えなくなってしまいました。VSCodeのTerminalはなぜか使えます。
色々試した結果、TerminalではHomebrewで zshをインストールし、そのパス /opt/homebrew/bin/zshをTerminalの設定の「開くシェル」のコマンドシェルに設定し、再起動することで、使えるようになりました。

こちら追記している段階では、原因は謎です。。
分かり次第追記したいと思います。

まとめ

今回はXcodeでうまくデバッグができなくなった現象を解消しましたが、最初は全く原因がわからなかったので、Shellが関連しているとはわからなかったので、XcodeとShellに関連性があるということが知れたのもよかったのです。
またM1は今までのIntelのMacと比べて、やはり設定周りでつまることが多いので、今回のセットアップで次回以降は困らないようにしたい!

+1

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA