0
0

Carthage で IPHONEOS_DEPLOYMENT_TARGET を設定

Posted at

最近、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 は成功するので書いておきます。

シェルスクリプト

carthage.sh
#!/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_TARGET12.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 でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0