在 (一) 初探 iOS 单元测试 一文中,咱们简单提到了执行xcodebuild test能够启动工程的单元测试并输出测试结果,但手动执行此类命令意义是不大的。咱们须要的是,把一些测试和lint等命令写在脚本文件里,在代码提交、合并及打包等行为实际发生前,自动执行脚本,以执行的结果决定是否打断上述操做,必定程度上达到控制代码质量的目的。 在多人协做开发中,咱们能够在全部成员进行某些git操做(commit push merge rebase等)前进行代码的验证(Test、Lint等),防止逻辑错误或不合规范的代码更新到远端仓库中。固然,若是团队搭建了本身的git服务器,有Mac服务器,在server端进行git hooks是最好的解决方案,本地仓库也不用进行额外配置。此外,咱们也能够作一些Client Hooks,来达到一样的效果。如下内容是笔者对git pre-push hook的一些实践。git
前往本地仓库,按下command+shift+.查看隐藏文件,目录以下。咱们能够看到.git/hooks路径下有一些.sample的文件。 xcode
exit 1 复制代码
保存退出,仓库根目录下,执行:bash
git push
复制代码
workspace_name() { workspace_file=`find . -maxdepth 2 -name *.xcworkspace -exec basename {} \;` echo ${workspace_file%.xcworkspace} } check_result() { if [ $? != 0 ]; then echo "$1 failed!!" echo "push will not execute" echo "$?" exit 1 else echo "$1 passed." echo "push will execute" echo "$?" fi } workspace=$(workspace_name) xcodebuild -workspace Example/$workspace.xcworkspace -scheme $workspace-Example -destination 'platform=iOS Simulator,OS=11.0,name=iPhone 7' test check_result "test" 复制代码
例子是以pod lib create ...
建立的标准工做空间,从仓库根目录起以最大深度为2寻找以.xcworkspace结尾的文件名,赋给workspace变量,最后test名为worksapce.xcworkspace scheme为worksapce-Example的工程,测试失败,打印"push will not execute"
,exit 1
;反之打印push will execute
,exit 0
。 仓库根目录下执行:服务器
git push
复制代码
最后输出: markdown
咱们知道,.git文件夹并不会被push到远程仓库,每一个成员clone仓库,.git文件夹是会初始化的。也就是说,正常状况下,pre-push hook只对我的有效。但咱们能够耍一些小手段,让每一个成员仓库.git/hooks路径下都存在咱们写好的pre-push文件,这样其余成员的仓库也具有了git pre-push hook功能。app
if [ ! -d "$../.git/hooks/pre-push" ]; then cp ../pre-push ../.git/hooks/pre-push exit 0 fi 复制代码
首先,咱们写好一个脚本,功能为若是.git/hooks路径下没有pre-push文件,就复制一个进去。如图中add-pre-push-hook.sh文件: 编辑器
git-scm.com/book/en/v2/… blog.ittybittyapps.com/blog/2013/0… blog.ricardofilipe.com/post/git-ho…oop