XCode 一键修改copyright方案
引言
最近团队要求自定义copyright模版,在网上搜索了一些方案不太满意,于是自己花了点时间弄了个解决方案,能够快速生成带有自定义copyright模版的project,并保证良好的团队协同性
单一方案
方案1: 使用 script 替换 source file copyright
-
描述:使用 sheel 脚本扫描并且替换工程源文件copyright
-
缺陷:
- 非等幂性操作: 该脚本只能执行一次,多次执行会造成非预期的copyright (注:由于正则匹配不够严谨的缘故造成,可修复)
- 粗暴会替换掉所有源文件的copyright,如果有团队成员引入了他人的源代码也会被修改掉,所以考虑这个,你还需要设置一个过滤文件的功能
方案2: 替换XCode source file template
-
缺陷:
- 麻烦:XCode有n个模版文件,需要逐一修改
- 缺乏同步性: 意味着团队所有成员的XCode template file都要修改,否则无法保证,创建的source file 拥有一致的copyright
- 缺乏灵活性: 设想如果不同的项目要求不同的copyright,怎么处理?
-
总结: 对这个方案也能表示满意的,我只能说要求真高
方案3: 创建IDETemplateMacros
-
特点:
- 实现简单
- 协同性好: 只要将plist 文件推入xcshareddata文件即可
-
缺陷:
- 你要先创建project才有对应的.project文件,这意味在引入IDETemplateMacros之前,添加的文件的copyright是不对的,你需要手动处理这些copyright
-
总结: 这个可行性还是比较高的
方案4: 创建XCode project template
- 描述: 自定义XCode project template
- 特点:
- 灵活性好: 可以根据不同的copyright 创建不同的template
- 缺陷
- project template 只在创建project时有效,因此新加的source file仍然会使用 source file template 导致copyright 不一致
- 通常在创建project的时候还会,附带创建UnitTest 和 UITest,但不幸的是这个时候Xcode用的是默认UnitTest 和UITest模版,这意味着你在创建project时不能勾选tests选项,然后你还需要创建使用自定义Tests模版的target。 总的来说你至少需要创建四个project template, app, UnitTest,UITests,DynamicFramework
组合方案
前面的单一方案或多或少都存在着问题,不能完美的解决问题,所以必须采用组合方案。
方案A: 使用XCode custom project template 和 custom Macros
-
描述:
- 使用自定义模版创建工程
- 拷贝IDETemplateMacros至工程文件
-
特点:
- 能够完美保证copyright一致
基本满足需求,但还是要手工操作一下,于是我想能够从命令行创建project就好了,这样就真的啥也不用管了。遗憾的是貌似command line tools 不支持这个功能,如果哪位大神知道的话,麻烦告诉我.不过也并非一无所获找到了facebook 开源工具buck, 不过这个类似CocoaPod, 更多的是做包管理的,算是开个眼界吧.
方案B: 使用XcodeGen 生成project,结合脚本修改copyright
XcodeGen: 根据配置文件project.yml 和资源文件生成project,这样可以不用上传.project文件,有效避免.project文件引起的冲突。
这里仅仅是把它当作生成project的命令行工具使用,但光靠它还不行还需要做一下操作
1. 修改文件夹名称
2. 修改源文件comment: copyright, projectname
3. 修改Test文件moduleName
4. 拷贝IDETemplateMacros 至 xcshareddata
至此,整个完工。 demo传送门
网友评论