Xcode代码文件模板

效果图

背景

鉴于公司非常注重代码规范,所以需要有良好的代码标注(MARK、FIXME、TODO),有利于代码文件目录清晰。
代码文件内部基本一致的集成风格,比如每个Controller都有必须实现固定方法重写,继承基础Controller等。

解决方法

  1. 采用赋值粘贴,修改名字
  2. 创建快捷代码块
  3. 修改Xcode文件模板,新建选择模板继承,形成统一风格

自定义文件模板

步骤一:找到模板文件

Xcode模板路径: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source
打开访达,可以一步一步找到,也可以快捷键command + shift + G 前往。
模板如下图:
Xcode代码文件模板_第1张图片
对应的Xcode 新建模板如下:
Xcode代码文件模板_第2张图片

步骤二: 新建模板

既然都找到模板了,那就可以修改它。但是你仍然需要注意。

  1. 不影响原本模板,你应该赋值一份基于CocoaTouchClass模板来修改。
  2. 直接在应用的目录里无法修改,你应该赋值一份出来。

比如,我需要建一份Swift专用的模板,需要如下:

  • 基于BaseController继承的带规范性标注的模板
  • 自定义View模板
  • Model模板

复制模板出来

修改复制出来的模板文件名改为为MySwift,
删除文件内的无关文件,只保留Swift版本的UIViewControllerSwift,UIViewSwift等文件

修改系统模板

修改对应文件。比如原始UIViewSwift文件

//___FILEHEADER___

import UIKit

class ___FILEBASENAMEASIDENTIFIER___: ___VARIABLE_cocoaTouchSubclass___ {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }
    

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */

}

修改为自定义模板

//___FILEHEADER___
//  <#title#>
//  简述:<#描述#>

import UIKit

class ___FILEBASENAMEASIDENTIFIER___: ___VARIABLE_cocoaTouchSubclass___ {
    // MARK: - 属性
    
    // MARK: - 生命周期
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        commonInit()
    }
    private func commonInit() {
        <#初始化操作#>
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
    }
    
    // MARK: - 辅助方法
    
}

添加新建模板

除了更改系统模板,也可以新建自定义模板,但是要保留相应的宏定义,比如模板文件___FILEBASENAME___.swift
比如,添加一个Model模板

//___FILEHEADER___

import Foundation
import HandyJSON

@objcMembers
class OrderQRCodeModel: NSObject, HandyJSON {
    
    required override init() {}
}

修改配置文件

由于删除了原有模板,新建个人模板文件,所有需要修改TemplateInfo.plist部分内容,使得避免干扰和可识别新建模板文件。
Xcode代码文件模板_第3张图片

Option 参数解释

Key 描述 值类型
Name 选项标签显示名字 String
Description 鼠标悬停时的描述 String
Type 改选项的类型,包含:checkbox(单选框),text(输入框), static(静态文字), combo(), popup(下拉选择) String
Required 如果此选项没有值,是否禁用“下一步”按钮 Bool
Identifier 唯一标识,作为其他选项内容变量 String
Default 默认值,可以使用其他选项的变量, String
Values Type 为combo或者popup的值提供 字符串数组
RequiredOptions 仅当选择了另一个选项的某些值时,才可用于启用当前选项。例如,仅启用另一个弹出选项的某些值的复选框。字典的键必须是另一个选项的标识符,并且字典的值必须是popupor combo选项的值的子集数组,该数组允许启用当前选项。 Dictionary
SortOrder 控制选项的显示顺序,默认按照 options数组顺序显示。 Number

一次生成多个模板文件

通过复制系统自带的代码模板和修改 plist 配置,可以快速定义自己的单文件模板,如果我想一步创建多个文件模板怎么办了?比如说一次性创建 Model, Controller, Request 等模板。

配置如下:
Xcode代码文件模板_第4张图片
xctemplate.plist 配置大致如下:

{
	Kind = "Xcode.IDEFoundation.TextSubstitutionFileTemplateKind";
	Platforms = (
		"com.apple.platform.iphoneos",
	);
	Options = (
		{
			Description = "The name of the module to create";
			Identifier = "productName";
			Name = "New Module Name:";
			Required = YES;
			Type = text;
		}
	);
}

将自定义模板引入Xcode

将修改后的模板放在刚刚路径下Resource,重启 Xcode, 现在在项目中command + n就可以看到自己的模板了。

协同同步脚本

如果涉及到多人协同开发,也可以git远程同步与管理,通过统一脚本同步模板。

更新模板脚本

#!/bin/bash

# 更新模板
# 这里可以同步下远程仓库 git pull
# 获取当前目录路径
current_path=$(cd $(dirname $0); pwd)
echo "当前路径:${current_path}"
new_path="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/iOS/Source"
file_name='/模板文件名.xctemplate'

echo "模板路径:${new_path}"
raw_dir="${current_path}${file_name}"
new_dir=$new_path

# 复制文件 注意这里需要用双引号,解决路径含有空格问题。
cp -rvf "${raw_dir}" "${new_dir}"
# 结果为0 成功
if [ $? -eq 0 ]; then
     echo "更新成功"
else
     echo "更新失败"
fi

如何直接执行脚本
将后缀sh改为.command,双击脚本即可唤起终端执行。
前提是脚本文件已经是可执行的。如果不是可以用下面命令改变:

chmod +x 脚本路径

扩展

如何定义可以创建包含文件夹(Group)的模板,知道的兄弟告诉我一下,剖析 Uber 的 RIB 架构中 深入 RIBS,他们团队就可以通过模板创建Group 和相关代码文件

参考

先进的 Xcode9 模板文件 详细介绍 option 参数,支持一次创建多个文件模板 github 地址

你可能感兴趣的:(iOS,移动开发,iOS,开发问题踩坑,#,Xcode,模板)