Xcode Cloud で Compose Multiplatform を使用した iOS アプリのビルドを行う際にハマったことを共有したいと思います。
Xcode Cloud 環境
- Xcode 15.4
- macOS Sonoma 14.5
Java のインストールが必要
Gradle で Kotlin のコードをビルドするために Java が必要となりますが、mac には Java が入っていないのでインストールする必要があります。
Xcode Cloud で Git リポジトリをクローンした後に実行させたい処理を記載できる ci_post_clone.sh
を使用して Java をインストールします。
#!/bin/zsh
brew install openjdk@17
ここらへんに関しては DroidKaigi2022 のリポジトリを参考にさせてもらいました 🙏
ちなみに、CI の度に Java をインストールするのは時間がかかりそうですが、何回か試した感じ 2分30秒 ぐらいなので許容範囲かなと思います。
インストールが完了した後は PATH を通して完了、と思いきや、ここからがハマりました…。
Java が見つからない ~ The operation couldn’t be completed. Unable to locate a Java Runtime. ~
DroidKaigi のリポジトリを参考に ci_pre_xcodebuild.sh
を使用し PATH を通す処理を追加しましたが、xcodebuild
が実行されると Java が見つからないエラーが出続けました。
#!/bin/zsh
export PATH="/usr/local/opt/openjdk@17/bin:$PATH"
# これもダメだった↓
# echo 'export PATH="/usr/local/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc
# source ~/.zshrc
Compile Kotlin Framework
の実行時に Java が見つからないエラー
Run custom shell script 'Compile Kotlin Framework'
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.
Command PhaseScriptExecution failed with a nonzero exit code
原因
色々と試してみると、 ci_post_clone.sh
や ci_pre_xcodebuild.sh
で PATH を通したりしても、 xcodebuild
には引き継がれない っぽいことが判明。
同じような内容の投稿が Stack Overflow にもありました。
解決策と最終的な記述
xcodebuild
のタイミングで PATH が通っていれば良いと考え、Kotlin のコードをビルドする Compile Kotlin Framework
で PATH が通るように対応しました。
1: ci_post_clone.sh
で Java をインストールし、 PATH の記述を ~/.zshrc
に追加
#!/bin/zsh
brew install openjdk@17
echo 'export PATH="/usr/local/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc
2: Compile Kotlin Framework
で source ~/.zshrc
を呼ぶ
これで Java が見つかるようになり、ビルドできるようになりました。
おわりに
結果としては非常にシンプルになりましたが、ここに到達するまでにだいぶハマりました…
結局自分は20回目でやっとビルドが成功したので、この記事の内容が誰かの役に立てば幸いです。