Xcode 9自定义模板

作为开发人员,我们不断努力改善我们的开发流程。 无论是与编写代码,自动化某些事情有关,还是只是保持更高的生产力和专注力。 在这里,我们将讨论如何使用Xcode自定义模板来改进文件的创建。 我们中的许多人可能没有听说过它,因为Apple并未推广此功能,并且关于此主题的文档也很少。 但是无论如何,这样的功能仍然存在,并且可以使用一些预填充的样板代码极大地改善文件或整个模块的创建。

作为示例,我们将设置UIView模板,该模板还将创建一个相应的.xib文件,默认情况下Xcode无法创建该文件。

位置

这些用户定义的模板位于~/Library/Developer/Xcode/Templates/File Template 。 如果缺少此文件夹,则可以自己创建它,并且Xcode将在重新打开时链接到该文件夹​​。 您也可以将它们分组到该文件夹​​内的子文件夹中。 例如, ~/Library/Developer/Xcode/Templates/File Template/Custom Templates和Xcode在创建新文件时将正确地渲染这些组。

模板设置

每个模板都是一个扩展名为.xctemplate的文件夹。 该文件夹包含文件模板和资源,这些文件模板和资源将被填充并添加到项目和配置TemplateInfo.plist

用户可以在模板创建期间填写的所有模板设置和字段都在TemplateInfo.plist中定义。

在此plist文件中,您可以定义将用于模板选择对话框的图标。 模板的Kind可以有两个值,但大多数情况下是Xcode.IDEKit.TextSubstitutionFileTemplateKind ,另一个是Xcode.IDECoreDataModeler.ManagedObjectTemplateKind ,我们在这里不介绍它的用法。

下一项是Options数组,它可以包含各种输入字段,选择器,复选框等。每个字段都是不言自明的,只需注意Identifier字段用于用户提供的变量,这些变量可以在源代码模板中替换。 Type定义输入字段的类型。 可以是textstaticcheckboxcombopopup

让我们将TemplateInfo.plist文件放入用户定义模板下的UIView.xctemplate文件夹中。 文件结构应如下所示:

  └──文件\模板 
│└──UIView.xctemplate
│├──TemplateInfo.plist

重新启动Xcode之后,您应该看到模板如下所示:

并且在选择模板菜单后应如下所示:

现在,让我们看一下文件模板。 基本上,它们是具有预定义关键字的常规文件,这些关键字将在创建过程中被用户提供的值替换。 主要关键字是:

  • ___FILEBASENAME___ —当前文件的名称,不带任何扩展名。
  • ___FILEHEADER___ —每个源文件的IDE预定义注释头。
  • ___VARIABLE_variable_name___ —用户在模板创建期间输入的自定义变量,以后可以在模板文件中使用,例如,我们有Subclass of:输入字段,用于为UIView定义继承。

让我们创建一个名为___FILEBASENAME___.swift文件,并使它看起来像这样:

  // ___FILEHEADER___ 
 导入UIKit 
 类别___FILEBASENAME___:___VARIABLE_subclassesFrom___ { 
}

同样,创建___FILEBASENAME___.xib其内容可以从一般新创建的xib文件中粘贴,除了确保根视图配置行看起来像这样,要点是设置customClass关键字将源文件链接到xib文件。

   

完成此快速设置后,您应该能够创建准备使用的UIView源文件以及xib文件。

还有一件事

您可以对Xcode默认模板进行反向工程,并查看如何改进自定义模板以更好地使用。 它们位于Xcode.app/Contents/Developer/Library/Xcode/TemplatesXcode.app/Contents/Developer/Platforms//Developer/Library/Xcode/Templates 。 另外,您可以将自己的模板直接放置到Xcode中,以避免滚动到底部,但是这些文件可能会因Xcode更新而被覆盖。

结论

Xcode模板在项目的早期阶段可能特别有用,并且您必须创建许多文件和模块。 通用模板可用于需要一次创建大量文件的MVVM或VIPER模块。

最终模板可在此处找到。

有用的链接

Xcode文字巨集参考

在Xcode 9中自定义文件标题注释和其他文本宏— Ole Begemann

Xcode 9文件模板| 他们称我为Jet

https://littlebitesofcocoa.com/90-custom-xcode-project-templates

创建自定义Xcode项目模板