動機
先日iOS13がリリースされましたが、アプリを新規に始める場合に、iOS11〜1OS13あたりをターゲットに設定することは、まだまだあるかと思います。
開発では、新しいXcode11をメインに使用したいのですが、Single View App
テンプレートでプロジェクトを新規作成した場合、そのままターゲット設定をiOS13未満にするとScenes関連のclassが使用できないためコンパイルエラーがでます。
**Scenes**とは、iOS13で登場したひとつのアプリプロセスに対してマルチUI(マルチウインドウ)をサポートするための仕組みのようで、現状では主にiPadでの用途があるようです。これによってSceneDelegate.swift
と関連設定が、デフォルトのプロジェクトに含まれているためです。
ターゲットiOSバージョンによってはXcode11で、Scenes関連の設定が含まれないXcode10バージョンのSingle App Viewテンプレート
もまだまだ使いたい時があるなあ、と思ったのでXcode10からコピーしてXcode11からも使えるようにしておけば便利かもと思った次第です。
というわけで、当記事ではXcodeのカスタムテンプレート追加手順を、表題の件に絞ってまとめておきます。
そもそもそういう頻度が少ない場合
そんなにプロジェクト新規作成の頻度が少ない場合、後述するテンプレートのコピーをしなくても、Xcode10&11併用環境であればiOS12〜以下をターゲットする場合、普通にXcode10.3でプロジェクトを新規作成して開始すれば大丈夫です。そうでない場合は、新規作成のためだけに古いXcodeを保持しておかなければならない、というデメリットがあります。(マイグレーションが必要な時などに役には立つのですが)
または手作業でXcode11で作成したプロジェクトのSceneDelegate.swift
などを消すことも可能。しかし何度も行う場合には省略したいとも思います。
- Xcode 11 - Opt out of UISceneDelegate/SwiftUI on iOS 13
- How to remove SceneDelegate code from iOS 13 project?
テンプレートのコピー手順
では、Xcode10から古いタイプのSingle View App
のプロジェクトテンプレートをコピーしてきて独自のテンプレートとして、Xcode11で使えるようにします。
作業後の完成イメージのキャプチャですが、作業後にはプロジェクト作成ウィザードに画像のような形で選択出来るようになります。
カスタムテンプレート用のフォルダを作成
Xcode独自テンプレートは以下のパス配下に追加する決まりになってます。
# 独自Projectテンプレートのパス
~/Library/Developer/Xcode/Templates/Project\ Template
# 独自Fileテンプレートのパス
~/Library/Developer/Xcode/Templates/File\ Template
テンプレートを置くフォルダを作成。テンプレートのカテゴリ表示はフォルダ名が反映されるのでMy Templates
という名前のフォルダを作成することにします。
$ mkdir -p ~/Library/Developer/Xcode/Templates/Project\ Templates/My\ Templates
Xcode10.3からのテンプレート複製
フォルダの準備ができましたので、次は中身です。プロジェクト新規作成ウィザードに表示されるテンプレートはXcode.app
パッケージを開いた中に入ってますので、そいつをコピーします。Xcode10.3がない場合はダウンロードしてくる必要があります。Xcode.appを右クリックからパッケージの内容を表示
で辿っていくか、以下のコマンドを実行して開きます。
# パスの中の`Xcode_10.3.app`部分は適宜変更してください。
open /Applications/Xcode_10.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project\ Templates/iOS/Application/
Finderで操作するか、以下のコマンドを実行しXcode_10.3.app
のパッケージの中からSingle View App.xctemplate
をカスタムテンプレート用フォルダへとコピーします。
cp -r /Applications/Xcode_10.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project\ Templates/iOS/Application/Single\ View\ App.xctemplate ~/Library/Developer/Xcode/Templates/Project\ Templates/My\ Templates/Single\ View\ App.xctemplate
追記(2019/09/29):
**[重要] テンプレートのIdentifierがXcode11のオリジナルと重複していると、ウィザードにオリジナルの方のSingle View Appアイコンが表示されなくなってしまっていた**ので、
コピーした方のSingle View App.xctemplate
の中のTemplateInfo.plist
ファイルを開いて(Xcodeが起動するはず)Identifier
部分を何か好きな文字列に編集を行います。(↓画像の例ではオリジナルの文字列に_Xcode10.3
をを付加しました。)
作業は以上で完了です。
確認
Xcode11を開いて、プロジェクト新規作成のウィザードを起動します。
-
File -> New -> Project...
を選択か、または、ショートカットキーでCmd + Shift + N
です。
Xcode10からカスタムテンプレートとしてコピーしたSingle View App
がMy Templates
項目に表示されており、選択するとScenes関連なしのプロジェクトを開始出来るようになっているはずです。
まとめ
Xcodeでは、最新のAPIに合わせたテンプレートへ変わることは珍しくないように思いますので、過渡期期間では今後も役に立つかもしれません。