Cycle in dependencies between targetsがSwiftプロジェクトのビルド時に出るようになったので多分直した
2022-08-11
はじめに
Xcode を 13.4.1 (13F100)にアップデートしたタイミングでビルド時に、Cycle in dependencies between targets
のエラーが出てくるようになりました。このエラーが出るタイミングが、一度ビルドした後に再度ビルドすると出ているっぽそうな気がしました。これはコードを変更しても変更しなくても、連続してビルドするとエラーが出ます。一応、Clean Build Folder
をしてビルドすれば直るのですが、毎回やっていると時間がかかって面倒です。
調べたところ、プロジェクトのターゲットでBuild Phaes
にある、Headers
をCompile Sources
の前に移動すると直るみたいでしたが、自分のプロジェクトにこのフェイズがなかったので今回はこの解決策が使えませんでした(Unity プロジェクトだとあるみたいです)。
今回はこの問題を解決するに当たって色々やった結果、直ったような気がしたのでその時のメモを書きたいと思います。正直色々試しすぎて、どれが解決策か 100%確証は持ってないのですが、多分これだろうというのを書いています。
解決方法
ターミナルで以下のコマンドを実行後、Xcode を再起動すると、Clean Build Folder
をしなくても、連続でビルドできるようになりました。
defaults write com.apple.dt.XCBuild EnableSwiftBuildSystemIntegration 1
このコマンドは、Xcode13.2 から新しく追加された、ビルドシステムと Swift コンパイラの設定を有効にするコマンドみたいでした1。この機能を有効にすることで、Swift プロジェクトを高速にビルドできるようになるみたいです。
この設定後、再起動するとCycle in dependencies between targets
のエラーがでなくなったので、おそらくこのコマンドが 、効いたのではないかな〜と思っています。もしくは、単純に Xcode の再起動が良かったのかもしれません。
もし自分の設定がどうなっているか見たいときはread
すれば見れるみたいです。
defaults read com.apple.dt.XCBuild EnableSwiftBuildSystemIntegration
その他にやったこと
他にも色々試していてもしかしたら、こっちの設定が良かったのかもしれないので一応書いておきます。
ビルド設定を OFF にする
実は Apple Developer のサイトを見て、一度 OFF にしたりもしていました2。ただし、これでは自分の場合は直りませんでした(多分)。
defaults write com.apple.dt.XCBuild EnableSwiftBuildSystemIntegration 0
PC の再起動
とりあえず困ったときにやる PC の再起動ですが、今回は直りませんでした。
Derived Data の削除
プロジェクト毎に生成されるキャッシュ(Derived Data)を削除したのですが、駄目でした。
自分はDerived Data
をクリアするときは、DevCleanerを使っていつも削除しています。Xcode を使ってるならとりあえず入れとくと便利です。GUI でポチポチするだけです し。App Store からインストール出来ます。
最後に
Xcode でビルドする時に、Cycle in dependencies between targets
のエラーが出てくるので、この問題を解決してみました。多分。
Cycle in dependencies between targets
自体は、依存関係(参照とか?)のサイクルがなんかおかしいんだなくらいの認識でいます。こういったビルド周りのエラーが出ても、意味を完全には理解できません。今回も根本原因の理解は未だに分かっていなので、ビルドシステムの理解もできるようになっていきたいなと思います。