创建Xcode文件模板

在Xcode中进行iOS开发时,通常会使用Xcode的许多文件模板之一来创建预先填充有特定目的所需代码的文件。 但是,创建自己的自定义模板以加快开发时间并减少样板代码的编写并不常见。 这可能非常有用,尤其是在使用MVVM,VIP或其他具有与每个新组件关联的语义命名文件的集合的架构时。 幸运的是,使用Apple的Xcode 9,可以轻松实现此模板。

对于此演示,我将创建一个模板,以按照VIP架构编写代码。 对于那些不熟悉此范例的人,在为VIP应用程序创建新组件(即屏幕)时,需要三个核心文件:

视频 (对于iOS,这通常是一个ViewController)

演员

演示者
我们可能还需要一个情节提要或xib,然后可以将其用于连接到我们的
View文件。 在本教程的其余部分中,这将成为目标。 创建一个可以一次性生成这些文件的模板,并且可能还会添加一些不错的附件。

入门

首先,我们需要查看自定义模板在文件系统中的位置以及Xcode提供给我们的系统模板的位置。

所有内置模板都位于此目录中:

/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/

我们编写的自定义模板将需要进入以下目录:

/Library/Developer/Xcode/Templates

与其从头开始编写模板,不如复制Xcode的内置模板之一,然后根据自己的喜好对其进行编辑。 为此,我们首先需要创建一个文件夹来保存模板的自定义类别。 然后,我们需要将现有的Xcode模板之一复制到此文件夹中。

 mkdir -p ~/Library/Developer/Xcode/Templates/VIP cp -R /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/Source/Swift\ File.xctemplate ~/Library/Developer/Xcode/Templates/VIP/ 

如上所示,将创建一个名为VIP的文件夹,然后将文件Swift File.xctemplate复制到该文件夹​​中作为起点。 文件夹名称可以是您喜欢的任何名称,因为它将用作将不同模板类型分组在一起的类别名称。 您甚至可以创建多个文件夹,每个文件夹将不同的自定义模板分组在一起。

要查看我们所做的工作是否奏效,请跳至Xcode 9并打开新的文件菜单。 如果滚动到模板选择菜单的最底部,则应该看到准备好选择我们的第一个自定义模板。

模板中有什么

在深入研究之前,我们需要准确地检查内部模板由什么组成。 如果我们导航到刚刚创建的模板文件夹,我们可以看到它由四个文件组成:

1. ___FILEBASENAME___.swift

2. TemplateIcon.png

3. TemplateIcon@2x.png

4. TemplateInfo.plist

___FILEBASENAME___.swift文件是创建模板时将被复制的实际swift文件。 在这里,您可以在每次创建模板的新实例时放入要显示的任何代码和/或注释。 需要注意的重要一点是,实际上我们可以根据需要添加任意数量的这些文件。 实际上,每次我们初始化模板时,我们放置在此文件夹中的任何文件( TemplateIcon.png图像和TemplateInfo.plist除外)都将复制到我们的项目中。 稍后我们将返回至此。

TemplateIcon.pngTemplateIcon@2x.png用于显示代表模板的图标。 当我们从通用的“ Swift File.xctemplate”复制我们的文件时,这只是文档上的swift徽标。 但是,在创建自己的模板时,我们可以将其切换为所需的样式。

TemplateInfo.plist文件包含有关模板的所有配置信息。 这包括诸如名称,描述,种类以及初始化模板时的可能选项之类的内容。

添加自定义图标

创建模板时,最简单的操作之一就是为其提供自定义图标,只需更改模板文件夹中的图像即可实现。 两个图标图像的大小如下:

TemplateIcon:48x48px

TemplateIcon @ 2x:96x96px
使用您喜欢的任何图像创建器,然后将这些文件替换为新创建的图像。 请确保名称相同,因为这是用来区分您的图标图像和模板中可能包含的所有图像的名称。 跳到Xcode,现在您应该会在新文件选择窗口中看到新图标。

生成多个文件

接下来要看的是生成模板所需的文件。 如前所述,VIP组件需要三个核心文件,分别是View,Interactor和Presenter。 对我们来说幸运的是,我们可以在一个模板中生成多个swift文件。

