Bitrise で XCTest がコケる

Bitrise でビルドは通るけど XCTest がコケるのを直した話を書きます。

encountered an error (Early unexpected exit, operation never finished bootstrapping - no restart will be attempted. Underlying error: Test runner exited before starting test execution.)

こういうエラーが出て困っていました。

結論

Bitrise 上の Carthage のバージョンが古く xcfilelist に対応していなかったが最新版に更新したら直った。

原因

上記のエラーは調べてみるとわかりますが使用しているライブラリがリンクされていないことが原因だということがわかります。

参考リンク

直接の原因はこれのようです。
しかし上記のリンク先のとおりやってみても直りませんでした。

xcodebuild のログを見る

Xcode Test for iOS ステップはビルド失敗時に Bitrise のビルドのログとは別にログを吐いてくれるのでそれを見てみると

dyld: Library not loaded: @rpath/Result.framework/Result

何やら見慣れたエラーが出ていました。
これは Carthage のライブラリがコピーされていないときによく見るエラーです。

というわけで Carthage の設定が怪しいと目星をつけました。
しかし carthage copy-frameworks はちゃんと Build Phase に組み込んであるし…。

原因を作った原因

と、悩んだのですが Xcode 10 から使えるようになった .xcfilelist を利用していたことを思い出しました。

Carthage が .xcfilelist に対応したのは 0.31.1 からですが
Bitrise 上の Carthage のバージョンは 0.30.1 でした。

これが原因だったわけですね。

Carthage | 0.31.1 – Ubiquitous Upbeat

Bitrise 上の Carthage のバージョンを更新する

というわけで考えられる選択肢は 2 つ。

  • Carthage 自体のバイナリをリポジトリに含めてそれを使う
  • Bitrise 上の Carthage のバージョンを更新する

確実なのは前者ですがお手軽そうな後者のほうを選びました。

Bitrise 上の Carthage の更新方法は下記のページに書かれていました。
Bitrise Discuss | Update Carthage to last version

Bitrise Discuss というのは Bitrise 用の質問掲示板みたいなものっぽいです。

上記の回答の通り workflow の Do anything with Script step で Carthage を更新すると無事ビルドが通りました。

#!/bin/bash
set -ex

brew upgrade carthage

教訓

ローカル環境では成功するのに CI 上でうまくいかないときは依存関係から見直す。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です