酢ろぐ!

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

Bitrise のXcode 12.3.xスタックでビルドしたバイナリが App Store へアップロードできない

12月15日に Xcode 12.3 Release版がリリースされました。当日中にXcodeをアップデートして「iOSシミュレータの画面が黄色くなる不具合」など踏んでStack Overflowに初めての書き込みをしたことなど今となっては良い思い出です。

Bitriseとは

今年に入ってからこのブログでも、Bitriseを使ってiOSアプリのビルド時間の短縮に挑戦する記事Firebase iOS SDKをCocoaPods経由でインストールしたときにどれだけビルド時間が伸びるかなど紹介してきました。

弊社ではプロジェクトごとにじわじわとJenkinsからBitriseへの移行がおこなわれていましたが、現時点で完全にBitriseへの移行が完了しています。関係者が多いプロジェクトだとProvisioning Profile(プロビジョニングプロファイル)の更新が頻繁に発生して、更新処理が大変だったので随分と負荷が下がりました。Jenkinsおじさんは引退です。

もしBitriseを使ってみたい方がいれば↓のリンク経由でアカウントを作ってみてください。

ビルド時間が5分伸びるみたいです!(宣伝)

Bitriseでビルドしたバイナリが AppStore へアップロードできない

さて、本題です。

手元で Xcode 12.3 を使ってビルドが通ることが確認できたので、Bitriseでのスタックを「Xcode 12.3.x, on macOS 10.15.6 (Catalina)」へ変更しました。「Bitriseのスタック」は「ビルド環境」と読み替えていただいても問題ないかと思います。

このXcode 12.3.xスタックでビルドしたバイナリをアップロードしたところ、App Storeからエラーが返ってきました。

2020-12-17 00:10:34.983 altool[4011:33028] *** Error: Error uploading '/Users/vagrant/deploy/MY_APPLECATION.ipa'.
2020-12-17 00:10:34.983 altool[4011:33028] *** Error: code -18000 (ERROR ITMS-90534: "Invalid Toolchain. Your app was built with an unsupported SDK or version of Xcode. If you plan to submit this build to the App Store, make sure you are using the versions listed in https://help.apple.com/xcode/mac/current/#/devf16aefe3b or later.")
Uploading IPA failed: exit status 1

エラー内容は以下の通りです。

「Invalid Toolchain. Your app was built with an unsupported SDK or version of Xcode. If you plan to submit this build to the App Store, make sure you are using the versions listed in https://help.apple.com/xcode/mac/current/#/devf16aefe3b or later.」とのこと。App StoreでサポートしていないバージョンのXcodeでビルドされたバイナリと指摘を受けています。

Bitriseのシステムレポートを確認する

Bitrise側で使っている Xcode 12.3のバージョンを確認します。Bitriseではスタックのシステムレポートが出力されています。システムレポートを読むことでどんなツールがインストール済みなのか?そのツールのバージョンはどうなっているのか?を知ることができます。

Xcode 12.3.xスタックのシステムレポートは以下の通りです。

Xcodeについての記載を抽出すると下記の通り。

* Xcode Version:
Xcode 12.3
Build version 12C33

うちのMacBook ProにインストールされているRelease版は下図の通り。

f:id:ch3cooh393:20201217094109p:plain

Xcode 12.3 (12C33) と、ビルドバージョンは同じようです。

ただ調べてみたところ、Xcode 12.3のRC版とRelease版のビルド番号は同じとのことです。ここを見るだけでは判断できなさそうです。

Swiftコマンドのバージョンが異なる

僕はCarthage用にビルドしたframeworkを複数のプロジェクトで共有する「Rome」を使っています。RomeはSwiftバージョンごとに生成したバイナリを管理できるため、以下のコマンドをよく利用します。

export SWIFT_VERION=`xcrun swift --version | head -1 | sed 's/.*\((.*)\).*/\1/' | tr -d "()" | tr " " "-"`
echo ${SWIFT_VERION}

f:id:ch3cooh393:20201217100051p:plain

Xcode 12.3.xスタックでは以下の通りでした。

swiftlang-1200.0.44.1-clang-1200.0.32.28

Xcode 12.3 Release版を使っているローカル環境では以下の通りでした。

swiftlang-1200.0.45-clang-1200.0.32.28

このことから BitriseのXcode 12.3.xスタックはまだ RC版を使っているのではないかと推測することができます。

おまけ

スタックの更新状況は、Bitriseの掲示板で stack-updatesタグのついているものを見れば XcodeのRC版なのかRelease版なのかを特定することができます。

discuss.bitrise.io

swiftコマンドのバージョンを調べるなどしなくても済むのでオススメです。Bitriseの掲示板を読みましょう!

僕は Xcode 12.2.x スタックに戻しました。