摘要:
一个团队合作开发一个项目的时候,可能因为各自的代码风格不同,使得项目的整体风格不那么统一。使用自定义模板就能有效的减少这种问题的发生。同时还有其他好处。总结如下:
1、节省重复代码手写的时间
2、统一规范代码,提高代码的可读性
3、减少手写代码,XIB或修改相关配置等不必要的时间
如UIViewController的代码按照如下结构编写:
#pragma mark - def
#pragma mark - override
#pragma mark - api
#pragma mark - model event
#pragma mark - view event
#pragma mark - private
#pragma mark - getter / setter
又如单元测试都是按照如下结构创建的
系统文件模板
如上图所示:我们创建文件的时候都会用到系统模板,包括iOS watchOS tvOS macOS四种终端,四种终端都有自己的文件模板提供选择,之前开发的时候只管用系统提供的文件模板,并不知道我们也可以创建自己或公司专用的模板,那么接下来就让我们去了解下,怎么创建属于自己的模板。。。
模板存放的位置
Xcode模板主要分为两种,系统默认模板和用户自定义模板,位置分别在
-
iOS开发系统模板位置
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
里面包含文件模板(File Templates)和工程模板(Project Templates)
-
MacOSX的系统文件模板位置
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates
- 用户自定义模板位置
~/Library/Developer/Xcode/Templates
如何快速创建、修改xcode模板
Xcode没有提供直接的工具或者是向导给你创建一个工程模板,但是我们可以根据修改系统模板来创建自己的模板。
打开iOS模板目录
终端方式:
open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
或者
// 进入iOS模板目录
cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
// 打开该目录
open .
-
基于现成模板修改或使用
如图所示:
___FILEBASENAME___ : 文件名包括后缀,里面的内容就是模板
TemplateIcon.png :文件的图标
TemplateInfo.plist : 模板的描述
其内容如下图:
-
kind : 模板类型
Xcode.Xcode3.ProjectTemplateUnitKind --指定该模板是工程(项目)模板
Xcode.IDEFoundation.TextSubstitutionFileTemplateKind --指定该模板是文件模板 SortOrder: 这个是排序的值,该模板显示在new project的dialog中的位置索引,可以设置在界面中的摆放位置,值越小越前面
Ancestors:要继承的模板。也就是模板的“父类”,从父类那里继承一些模板的基础属性,可以有多个父类。 当然这里并没继承,所以没有该字段
Concrete:设置为YES的模板才可以显示在new project的dialog中,此时这个模板不能被其他模板继承。
Description:就是Description描述信息。
AllowedTypes:文件类型,包含Swift(public.swift-source),OC(public.objective-c-source 、 public.objective-c-plus-plus-source)
MainTemplateFile:指定模板文件
我要创建一个Swift文件模板的话,我可以将Swift File.xctemplate
文件夹拷出来。重新命名,然后替换里面的图片,替换里面的模板代码。然后将修改后的文件夹添加到用户自定义模板目录~/Library/Developer/Xcode/Templates/
、当然这里你也可以添加在它的子目录下面,我这里就添加在了MyTemplate子目录下。
完成后如下图所示:
打开xcode创建文件,就能看到你刚刚创建的模板了
如图:
然后你就能像使用系统模板一样使用,自定义的模板了