くま's Tech系Blog

基本的には技術で学んだことを書き留めようと思います。雑談もやるかもね!

Xcodeのテンプレートファイルを設定する

今回はXcodeで自分で設定したテンプレートファイルを選択できるようにします。

例えば、ViewControllerを作成するときに毎回同じ内容をコピペしてクラス名を変えるということをしていませんか?

自分は似たようなことをしていたのでテンプレート化の方法を探しました。 結果的にテンプレート化できるので方法をまとめようと思います。

テンプレート定義の場所

既存のテンプレートの場所は下記にあります。(Xcode.appは場合によっては異なる場合があるので適宜置き換えてください)

/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/

開いてみるとTemplatesディレクトリにはFile TemplatesProject 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 }
}

参照

yamatooo.blog