9
8

More than 3 years have passed since last update.

Xcode11で古いプロジェクトテンプレートを利用する

Last updated at Posted at 2019-09-27

動機

先日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で使えるようにします。

作業後の完成イメージのキャプチャですが、作業後にはプロジェクト作成ウィザードに画像のような形で選択出来るようになります。

スクリーンショット 2019-09-27 17.23.21.png

カスタムテンプレート用のフォルダを作成

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をを付加しました。)

スクリーンショット 2019-09-29 17.06.52.png

作業は以上で完了です。

確認

Xcode11を開いて、プロジェクト新規作成のウィザードを起動します。

  • File -> New -> Project...を選択か、または、ショートカットキーでCmd + Shift + Nです。

Xcode10からカスタムテンプレートとしてコピーしたSingle View AppMy Templates項目に表示されており、選択するとScenes関連なしのプロジェクトを開始出来るようになっているはずです。

まとめ

Xcodeでは、最新のAPIに合わせたテンプレートへ変わることは珍しくないように思いますので、過渡期期間では今後も役に立つかもしれません。

参考🙏

9
8
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
9
8