iOS项目持续集成之Travis CI

为了项目的持续集成,最近为公司的iOS项目集成了Travis CI,并实现上传iTunes Connect(或者其他指定的服务器)。

主要参考文章:http://objccn.io/issue-6-5/,这是一篇objc中国的翻译文章,原文出处里面都有。里面基本讲述了集成Travis的流程,只是原文是2013年的,有点老吧。

在使用中主要遇到的问题和需要注意的地方有大概以下这些:

1、如果在执行脚本是遇到脚本异常时,应该检查该文件的格式:用vi打开该文件,:之后输入set ff查看格式,如果是dos要改为unix,这个跟编辑器有关系。(参考:http://www.cnblogs.com/pipelone/archive/2009/04/17/1437879.html)

2、除了这些问题之外,在编辑travis.yml时可能会遇到一些语法问题,如缩进也是yml的语法,单引号和双引号的使用等,具体可以查看yml语法,或者跟objc教程保持一样的格式就可以了。

3、执行xcodebuild命令时,注意workspace或者project所在的目录。(pwd命令可以看到当前路径)。其实只有任何跟pwd有关的参数都应该检查该参数是否与实际相符。

4、应用程序的签名中的证书和配置文件一节,建议第三步(iOS配置文件(发布))与第二步(iPhone发布证书+私钥)调换步骤。  调换和不调换生成的代码是不一样的,这个是解决可能会出现密码错误的问题。我觉得是后面加的全局变量破坏了它的加密信息吧,也可能与yml的格式有关系。

5、到了签名创建IPA步骤时,其中的脚本有一段是:

if[["$TRAVIS_BRANCH"!="master"]];then

echo"Testing on a branch other than master. No deployment will be done."

exit0

fi

$TRAVIS_BRANCE 从名字来看是获取当前的github分支名,非主分支不执行sign操作。只是可能是travis的bug(在travis项目github的issue中有对这个问题的讨论),这个参数拿到的实际上是项目的tag值(只是commit的话则为空)。实际上这边的shell代码是可以按需修改的。我修改成:

if[["$TRAVIS_TAG"==""]];then

echo"Testing on a branch other than master. No deployment will be done."

exit0

fi

参数改为tag,由tag来触发deploy操作。

6、创建好ipa文件后就可以利用travis来上传服务器了,包括testflight、fir等。他们的网站都有提供上传APP的api,写成bash shell就可以执行了。

另外也可以使用包装好的第三方库。我也有用一个第三方库来上传ipa到iTunesConnect,叫做nomad,里面有个小工具叫shenzhen(https://github.com/nomad/shenzhen),它的github项目有使用说明。ps,travis的虚拟机中本来是预装了nomad的,后来在travis的issue中看到nomad被移除了,它的负责人回复说下个release版本会重新加上。所以我们要使用shenzhen的时候要先安装,安装过程大概要个5分钟。

7、发布到github是travis本来就支持的。具体参考:http://docs.travis-ci.com/user/deployment/releases/

8、应该要注意发布到不同平台要使用不同的configuration。这个参数在xctool 编译时需要用到,如

- xctool -project TheYoungMarshal_iOS/iEileen_TheYoungMarshal.xcodeproj -scheme iEileen -sdk iphoneos -configuration ADHoc OBJROOT=$PWD/TheYoungMarshal_iOS/build SYMROOT=$PWD/TheYoungMarshal_iOS/build ONLY_ACTIVE_ARCH=NO

- xctool -project TheYoungMarshal_iOS/iEileen_TheYoungMarshal.xcodeproj -scheme iEileen -sdk iphoneos -configuration Release OBJROOT=$PWD/TheYoungMarshal_iOS/build SYMROOT=$PWD/TheYoungMarshal_iOS/build ONLY_ACTIVE_ARCH=NO

分别对应我项目中的ADHoc配置和Release的配置。发布到iTunes Connect和发布到测试平台使用不同的配置。额,好像是废话。

总结:

使用travis来自动编译、签名、上传能帮助我们更好监控项目的状态,并且可以节省上传时间(如果包很大的话)。这些只是持续集成的其中一步。

你可能感兴趣的:(iOS项目持续集成之Travis CI)