不喜歡使用storyboard。而新建一個(gè)Single View Application工程后,總是要?jiǎng)h除Main.stroyboard、修改工程配置、創(chuàng)建顯示window。于是,就想能不能自定義一個(gè)工程模板來做這些事。參考一些資料后就有了這篇文章
目標(biāo):新建這樣一個(gè)project template
- 不包含Main.storyboard;
- 在AppDelegate.m中自動(dòng)引入#import "ViewController.h"
-
自動(dòng)創(chuàng)建并顯示W(wǎng)indows
效果圖如下:
圖1
Xcode 8的有兩種project templates:
- xcode定義的project templates。存放在目錄
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates
和
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates(這是iOS的project templates,其他平臺(tái)的project templates這里沒列出); - 用戶自定義的project templates;
存放目錄為:
~/Library/Developer/Xcode/Templates
默認(rèn)情況~/Library/Developer/Xcode/目錄下沒有Templates文件夾,需要手動(dòng)創(chuàng)建。
在終端中輸入以下命令可搜索到所有包含工程模板的路徑
sudo find / -name Templates
結(jié)果如下
圖2
我們經(jīng)常使用的Single View Application工程模板所在目錄為:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application/Single View Application.xctemplate
我們自定義的project template就是參考的這個(gè)project template。
準(zhǔn)備工作就到這了,下面開始創(chuàng)建自定義的工程模板。
一、在選擇工程模板的面板中顯示自定義的工程模板
效果如下圖:
- 在用戶定義project templates目錄下創(chuàng)建和Single View Application.xctemplate模板同樣的目錄結(jié)構(gòu),即在~/Library/Developer/Xcode/下創(chuàng)建如下目錄結(jié)構(gòu):
Templates/Project Templates/iOS/Application/Single View No Storyboard.xctemplate/
(其中Single View No Storyboard.xctemplate/自定義模板的名字)
完整的目錄結(jié)構(gòu)為:
~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/Single View No Storyboard.xctemplate/ -
拷貝Single View Application.xctemplate下的
TemplateIcon.png
TemplateIcon@2x.png
TemplateInfo.plist
到
Single View No Storyboard.xctemplate。
(我們要的就是不包含Main.storyboard的工程,所以不拷貝這個(gè)文件)
要拷貝的文件如下圖
圖4 - 修改模板圖標(biāo)和標(biāo)識(shí)模板
圖3中包含兩個(gè)平圖片,這個(gè)圖片就是圖2中顯示的模板的圖標(biāo)。該圖標(biāo)可改可不改。修改或替換時(shí)注意命名和圖片尺寸要和原圖一樣。
每個(gè)模板都有一個(gè)唯一的ID用于識(shí)別和區(qū)分模板,這個(gè)ID就是TemplateInfo.plist
中的identifier。拷貝TemplateInfo.plist之后要修改這個(gè)identifier字段。本文中修改為com.apple.dt.unit.singleViewApplicationNoStoryboard,如圖4
圖5
至此、保存TemplateInfo.plist,再新建工程的時(shí)候就會(huì)彈出如圖2那樣的模板選擇面板。
二、自定義模板
現(xiàn)在我們已經(jīng)做好的自定義的模板的入口。接下來就是真正的自定義模板了。
具體操作如下:
-
在邏輯上刪除Main.storyboard
刪除自定義模板的TemplateInfo.plist中的Ancestors節(jié)點(diǎn)下的com.apple.dt.unit.storyboardApplication,如下圖
圖6 在AppDelegate.m中自動(dòng)引入#import "ViewController.h"、自動(dòng)創(chuàng)建并顯示W(wǎng)indows
在Option->Item0->Units->Objective-C->Nodes下添加兩條數(shù)據(jù)
AppDelegate.m:imports:importHeader:ViewController.h
AppDelegate.m:implementation:methods:applicationdidFinishLaunchingWithOptions:body
然后再在Option->Item0->Units->Objective-C下添加一條字典類型的數(shù)據(jù)Definitions,其中key為
AppDelegate.m:implementation:methods:applicationdidFinishLaunchingWithOptions:body
value為
// Override point for customization after application launch.
_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
_window.backgroundColor = [UIColor whiteColor];
_window.rootViewController = [ViewController new];
[_window makeKeyAndVisible];
如下圖
注意:以上內(nèi)容是基于xcode 8.3制作。以后新版xcode可能會(huì)有不同。但思路及時(shí)這個(gè)思路。