最近、MacBook を買い換えたので Git から新しい端末へ iPhone アプリのプロジェクトをクローンしてビルドしています。その時に carthage update を実行すると古いプロジェクトでエラーが発生しました。
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 12.0 to 17.5.99.
外部ライブラリが古すぎるということだろうな...
使わないというのが一番いいのかもしれませんが、とりあえず、xconfig で、IPHONEOS_DEPLOYMENT_TARGET を一時的に変更するスクリプトにより対処しました。
このスクリプトを使えば、carthage update は成功するので書いておきます。
シェルスクリプト
#!/usr/bin/env bash
set -euo pipefail
xcconfig=$(mktemp /tmp/static.xcconfig.XXXXXX)
trap 'rm -f "$xcconfig"' INT TERM HUP EXIT
echo 'IPHONEOS_DEPLOYMENT_TARGET = 12.0' >> $xcconfig
export XCODE_XCCONFIG_FILE="$xcconfig"
carthage "$@"
このスクリプトは、Carthage を使用して依存ライブラリをビルドする際に、カスタムの xcconfig ファイルを一時的に作成し、特定のビルド設定(ここでは iOS のデプロイメントターゲット)を上書きするために使用できます。具体的には、IPHONEOS_DEPLOYMENT_TARGET
を12.0に設定しています。
スクリプト解説
1. Shebang とスクリプトの開始
#!/usr/bin/env bash
-
Shebang (
#!/usr/bin/env bash
):
スクリプトがbash
シェルで実行されることを指定しています。env
を使用することで、システムの環境に依存せず、bash
を見つけて実行します。
2. エラーハンドリングの設定
set -euo pipefail
-
set -e
:
コマンドがエラー(非ゼロの終了ステータス)を返した場合、スクリプトを即座に終了します。 -
set -u
:
未定義の変数を参照しようとするとエラーを発生させます。 -
set -o pipefail
:
パイプライン内のどのコマンドが失敗してもスクリプト全体をエラーとします。
まとめると、set -euo pipefaile
になり、スクリプトの信頼性が向上し、予期しない動作を防ぎます。
3. 一時的なxcconfigファイルの作成
xcconfig=$(mktemp /tmp/static.xcconfig.XXXXXX)
-
mktemp /tmp/static.xcconfig.XXXXXX
:
一時的なファイルを作成します。XXXXXX
はランダムな文字列で置き換えられ、ユニークなファイル名が生成されます。このファイルは後で xcconfig の設定を保持します。 -
xcconfig=
:
生成された一時ファイルのパスを変数 xcconfig に格納します。
4. 一時ファイルのクリーンアップ設定
trap 'rm -f "$xcconfig"' INT TERM HUP EXIT
-
trap
:
スクリプトが終了する際に特定のコマンドを実行するように設定します。ここでは、スクリプトが中断(INT
)、終了(TERM
)、ハングアップ(HUP
)、または終了(EXIT
)する際に、一時ファイルを削除します。 -
rm -f "$xcconfig"
:
xcconfig ファイルを削除します。これにより、一時ファイルが残らず、システムのクリーンな状態が保たれます。
5. xcconfigファイルへの設定追加
echo 'IPHONEOS_DEPLOYMENT_TARGET = 12.0' >> $xcconfig
-
echo 'IPHONEOS_DEPLOYMENT_TARGET = 12.0' >> $xcconfig
:
xcconfig ファイルに、iOSのデプロイメントターゲットを12.0に設定する行を追加します。 -
IPHONEOS_DEPLOYMENT_TARGET
:
アプリがサポートする最低限のiOSバージョンを指定します。ここでは、iOS 12.0以上を対象としています。
6. 環境変数の設定
export XCODE_XCCONFIG_FILE="$xcconfig"
-
export XCODE_XCCONFIG_FILE="$xcconfig"
:
環境変数XCODE_XCCONFIG_FILE
に、先ほど作成した一時的な xcconfig ファイルのパスを設定します。Xcode はこの環境変数を参照し、ビルド時に指定された xcconfig ファイルの設定を適用します。
7. Carthageの実行
carthage "$@"
-
carthage "$@"
:
スクリプトに渡された全ての引数("$@"
)をそのままCarthageに渡して実行します。
実際の使用例
Carthage コマンドの実行
スクリプトを使用して Carthage コマンドを実行します。例えば、iOS用にライブラリをビルドする場合:
./carthage.sh update --platform iOS --use-xcframeworks
このコマンドにより、Carthage は指定された xcconfig ファイルを参照してビルドを実行し、IPHONEOS_DEPLOYMENT_TARGET
が12.0に設定された状態でライブラリをビルドします。
さいごに
とりあえず、carthage のビルドもプロジェクトのビルドも成功しました。ちなみエラーが発生したライブラリは、PKHUD でした。