xCode模板的制作

模板位置

  • 全局位置
  1. /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/
  2. /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates
  • 用戶(hù)自定義位置:~/Library/Developer/Xcode/Templates/

這里我們一般操作用戶(hù)自定義位置。

Project_Templates1.png

logo

logo必須名稱(chēng)為:TemplateIcon.tiff,存放位置跟TemplateInfo.plist同級(jí),在*.xctemplate的一級(jí)目錄下,正方形即可4848,6464

工程模板

參數(shù)含義

Keys need Advice
Ancestors No Import settings from another Project Template.
Concrete Recommended Visible or hide Template form New Project Window.
Definitions No Work with workplace. Can write to file example source code.
Description Recommended New Project Window – Project Template Description.rs No Import settings from another Project Template.
Identifier Yes Project Template Unique Identifier.
Kind Yes XCode Template Kind. Project or File.
Nodes Recommended Create or Copy Files to Project. Copy works
Options Recommended New Project Wizard >> Choose Options for Project. Add Text Fields, Combo Boxes.
Platforms Recommended Set Platform.
Project Yes Set Project Build Settings.
Targets Recommended Set Build Settings, Build Phases for Targets. Link Libraries.
  • 上面列出了TemplateInfo.plist大部分鍵,詳細(xì)介紹在 這里 。

工程模板定制

工程模板里面除了logo標(biāo)簽,最主要的就是要修改工程的結(jié)構(gòu),比如一些預(yù)定的Group,一些實(shí)現(xiàn)編寫(xiě)好的文件:


enter image description here
  • 首先要修改下“Identifier”字段,以防沖突。

Xcode模板是支持繼承的,或者叫做Import,這里Ancestors字段以數(shù)組的方式列出了要繼承的對(duì)象,上面只繼承了com.apple.dt.unit.cocoaTouchApplicationBase,這個(gè)是和Xcode6一起的Empty工程類(lèi)似的。
Signal View工程則繼承了 com.apple.dt.unit.storyboardApplication"com.apple.dt.unit.coreDataCocoaTouchApplication.

com.apple.dt.unit.storyboardApplication
又是繼承了上面的com.apple.dt.unit.cocoaTouchApplicationBase。 具體其定義了什么,可以對(duì)比著看下,在系統(tǒng)的工程模板位置,比如“Main.storyboard”是如何別加入工程的。

然后就可以在此基礎(chǔ)上開(kāi)始修改結(jié)構(gòu)了。主要涉及兩個(gè)位置

  • OC的用Objective-C字段: 每個(gè)Node是一個(gè)新工程中的具體物理文件位置,目錄自動(dòng)創(chuàng)建,如果沒(méi)有在后面的Definitions中指定,則吧路徑中的最后的的文件加入到工程的代碼跟目錄下。
  • Definitions.Xxx : 這里Xxx就是上面的Node的值,其實(shí)一個(gè)字典類(lèi)型,主要有兩個(gè)鍵:
  1. Path: 模板文件(也就是要被拷貝的文件)所在工程模板中的位置
  2. Group: 新工程中,這個(gè)文件所在的Group

通過(guò)這樣的組合就可以確定模板工程目錄下的一個(gè)文件比如“Main.storyboard”在新工程的哪個(gè)位置(Node的值),以及在哪個(gè)Group(Definitions里面的Group)從而完成對(duì)目錄結(jié)構(gòu)的自定義

Demo示例

Project_Templates.png

文件模板

file_Templates.png

占位符含義

占位符 意義
___FILENAME___ 當(dāng)前的文件名
___PROJECTNAME___ 當(dāng)前工程名,在創(chuàng)建工程時(shí)設(shè)置的
___FULLUSERNAME___ 當(dāng)前登錄用戶(hù)
___DATE___ 當(dāng)前日期 ,格式為MM/DD/YY
___FILEBASENAMEASIDENTIFIER___ 不帶后綴的文件名

