今回はXcodeで自分で設定したテンプレートファイルを選択できるようにします。
例えば、ViewControllerを作成するときに毎回同じ内容をコピペしてクラス名を変えるということをしていませんか?
自分は似たようなことをしていたのでテンプレート化の方法を探しました。 結果的にテンプレート化できるので方法をまとめようと思います。
テンプレート定義の場所
既存のテンプレートの場所は下記にあります。(Xcode.appは場合によっては異なる場合があるので適宜置き換えてください)
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/
開いてみるとTemplatesディレクトリにはFile Templates
とProject Templates
があります。
今回はファイルのテンプレートを作りたいので、File Templatesを開きます。
File Templates配下にあるMultiPlatform
フォルダにファイル新規作成したときに表示される項目があります。
そして、テンプレートは.xctemplate
というネームスペースのファイルで構成されています。
今回は最も基本のSwift File.xctemplate
配下にあるというファイルをコピーします。
コピー先は以下のカスタムテンプレートを置くパスにします。 ただし、Templatesフォルダは存在しないので作成する必要があります。
~/Library/Developer/Xcode/Templates
先程のSwift File.xctemplateフォルダ配下のファイルをコピーします。 今回はコピーした後は以下のようなフォルダ構成です。
この状態でXcodeでファイルを新規で追加しようとすると以下のようにカスタムのテンプレートが候補に上がってくるはずです。
File Templatesがセクション名でTest File.xctemplateのTest Fileの部分が項目名となっています。
テンプレートファイルのカスタマイズ
ファイルを新規作成する際に特定のコードが入った状態で作成されたい場合には先程コピーしたテンプレートを編集します。
先程コピーしてペーストしたファイル___FILEBASENAME___.swift
を編集します。(~/Library/Developer/Xcode/Templatesにあるファイルです)
ちなみに、___FILEBASENAME___
は作成したファイル名が入ります。
例えば、テンプレートを以下にすると作成したときのファイル名で作成されるようになります。
import RxSwift import RxCocoa protocol ___FILEBASENAME___Inputs: AnyObject { } protocol ___FILEBASENAME___Outputs: AnyObject { } protocol ___FILEBASENAME___Type: AnyObject { var inputs: ___FILEBASENAME___Inputs { get } var outputs: ___FILEBASENAME___Outputs { get } } class ___FILEBASENAME___: ___FILEBASENAME___Type, ___FILEBASENAME___Inputs, ___FILEBASENAME___Outputs { var inputs: ___FILEBASENAME___Inputs { return self } var outputs: ___FILEBASENAME___Outputs { return self } }