iOS

DeviceSupportを簡単にセットして、対象外の新しいOSのデバイスをXcodeでビルドできるようにしてみた

xcode-device-support-set

DeviceSupportを簡単にセットして、対象外の新しいOSのデバイスをXcodeでビルドできるようにしてみた

Xcodeと実機のデバイスで、実機ビルドをして、開発するということはよくあると思いますが、たまにデバイスのOSを最新版に更新してしまって、Xcodeでビルドできなくなってしまった!ってことを経験したことがあるiOSエンジニアは多いのではないでしょうか?

XcodeはビルドできるOSのバージョンが決められており、例えばXcode12.4ではiOS14.5以降のデバイスはビルドすることができません。
これはそのXcodeに該当のOSのバージョンのDeviceSupportというファイルが用意されていないことが原因です。
XcodeのXcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/のディレクトリを見てみると、以下のように各バージョンごとのDeviceSupportのファイルが用意されています。 xcode-device-support-set-0
上記のような時に新しいバージョンのXcodeをダウンロードして使える場合は問題ないですが、例えばチームでXcodeのバージョンを揃えたり、新しいXcodeをダウンロードする時間がなかったりする場合は、上記のDeviceSupportに使いたいデバイスのバージョンのものを追加すれば使用することができます。
ちなみに上記のキャプチャは、Xcode12.5のものですが、14.6 のファイルを追加してあります。
しかし追加する場合は、そもそもどこでこのDeviceSupportファイルを取得すればいいかわからないし、この深い階層のとこに毎回個別にセットするのも面倒です。

そこで今回は該当のXcodeに特定のバージョンのDeviceSupportを設定するスクリプトを作成したので、まとめます。

DeviceSupportをダウンロードして、指定のディレクトリにセットするスクリプト

先にスクリプトを載せます。

## Specify the iOS and Xcode version, download the DeviceSupport file and set it in the corresponding version Xcode ($1: iOS version, $2: Xcode version path)
function setDeviceSupport() {
  # null check of arg1
  if [ -z "$1" ]; then
    echo "arg1(iOS version number) is required! e.g. 14.6"; return
  fi
  # null check of arg2
  if [ -z "$2" ]; then
    echo "arg2(xcode version number) is required! e.g. 12.5"; return
  fi
  which svn
  # ①
  echo "Clone $1 DeviceSupport zip from https://github.com/filsv/iPhoneOSDeviceSupport"
  svn export https://github.com/filsv/iPhoneOSDeviceSupport/trunk/$1.zip
  # ②
  unzip $1.zip
  # ③
  mv -f ./$1 /Applications/Xcode$2.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
  # ④
 rm -f $1.zip
  rm -f -r __MACOSX
  echo "Set $1 Device Support file to Xcode$2!"
}

使うときは、setDeviceSupport 14.6 12.5のようにパラメーターをセットして実行だけです。

まず①でDeviceSupportファイルをダウンロードします。
以下のサイトにDeviceファイルの一覧がアップロードされているので、こちらからダウンロードします。


リリースされたばかりのXcodeのバージョンだと、アップロードされていない時もあります。

なおダウンロードには、svnを使っています(この方法が最善かは自信ないです。。。)
なので上記のスクリプトを使う場合、brew install svn などで svnをインストールする必要があります。

②でダウンロードしたファイルを解凍しています。
③で指定のディレクトリにファイルを移動してます。
④で不要なファイルを削除しています。
__MACOSXは圧縮処理の過程で生成されるファイルのようですが、不要なので消します。
あとはこのスクリプトをMacのホームディレクトリにある .zshrcファイルに上記のスクリプトをコピーして、ターミナルを再起動、もしくはsource ~/.zshrcを実行して、スクリプトを実行すれば、DeviceSupportファイルがセットされます。

最後にXcodeを再起動すれば、その変更がXcodeに反映されるので、実機ビルドができるようになります🎉

上記のコードは以下のGitHubのリポジトリにアップしてあります(スター付けてくれると嬉しいです☺️)

なお上記のようなスクリプトをどんどん.zshrcファイルに追加してしますと、コードがどんどん膨らんで、管理が大変になります。
そこで以下のMacの環境構築の自動化の記事で紹介しているリポジトリのように、各ファイルごとに整理すると、管理がしやすくなると思います。
上記のファイルも、Xcode関連のスクリプトをまとめたファイルになります。


今後もこのスクリプトに限らず、面倒だなと思った作業は最初にできる限りスクリプト化して、2回目以降は楽できるようにしたいものです

+1

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA