Xcode Tips 006:自定义 Xcode 模板

    科技2025-01-26  3

    Python实战社群

    Java实战社群

    长按识别下方二维码,按需求添加

    扫码关注添加客服

    进Python社群▲

    扫码关注添加客服

    进Java社群▲

    作者丨齐小白

    来源丨知识小集(ID:zsxjtip)

    Xcode 模板是用来创建代码片段的工具。当你的工程中有很多可以标准化的代码时,比如 MVVM 架构中的各个组件,使用模板可以快速帮你生成代码,避免手动去新建 MVVM 每个组件的文件,然后再手动敲每个组件的通用代码。而且模板可以集成进 Xcode 的 新建文件 面板中,以我们熟悉的方式来创建。实际上面板中的项目都是现成的模板。

    Xcode 所有的自定义的模板文件都放在 ~/Library/Developer/Xcode/Templates/ 中,可以按自己的需要在这个目录中创建一些子文件夹,这些子目录会以分组的形式出现在 新建文件 面板中,每个子文件夹可以定义多个模板。我们在这创建一个 Custom Templates 子目录。

    每个 Xcode 文件模板都是以 .xctemplate 为扩展名的独立的文件夹。我们可以创建一个 MVVM.xctemplate 文件夹。然后在文件夹中新建一个 TemplateInfo.plist 文件来描述模板。这是个 XML 文件,如下所示:

    <!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>MVVM</string> <key>Type</key> <string>text</string> <key>Default</key> <string>MVVM Template</string> </dict> </array> </dict> </plist>

    在这个配置文件中,需要注意一个值 Identifier,即创建文件时输入的一个标识,我们会在后续的文件或文件夹中,以 __VARIABLE_productName__ 作为变量值来替换所有引用到这个值的地方,包括文件夹名称、文件名称、和文件中的类名和变量名等。

    实际上这时我们就可以在新建文件面板中看到一个 Icon 了。不过我们还需要补全代码。

    我们简单地以 视图控制器和 ViewModel 为例。我们在 MVVM.xctemplate 下添加一个文件夹,命名为 __VARIABLE_productName__,同时在这个子文件夹下分别新建文件 __VARIABLE_productName__ViewController.swift和 __VARIABLE_productName__ViewModel.swift,内容分别如下:

    // __VARIABLE_productName__ViewController.swift import UIKit class ___VARIABLE_productName___Controller: 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() } } // __VARIABLE_productName__ViewModel.swift import UIKit class ___VARIABLE_productName___ViewModel { private let model: __VARIABLE_productName: identifier__ init(withModel model: __VARIABLE_productName: identifier__) { self.model = model } }

    这时我们便可以在新建文件面板中通过我们的自定义模板来创建文件了,如下图。

    当然这里只是一个简单的示例,还有一些地方需要完善,比如说自定义新建文件面板中的图标,以 Group 的形式新增文件夹等等,读者可以自行探索。

    程序员专栏 扫码关注填加客服 长按识别下方二维码进群

    近期精彩内容推荐:  

     程序员写的这一行代码,被国家博物馆收藏了

     2020 年 9 月程序员工资统计,我扯后腿了~

     提高国内访问 GitHub 的速度的 9 种方案

     Python是强类型语言,还是弱类型语言?

    在看点这里好文分享给更多人↓↓

    Processed: 0.010, SQL: 8