跳至模板文件夹并进行以下复制

 cp ___FILEBASENAME___.swift ___FILEBASENAME___ViewController.swift cp ___FILEBASENAME___.swift ___FILEBASENAME___Interactor.swift cp ___FILEBASENAME___.swift ___FILEBASENAME___Presenter.swift 

完成此操作后,我们可以删除默认源文件,因为不再需要它。

rm ___FILEBASENAME___.swift

现在我们已经有了三个核心文件模板,我们可以添加在生成这些文件时希望包含在这些文件中的所有自定义代码和/或文档。 由于这一步骤相当简单,我将保留这些文件的原样。

如果要立即查看该模板的外观,请跳回Xcode,从新文件菜单中选择我们的模板,然后提供一个名称,例如“ Camera”。 然后,应生成以下文件。

CameraViewController

CameraInteractor

CameraPresenter

添加选项

到目前为止,我们已经取得的成就完全可以作为有用的模板,但我们将更进一步。 如果我们希望有选择地能够生成一个Storyboard文件,并使其也包含语义命名,该怎么办。 也许我们希望用户能够选择是否需要情节提要,XIB或什么都不做。 对于这种行为,我们将需要更仔细地查看TemplateInfo.plist文件。

打开文件,然后将以下内容添加到xml中的基本中。

(您可能想以“源代码”而不是默认的Xcode表格式打开文件,以使复制更加容易)

 Options   Identifier productName Required  Name Name: Description The name of the VIP component to create Type text Default    Identifier viewType Required  Name View type: Description The type of view to use Type popup Default Storyboard Values  Storyboard XIB None    

我们在此处添加了两个“选项”,每个选项都实现了不同的目标。

options数组中的第一个字典正在添加一个特定的输入字段,供用户编写组件名称。 以前,这是在选择保存目标时内联完成的,但是由于我们实际上正在生成多个文件,因此这种布局更有意义。

第二个选项是添加一个下拉菜单,允许开发人员从三个不同的选项中进行选择:

故事板

厦门国际机场

没有
这些选项将映射到模板文件夹中的文件夹,这意味着当用户选择“ Storyboard”选项时,Xcode将在模板中查找名为“ Storyboard”的文件夹,并使用其中的任何快速文件。 因此,要使此新行为正常运行,我们现在需要添加这些文件夹。

汇集全部

为了使这一切正常,我们将需要回到模板文件夹并添加三个新的子文件夹以匹配我们的三个选项,然后将源文件复制到这些文件夹中。

 mkdir -p Storyboard XIB None cp ___FILEBASENAME___Interactor.swift ___FILEBASENAME___Presenter.swift ___FILEBASENAME___ViewController.swift Storyboard cp ___FILEBASENAME___Interactor.swift ___FILEBASENAME___Presenter.swift ___FILEBASENAME___ViewController.swift XIB cp ___FILEBASENAME___Interactor.swift ___FILEBASENAME___Presenter.swift ___FILEBASENAME___ViewController.swift None 

现在已经复制了源文件,我们可以删除模板根目录中的三个文件。

rm ___FILEBASENAME___Interactor.swift ___FILEBASENAME___Presenter.swift ___FILEBASENAME___ViewController.swift
(注意:您可能希望使用硬链接,而不是创建重复的源代码文件)

现在的最后一步是将___FILEBASENAME___.storyboard添加到Storyboard文件夹,并将___FILEBASENAME___.xib到XIB文件夹。 最简单的方法是像这样从它们相应的Xcode模板复制它们。

 cp -R /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/User\ Interface/Storyboard.xctemplate/___FILEBASENAME___.storyboard ~/Library/Developer/Xcode/Templates/VIP/VIP\ Component.xctemplate/Storyboard` cp -R /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/User\ Interface/View.xctemplate/___FILEBASENAME___.xib ~/Library/Developer/Xcode/Templates/VIP/VIP\ Component.xctemplate/XIB` 

完成此操作后,我们的模板现在应该可以使用了。 打开Xcode并转到新文件菜单,选择模板,您应该会看到一个弹出窗口,允许您输入名称以及选择视图类型。

从这里到哪里

在Xcode模板领域中,还有很多值得探索的地方,以及通常在Xcode定制方面要研究的更多东西。 我强烈建议任何有兴趣的人仔细阅读各种内置模板,以查看所有可用的不同选项。


最初于 2017 年12月19日 发布在 blog.jtribe.com.au 上。