寫之前先感謝下 @ColeXm 的 偷懶寶典–打造屬於自己的 Xcode 類别範本 讓我知道能夠知道還能自定義 Xacode 類别範本。
然後 有興趣的可以看看我自己 部落格 ,排版應該稍微好點。
話不多說我們先來體驗下 :
什麼是 Xcode 類别範本 ?
說到 Xcode 類别範本有些人可能覺得陌生,其實作為一名 iOS 開發,我們每天都會用到 Xcode 類别範本,例如建立一個 UIViewController,一個 Category 等等,這些其實都是 Xcode 幫我們整合好的模板。
我們先看看系統的 VC 模版怎麼建立的 :
為什麼要自定義 Xcode 類别範本 ?
當我們用 Xcode 自帶的模板建立一個 UIViewController 的子類時,我們會發現 .m
檔案會多出一些方法 :
而我們平時的開發中,或多或少都有自己的一些規範,尤其是在多人合作開發的情況下,一些好的開發規範是相當必要的。
我的 UIViewController 規範:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
#import "MyViewController.h" @interface MyViewController () // @end @implementation MyViewController #pragma mark - LifeCyle - (void)viewDidLoad { [super viewDidLoad]; } /* - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; } -(void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } **/ - (void)dealloc { NSLog(@"%@-釋放了",self.class); } #pragma mark - Intial Methods #pragma mark - Target Methods #pragma mark - Private Method #pragma mark - Setter Getter Methods #pragma mark - External Delegate #pragma mark - UITableViewDelegate,UITableViewDataSource /* - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return ; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return ; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { return ; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return ; } **/ @end |
這麼一堆東西寫起來也是要點時間的,如果每建立個 VC 就要寫一遍也太不優雅了。
有沒有什麼辦法能夠在我們建立 VC 的時候自動生成這些呢?
建立自己的 Xcode 類别範本
一份成品模版結構大概這樣 :
介紹下里面的東西 (xxx
就是你自定義模版的名字) :
xxx.xctemplate:模版檔案。
xxxObjective-C:OC模版檔案,裡面包含
___FILEBASENAME___.h
和___FILEBASENAME___.m
兩個檔案。xxxXIBObjective-C:比
xxxObjective-C
多了個___FILEBASENAME___.xib
檔案,可自定義。xxxSwift:Swift模版檔案,裡面包含一個
___FILEBASENAME___.swift
檔案。xxxXIBSwift:比
xxxSwift
多了個___FILEBASENAME___.xib
檔案,可自定義。TemplateIcon.png:模版顯示的圖片。
TemplateInfo.plist:模版的配置資訊,
圖7
。
重新寫一份模版太繁瑣,我們直接拷貝一份系統的模版來修改 :
- 拷貝
Cocoa Class.xctemplate
,修改名稱並刪除不需要的檔案。(我這邊是Xcode 8.2.1
, 以後路徑可能有變)
1 |
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source |
- 修改
.h
為 :
1 2 3 4 5 6 7 8 9 10 11 12 |
// ___FILENAME___ // ___PROJECTNAME___ // // Created by ___FULLUSERNAME___ on ___DATE___. //___COPYRIGHT___ // ___IMPORTHEADER_cocoaSubclass___ @interface ___FILEBASENAMEASIDENTIFIER___ : UIViewController @end |
- 修改
.m
只需要新增自己需要的規範就行,可以參考 上面我的 VC 模板。 - 修改
.swift
為:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// ___FILENAME___ // ___PROJECTNAME___ // // Created by ___FULLUSERNAME___ on ___DATE___. //___COPYRIGHT___ // import UIKit class ___FILEBASENAMEASIDENTIFIER___: UIViewController { //MARK: - LifeCyle override func viewDidLoad() { super.viewDidLoad() } deinit { print("\(object_getClassName(self)) - 釋放了!") } //MARK: - Intial Methods //MARK: - Target Methods //MARK: - Private Method //MARK: - Setter Getter Methods //MARK: - External Delegate } |
- 新建
.xib
重新命名___FILEBASENAME___.xib
並按照下圖修改:
上面 .h
.m
裡面 有些詞可能不明白,這裡再稍稍解釋下:
1)DATE:標識當前時間;
2)FILENAME:帶檔案字尾的全名;
3)FILEBASENAME:不帶檔案字尾的名字;
4)FULLUSERNAME:當前的使用者名稱;
6)PROJECTNAME:工程名字;
7)FILEBASENAMEASIDENTIFIER: VC 類名稱;
8)IMPORTHEADER_cocoaSubclass: 匯入的標頭檔案。
TemplateInfo.plist :
講解一些需要改動的東西 :
SortOrder:模版在介面中的位置;
Options:對應
圖2
四行;FallbackHeader:
.h
匯入的標頭檔案;RequiredOptions -> cocoaSubclass:是否支援選擇 xib;
Default
預設true
自動勾選;Values:自定義模版的名稱(一定要保持一致);
Suffixes:模版預設類名,效果如下圖。
最後把建立好的 xxx.xctemplate
檔案直接拷貝到系統路徑下就可以直接使用了:
1 |
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source |
修改系統模板
平常開發中,我們經常用xib
來畫一個View
,之前用系統的模板建立View
的時候是有勾選是否建立對應xib
的這個選項的,蘋果不知道什麼時候改了,現在貌似不行了:
這樣導致我們建立完View
後,還需要再建立個對應的xib
檔案,簡直神煩!
怎麼能自動建立xib
檔案呢?我們完全可以修改系統的模板來滿足我們的剛需:
- 進入目錄,找到
Cocoa Touch Class.xctemplate
檔案
1/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source - 拷貝一份
UIViewObjective-C
檔案並改名為UIViewXIBObjective-C
,然後到其他有xib
的資料夾裡面,拷貝一份xib
到UIViewXIBObjective-C
裡面,xib
可自行修改。(我這裡只配置了Objective-C
的,Swift
步驟類似) - 找到 當前目錄的
TemplateInfo.plist
檔案,如下修改:
- 重新建立系統
View
模板:
大功告成!
Demo
最後放上我自己的一個 UIViewController 模板 懶得自己寫的可以直接用或者在我的模板基礎上修改!
參考連結
http://www.jianshu.com/p/93527682d8d3
http://www.bobmccune.com/2012/03/04/creating-custom-xcode-4-file-templates/