2020年になってから本格的にBitriseを使うようになりました。いままでJenkinsを使っていましたが、Jenkins係に負荷が押しつけられることになっていました。
BitriseはCIサービスのなかでもかなり簡単な方だとは思いますが、いままでジョブスクリプトを手書きしていた身からするとBitriseは色々と隠蔽されていて使いづらい……痒いところに手が届かない……というのが最初の感想でした。使っていくうちに慣れてきて、ようやく「あ〜楽ちんじゃ〜」と考えることができるようになりました。
ただ自前のマシンではないのでビルドに時間がかかります。Bitriseでは、CocoaPods経由でRealmをインストールするプロジェクトの場合、ビルドに12分かかっていました。せめて1回のビルド時間は10分を切って欲しいので、RealmはCarthage経由でインストールすることにしました。
そこで表題の「Cartfile.resolvedがルートディレクトリにないためビルドが通らない」問題にひっかかってしまいました。
Cartfile.resolvedをルートに置いてないとビルドが通らない
Cartfile.resolvedがルートディレクトリにないのでビルドが通りませんでした。
Check if cache is available Check cache specific files - Carthage/Build directory: not found - Cachefile: not available yet - Cartfile.resolved: not found No Cartfile.resolved found at: /Users/vagrant/git/Cartfile.resolved Make sure it's committed into your repository! Cartfile.resolved presence ensures that Bitrise will use exactly the same versions of dependencies as you in your local environment. The dependencies will not be cached until the Cartfile.resolved file presents in the repository. Cache not available Running Carthage command $ carthage "bootstrap" "--platform" "ios"
エラーログに書かれている通りですが、Bitriseが Cartfile.resolved
を見つけることができずエラーになっています。
BitriseがCartfile.resolvedを見つけられないのが原因
弊社リポジトリでは、ルートディレクトリに直接Cartfile.resolved
を置いていません。今回のプロジェクトでは、iosディレクトリ以下にCartfile.resolved
を置いていました。
ios/Cartfile.resolved /Cartfile
BitriseのCarthageステップでは、このCartfile.resolved
を見つけることができずにビルドに失敗していました。BitriseのCarthageステップは指定できるオプションが少なくて、Cartfile.resolved
を指定するようなオプションは存在しません。
この時点で割と困った状態になりました……。
Carthageのコマンドオプションでプロジェクトディレクトリを指定する
解決方法は非常に簡単でした。
「Additional options for `carthage` command」で --project-directory ios
を追加すれば、Bitriseが ios/Cartfile.resolved
をみつけてくれた。
いろいろとワークフローを弄りまわしたんだけど、なにをやってもダメで「Bitriseでは Cartfile.resolvedをルートディレクトリに置いていないiOSプロジェクトはサポートしてないのかな?」と思っていました。
まとめ
Carthage経由でRealmをインストールした場合、ビルドが6分で終わるようになったので、世界が平和になりました。