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をダウンロードして使える場合は問題ないですが、例えばチームで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回目以降は楽できるようにしたいものです