CodeSnippet
CodeSnippet 是代码片段的意思。
在Xcode中支持代码片段,我们可以将经常使用的代码存储为一个代码片段,并为它设置快捷键。这样,输入快捷键的时候就能将代码输入
CodeSnippet创建和使用
比如我将 @property (nonatomic, copy) NSString *name;
存储为代码片段
- 选中代码,右键,Create Code Snippet就行 可以为它设置快捷键、简单描述、语言、作用域等
2. 修改代码片段的属性
Command + Shift + L 或者 点击Xcode右上角的+号
点击Edit就可以重新编辑属性。也可以点击左侧delete删除这个代码片段 3. 使用快捷键,也就是上图中的 Completion后面的mynpc。输入mynpc后回车,就可以直接键入
4. 给代码片段内的部分变量添加占位符
只需要将要修改的部分使用 <#name#>
包裹起来就行,其中name是你自己命名的变量。 用于在键入代码片段后作为占位
@property (nonatomic, copy) <#type#> *<#name#>;
这样修改之后,你就有了方法参数占位的体验了
代码片段存储位置
Xcode已经自带了很多代码片段,包括C、OC、C++、Swift、XML等
- 代码片段存储在
~/Library/Developer/Xcode/UserData/CodeSnippets
目录中,文件名是.codesnippet
- 我们可以将已有的代码片段复制到这个目录下,如果不存在这个目录,创建一份就行
目前Github上也有很多现成的CodeSnippet
Xcode Template
模板是包含在扩展名为.xctemplate的目录中的文件的集合
Xcode在创建项目或文件时,使用了Xcode中的的模板功能,它包括iOS
、macOS
、watchOS
、tvOS
、visionOS
、DriverKit
等菜单
Xcode 内置的模板存放在两个主要的地方
- 基础模板
/Applications/Xcode-15.0.0-Beta.6.app/Contents/Developer/Library/Xcode/Templates
- 分平台存储的模板
/Applications/Xcode-15.0.0-Beta.6.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
- 文件夹里面有文件模板
File Templates
和工程模板Project Templates
,分别对应创建文件时的选项和创建工程时的选项。
一般情况下,不会频繁创建项目,而会频繁创建文件。所以我们本次学习创建文件模板
提示:这里因为我使用的Xcode 15 beta6,所以可能和你的路径不一样
模板目录中直接包含.xctemplate的文件夹对应的是面板上的Section
而Section下的内容是由上面两个模板路径的内容以及用户自定义模板路径的内容决定的 上面分平台的 User Interface只包含除了SwiftUI View.xctemplate
之外的其他四个,SwiftUI View.xctemplate
则是由基础模板提供
模板知识
当我创建文件时,选择语言为Objective-C,基类为 NSObject,系统就会使用下面的模板
一个模板的内容主要包括TemplateInfo.plist
、模板Icon、模板文件等
TemplateInfo.plist
主要描述模板的信息- 模板文件命名主要由
基类+语言
(比如下图的NSObjectObjective-C
) 组成 - 模板文件内部会使用宏来替换掉 输入的文件名 等信息
TemplateIcon.img
是一个48x48的图片,TemplateIcon@2x.png
是一个96*96的图片。用于模板的icon展示
下图中 前后三下划线 的就是宏 ___FILEHEADER___
看一眼生成的文件,比对一下大概就知道是哪个宏对应什么内容
TemplateInfo.plist 描述模板信息
AllowedTypes 允许包含的文件类型数组
- public.objective-c-source (Objective-C)
- public.objective-c-plus-plus-source (Objective C++)
- public.c-source (C)
- public.c-plus-plus.source (C++)
- public.c-header (header file for C, C++, Objective C)
- public.ruby-script (Ruby)
- public.python-script (Python)
- com.sun.java-class (Java .class file)
- com.sun.java-source (Java .java file)
- public.xml (XML)
- public.source-code (generic source code)
MainTemplateFile 模板文件源文件
如果模板有多个文件,它用于指定模板完成后哪个文件被第一个打开
SupportsSwiftPackage 是否支持SwiftPackage
Kind 模板类型
文件固定的为:Xcode.IDEFoundation.TextSubstitutionFileTemplateKind
Description 详细描述文字
Summary 简要描述文字
SortOrder 排序优先级
DefaultCompletionName 默认文件名
如果创建时不输入名称,默认使用这个
Platforms 模板所支持的平台有哪些
支持的类型有以下方面
- com.apple.platform.macosx
- com.apple.platform.iphoneos
- com.apple.platform.watchos
- com.apple.platform.appletvos
- com.apple.platform.xros
Options 模板选项配置
是一个集合,配置创建模板的面板相关属性,如名称,类型,选项卡,选项约束等。模板中的宏会被此处的配置值替换
Options 中有四个配置选项,通过 Name 等描述字段可知分别是"类名"、"基类名"、"是否创建XIB"、"语言选取"
常见字段
Identifier 唯一标识
模板选项的唯一标识,在模板文件中可以通过宏来引用它的值 ___VARIABLE_identifier___
,用来保存模板选项的值
Required 该选项是否必须输入或选择
Name 选项名字,会显示在xcode界面上
Description 选项说明,鼠标悬浮在选项位置时会显示
Type 选项类型
- ViewController中类型为
text
(手动输入) - 基类为
class
(类选取) - 创建XIB为
checkbox
(勾选框) - 语言选取为
popup
(弹框) static
combo
buildSetting
NotePersisted 输入值是否保留以便下次使用
FallbackHeader 如果无法确定要子类化的类的位置时导入的头文件
Suffixes 一个后缀字典,根据你要子类化的类型添加
Default 选项默认值
这个值跟选项类型(text
、class
、checkbox
、popup
)有关。例如
- 创建XIB的选项类型为
checkbox
,默认不创建,其值就为false - 语言选择的选项类型为
popup
,是必选的,其默认值就为Objective-C
Values 某类值的集合,如果类型是combo, popup, classs时,需要提供的值数组
这个值跟当前选项具体内容有关,最直观的就是语言选项中的Values,它对应的值是用户可以选择的两种开发语言Objective-C
与Swift
需要分组的类型
popup、combo、class、checkbox这几种类型需要我们为其创建子目录并添加对应的模板文件,Xcode将在.xctemplate文件中查找到输入元素提供的值的子目录。
其他类型
- static
- text
在源模板文件中使用Options定义的的标识符变量名来引用它的关联值,从而从用户界面获取输入并将其映射到模板源中 例如,如果模板定义了一个名为viewColor的标识符,那么您可以在源模板中使用___VARIABLE_viewColor___
或___VARIABLE_viewColor:identifier___
引用变量的值。
RequiredOptions 必要选项
从XIB选项中可以看出,这个字段是与checkbox 配合的,当基类出现指定的值时,勾选框就可选
一些内置宏
___PROJECTNAME___
:工程名___FILENAME___
:包含后缀的文件名___FILEBASENAME___
:不包含后缀的文件名___FILEBASENAMEASIDENTIFIER___
:不包含后缀的c格式文件名,会根据上下文被重新评估赋值。就是文件的名称___VARIABLE_cocoaTouchSubclass___
:cocoaTouchSubclass 变量名___IMPORTHEADER_cocoaTouchSubclass___
导入 cocoaTouchSubclass___FULLUSERNAME___
:用户名___ORGANIZATIONNAME___
:公司名___COPYRIGHT___
:版权说明___DATE___
:当前日期,年/月/日___TIME___
:当前时间___YEAR___
:当前年份___FILEHEADER___
:文件头部的注释productName
是一个特殊的变量,Xcode使用它去命名文件
自定义模板
自定义模板的存储位置 ~/Library/Developer/Xcode/Templates/
最快捷的创建模板的方式就是从分平台的内置模板中copy一份修修改改
创建自定义模板步骤
- 从
/Applications/Xcode-15.0.0-Beta.6.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/iOS/Source/Cocoa Touch Class.xctemplate
拷贝一份模板 - 将模板拷贝到
~/Library/Developer/Xcode/File Templates
并创建自己的目录。有两种方式
-
和原有Source在同一个Section。
~/Library/Developer/Xcode/Templates/File Templates/继承修改/iOS/Source/我的CocoaTouchClass.xctemplate
-
单独一个Section
~/Library/Developer/Xcode/Templates/File Templates/我的模板/我的CocoaTouchClass.xctemplate
资料
- blog.devlxx.com/2020/06/29/...
- shujucn.gitbooks.io/xcode/conte...
- juejin.cn/post/695682...
- juejin.cn/post/688267...
- www.jianshu.com/p/1ce9a0822...
- www.jianshu.com/p/2538fb02d...
- www.kodeco.com/26582967-xc...
- www.andyibanez.com/posts/xcode...
- medium.com/mindful-eng...
- diamantidis.github.io/2019/07/21/...