iOS自定义Xcode模板

一、为什么要自定义模板

1.节省重复代码手写时间
2.统一规范代码,提高代码可读性
3.减少手写代码,XIB或修改相关配置等不必要的时间

如我们要求所有的viewController的代码都得按照一下代码结构来写:

#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代码编程规范-根据项目经验汇总

二、模板存放位置

Xcode模板主要分为2种,系统默认模板和用户自定模板,对iOS App开发者而言,一般用到的是系统模板中的/Applications/Xcode.app/Contents/Developer/Platforms目录下的iPhoneOS.platform中的模板

1.png

1、Xcode系统模板位置

(1) iOS开发系统模板位置

  • 里面包含文件模板(File Templates)和工程模板(Project Templates)
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates

(2) MacOSX的系统文件模板位置

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

2.用户自定义模板位置
~/Library/Developer/Xcode/Templates

终端命令打开文件目录

cd ~/Library/Developer/Xcode/Templates //进入目录
open .                               //打开目前目录
等价于
open ~/Library/Developer/Xcode/Templates

或者点击Finder菜单栏的前往>前往文件夹(shift + command + G) ,
输入:~/Library/Developer/Xcode/Templates

会看到File TemplatesProject Templates2个文件夹,分别代表文件模板工程模板目录。

三、如何速创建、修改Xcode模板

Xcode没有提供直接的工具或者是向导给你创建一个工程模板,,但是我们可以找到Xcode内置的几个模板,这里以iPhone开发为说明,介绍模板的创建修改过程.

iOS模板目录

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates

终端命令打开方式

open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates

或者点击Finder菜单栏的前往>前往文件夹(shift + command + G)

输入:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates

1)基于现成模板修改或使用

拷贝iOS系统模板目录中的模板进行修改。

为Xcode添加Empty Applicationcategoryprotocol等模板

现成下载:https://github.com/NSFish/AddMissingTemplates

https://github.com/ChenYilong/XcodeMissingTemplates

也可以利用AlcaAtraz安装相关模板,shift+command+9 >Templates模板

推荐:https://github.com/zubco/PZCustomView

复制模板文件夹到用户自定义模板目录 ~/Library/Developer/Xcode/Templates/ ,重启即可

2)完全自定义模板
例如创建一个带有导航栏和标签栏控制器的工程
1、进入模板目录
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project\ Templates/iOS

2、手动创建CustomTemplate文件夹

3.png

将原来XCode6中的“Empty Application”模板拷贝过来(可以从上文提到的Github中下载),修改增加一些必要字段。
Plist文件内容如下图


2.png

PS:基于标签栏和导航栏工程模板文件相关内容详见文末Github
相关字段含义查阅3.1

使用CustomTemplate中的nav模板创建后如下:


x5.png
x6.png

你也可以根据plist文件根据自己需要添加更多的文件,比如配置文件、工具类,基础类等,这样每次创建工程的时候就不需要写相关代码了,也不必手动拖进一些文件到工程里,达到一劳永逸的效果.

3.1 Xcode模板 文件宏

占位符 意义
___FILENAME___ 文件名包括后缀
___PROJECTNAME___ 当前工程名,在创建工程时设置的
___FULLUSERNAME___ 当前登录用户的名字
___DATE___ 当前日期 ,格式为MM/DD/YY
___FILEBASENAMEASIDENTIFIER___ 不带后缀的文件名
___projectnameasidentifier___ 项目名称转换为有效的C风格的标识符
___organizationname___ 在Xcode项目定义的组织名称
___time___ 当前时间
___year___ 前四位数的年份

From:http://see.sl088.com/wiki/Xcode%E6%A8%A1%E6%9D%BF_%E6%96%87%E4%BB%B6%E5%AE%8F

3.2文件组成
--TemplateInfo.plist(必要):所有的模板属性设置都在这里。
--TemplateIcon.tiff(可选):定义显示在new project的dialog中的模板图标。
-- Main_iPhone.storyboard、Main_iPad.storyboard:要添加在项目中的文件。

3.3TemplateInfo.plist字段详解

  • Kind(必须) 模板类型
    Xcode.Xcode3.ProjectTemplateUnitKind --指定该模板是工程(项目)模板
    Xcode.IDEFoundation.TextSubstitutionFileTemplateKind --指定该模板是文件模板
  • SortOrder 这个是排序的值,该模板显示在new project的dialog中的位置索引,可以设置在界面中的摆放位置,值越小越前面
  • Ancestors:要继承的模板。也就是模板的“父类”,从父类那里继承一些模板的基础属性,可以有多个父类。
  • Concrete:设置为YES的模板才可以显示在new project的dialog中,此时这个模板不能被其他模板继承。
  • Description:就是Description描述信息。
  • Identifier:模板的唯一标示符,若模板B要继承模板A,就在模板B的Ancestors中写上模板A的Identifier。
  • Nodes:定义要添加到项目中的文件,目标结构节点。
  • Definitions:将Nodes中定义的文件添加到项目中(相关.h/.m文件)。
  • Options:定义在new project中选择模板后点击next后的dialog中的内容,如Product Name、Organization Name、Company Identifier、Bundle Identifier等。
  • 在Suffixes里面添加自定义的模板类的类名以及模板类所继承的类名

文件模板

至于文件模板,可以拷贝系统默认模板到文件模板目录根据以上释义进行修改,也可以根据自己喜好直接修改系统模板,修改很简单,你就放肆的修改吧,一般不会出现什么问题,即使出现问题,大不了重装下Xcode啦,这样每次创建相应文件就可以自动添加相应的代码了,这样别人代码编写速度再快,也赶不上你的速度,简单而实用。

四、其它应用实例

iOS开发网络适配https,修改模板方式解决
iOS9让所有的HTTP默认使用了HTTPS,App无法正常访问HTTP链接。
1、常规解决方法
iOS9 HTTP 不能正常使用的解决办法
2、Xcode模板修改步骤
步骤1、:进入工程模板目录或直接打开编辑

open  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project\ Templates/iOS/Application/Cocoa\ Touch\ Application\ Base.xctemplate/TemplateInfo.plist

编辑Cocoa Touch Application Base.xctemplate/TemplateInfo.plist文件

步骤2、添加key&value值

  • 在Nodes中增加一个item, 值(右侧)设置为Info.plist:NSAppTransportSecurity 。

  • 在Definitions字段下增加item, 键(左侧)设置为Info.plist:NSAppTransportSecurity ,值(右侧)设置为

    <key>NSAppTransportSecurity</key>
    <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    </dict>
    
4.png

注意第4点,里面内容不仅仅是所见的NSAppTransportSecurity,包含以上字典所有内容

Github CustomTemplate

下载安装:
打开/ios文件目录,将UITbaBar&Nav.xctemplate模板放置在CustomTemplate目录,如上图3.png所示

open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project\ Templates/iOS/Application/Cocoa\ Touch\ Application\ Base.xctemplate/TemplateInfo.plist

当然你也可以直接使用以下工具进行一键拷贝


XCode模板克隆工具

使用方法简介:(以CustomTemplate为例)
1、输入模板git地址
2、点击“下载”
3、选择菜单“工程模板”
4、点击“一键拷贝”

然后新建工程即可看到模板:


image.png

下载地址
Github 自定义示例模板下载

模板下载克隆工具 文件大小: 95kb

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容