5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MVVM用のXcodeのテンプレート作ってみた

Last updated at Posted at 2019-10-02

最近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/

こんな感じになってたらOKです。
スクリーンショット 2019-10-02 12.27.55.png

___FILEBASENAME___.swiftを編集していきます。
一回の操作でViewControllerとViewModelを作りたかったので自分はこんな感じにしました。
スクリーンショット 2019-10-02 11.41.53.png

___VARIABLE_NAME___ViewController.swift
//___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()
    }
}

___VARIABLE_NAME___ViewModel.swift
//___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() {
    }
}
TemplateInfo.plist
<?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...からの
スクリーンショット 2019-10-02 12.01.49.png
スクリーンショット 2019-10-02 12.02.06.png
↓↓↓ここで決めたファイル名は反映されないので適当にEnter押しちゃってください
スクリーンショット_2019_10_02_12_06.png
スクリーンショット 2019-10-02 12.02.37.png
スクリーンショット 2019-10-02 12.02.50.png

良い感じに出来てますね!
気がかりはファイル名を決める画面が全く機能してないところですね、できればスキップしたい、、、
なにか回避策があればコメントいただけると嬉しいです。

今回のコードは↓↓↓にアップしてます。
https://github.com/akasasan454/Xcode_template

追記 2019/12/2

Xcodeのバージョンアップの度に消えてしまうのでカスタムテンプレートの置き場所を
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/
↓↓↓↓↓↓↓
~/Library/Developer/Xcode/Templates
に変更してください。

5
6
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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?