1. 程式人生 > >自定義 Xcode ViewController 類模板

自定義 Xcode ViewController 類模板

然後 有興趣的可以看看我自己 部落格 ,排版應該稍微好點。

話不多說我們先來體驗下 :

111899027-061b069a154fcb43

什麼是 Xcode 類模板 ?

說到 Xcode 類模板有些人可能覺得陌生,其實作為一名 iOS 開發,我們每天都會用到 Xcode 類模板,例如建立一個 UIViewController,一個 Category 等等,這些其實都是 Xcode 幫我們整合好的模板。

我們先看看系統的 VC 模版怎麼建立的 :

121899027-6cb7f39e3c036e89

為什麼要自定義 Xcode 類模板 ?

當我們用 Xcode 自帶的模板建立一個 UIViewController 的子類時,我們會發現 .m 檔案會多出一些方法 :

131899027-3a2d24899e3fdc8d

而我們平時的開發中,或多或少都有自己的一些規範,尤其是在多人合作開發的情況下,一些好的開發規範是相當必要的。

我的 UIViewController 規範:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 #import "MyViewController.h"@interfaceMyViewController()// @end@implementation MyViewController#pragma mark - LifeCyle-(void)viewDidLoad{[superviewDidLoad
];}/*- (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 類模板

一份成品模版結構大概這樣 :

141899027-d5ee7adb7ed96187

介紹下里面的東西 (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 為 :
123456789101112 //  ___FILENAME___//  ___PROJECTNAME___////  Created by ___FULLUSERNAME___ on ___DATE___.//___COPYRIGHT___//___IMPORTHEADER_cocoaSubclass___@interface___FILEBASENAMEASIDENTIFIER___:UIViewController@end
  • 修改 .m 只需要新增自己需要的規範就行,可以參考 上面我的 VC 模板。
  • 修改 .swift 為:
1234567891011121314151617181920212223242526272829303132 //  ___FILENAME___//  ___PROJECTNAME___////  Created by ___FULLUSERNAME___ on ___DATE___.//___COPYRIGHT___//import UIKitclass___FILEBASENAMEASIDENTIFIER___:UIViewController{//MARK: - LifeCyleoverride 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 並按照下圖修改:
151899027-52d812d4fe9b6098 161899027-266d9b8eb585f93d

上面 .h .m 裡面 有些詞可能不明白,這裡再稍稍解釋下:

1)DATE:標識當前時間;

2)FILENAME:帶檔案字尾的全名;

3)FILEBASENAME:不帶檔案字尾的名字;

4)FULLUSERNAME:當前的使用者名稱;

6)PROJECTNAME:工程名字;

7)FILEBASENAMEASIDENTIFIER: VC 類名稱;

8)IMPORTHEADER_cocoaSubclass: 匯入的標頭檔案。

TemplateInfo.plist :

171899027-8939b90cf8761960

講解一些需要改動的東西 :

SortOrder:模版在介面中的位置;

Options:對應 圖2 四行;

FallbackHeader:.h 匯入的標頭檔案;

RequiredOptions -> cocoaSubclass:是否支援選擇 xib;Default 預設 true 自動勾選;

Values:自定義模版的名稱(一定要保持一致);

Suffixes:模版預設類名,效果如下圖。

181899027-3ce91aff35630cd6

最後把建立好的 xxx.xctemplate 檔案直接拷貝到系統路徑下就可以直接使用了:

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

修改系統模板

平常開發中,我們經常用xib來畫一個View,之前用系統的模板建立View的時候是有勾選是否建立對應xib的這個選項的,蘋果不知道什麼時候改了,現在貌似不行了:

191899027-e74f0147bd30ecd2

這樣導致我們建立完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的資料夾裡面,拷貝一份xibUIViewXIBObjective-C裡面,xib可自行修改。(我這裡只配置了Objective-C的,Swift步驟類似)
  • 找到 當前目錄的TemplateInfo.plist檔案,如下修改:

201899027-5556f90af260e75f

  • 重新建立系統 View模板:

211899027-66f3d08c8d0630f2

大功告成!

Demo

最後放上我自己的一個 懶得自己寫的可以直接用或者在我的模板基礎上修改!

參考連結