原文地址:http://blog.csdn.net/lizhongfu2013/article/details/27672749
一、前序
不管你是新手還是老鳥,開發中都要創建項目和創建文件,例如:
創建工程 ->選擇模版 ->新建項目
打開工程,新建文件
每次都要這樣從一個空項目或者空文件開始,自己總結的一些公用方法都要每一次的拷貝進工程,這樣的反反覆覆做同樣的事情對於程序員來說是煎熬的,所以就有了自定義工程模版和自定義文件模版的方法(當然也可以把一些公用類打包成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
修改前:
修改後:
保存文件後,打開項目,新建文件:
成功了:
查看模版代碼:
更多的發揮就靠每個人的想象能力了!
項目模版文件在我的CSDN資源分享中,如果有必要,可以下載“Xcode自定義模版”查看代碼。
Demo下載:http://download.csdn.net/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