鑒于自己平時寫demo比較多,每次都要新建一個項(xiàng)目,然后把一些常用的文件拖到項(xiàng)目中。稍微大一點(diǎn)的項(xiàng)目還需添加預(yù)編譯文件這些。每次都重復(fù)的設(shè)置很是無趣。于是決定弄一弄Xcode項(xiàng)目模板,以后可以像創(chuàng)建系統(tǒng)項(xiàng)目一下,創(chuàng)建自定義的項(xiàng)目了。
帶目錄版紙簡書生
來看看最終效果:
-
新建文件:
- 新建項(xiàng)目:

自定義模板概述
自定義模板一共有兩種類型,一種是自定義項(xiàng)目模板,一種是自定義文件模板。很明顯項(xiàng)目模板就是我們在新建項(xiàng)目的時候會用到,而文件模板是在新建文件的時候用到。如果你沒有做任何自定義的,那所有的項(xiàng)目及文件都是用的系統(tǒng)模板。
模板路徑
系統(tǒng)模板路徑
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/
打開這個路徑就會看到有兩個文件夾一個是File Templates存儲系統(tǒng)文件模板的,一個是Project Templates存儲系統(tǒng)項(xiàng)目模板的。
我們自定義的模板不應(yīng)該放在系統(tǒng)模板下,應(yīng)該放在~/Library/Developer/Xcode/Templates/。打開目錄同樣有兩個和上面名字一樣的文件夾。
TemplateInfo.plist
這個配置文件在每一個具體的模板路徑下都會有,它是一個最為基礎(chǔ)的配置文件。當(dāng)我們通過Xcode創(chuàng)建新的文件或者項(xiàng)目的時候,Xcode會首先讀取這個文件來配置。每一TemplateInfo.plist都有一個標(biāo)識用來區(qū)別其他模板。所有在我們自定義模板的時候需要給自己的模板取個名字,舉個例子,系統(tǒng)為iPhone應(yīng)用內(nèi)置的模板標(biāo)識如下:
com.apple.dt.unit.windowBasedApplication
除了這些,TemplateInfo.plist這個文件還有一點(diǎn)需要我們注意,那就是它可以像類一樣實(shí)現(xiàn)繼承。如下圖:

看不懂也沒關(guān)系,這點(diǎn)不影響我們自定義。只要知道需要用到文件繼承來做就可以了。TemplateInfo繼承的關(guān)系一般也是在自定義項(xiàng)目的時候用到。來看看下面這種圖:

0)
左邊是自定義的繼承層次,右邊是系統(tǒng)繼承層次。完全按照系統(tǒng)的樣子弄就可以了。
TemplateIcon.tiff
這是個圖標(biāo)文件,也就是當(dāng)我們在xcode新建文件或者項(xiàng)目的時候看到的圖標(biāo)而已。

其他
其他的就是我們自定義文件或者項(xiàng)目的額具體內(nèi)容了。具體目錄如下:
-
自定義文件模板:

-
自定義項(xiàng)目模板:
自定義文件模板
自定義文件模板,在實(shí)際開發(fā)中用到的地方并不是很多。這里也提一提把。比如對于經(jīng)常寫開源項(xiàng)目的同學(xué)來說,每次寫完正規(guī)一點(diǎn)都需要配上相應(yīng)的開源協(xié)議,比如常見的MIT,BSD等。每個文件都手動復(fù)制一下如下內(nèi)容還是挺麻煩的。
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
所以如果有一個文件模板能夠直接在創(chuàng)建文件的時候就自動加上了這些協(xié)議那是極好的。
- 首先是定義好文件,參考了系統(tǒng)文件模板的定義的方式都是以
___FILEBASENAME___這種方式定義的。那我們也這樣定義。我測試使用OC測試的,定義出來如下圖:

- 然后是更改.h和.m里面的內(nèi)容,模板還是套用系統(tǒng)的,只是在上面加了一大堆注釋而已。來看看.m文件
// ___FILENAME___
//
// Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#import "___FILEBASENAME___.h"
@implementation ___FILEBASENAMEASIDENTIFIER___
@end
-
設(shè)置配置文件TemplateInfo.plist
TemplateInfo.plist可以通過xcode來創(chuàng)建,也可以直接copy系統(tǒng)模板里面的,我是copy系統(tǒng)模板的,然后改里面的值就可以了??赡苡行﹌ey不知道什么意思,方法一是看系統(tǒng)模板里面的TemplateInfo.plist設(shè)置和我們通過系統(tǒng)模板創(chuàng)建出來的文件作對比來分析具體key的作用,方法二就是去google吧。
- 最后找個tiff文件作為圖標(biāo)就可以了
自定義項(xiàng)目模板
自定義項(xiàng)目模板才是實(shí)際開發(fā)中最需要的。相比于自定義文件模板稍微浮躁一點(diǎn)點(diǎn),因?yàn)樾枰玫絋emplateInfo.plist繼承關(guān)系。
因?yàn)橄到y(tǒng)沒有提供創(chuàng)建一個空項(xiàng)目的模板,所以我們就用這個來試一試。
雖然是一個空項(xiàng)目但是還是需要使用前面講的TemplateInfo.plist繼承關(guān)系。直接新建一個TemplateInfo.plist文件,或者copy系統(tǒng)模板的然后改一下。

通過這樣就可以創(chuàng)建一個空項(xiàng)目了。
來看一個復(fù)雜的
光是上面這種例子肯定是最簡單的。
- 先建一個基本項(xiàng)目
比如XLBase_Universal_iOS_Template.xctemplate里面的具體內(nèi)容我是根據(jù)系統(tǒng)的來更改的。然后往里面添加?xùn)|西。大致結(jié)構(gòu)如下:

文件夾里面的東西和系統(tǒng)目標(biāo)差不多。
主要看看TemplateInfo.plist里面的配置

大家可以按照這種設(shè)置去做自己的自定義。
-
繼承基本項(xiàng)目創(chuàng)建一個復(fù)雜的
復(fù)雜的包含了podfile和一些常用的文件及目錄
最為重要的還是TemplateInfo.plist文件
大致就這些了。
總結(jié)
可能上面講的對于沒有弄過項(xiàng)目模板的同學(xué)來說有點(diǎn)難掌握。主要是配置文件里面的key不知道什么意思不知道怎么設(shè)置。針對這種情況我建議
- 1.看系統(tǒng)模板怎么弄的,根據(jù)創(chuàng)建的新項(xiàng)目或者文件及模板之間的關(guān)系分析總結(jié)出相關(guān)key的作用。
- 2.去github上看相關(guān)的模板項(xiàng)目。那里有現(xiàn)成的例子,自己下載下來運(yùn)行一下,照著模板改一改基本上就會了。
更新
昨天沒上傳例子,這里有個別人寫的例子,我就不用上傳了。大家自己跟著例子玩玩吧
iOS自定義項(xiàng)目模板例子





