iOS性能调优iOS性能优化相关iOS高级应用

由spacecommander这个库所想到的自动化管理

2015-10-30  本文已影响0人  叶孤城___

由spacecommander这个库所想到的

我最近两个周都在做持续化集成和代码风格管理的东西.

我会分两篇博客来讨论一下这两个东西.这一篇先讲讲代码风格管理.

工具化程度是衡量一个公司技术水准很重要的一个考量.例如跑Unit Test,代码风格检测,持续化集成都自动化的时候,这些东西都是可以极大的节省时间精力的东西.而且这些东西其实并没有想象中难.好好研究一下,两三天就能搭个能用的出来.

Camera360和英语流利说都是这方面做的很好的公司.

Camera360的持续化集成做的非常强大.比如通过github的webhooks通知自己的服务端打包,然后还有自己做的类似于TestFlight的app.

流利说用Facebook的phabricator做code review和task manager.还有自己搭建的gitlab做cocoapods的podspec.

在这样的环境开发是很舒服的.你们有时间可以去这两家公司体验一下.

今天主要讲一个库,spacecommander.这个主要是利用clang来进行自动格式化代码.

首先git clone git@github.com:square/spacecommander.git到你的本地.

比如说我的spacecommander是放到/Users/zangqilong/Projects/spacecommander这个目录下.

记住这个目录,等下我们需要运行这个目录里的脚本文件.

打开你的某个项目的根目录.例如,我拿我写的美团Demo为例.

/Users/zangqilong/Projects/MeituanDemo

然后运行~/Projects/spacecommander/setup-repo.sh.

这样,我们的项目就安装了我们的代码检测工具.

这个命令主要干了这么两件事.一个是添加了.clang-format文件.
如图

这个文件主要是做什么的呢?
这个文件主要是设定了代码的一些风格.

比如,是否允许if后面如果是短表达式的时候是否允许不换行.
还有定义变量的风格.
比如AlignConsecutiveAssignments这个选项.如果设为true

int aaaa = 12;

int b = 23;

int ccc = 23;

声明的变量就是这种风格.

AlignConsecutiveDeclarations这个选项设为true呢.
就是这种风格.
int aaaa = 12;

float b = 23;

std::string ccc = 23;

类似于这样的选项有几十种.具体的内容可以参看这里.clang format style

所以,功能是非常强大的.

安装了spacecommander到我们的目录之后,他还会帮助我们写一个hook.中文叫做钩子.这东西放在哪里呢?
这个东西放在/Users/zangqilong/Projects/MeituanDemo/.git/hooks
这里.
如图


注意看哪个叫做pre-commit的文件.没有后缀名的那个,凡是带.sample的文件都是示例文件,就是git教你怎么写钩子的文件.你把.sample去掉之后才会生效.

我们使用vim打开.
在看代码之前,我先告诉大家这个pre-commit到底是干嘛的.很简单,这个东西就是在你每次要commit代码之前,git都会去找,有没有这个文件.如果有这个文件,那么就去文件里执行一些特定的shell脚本.

综上所述,当你运行git commit -m "xxxx"的时候,他就去执行脚本.就这么简单.

然后呢,这个脚本是这样的.

脚本很简单,就是每次commit的时候跑去本地的spacecommander文件夹里运行一个叫做format-objc-hook的文件.

那么我现在直接告诉大家这个文件是干嘛的.

你每次commit的时候,这个format-objc-hook就去找你的哪些文件是修改过的,需要commit那么他就去运行format-objc-file.sh 文件名这个脚本去检测你的代码是否符合规范.如果规范就让git add 这个文件,如果不通过,那么就打印一段话告诉你哪些文件不符合规范.

如图.

我在.clang-format文件里禁止了if后面接短表达式.
所以这种语句是不符合规范的.那么我们现在提交一下.


看它检测到GroupPurchaseViewController.m这个文件里有不符合规范的语句.提示你运行脚本纠正.

那么你可以运行/Users/zangqilong/Projects/spacecommander"/format-objc-files.sh Meituan/GroupPurchaseViewController.m来纠正.

结果现在有一个问题很讨厌,就是每次运行脚本的时候都得输入一大串命令,我们其实可以设置一个alias,来把这个命令简化.

那么如果你是用的是bash,需要修改~/.bash_profile,我用的是zsh,所以需要修改~/.zshrc这个文件.
如图


添加alias fmtone="~/Projects/spacecommander/format-objc-file.sh"
alias fmtall="~/Projects/spacecommander/format-objc-files-in-repo.sh"

以后你运行fmtone + 文件名就可以纠正单个文件的风格.那么
运行fmtall呢,就可以纠正所有文件的风格.

我们来试一试.


好了,我们纠正了所有代码的风格.

有人可能会问,万一我的iOS项目里使用了Pods和carthage怎么办?它会不会把我的第三方库也全部整理一遍.

这个是不会的,人家已经都想好了.不信
你去看你的spacecommander的lib/common-lib.sh这个文件.

echo "common_sh $files" | grep -v 'Pods/' | grep -v 'Carthage/' >&1

这句话就是利用正则把含有pods和carthage的文件路径去掉了.

下篇讲一下如何在服务端跑Unit Test.

上一篇 下一篇

猜你喜欢

热点阅读