最近RxSwiftを使ったMVVMを勉強してるのですが毎回ViewController作って、ViewModel作って、連結部分書いてってやるの流石に面倒になってきたのでXcodeのテンプレート作ることにしました。
既存のテンプテートはここにあるみたいです。
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/
1から作るのはめんどくさそうなので一番シンプルそうなSwiftファイルのテンプレートをコピーしていじっていこうと思います。
Custom
というディレクトリ名で作ってみます。
sudo mkdir /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/Custom/
そして既存のSwiftファイルのテンプレートをコピーしてくる、ついでMVVM.xctemplate
にリネーム
sudo cp -r /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/Source/Swift\ File.xctemplate /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/Custom/MVVM.xctemplate
確認してみます。
open /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/
___FILEBASENAME___.swift
を編集していきます。
一回の操作でViewControllerとViewModelを作りたかったので自分はこんな感じにしました。
//___FILEHEADER___
import UIKit
import RxSwift
import RxCocoa
class ___VARIABLE_NAME___ViewController: UIViewController {
private var disposeBag = DisposeBag()
private let viewModel = ___VARIABLE_NAME___ViewModel()
override func viewDidLoad() {
super.viewDidLoad()
configure()
}
private func configure() {
//outputs
//inputs
viewModel.inputs.configure()
}
}
//___FILEHEADER___
import Foundation
import RxSwift
import RxCocoa
protocol ___VARIABLE_NAME___ViewModelInputs {
func configure()
}
protocol ___VARIABLE_NAME___ViewModelOutputs {
}
protocol ___VARIABLE_NAME___ViewModelType {
var inputs: ___VARIABLE_NAME___ViewModelInputs { get }
var outputs: ___VARIABLE_NAME___ViewModelOutputs { get }
}
final class ___VARIABLE_NAME___ViewModel: ___VARIABLE_NAME___ViewModelType, ___VARIABLE_NAME___ViewModelInputs, ___VARIABLE_NAME___ViewModelOutputs {
//Properties
private var disposeBag = DisposeBag()
var inputs: ___VARIABLE_NAME___ViewModelInputs { return self }
var outputs: ___VARIABLE_NAME___ViewModelOutputs { return self }
//Functions
func configure() {
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Kind</key>
<string>Xcode.IDEFoundation.TextSubstitutionFileTemplateKind</string>
<key>Description</key>
<string>An empty Swift file.</string>
<key>Summary</key>
<string>An empty Swift file</string>
<key>SortOrder</key>
<string>30</string>
<key>AllowedTypes</key>
<array>
<string>public.swift-source</string>
</array>
<key>DefaultCompletionName</key>
<string>File</string>
<key>MainTemplateFile</key>
<string>___FILEBASENAME___.swift</string>
<!-- 追加ここから -->
<key>Options</key>
<array>
<dict>
<key>Identifier</key>
<string>NAME</string>
<key>Required</key>
<true/>
<key>Name</key>
<string>名称を入力してください。 Name:</string>
<key>Description</key>
<string>「Hoge」と入力するとHogeViewController,HogeViewModelが生成されます。</string>
<key>Type</key>
<string>text</string>
<key>Default</key>
<string>Hoge</string>
</dict>
</array>
<!-- 追加ここまで -->
</dict>
</plist>
変数の利用方法などこちらのサイト様を参考にさせていただきました。
設定は以上になります。確認してみましょう。
New File...
からの
↓↓↓ここで決めたファイル名は反映されないので適当にEnter押しちゃってください
良い感じに出来てますね!
気がかりはファイル名を決める画面が全く機能してないところですね、できればスキップしたい、、、
なにか回避策があればコメントいただけると嬉しいです。
今回のコードは↓↓↓にアップしてます。
https://github.com/akasasan454/Xcode_template
追記 2019/12/2
Xcodeのバージョンアップの度に消えてしまうのでカスタムテンプレートの置き場所を
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/
↓↓↓↓↓↓↓
~/Library/Developer/Xcode/Templates
に変更してください。