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/zsh
に zsh
が存在しないので、 chsh -s /bin/zsh
も chsh: 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と比べて、やはり設定周りでつまることが多いので、今回のセットアップで次回以降は困らないようにしたい!