---
# System prepended metadata

title: 在Xcode新增程式模板
tags: [Swift, Xcode]

---

# 在Xcode新增程式模板

###### tags: `Xcode`, `Swift`

前公司專案的架構是用MVVM-C，在新增一個分頁時，通常要新增Model、View Model、View Controller和Coordinator。比如LoginModel、LoginViewModel...之類，而這些檔案的內容格式其實大同小異，如果每次都要從舊有的檔案複製貼上，實在是很浪費時間。

因此，把常用的程式碼建成模板，之後新增檔案就會變得輕鬆愉快

Xcode的Templates放在`/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates`路徑底下

我們在這新增一個MVVMC.xctemplate的資料夾

要新增模板，需要創建兩樣東西

1. TemplateInfo.plist -> 模板的內容欄位設定
2. ___ FILEBASENAME ___.swift -> 模板的程式碼內容

TemplateInfo內容如下
```
<?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>Image</key>
	<dict>
		<key>FileTypeIcon</key>
		<string>swift</string>   <--- 設置icon，這邊與一般Swift檔相同
	</dict>
	<key>Kind</key>
	<string>Xcode.IDEKit.TextSubstitutionFileTemplateKind</string>
	<key>Platforms</key>
	<array>
		<string>com.apple.platform.iphoneos</string>  <--- 支援的平台
	</array>
	<key>Options</key>
	<array>
		<dict>
			<key>Identifier</key>
			<string>productName</string>
			<key>Required</key>
			<true/>
			<key>Name</key>
			<string>Module Name</string>
			<key>Description</key>
			<string>The name for MVVMC files</string>
			<key>Type</key>
			<string>text</string>
			<key>Default</key>
			<string>Module1</string>
		</dict>
	</array>
</dict>
</plist>

```

接著舉View Controller的程式碼作為示範

### View Controller
模板裡直接import好需要的套件、寫好要綁定的VM和各種必備的properties
寫好一次後就不用再傻傻地複製貼上了
```
import UIKit
import SnapKit
import RxSwift
import RxCocoa

class ___FILEBASENAME___: UIViewController {

    var viewModel: ___VARIABLE_productName___ViewModelPrototype?

    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
        bind(viewModel)
    }

    private let disposeBag = DisposeBag()
}

private extension ___FILEBASENAME___ {

    func setupUI() {

    }

    func bind(_ viewModel: ___VARIABLE_productName___ViewModelPrototype?) {
        
    }

}
```

建完模板後，資料夾內部有這些檔案
![](https://i.imgur.com/QW2QT66.png)


### 實際使用
之後要新增檔案時，只需到File > New > File
往下拉到Templates，點選我們建立好的模板
![](https://i.imgur.com/SaS2xfx.png)

輸入檔名，也就是自動替換掉上面的___ FILEBASENAME ___
![](https://i.imgur.com/2E6bV5a.png)

![](https://i.imgur.com/7u0E6Fl.png)

一個步驟就幫我們生成四份檔案
這種感覺實在太美妙😌


