こんにちは。virapture株式会社のもぐめっとです。
fastlaneを使ってunityプロジェクトをビルド・アーカイブしようとしたら表題の件でエラーが起こったのでその対策の紹介です。
エラー内容
下記のような内容のエラーが出たりします。
▸ Running script 'Run Script'
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 5.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'leveldb-library' from project 'Pods')
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 7.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'abseil' from project 'Pods')
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 7.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'BoringSSL-GRPC' from project 'Pods')
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 7.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'gRPC-Core' from project 'Pods')
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 7.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'gRPC-C++' from project 'Pods')
** ARCHIVE FAILED **
The following build commands failed:
PhaseScriptExecution Run\ Script /Users/mogmet/Library/Developer/Xcode/DerivedData/Unity-iPhone-gqkzpndbjogtifczjutlqanqrdbr/Build/Intermediates.noindex/ArchiveIntermediates/Unity-iPhone/IntermediateBuildFilesPath/Unity-iPhone.build/Release-iphoneos/UnityFramework.build/Script-9D3DC87A221D90AB00B2960B.sh
(1 failure)
[19:36:08]: Exit status: 65
▸ Running script 'Unity Process symbols'
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 7.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'gRPC-C++-gRPCCertificates-Cpp' from project 'Pods')
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 5.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'leveldb-library' from project 'Pods')
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 7.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'abseil' from project 'Pods')
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 7.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'BoringSSL-GRPC' from project 'Pods')
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 7.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'gRPC-Core' from project 'Pods')
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 7.0, but the range of supported deployment target versions is 9.0 to 14.4.99. (in target 'gRPC-C++' from project 'Pods')
** ARCHIVE FAILED **
The following build commands failed:
PhaseScriptExecution Unity\ Process\ symbols /Users/mogmet/Library/Developer/Xcode/DerivedData/Unity-iPhone-gqkzpndbjogtifczjutlqanqrdbr/Build/Intermediates.noindex/ArchiveIntermediates/Unity-iPhone/IntermediateBuildFilesPath/Unity-iPhone.build/Release-iphoneos/UnityFramework.build/Script-C2C44CC5810E918197FE9813.sh
/Users/mogmet/dev/onenightwerewolf-online-unity/Build/iOS/iOS/usymtool -symbolPath /Users/mogmet/Library/Developer/Xcode/DerivedData/Unity-iPhone-gqkzpndbjogtifczjutlqanqrdbr/Build/Intermediates.noindex/ArchiveIntermediates/Unity-iPhone/BuildProductsPath/Release-iphoneos/UnityFramework.framework.dSYM
time="2021-03-13T20:25:16+09:00" level=fatal msg="Please provide an auth token with USYM_UPLOAD_AUTH_TOKEN environment variable"
Command PhaseScriptExecution failed with a nonzero exit code
Exit status: 65とかはこれしかかいてなくて何が原因かさっぱりわかりません。とても不親切。
Exit status: 65の解決法
上記はCI上で実行してたため原因がわからなかったのですが、ローカルで実行してみたところ、UnityがiOS用に出力した、いくつかのファイルで権限がなかったので、一旦権限を付与しました。(おそらくCI上でzipでまとめたときに権限がとれてしまったものと思われる)
chmod +x usymtool process_symbols.sh MapFileParser.sh
そして、その後アーカイブを実施したところ、この子が出てきました。
なるほど、CIではわからないわけだ。。。
ということで解決法を調べたら下記の方法が使えそうでした。
・ダウンロードしたすべてのアプリケーションを許可する
$ sudo spctl --master-disable
上記を実施した上であらためて実行したら無事アーカイブできました
Please provide an auth token with USYM_UPLOAD_AUTH_TOKEN environment variableの解決法
色々議論されてるのはこちらにありました。
ただ、上記スクリプトをセットしてもうまく行かなかったので、結局の所、USYM_UPLOAD_AUTH_TOKENに適当な値をセットするようにしたらビルドできるようになりました
export USYM_UPLOAD_AUTH_TOKEN=hoge
USYM_UPLOAD_AUTH_TOKENについては下記に説明がありました。
unityでbatchmodeでビルドするときにusernameとpasswordをセットすると設定される環境変数で、この変数を使ってシェルは実行されます。
crashしたときに特定できるようにunityにアップロードして特定できるようにしてるらしいですが、とりあえずUSYM_UPLOAD_AUTH_TOKENに何かしらいれとけばアップロードは失敗するが、とりあえずビルドはできるようになるらしいです。
そこはUSYM_UPLOAD_AUTH_TOKENが存在しないならビルドできるようにしとけよと思ったのは内緒です。
もぐめっとの所感
CIでビルドできなくなったらそのファイルを一旦ローカルにもってきて実行テストしてみることが大事だと思いました。
最後に、ワンナイト人狼オンラインというゲームを作ってます!よかったら遊んでね!
他にもcameconやoffchaといったサービスも作ってるのでよかったら使ってね!