简单介绍下工具:代码版本管理用的git,审核用的phabricator。公司代码都是需要提交流程,commit->生成审核链接->审核人审核->审核通过->拉取代码->push代码。
领导说:提交代码这么频繁,每次都要手动提交代码,生成审核链接,等完成之后再push,太麻烦了。来来,我们搞个自动化,提交到到生成链接并复制到剪切板只需要点一下按钮;审核通过后再点下推送按钮。不得不说大领导是有想法的,佩服啊。但是我没写过mac工具,也没写过脚本啊,用OC能实现吗?
慎重考虑了下,还是使用脚本吧!毕竟以前还写过打包脚本不是,虽然关键语句也是网上抄的,但是了解点啊。好吧,正题开始了
审核工具界面:
1.第一行:配置phabricator命令,是否提交xcodeproj,使用的语言
2.第二行:选择工程路径
3.第三行:选择审核人
4.第四行:提交信息
5.第五、六、七行:执行过程,完成了那些步骤;审核按钮;及日志

工具开发思路:
1.phabricator生成链接就不科普了,自行百度及参考官方文档。arc diff和arc update是生成和更新链接。
先从终端开始吧,终端能调用成功,再考虑放到工程里吧。现在需要做的就是在shell脚本中能调用 arc diff.
第一个难点:
arc diff --create和arc diff --update在终端是需要填写信息的,在脚本中如何解决这个问题?

最后还是靠Phabricator官网提供的方法,在本地配置文件,arc diff --encoding GBK --create --message-file。完美解决
第二个难点:
.sh能运行,功能没有问题,但怎么在xcode中运行?还好xcode提供了NSTask能够运行脚本语言。虽然如此,还碰到一些问题:
1.xcode读取目录时,没有权限?
建议关闭沙盒权限
2.脚本能调用arc diff命令,xcode怎么调用?直接和脚本一样调用时找不到arc diff命令。
这个有两个解决办法:
把arc命令想办法放到bin目录下;(由于新系统不允许直接拷贝文件到bin目录下,需要做些处理,可参考这个链接)
也可以 path/arc diff方式去访问(这种简单,由于当时对脚本不熟悉,花费了不少时间)
3.提交,生成arc,和拉取,推送都是用的NSTask,而NSTask一次只能执行一条命令,还涉及到取消NSTask,如何管理这个任务?
第一个想到的自然是封装一个NSOperation,可以判断执行状态,设置并发量,还可以取消,简直完美。
4.在取消的时候,发现NSOperation只能取消未执行的任务,正在执行的任务缺没法取消,如何解决这个问题呢?
取消除了设置NSOperation相关状态,还要拿到正在执行的task,执行task terminate。否则,下次执行命令时会失败。
总结:大的问题基本解决,还有细节,如何熟练使用.sh语法,正则,方法等,如何处理语句调完后是成功还是失败,怎么获取语句输出的结果等。这些也花费不少时间,同时这个工具也算是带我入了门吧!思路比实现更重要,最后附上demo链接。
网友评论