iOS如何自定義文件/項(xiàng)目模板

鑒于自己平時寫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)目模板例子

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、為什么要自定義模板 1.節(jié)省重復(fù)代碼手寫時間2.統(tǒng)一規(guī)范代碼,提高代碼可讀性3.減少手寫代碼,XIB或修改相關(guān)...
    huluo666閱讀 8,169評論 10 49
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,058評論 25 709
  • 喜歡讀書,就等于把生活中寂寞的辰光,換成巨大享受的時刻。 "我讀過很多書,但后來大部分都忘記了,你說這樣的閱...
    梁慢慢小姐閱讀 576評論 2 9
  • 我想每個人的父母都會告訴你,世界上真心對你好的就是你的父母,不管做什么,說什么都是我是為你好,一句話堵死了我們所有...
    我是紅燒肉閱讀 356評論 0 1
  • 風(fēng)時雨往,單薄添寒,時靜時喧,更為幽邃。 斜雨斜宇,有然可樂,不思習(xí)文,終日無事,難比上面情。
    YorkeFy馮越閱讀 321評論 0 1

友情鏈接更多精彩內(nèi)容