酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Bitriseでトラブル発生!Cartfile.resolved がルートディレクトリにないリポジトリのビルドが通らない

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 をみつけてくれた。

f:id:ch3cooh393:20200220224846p:plain

いろいろとワークフローを弄りまわしたんだけど、なにをやってもダメで「Bitriseでは Cartfile.resolvedをルートディレクトリに置いていないiOSプロジェクトはサポートしてないのかな?」と思っていました。

まとめ

Carthage経由でRealmをインストールした場合、ビルドが6分で終わるようになったので、世界が平和になりました。