Cycle in dependencies between targetsがSwiftプロジェクトのビルド時に出るようになったので多分直した

2022-08-11

はじめに

Xcode を 13.4.1 (13F100)にアップデートしたタイミングでビルド時に、Cycle in dependencies between targetsのエラーが出てくるようになりました。このエラーが出るタイミングが、一度ビルドした後に再度ビルドすると出ているっぽそうな気がしました。これはコードを変更しても変更しなくても、連続してビルドするとエラーが出ます。一応、Clean Build Folderをしてビルドすれば直るのですが、毎回やっていると時間がかかって面倒です。

調べたところ、プロジェクトのターゲットでBuild Phaesにある、HeadersCompile 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自体は、依存関係(参照とか?)のサイクルがなんかおかしいんだなくらいの認識でいます。こういったビルド周りのエラーが出ても、意味を完全には理解できません。今回も根本原因の理解は未だに分かっていなので、ビルドシステムの理解もできるようになっていきたいなと思います。

参考サイト

Tatsumi0000

Written by Tatsumi0000 モバイル開発が好きなエンジニアのブログです. GitHub

Copyright © 2023, Tatsumi0000 All Rights Reserved.