├── Basic Template.xctemplate
├── TemplateInfo.plist
└── ___FILEBASENAME___.swift
├── LICENSE
├── README.md
└── View, Model & ViewModel.xctemplate
├── Code
├── ___FILEBASENAME___.swift
├── ___FILEBASENAME___View.swift
└── ___FILEBASENAME___ViewModel.swift
├── Storyboard
├── ___FILEBASENAME___.swift
├── ___FILEBASENAME___View.swift
└── ___FILEBASENAME___ViewModel.swift
├── TemplateInfo.plist
├── XIB file
├── ___FILEBASENAME___.swift
├── ___FILEBASENAME___View.swift
└── ___FILEBASENAME___ViewModel.swift
├── XIB filegenerateXIBfile
├── ___FILEBASENAME___.swift
├── ___FILEBASENAME___View.swift
├── ___FILEBASENAME___View.xib
└── ___FILEBASENAME___ViewModel.swift
└── base
├── model.swift
└── viewModel.swift
/Basic Template.xctemplate/TemplateInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Kind
6 | Xcode.IDEKit.TextSubstitutionFileTemplateKind
7 | DefaultCompletionName
8 | Basic
9 | AllowedTypes
10 |
11 | public.swift-source
12 | public.c-header
13 |
14 | Platforms
15 |
16 | com.apple.platform.iphoneos
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Basic Template.xctemplate/___FILEBASENAME___.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import Foundation
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___ {
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Jean-Étienne
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Xcode 9 File Template Examples
2 |
3 | Examples templates used in [my blog article](http://jeanetienne.net/2017/09/10/xcode-templates.html).
4 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/Code/___FILEBASENAME___.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import Foundation
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___ {
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/Code/___FILEBASENAME___View.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import UIKit
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___: UIView {
6 |
7 | init() {
8 | // init for a view instanciated in code
9 | }
10 |
11 | func configure(withViewModel viewModel: ___VARIABLE_productName:identifier___ViewModel) {
12 | // configure the view with a ___VARIABLE_productName:identifier___ViewModel
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/Code/___FILEBASENAME___ViewModel.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import Foundation
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___ {
6 |
7 | private let model: ___VARIABLE_productName:identifier___
8 |
9 | init(with___VARIABLE_productName:identifier___ aModel: ___VARIABLE_productName:identifier___) {
10 | model = aModel
11 |
12 | // Add you own ViewModel logic for a ___VARIABLE_productName:identifier___.
13 | // ...
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/Storyboard/___FILEBASENAME___.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import Foundation
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___ {
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/Storyboard/___FILEBASENAME___View.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import UIKit
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___: UIView {
6 |
7 | init() {
8 | // init for a view instanciated by the Storyboard
9 | }
10 |
11 | func configure(withViewModel viewModel: ___VARIABLE_productName:identifier___ViewModel) {
12 | // configure the view with a ___VARIABLE_productName:identifier___ViewModel
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/Storyboard/___FILEBASENAME___ViewModel.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import Foundation
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___ {
6 |
7 | private let model: ___VARIABLE_productName:identifier___
8 |
9 | init(with___VARIABLE_productName:identifier___ aModel: ___VARIABLE_productName:identifier___) {
10 | model = aModel
11 |
12 | // Add you own ViewModel logic for a ___VARIABLE_productName:identifier___.
13 | // ...
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/TemplateInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Kind
6 | Xcode.IDEKit.TextSubstitutionFileTemplateKind
7 | Platforms
8 |
9 | com.apple.platform.iphoneos
10 |
11 | Options
12 |
13 |
14 | Identifier
15 | productName
16 | Required
17 |
18 | Name
19 | Model:
20 | Description
21 | The name of the Model, View and ViewModel to create
22 | Type
23 | text
24 | Default
25 | MyModel
26 |
27 |
28 | Identifier
29 | viewType
30 | Required
31 |
32 | Name
33 | View type:
34 | Description
35 | The type of view to use
36 | Type
37 | popup
38 | Default
39 | Storyboard
40 | Values
41 |
42 | Storyboard
43 | XIB file
44 | Code
45 |
46 |
47 |
48 | Identifier
49 | generateXIBfile
50 | Name
51 | Also create a XIB file
52 | Description
53 | Whether to create a XIB file with the same name
54 | Type
55 | checkbox
56 | RequiredOptions
57 |
58 | viewType
59 |
60 | XIB file
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/XIB file/___FILEBASENAME___.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import Foundation
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___ {
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/XIB file/___FILEBASENAME___View.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import UIKit
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___: UIView {
6 |
7 | init() {
8 | // init for a view instanciated from a XIB file
9 | }
10 |
11 | func configure(withViewModel viewModel: ___VARIABLE_productName:identifier___ViewModel) {
12 | // configure the view with a ___VARIABLE_productName:identifier___ViewModel
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/XIB file/___FILEBASENAME___ViewModel.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import Foundation
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___ {
6 |
7 | private let model: ___VARIABLE_productName:identifier___
8 |
9 | init(with___VARIABLE_productName:identifier___ aModel: ___VARIABLE_productName:identifier___) {
10 | model = aModel
11 |
12 | // Add you own ViewModel logic for a ___VARIABLE_productName:identifier___.
13 | // ...
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/XIB filegenerateXIBfile/___FILEBASENAME___.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import Foundation
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___ {
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/XIB filegenerateXIBfile/___FILEBASENAME___View.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import UIKit
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___: UIView {
6 |
7 | init() {
8 | // init for a view instanciated from a XIB file
9 | }
10 |
11 | func configure(withViewModel viewModel: ___VARIABLE_productName:identifier___ViewModel) {
12 | // configure the view with a ___VARIABLE_productName:identifier___ViewModel
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/XIB filegenerateXIBfile/___FILEBASENAME___View.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/XIB filegenerateXIBfile/___FILEBASENAME___ViewModel.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import Foundation
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___ {
6 |
7 | private let model: ___VARIABLE_productName:identifier___
8 |
9 | init(with___VARIABLE_productName:identifier___ aModel: ___VARIABLE_productName:identifier___) {
10 | model = aModel
11 |
12 | // Add you own ViewModel logic for a ___VARIABLE_productName:identifier___.
13 | // ...
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/base/model.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import Foundation
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___ {
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/View, Model & ViewModel.xctemplate/base/viewModel.swift:
--------------------------------------------------------------------------------
1 | // ___FILEHEADER___
2 |
3 | import Foundation
4 |
5 | class ___FILEBASENAMEASIDENTIFIER___ {
6 |
7 | private let model: ___VARIABLE_productName:identifier___
8 |
9 | init(with___VARIABLE_productName:identifier___ aModel: ___VARIABLE_productName:identifier___) {
10 | model = aModel
11 |
12 | // Add you own ViewModel logic for a ___VARIABLE_productName:identifier___.
13 | // ...
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------