這里介紹下plist里面copy文件的目錄:


enter image description here

添加空文件夾

Definitions

    <dict>
        <key>Path</key>
        <string>Resources/</string>
        <key>TargetIndices</key>
        <array/>
    </dict>

Nodes

    <string>Resources/</string>

自動(dòng)添加文件夾下所有文件夾以及文件

Definitions

        <key>Classes/</key>
        <dict>
            <key>Path</key>
            <string>Classes/</string>
            <key>TargetIndices</key>
            <array/>
        </dict>

Nodes

<string>Classes/</string>

總結(jié)

由于Apple自己沒(méi)有公開(kāi)他們的工程目錄結(jié)構(gòu)定義(plist的格式說(shuō)明文檔),所以我們也只能根據(jù)Xcode已有的文件進(jìn)行逆向猜想,還有些諸如Target定義、info plist修改在文中都沒(méi)有涉及,這個(gè)過(guò)程還需要自己參考Xcode的模板,不斷的嘗試,才能得到自己想要的效果。

實(shí)踐

自定義工程模板

要的就是系統(tǒng)SingleView工程模板效果

截屏2016_12_23_下午4_56.png

先研究了一下對(duì)應(yīng)的繼承結(jié)構(gòu)

ClassDiagram3.jpg

實(shí)現(xiàn)步驟

  1. 找到SingleView對(duì)應(yīng)的模板

找到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application,打開(kāi)TemplateInfo.plist

TemplateInfo_plist1.png
  1. 復(fù)制出來(lái)一份TemplateInfo.plist,以此文件為基礎(chǔ),進(jìn)行改造
TemplateInfo_plist3.png

改造后

TemplateInfo_plist2.png
  1. 創(chuàng)建模板文件夾

文件夾放在~/Library/Developer/Xcode/Templates/Project Templates/

Templates.png

選擇自己創(chuàng)建的模板

截屏2016_12_23_下午6_18.png
  1. 模板工程

工程

TSProjectTemplateDemo_xcodeproj_和_gg_xcodeproj.png

多級(jí)Group支持

理論依據(jù)

其實(shí)是大家經(jīng)過(guò)無(wú)數(shù)次猜測(cè)嘗試這里

<key>Definitions</key>
<dict>
    <key>Classes/SomeClass/SomeClass.m</key>
    <dict>
        <key>Group</key>
        <array>
            <string>Classes</string>
            <string>SomeClass</string>
        </array>
        <key>Path</key>
        <string>Classes/SomeClass/SomeClass.m</string>
    </dict>
</dict>

Demo

模板Demo

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

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

  • 一、為什么要自定義模板 1.節(jié)省重復(fù)代碼手寫(xiě)時(shí)間2.統(tǒng)一規(guī)范代碼,提高代碼可讀性3.減少手寫(xiě)代碼,XIB或修改相關(guān)...
    huluo666閱讀 8,169評(píng)論 10 49
  • 在創(chuàng)建Xcode工程的時(shí)候,有幾個(gè)默認(rèn)的模板可以選擇,比如“Application”里面“Signal View ...
    CZ_iOS閱讀 7,204評(píng)論 8 41
  • 不喜歡使用storyboard。而新建一個(gè)Single View Application工程后,總是要?jiǎng)h除Main...
    tangshu閱讀 2,150評(píng)論 0 2
  • 一、前序 不管你是新手還是老鳥(niǎo),開(kāi)發(fā)中都要?jiǎng)?chuàng)建項(xiàng)目和創(chuàng)建文件,例如: 創(chuàng)建工程 ->選擇模版 ->新建項(xiàng)目 打開(kāi)工...
    SwordDevil閱讀 1,349評(píng)論 0 4
  • Xcode 9 Release Notes See more downloads 關(guān)于Xcode Accessin...
    印林泉閱讀 4,727評(píng)論 7 3

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