一、前序
不管你是新手还是老鸟,开发中都要创建项目和创建文件,例如:
创建工程 ->选择模版 ->新建项目
打开工程,新建文件
每次都要这样从一个空项目或者空文件开始,自己总结的一些公用方法都要每一次的拷贝进工程,这样的反反复复做同样的事情对于程序员来说是煎熬的,所以就有了自定义工程模版和自定义文件模版的方法(当然也可以把一些公用类打包成framework,但这样解决了文件模版的问题,还没有解决工程模版的问题),下面开始吧!
二、主要内容
1、Xcode中模版的那些事
2、自定义工程模版(Project Templates)
3、自定义文件模版(File Templates)
三、开始吧
1、每次新建项目,都可以选择工程类型,例如Single View Application、Empty Application等,这些都是Xcode预先定义好的模版,路径在 /Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/ 下的Project Templates文佳中
每次新建文件,例如新建一个Objective-C class,这也是使用Xcode中已经定义好了的文件模版,在与工程模版同级别目录下的File Templates文件夹下。
当然,我们自定义的模版要放在Xcode提供的另一个路径中:~/Library/Developer/Xcode/Templates
注意:自定义模版有一套通用规则,但由于Xcode升级频繁,所以自定义模版的写法也会相应的改变,深入的去学习原理可能要花费点时间,所以这里仅仅是以Xcode5为例,用最快的方式实现模版,并投入到实际使用中。
2、自定义工程模版(Project Templates)
如果从头构建一个工程模版,那是很麻烦的,不过有便捷的方法,就是改系统模版:
到系统模版目录下(Project Templates -> Application),拷贝Single View Application.xctemplate文件夹到自定义模版目录,但目前自定义模版文件夹(Templates)中没有ProjectTemplates文件夹,不过我们可以自己创建一个,然后模拟系统模版目录结构,再Project Templates文件夹中新建Application文件夹,并把Single View Application.xctemplate放到Application文件夹中,并改名为DemoApplication.xctemplate
当前自定义模版目录如图:
打开Demo Application.xctemplate文件夹,可以看到文件夹中有4个文件:
TemplateInfo.plist 属性模板属性设置
TemplateIcon.tiff 新建项目时候模版图标(可以不添加)
Main_iPhone.storyboard、Main_iPad.storyboard:模版中使用。
其中TemplateInfo.plist是模版的属性文件,每个模版都一个自己唯一标识,打开TemplateInfo.plist,修改key值Identifier对应的Value为com.apple.dt.unit.DemoApplication,然后保存:
这样重新打开Xcode,新建项目,发现我们自定义(改装Single View模版)的工程模版了:
已经成功一半了,但不要忘记我们自定义工程模版的目的是什么。下一步,给工程模版中添加我们自己总结的一些常用公用类,这样便于以后新建工程的时候,不再需要手动的拷贝大量文件到新建的工程:
下面以 iOS开发~设备信息 提到的@interface UIDevice (Info)类别作为模版的文件为例说明具体如何操作:
1)在自定义模版Demo Application.xctemplate文件夹中,新建UIDeviceInfo文件夹,把UIDevice+Info.h 及 UIDevice+Info.m放入UIDeviceInfo文件夹中
2)配置TemplateInfo.plist
添加系统库:TemplateInfo.plist添加一个新的Row
然后打开Xcode,新建项目,模版选择Demo Application,效果如图:
注意:TemplateInfo.plist其他配置补充
1)Ancestors:父模版,从父模版那里继承一些模板的基础属性,可以有多个父类。
系统模版Empty Application.xctemplate:
2)Concrete:设置为YES的模板才可以显示在new project的dialog中,此时这个模板不能被其他模板继承。
3)Definitions:将Nodes中定义的文件添加到项目中。
4)Description:新建工程时,模版的描述。
5)Identifier:模板的唯一标示符。
6)Kind:项目模板为Xcode.Xcode3.ProjectTemplateUnitKind,所有工程模版都是这个值。
7)Nodes:定义添加到工程模版中的文件。
8)Options:定义新建工程中的storyboard等。
工程模版到这里已经基本的介绍完了。
3、自定义文件模版(File Templates)
文件模版相对比工程模版更加复杂一些,但幸好有开源代码可以作为参考,下载代码解压后如图:
在Xcode的自定义模版文件夹中,创建一个新的文件夹LK File Templates(名字随便),将开源代码中的文件夹拷贝到LK File Templates文件夹中:
在一个工程中,新建文件:
自定义文件模版被加载了,但完全用别人的东西,感觉还是理解的不够,所以自己改改!拿Objective-C Singleton做实验了:
1)首先按照开源代码默认的模版定义,新建一个文件,看看效果:
选择next:
这里的True Singleton选项的含义还要看一看模版文件内容:
然后next创建单例文件,如果创建文件时候勾选True Sigleton,就会选用TrueSingleton文件夹中的文件模版,如入股不勾选True Sigleton,就会使用Default中的文件模版。
但现在GCD方式创建模版更简洁,于是折腾下,添加GCD单例实现方式:
1、删除TrueSingleton文件夹
2、增加GCDSingleton文件夹,其中实现文件为:
- ___FILEBASENAME___.h
- #pragma mark Constants
- #pragma mark - Enumerations
- #pragma mark - Class Interface
- @interface ___FILEBASENAMEASIDENTIFIER___ : NSObject
- #pragma mark - Properties
- #pragma mark - Constructors
- #pragma mark - Static Methods
- + (___FILEBASENAMEASIDENTIFIER___ *)shared___FILEBASENAMEASIDENTIFIER___;
- #pragma mark - Instance Methods
- @end
- ___FILEBASENAME___.m
- #import "___FILEBASENAME___.h"
- @implementation ___FILEBASENAMEASIDENTIFIER___
- + (id)shared___FILEBASENAMEASIDENTIFIER___ {
- static dispatch_once_t predicate;
- static ___FILEBASENAMEASIDENTIFIER___ *instance = nil;
- dispatch_once(&predicate, ^{instance = [[self alloc] init];});
- return instance;
- }
- @end
修改 TemplateInfo.plist
修改前:
修改后:
保存文件后,打开项目,新建文件:
成功了:
查看模版代码:
更多的发挥就靠每个人的想象能力了!
项目模版文件在我的优快云资源分享中,如果有必要,可以下载“Xcode自定义模版”查看代码。
Demo下载:http://download.youkuaiyun.com/detail/zfpp25_/7426759
参考资料:
http://www.bobmccune.com/2012/03/04/creating-custom-xcode-4-file-templates/
http://stackoverflow.com/questions/8205381/odd-xcode-behavior-when-creating-classes
http://www.iliunian.com/2862.html
http://www.th7.cn/Program/IOS/201312/162518.shtml
https://github.com/reidmain/Xcode-5-File-Templates