Cycle in dependencies between targetsを修正
/ 5 min read
Updated:Table of Contents
はじめに
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 コンパイラの設定を有効にするコマンドみたいでした。この機能を有効にすることで、Swift プロジェクトを高速にビルドできるようになるみたいです。
この設定後、再起動するとCycle in dependencies between targetsのエラーがでなくなったので、おそらくこのコマンドが、効いたのではないかな〜と思っています。もしくは、単純に Xcode の再起動が良かったのかもしれません。
もし自分の設定がどうなっているか見たいときはreadすれば見れるみたいです。
defaults read com.apple.dt.XCBuild EnableSwiftBuildSystemIntegrationその他にやったこと
他にも色々試していてもしかしたら、こっちの設定が良かったのかもしれないので一応書いておきます。
ビルド設定を OFF にする
実は Apple Developer のサイトを見て、一度 OFF にしたりもしていました。ただし、これでは自分の場合は直りませんでした(多分)。
defaults write com.apple.dt.XCBuild EnableSwiftBuildSystemIntegration 0PC の再起動
とりあえず困ったときにやる PC の再起動ですが、今回は直りませんでした。
Derived Data の削除
プロジェクト毎に生成されるキャッシュ(Derived Data)を削除したのですが、駄目でした。
自分はDerived Dataをクリアするときは、DevCleanerを使っていつも削除しています。Xcode を使ってるならとりあえず入れとくと便利です。GUI でポチポチするだけですし。App Store からインストール出来ます。
最後に
Xcode でビルドする時に、Cycle in dependencies between targetsのエラーが出てくるので、この問題を解決してみました。多分。
Cycle in dependencies between targets自体は、依存関係(参照とか?)のサイクルがなんかおかしいんだなくらいの認識でいます。こういったビルド周りのエラーが出ても、意味を完全には理解できません。今回も根本原因の理解は未だに分かっていなので、ビルドシステムの理解もできるようになっていきたいなと思います。