在开发NB-App的过程中,为了方便,写了一些小脚本,这里一一列举一下。
在后端开发人员只给出接口但并未开发完全的时候,这个脚本会充当返回静态json的角色。
基于 web.py 框架实现,web.py是天才 Aaron Swartz 开发的一款小型web框架,对于我们来说,入门简单,功能够用。
NB-App在2.0版本时期开始支持英文,主要原因是我们的App是给途牛的供应商使用的,而从统计工具上可以看出,我们现在的供应商已经遍及亚洲、欧洲、非洲、北美洲、南美洲、大洋洲,30+的国家和地区,英文版本的支持还是很有需求的。
但是前期在开发过程中并没有料到这种需求,所以并没有留口,中文内容并未抽离,所以我们写了一个抽离脚本。
抽离脚本比较简单,这就不贴出来了。
在产品翻译好我们要求的词条之后,产品会把这些汇总在excel上,类似于下面:
而我们想要的是这样的:
这种工作如果人工来的话,此工作量显而易见,初版的词条个数就已经达到700+了,手动的话,会死人的。
这个脚本会将excel内容按格式输出到strings文件中。
相配套的,还有一个脚本用于输出产品遗漏和重复的内容。
excel文件读取使用的是python的xlrd库,这个库用起来很方便。这个xlrd库对应的写操作是xlwt库,但是xlwt只可以写一些简单的excel。
我举个例子,我们组一般用wiki上的表格写需求的review意见,之后需要汇总到excel上(为啥要汇到excel,这是一个科技公司该有的思维方式吗?那是文员的工具好吧!)。所以,我写了个脚本,脚本会从网页上解析表格内容,再自动填充到excel上,但是,相信我,这个表格很复杂,还带有大量的宏,写进去直接乱了。我找了好点时间都没有找到更好的库,最后,没办法,我只好先生成一个简单的excel,然后再手动复制粘贴到复杂的excel上,然后再点几下,才能完成。
在多语言功能完成后,我们又开发了一个动态多语言的功能,这个功能要求可以动态修改App中的中英文显示。这样的话,本来 Localizable.strings (Chinese)
文件中的中文不全是没有关系的,但是现在不行了,如果中文中没有对应值的话,我们就无法动态修改了(Hook、Patch的方法就算了)。
所以我写了一个Strings拷贝脚本,这个脚本会把 Localizable.strings (English)
中的Key拷贝过去,生成中文版,例如:
"行程冲突" = "scheduling conflict"; "乘客信息有误" = "error of customer information"; "失败原因" = "reason of failure";
在编译之后,会自动替换中文Strings文件。
"行程冲突" = "行程冲突"; "乘客信息有误" = "乘客信息有误"; "失败原因" = "失败原因";
此脚本只会导出中文,具体从哪个 Localizable.strings
导入到哪个 Localizable.strings
可以在脚本内设定。
在NB-App的开发中,逐渐加入了一些测试功能,因为一些原因,我们需要设置多个Target。
但是多Target会带来一些问题,比如下面这些情况人工是比较难以区分的:
所以我写了一个脚本,从pbxproj文件上去读信息,在编译时自动生成报告,大致如下:
如果你有多个target的话,而且每次创建新文件都需要确保添加到所有target里面的话,我建议你用破博客的 AllTargets 插件。
这些小脚本本意并非想要开源,只是为了方便我的工作的,所以在实现的功能上会很基础,但是已足够我使用了。
我这个脚本只适合在两个target的情况下使用,如果target较多,你可以修改此脚本。脚本写的很基础,随便改吧。
公司某次要求我们统计代码量,我嘞个去,他们自己统计的量可大了,这不行啊,代码量太大显的我low啊,所以我自己写了个脚本来统计。
这个脚本可以忽略空白行、以 //
开头的注释行,并可过滤指定目录的文件,也可以设定输出代码行数>x的文件名称。
恩,这样就显的我的代码量小了。
这个脚本是我为了统计自己每天的工作量而开发的脚本。
原理是从工程的svn log上获取版本号,之后依次diff版本,从输出的diff信息上统计新增和删除的代码行数,之后按日期汇总输出,输出如下:
以前公司也用一个SVN的统计工具,叫做StatSVN,大家有兴趣的可以尝试一下。
在早期xib上画线的时候,不能给某个view设置宽度为非整数,比如我设置为0.5,可以设置成功,但是在Xcode上面还是显示1。
这个脚本就是为了批量设置线款的,所以就没必要贴出来了,比较简单。
有的时候,我们无法要求每个mac都安装和你一样的库,而我们又要求我们的脚本可以运行,这有很多办法,可以用 virtualenv ,也可以直接将python源码转化为.exe或者unix可执行文件。
这其中有很多工具,我一般使用 PyInstaller ,这在谷歌或者百度一搜就有一堆,我就不再赘述了。
这种方式会把环境和库也打上去,所以一般来说会比较大,可能有好几兆,甚至十几兆。
上述的脚本中,有一些需要在每次编译后运行,那么我们可以将脚本添加到Xcode中,具体方式如下:
在 Build Phases
中可以新建 Run Script
,之后可以修改脚本名称,以区分不同的脚本。Xcode只能指定为shell执行,如果是python的话,执行方式可以和下面类似:
python ./Scripts/exchange.py
如果是打包成可执行文件的话,执行方式类似于下面,直接执行此文件即可:
./Scripts/diff_project
我这里的 exchange
脚本使用python直接执行,而 diff_project
脚本需要打包成可执行文件,最主要的原因是, diff_project
脚本中使用到了python的 PyObjc
库,而其他人的电脑上往往是没有这个库的。