Swift愛好会のアドベントカレンダー2日目担当の @toshi0383 です。
小ネタを投下します!
An error was encountered while enabling development on this device
使っているXcodeよりもOSが先に新しくなってしまって、こういうエラーが出ることがあります。
デバイス再起動してとか書いてありますが、単純にXcodeが古くてOSのサポートファイルがないために起きることが多いです。
以下のようにDeviceSupportのディレクトリを見てみると、Xcode9.1には11.1のイメージがありますが、Xcode9.0.1にはないことがわかります。
新しいXcodeをダウンロードしてもいいですが、最近になってもまだちょっとバージョンを上げるとSwiftの互換性がなくなったりするので、単純に11.1のフォルダごとコピーして同じ状態にしてあげましょう。
Xcodeを再起動すると設定が読み込まれて上のエラーが出なくなると思います。
DeviceSupportってどこよ
ただこのDeviceSupportは結構深いところにあるので、探すのが面倒です。
毎回消耗していたので、以下のスクリプトを書きました。
https://github.com/toshi0383/scripts/blob/master/xcode/open-device-support-dir.sh
これを使うと、コマンド一発でインストールされているXcodeそれぞれのDeviceSupportを探して、上記のようにFinder窓をパパッと表示してくれます。
cmdshelfで管理
cmdshelfで管理していると、スクリプトの更新もすぐに反映することができて便利ですね。
$ cmdshelf remote add toshi0383-scripts git@github.com:toshi0383/scripts.git
$ cmdshelf run xcode/open-device-support-dir.sh tvOS
コマンド名の一部しか思い出せないときもcmdshelf list
からgrepできます。
$ cmdshelf list | grep device
xcode/open-device-support-dir.sh
私もさっき思い出せなくて「あーそれそれ。」という感じでした。
自分が何を実行しているのか気になる人はcmdshelf cat
しましょう。
$ cmdshelf cat xcode/open-device-support-dir.sh | head
#!/bin/bash
OS=${1:-'[a-z]'}
for xcode in `ls -d /Applications/Xcode*.app`
do
case $OS in
i[oO][sS])
dirs="$dirs ${xcode}/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport"
;;
tv[oO][sS])
dirs="$dirs ${xcode}/Contents/Developer/Platforms/AppleTVOS.platform/DeviceSupport"
まとめ
明日はSwift愛好会のUI番長 @fumiyasac@github が何か書くそうです。
楽しみです!