懒是程序员的美德,作为程序员应该善用工具提高自己的工作效率。在我最早的时候,我是个“勤奋”的人,写好代码后,如果要给测试同学测试我的App,那么我大概会用XCode编译我的应用,然后打包签名再把ipa分发给测试,这一切在现在看来是多么的效率低下。后来有了Testflight,简化了一部分我的工作。再后来国内也出现了优秀的工具,以蒲公英和fir为代表。在持续集成的时候结合这些分发渠道,可以大大的简化我们的工作。
Travis CI
详细的介绍请看它的网站,简单来说它是用来做持续集成的工具,可以为你自动构建、测试、打包等等,极大的简化了工作流程。它对Github的支持特别好,链接到你在Github上的项目以后,每当你把测试通过后的代码提交到master去,它会pull你的代码并按照你的要求构建执行。Travis还提供命令行工具,通过下面的命令安装。
gem install travis
配置你的Travis
要想它好好的为你工作,你得告诉它应该干些什么,这里需要用到它的配置文件。在你的项目根目录建一个名为 .travis.yml的文件。Travis会根据你在这个文件中的配置执行相应的操作,在整个build的生命周期里,你可以在不同的阶段做不同的操作,详细的说明在这里。下面以我的配置为例说明。
.travis.yml这里面比较简单的有language和osx_image以及一些全局变量的设置,我就不阐述了。在before_install里,我安装了fir的命令行工具,这点我觉得fir做的确实还不错,一个命令就可以帮助我们上传应用。
接下来在执行script之前,需要对证书进行解密,因为我们需要在Travis上签名打包我们的应用。直接将证书放在repo里不是一个好主意,于是需要对证书进行加密,直接用openssl就好了。在before_script里面就需要对证书解密还原,这里可能大家会不知道$ENCRYPTION_SECRET是哪里来的。密码明文存放在配置里面不好,这时可以利用Travis的命令行工具在根目录执行下面的命令加密:
travis encrypt"{YourKey}={YourVal}" --add
加密之后就会在文件中看到有secure的字样。上图中可以看到,我存了5个密码在这里(因为后面会对证书等东西的密码进行处理),Travis拿到之后会知道怎样把密码取出来。
接下来会执行脚本add-key.sh,里面主要是导入私钥、证书等,内容如下图:
add-key.sh通过上面的命令创建了一个名为ios-build的临时keychain,里面包含了所有证书。这里的KEY_PASSWORD也是如前面一样通过travis加密处理的变量。最后会把mobileprovision文件copy到Library对应目录下。
添加好了证书之后,你就可以构建你的应用了。iOS的App整个过程是分两步在走,第一步是生成应用的二进制文件,以app为后缀名(*.app)。接下来的一个步骤是对其进行签名,经过签名的应用才被认为是一个合法的应用,才会允许你分发给你的用户。
在这两个步骤当中,会涉及到不同的工具。第一步构建的时候有苹果的xcodebuild和facebook出的xctool可以选择。在Travis里使用的是xctool,当然你也可以使用xcodebuild,因为有时候xctool也并不是那么完美。第二步签名主要有两个工具可供选择,一个是xcrun,另外是一个是codesign,这里使用的是xcrun。
- xctool -workspace {YourProject}.xcworkspace -scheme {YourScheme} -sdk iphoneos -configuration Release CODE_SIGN_RESOURCE_RULES_PATH='$(SDKROOT)/ResourceRules.plist' OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO
上面的命令开始build这个项目,完了之后应该会在你的根目录下生成一个build目录,里面会包含一个子目录叫做Release-iphoneos,在它里面会有你的*.app文件。
构建好了之后要做的事情就是对应用进行签名分发,这部分的操作放在脚本sign-and-upload.sh里执行。
sign-and-upload.sh这里面最主要的操作就是
xcrun -log -sdk iphoneos PackageApplication "$OUTPUTDIR/$APP_NAME.app" -o "$OUTPUTDIR/$APP_NAME.ipa" -sign "$DEVELOPER_NAME" -embed "$PROVISIONING_PROFILE"
签名之后生成ipa文件,这个也就是你打包分发给你的测试的东西啦。接着根据需要上传到自己的分发渠道,这里我选择的是fir和蒲公英两家。fir的很简单,一行命令就可以直接上传,蒲公英稍微麻烦点,需要用curl来上传你的ipa。
让Travis为你干活吧
配置好了以后,以后的事情简直就是轻松加愉快。每当有代码提交上去的时候,travis会得到通知开始对你的代码做持续集成,你在控制台上面可以看到每次集成所花费的时间,以往浪费的时间拿来享受一杯咖啡吧,等着travis变绿之后也就大功告成了。
结尾
总体来说Travis CI还是很方便的,但是它也有它的局限性。如果你的项目是放在github上的开源项目,它应该是你的最佳选择,而在通常我们的开发过程当中,用的更多的恐怕还是拿jenkins搭在自己的server上,总之根据实际情况进行选择。
参考链接:
网友评论