Open1
Xcode: Swift Macroの残骸が残る場合の対処
Xcode 15から、Swift Macroの仕組みが導入され、SwiftUIのプレビューは#Preview
と書くだけで従来のプレビューのコードが自動生成されるなど、非常に便利になりました。
ですが、このマクロが自動生成したコードがどこかに残ってしまって、あとでマクロの使用箇所を削除してもXcodeでエラーが出続けるというケースがあります。
具体的に私が遭遇したケースでは、#Preview
でプレビューを作っていたのだけど、@ObservedObject
とか@Binding
とかが増えた結果、プレビュー側にも追加のコードをいちいち書かなければプレビューされないんで、いっそプレビューを削除する、という場合で、#Preview
を削除する直前に出ていたエラーがずっと残るというケースです。
なにがしかの中間ファイルに、削除する直前の状態のマクロ展開結果が残っているのだろうと想像するのですが、
- 中間生成ファイルができるはずの
~/Library/Developer/Xcode/DerivedData/プロジェクト固有フォルダ
を検索したのですが見つからず。 - Clean Build Folderを実行しても残り続ける。
- Clear All Issuesでエラーをいったん消しても、リビルドすると再びエラーになる。
ググってもそれらしい話はなく、どうしたものかと悩みました。
色々やってみた結果、今のところの解決策は以下です。
- エラーが起こっているビューの
#Preview
を再度作る。 - もし
@ObservedObject
とか@Binding
とかがたくさんあって#Preview
をエラーなく作るのが大変な場合、本当のビューはコメントアウトして、同じ名前のダミーのビューを作り、とりあえずエラーなく#Preview
がコンパイルされるようにする。 - いったん全部がBuild Succeededになったら、改めて
#Preview
を削除する。 - そのあと、もしダミーのビューに置き換えていたなら元に戻す。
追記:なんか、何回かリビルドしていると、復帰、つまり#Preview
が記載されているかのような動きに戻ってしまいます。
どうにも回避できません。
いったん#Preview
が書かれてしまうと、削除してもずっと残るということでしょうか。新規ビュー作成時のひな形に#Preview
が含まれているので、新規ビュー作成時に、ビューじゃないSwiftファイルのひな形を選ばない限りは逃れられない気がします。