UnityアプリでiOSをArchiveするとExit status: 65とかUSYM_UPLOAD_AUTH_TOKENがないとかで終わる問題の解決法

こんにちは。[virapture株式会社](https://virapture.com)の[もぐめっと](https://twitter.com/mogmet)です。

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
```

そして、その後アーカイブを実施したところ、この子が出てきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/a27222fb-8c00-0816-979a-0927b6b1e8f0.png)

なるほど、CIではわからないわけだ。。。

ということで解決法を調べたら下記の方法が使えそうでした。

https://news.mynavi.jp/article/osxhack-257/

```
・ダウンロードしたすべてのアプリケーションを許可する

$ sudo spctl --master-disable
```

上記を実施した上であらためて実行したら無事アーカイブできました

## Please provide an auth token with USYM_UPLOAD_AUTH_TOKEN environment variableの解決法

色々議論されてるのはこちらにありました。

https://forum.unity.com/threads/ios-build-is-failing-seems-like-a-fastlane-problem-not-sure-how-to-proceed.682201/#post-5515246

ただ、上記スクリプトをセットしてもうまく行かなかったので、結局の所、USYM_UPLOAD_AUTH_TOKENに適当な値をセットするようにしたらビルドできるようになりました

```shell
export USYM_UPLOAD_AUTH_TOKEN=hoge
```

USYM_UPLOAD_AUTH_TOKENについては下記に説明がありました。

https://stackoverflow.com/questions/59637428/building-a-unity-game-for-ios-with-fastlane-fails-with-missing-usym-upload-auth

unityでbatchmodeでビルドするときにusernameとpasswordをセットすると設定される環境変数で、この変数を使ってシェルは実行されます。
crashしたときに特定できるようにunityにアップロードして特定できるようにしてるらしいですが、とりあえずUSYM_UPLOAD_AUTH_TOKENに何かしらいれとけばアップロードは失敗するが、とりあえずビルドはできるようになるらしいです。

そこはUSYM_UPLOAD_AUTH_TOKENが存在しないならビルドできるようにしとけよと思ったのは内緒です。



## もぐめっとの所感

CIでビルドできなくなったらそのファイルを一旦ローカルにもってきて実行テストしてみることが大事だと思いました。

最後に、[ワンナイト人狼オンライン](https://online.1nite-jinro.com/link/blog)というゲームを作ってます！よかったら遊んでね！
他にも[camecon](https://camecon.me/)や[offcha](http://offcha.com/)といったサービスも作ってるのでよかったら使ってね！