作者:小王儿 | 来源:互联网 | 2023-08-01 16:22
每一个iOSXcode工程模板由一个主模板文件、0个或者多个基模板文件组成。每一个模板的文件名必须以.xctemplate结尾,必须包含TemplateInfo.plist文件。在Templa
每一个iOS Xcode工程模板由一个主模板文件、0个或者多个基模板文件组成。每一个模板的文件名必须以.xctemplate结尾,必须包含TemplateInfo.plist文件。在TemplateInfo.plist中:1)Concrete字段标识该模板是主模板还是基模板,COncrete=YES为主模板,COncrete=NO为基模板;2)Identifier字段标识模板的唯一性(例如:com.apple.dt.unit.base),主模板通过在Ancestors Array插入Identifier Item引用基模板。
介绍几个路径(以iOS工程模板为例)
1. Xcode的基模板路径 /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates
2. Xcode的iOS基模板路径
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project\ Templates/iOS
3. Xcode的iOS工程主模板路径
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application
4. 自定义Xcode的iOS工程模板存放路径
~/Library/Developer/Xcode/Templates
自定义Xcode工程模板,可以通过修改Xcode自带的工程模板来完成。下面以修改Single View Application(以下简称SVA)为例进行阐述。SVA由以下几个模板组成,依赖关系如下:
先介绍几个通用字段:
1. Kind:固定为Xcode.Xcode3.ProjectTemplateUnitKind;
2. Concrete:主基模板标识;
3. Ancestors:引用的基模板;
4. Identifier:模板的唯一性标识;
5. Project、Target字段标识的属性作用域分别为整个工程和包;
6. Project、Target都可以包括:1)SharedSettings字段标识为工程的一些配置属性;2)Configurations分Debug和Release两部分的属性。
7. Platforms:标识该模板适用的平台,如com.apple.platform.iphoneos。
8. Options
1)在Base.xctemplate中,Options用来展示建立工程时,填写的Product Name、Organization Name、Organization Identifier和Bundle Identifier;
2)常用的Item类型有:popup、text、static、checkbox;
3)Options中的Item是否起作用,通过Required来标识;
4)在Language Choice中,Options标识开发所用语言Item:Objective-C或Swift,类型为popup,唯一标识Identifier为languageChoice;
5)继承于Language Choice.xctemplate的工程模板,Options中可以使用Identifier为languageChoice的Item。因为languageChoice Item的类型popup(有Objective-C、Swift选项供用户选择),所以Options中的Item包含Units用于分别执行各个选项。
9. Definitions
1)在工程目录结构中看到的文件,可以通过2个途径生成:在TemplateInfo.plist中通过代码生成、模板本身创建好的文件;
2)关于路径
a. Definitions中key-value是一个命名为“生成工程后的目的路径/文件名”的Dictionary。该Dictionary一般包括Path(该文件当前路径)和Group(生成工程后文件所在工程中的Group);
b. ../表示生成工程后,该文件和工程文件同一个目录;
c. 代码生成的文件,必须以“生成工程后的目的路径/文件名”方式进行引用。
10. Nodes:用来生成文件结点(工程目录结构中能够看到的)。
11. 常用的全局名称
1)__DATE__、__YEAR__、__TIME__:标识当前时间;
2)__FILENAME__:带文件后缀的全名;
3)__FILEBASENAME__:不带文件后缀的名字;
4)__ORGANIZATIONNAME__:当前设置的Organization;
5)__USERNAME___:当前的用户名;
6)__PROJECTNAME__:工程名字;
7)__PACKAGENAME__:包名,初始时和__PROJECTNAME__一样。
这些名称可以在文件命名、文件内部和template.plist中使用。
Base、Language Choice和Core Data Cocoa Touch Application用来展示创建SVA工程引导中的一些选项,Project Name、Company Name、 Organization Name、Bundle Name、语言和是否使用Core Data等等。Info.plist是key-value文件,Bundle Base、Application Base和Cocoa Touch Application Base各为其添加key-value。如果想改变Info.plist的路径需在前面添加相对路径。其他文件解析类似。
主模板文件夹中TemplateIcon.tiff用来标识工程模板的Icon,自定义的模板只需替换这个文件即可达到修改Icon的目的。最后,只需要写一个简单的sh脚本,把自定义好的模板拷贝到路径4下即可完成模板的安装。(一个完整的SVA模板:https://git.oschina.net/arbull/single_view_application_template.git)