本文由 简悦 SimpRead 转码, 原文地址 itcraftapps.com
了解如何在 XCode 中逐步创建自定义模板。
改进工作流程一直是程序员的心头大事。我们一直在寻找能加快编码、测试或组织工作的工具和解决方案。我发现使用模板来处理重复性任务是提高工作效率的好方法。今天,我想向大家展示我是如何让XCode模板为我所用的。希望本教程也能对你改进日常工作有所帮助。
目录
什么是 XCode 模板?
XCode Templates 是一种创建代码片段的工具,可为您实现目标提供更好的起点。在本教程中,我将引导您为 MVVM 项目架构准备一个自定义模板。
通常,我们需要从头开始为一个新模块创建结构和文件,而这一过程每次都基本相同。例如,在 MVVM 模式中,要创建一个登录模块,我们需要创建文件夹和至少 4 个类:
- 登录模块文件夹
- 登录视图
- 登录视图模型
- 登录视图控制器
- 登录模型
使用所需代码添加每个类都很耗时。有了 XCode 模板,我们就可以加快将它们添加到项目中的过程。我将向你展示如何为新的 MVVM 模块配置模板。
安装 XCode 模板
要在 XCode 中安装模板,我们需要添加一个包含自定义模板的新文件夹。
XCode iOS 模板位置
所有 Xcode 自定义模板文件都位于 ~/Library/Developer/Xcode/Templates/ 中,并按文件夹名称分组。您可以手动添加,或使用终端运行以下命令添加:
mkdir ~/Library/Developer/Xcode/Templates/Custom Templates
文件模板结构
模板主文件夹
每个 XCode 文件模板都是一个单独的文件夹,扩展名为 .xctemplate。如果你想创建一个名为 "View, Model & ViewModel "的模板,你必须在 ~/Library/Developer/Xcode/Templates/File Templates/Custom Templates 中创建一个名为 "View, Model & ViewModel.xctemplate " 的文件夹。
模板内部文件夹和文件
TemplateInfo.plist 文件包含基本的模板描述。在使用向导创建 XCode 应用程序模板时,我们可以通过以下实现键入模块名称。
<?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.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 of the Model, View and ViewModel to create</string>
<key>Type</key>
<string>text</string>
<key>Default</key>
<string>Module1</string>
</dict>
</array>
</dict>
</plist>
您可以在实际模板文件中加入几乎任何内容。您可以使用文本宏,如 FILEBASENAME 来引用文件名。文件名来源于新文件向导中设置的 TemplateInfo.info 文件中的 productName 选项。
实现和结构
我的模板文件夹结构和 Swift 类是这样的:
步骤 1. 让我们从头开始。下面是 ViewController 的实现:
import UIKit
class ___FILEBASENAMEASIDENTIFIER___: UIViewController {
let viewModel: ___VARIABLE_productName___ViewModel
let mainView: ___VARIABLE_productName___View
init() {
viewModel = ___VARIABLE_productName___ViewModel(withModel: ___VARIABLE_productName___())
mainView = ___VARIABLE_productName___View()
super.init(nibName: nil, bundle: nil)
mainView.configure(withViewModel: viewModel)
}
required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
setupView()
}
private func setupView() {
view.addSubview(mainView)
mainView.snp.makeConstraints { make in
make.top.leading.trailing.bottom.equalToSuperview()
}
}
}
正如您所看到的,我们实现了以下功能:
- 声明 viewModel 和 mainView 变量。它将包含文件向导中设置的 TemplateInfo.plist 中的产品名称
- 初始化上述变量
- 默认初始化
- 所需的初始化(我们从代码中使用 ViewControllers,而不是 Storyboards)
- viewDidLoad 实现
- 添加 mainView 并设置 SnapKit 约束的 setupView 函数
步骤 2. 模型实现:
导入基金会
class ___FILEBASENAMEASIDENTIFIER___ {
}
模型类名称将由 XCode 自动生成,因此以上只是一个示例。
步骤 3. 查看实现:
import Foundation
class ___FILEBASENAMEASIDENTIFIER___ {
}
类视图
类 view 包含一个默认初始化器和一个必需初始化器--这两个初始化器都是通过代码初始化 View 所必需的。我们还需要配置绑定 viewModel 和视图的函数。请注意,ViewModel 名称与 ViewController 中的 ViewModel 名称相同。
步骤 4. 实现 ViewModel:
import UIKit
class ___FILEBASENAMEASIDENTIFIER___: UIView {
init() {
super.init(frame: CGRect.zero)
}
required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func configure(with viewModel: ___VARIABLE_productName:identifier___ViewModel) {
// configure the view with a ___VARIABLE_productName:identifier___ViewModel
}
}
ViewModel 使用第 2 页中创建的 Model 进行初始化。
在 XCode 中使用文件模板
要开始使用,您只需点击文件 -> 新建 -> 文件...
在列表中找到你的模板。
然后键入模块名称。
并将其添加到项目中。
Xcode 模板中的高级选项
您可以在 GitHub 上找到一些演示可用选项的示例文件模板。 您还可以对 Xcode 默认模板进行逆向工程,了解如何改进自定义模板以便更好地使用。它们位于 Xcode.app/Contents/Developer/Library/Xcode/Templates 或 Xcode.app/Contents/Developer/Platforms/<platform_name>/Developer/Library/Xcode/Templates 中。
共享 XCode 项目模板
要与他人共享模板,您需要发送所有模板文件。要让他人使用,他们需要将模板添加到以下文件夹:~/Library/Developer/Xcode/Templates。 并相应命名。现在,模板就可以在 XCode 中使用了。
摘要
这是一个完整的 XCode 模板,可加快编码速度。你可以根据自己的需要修改代码的任何部分。以下是有关文本宏引用的帮助提示:
TemplateInfo.plist 可以更复杂,例如,你可以使用向导添加一个选择列表,按类型挑选文件。你也可以为新项目和目标创建自己的默认实现和结构。