美文网首页移动开发前线iOS资源库iOS_Tips
iOS之Travis CI自动分发到蒲公英、fir

iOS之Travis CI自动分发到蒲公英、fir

作者: 一个大番茄 | 来源:发表于2015-09-19 15:19 被阅读1805次

    懒是程序员的美德,作为程序员应该善用工具提高自己的工作效率。在我最早的时候,我是个“勤奋”的人,写好代码后,如果要给测试同学测试我的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上,总之根据实际情况进行选择。

    参考链接:

    https://www.objc.io/issues/6-build-tools/travis-ci/

    http://docs.travis-ci.com/user/customizing-the-build/

    相关文章

      网友评论

      • itlijunjie:别人有了这一堆source和.enc文件能获得证书原件么?
      • little阿飞:如果我的项目不在github就不能用了吧?
        一个大番茄:@mtxs007 嗯
      • 牛牛最牛24:error: Specified application doesn't exist or isn't a bundle directory : '/Users/travis/build/ 是什么意思,谢谢!
      • uper傷:sign-and-upload.sh这个脚本里的FIR_APP_TOKEN,PGYER_UKEY,PGYER_APIKEY 这几个值从何而来?
        一个大番茄:@uper傷 自己定义的,通过travis encrypt"{YourKey}={YourVal}" --add 加密了的

      本文标题:iOS之Travis CI自动分发到蒲公英、fir

      本文链接:https://www.haomeiwen.com/subject/qkybcttx.html