UnityのバッチモードでビルドするとXCodeでエラーが発生する

Jenkins経由でiPhone向けにビルドしていたところ、見慣れないエラーが出たので対処。対処法だけが気になる人は下の方を先に確認してください。

エラー症状確認

Jenkinsでビルドしたところ、以下のようなエラーメッセージが表示されていました。

level=fatal msg="Please provide an auth token with USYM_UPLOAD_AUTH_TOKEN environment variable"
Command PhaseScriptExecution failed with a nonzero exit code

さっきまでビルド通ってたのに急にどうしたんだって感じ。

エラーが発生するタイミング

こちらのエラーはXcodeのアーカイブ作成するところでエラーが発生します。Unityのビルド自体は問題なく出来ています。Xcodeの証明証関連かな?と思い手動でアーカイブして改善されるかも確認しましたが同様のエラーが出ました。

他の人の情報

Unityのフォーラムで、同様の症状が出ている人がいました。

https://forum.unity.com/threads/please-provide-an-auth-token-with-usym_upload_auth_token-environment-variable.682270

なんかUnity2019系あたりで出るようになったとかなんとか。ただバージョンだけの問題なら、先日までビルド出来ていた自分の症状に説明が付きません。

ちなみに対策として挙げられていた対処法は、バッチモードのコマンド引数にusernameとpasswordを入れればおkというものでした。

UnityAdsを活性化したことが原因?

Unityへのログイン情報が必要ということからすると、それに付随する部分が影響箇所かと予想出来ました。自分は今回のビルドでUnityAdsとUnityAnalyticsを使えるようにしました。

おそらくはこれらの情報をバッチモードのコマンドラインに渡す必要があるってことなのかな?と予想。

まぁそれならUnityのビルド時点でエラー出せよと思ったことは内緒です。

バグ対応方法

対処法は簡単でした。フォーラムにもあったとおりusernameとpasswordを追加します。フォーラムだと追加すればいいって情報だけで、サンプルなかったので少しだけ困りました・・・

修正サンプル

大前提ですが、Unity用のアカウントがあるとします。対象アカウントの設定は以下。BuildScript.BuildProjectCommandはうちの環境で使っているビルド用の呼び出し関数です。ご利用の環境で使ってなかったり違う関数の場合は適宜変更してください。

IDunitytest@gmail.com
PASSWORDunity_test_pass
// 修正前
-quit -batchmode -executeMethod BuildScript.BuildProjectCommand
 
// 修正後
-quit -batchmode -username unitytest@gmail.com -password unity_test_pass -executeMethod BuildScript.BuildProjectCommand 

クォーテーションとかでくくる必要があるのかな?とか思いましたが、裸でOKでした。

あとがき

そもそもバッチモードでビルドしてる人があまり多くないのでそもそも引っかかる人のほうが少ないかも?

ただ、Unityのアップデートとかをして急に出て困る人は多いと思います。Xcodeでエラーが出るっていうのもちょっと分かりづらいですよね。試すのにXcodeのビルドまで時間が必要になるので試すのに時間がかかるのがきついですね。

あとはUnityAdsとかUnityAnalyticsとかを使ったタイミングで初めてエラーが出るので、それも原因分かりづらい原因になりそう。それならどっかにUnityのIDとパスワードいれてないとビルド失敗するようにしておいてくれよ、と思わざるをえない。