TFS 自2015版开始支持跨平台的持续集成环境,通过提供开源的build agent为 Windows / linux / macOS 提供了统一的持续集成环境管理能力。这篇文章给大家介绍一下如何使用 VSTS/TFS 来搭建 iOS 持续集成环境。

苹果的iOS开发平台是一个相对封闭的生态,开发人员必须使用macOS和XCode才能完成应用程序的编译和打包操作,但这并不妨碍你使用其它的操作系统进行编码和测试。比如使用跨平台开发技术,如 Apache Cordova, React, Xamarin 等你完全可以使用 Windows 作为你的开发环境,使用自己喜欢的IDE,如: Visual Studio, Eclipse, IntelliJ甚至 Visual Studio Code, Sublime等进行编码开发,只是在最后需要打包成ipa的时候你还是需要一台macOS才能完成。所以,我们今天就按照最典型的原生应用的开发方式,看看如何使用VSTS/TFS来搭建持续集成环境。

另外,在后续的文章里,我还给大家介绍如何使用VSTS/TFS将打包好的iOS应用直接发布到 Apple Store上。

#1 创建项目或者获取项目代码

为了演示方便我在github上放置了代码 
https://github.com/ups216/FoodTracker

打开Xcode 获取代码

#2 在TFS中创建 git repo并添加到项目的remote地址中

从新建的repo上获取地址

在XCode中添加remote

然后push代码到tfs中

#3 从github下载vsts-agent并链接到我们的tfs项目

下载地址: https://github.com/Microsoft/vsts-agent/releases

并按照以上页面中的说明进行安装

~/$ mkdir myagent && cd myagent 
~/myagent$ tar xzf ~/Downloads/vsts-agent-osx.10.11-x64-2.107.0.tar.gz

安装完成后,运行config.sh配置代理

这里需要填写2个关键参数,一个是服务器地址,另外一个是agent pool(构建代理池)的名称

构建代理池可以在tfs的后台配置页面中进行配置,记得要把运行代理的帐户添加到代理池的服务帐户中

现在我们就可以运行 run.sh 来启动我们的构建代理了

#4 创建持续集成定义

在TFS的生成页面中点击新建按钮,并选择 Xcode 构建模版

在选择存储库页面中选择我们刚刚推送过代码的FoodTracker存储库,并勾选“持续集成”选项,这样每次我们推送代码到这个存储库就会自动触发生成。

创建完成后,我们首先切换到“变量”页面中配置以下参数

注意这里的最后一个参数 P12_PWD,这里我使用了一个加密的变量保存了我的开发者账号P12证书的秘密,这样我就不必将开发者证书分发给所有需要的开发人员,而只在服务器上保留这个证书。这对于使用企业证书进行开发的团队尤其有用,避免了企业证书的外泄。

完成后我们进入“生成”页面,对XCode构建任务进行配置,注意以下我在certificate这个代码目录中保存了从XCode或者苹果开发者中心导出的 Provision Profile 和 P12证书文件,但是证书的密码这一栏填入了以上配置的参数 $(P12_PWD)。这样,我们就可以在CI的过程中完成 ipa 的签名操作了。

#5 运行生成

你可以在Xcode修改代码并推送到 TFS,这时构建代理将被自动触发运行,或者也可以手动运行。

运行成功后,可以在构建页面中点击“项目”即可下载编译打包好的ipa文件

简单总结一下,使用VSTS/TFS我们不仅仅可以管理Windows环境上的项目开发,也可以很好的管理 macOS 和 Linux上的开发过程。新版的TFS中内置了很多针对跨平台开发的构建任务,而且这些任务的源代码都是开源的,这样我们可以对不同平台的开发团队进行统一的管理,并进行统一的代码质量度量。

对于iOS开发来说,开发者证书的管理是很多稍具规模的团队都很头疼的事情,如果不把证书分发给每个开发者,就无法打包,但是分发了证书就意味着任何获取了证书的开发者都可以使用企业的证书分发应用。使用集中的CI来完成证书签名操作就很好的解决了这个问题。

使用VSTS/TFS搭建iOS持续集成环境的更多相关文章

  1. 使用Jenkins+Calabash+Cocoapods搭建iOS持续集成环境

    使用jenkins+calabash+cocoapods搭建ios持续集成环境 持续集成 持续集成到底是什么呢?依据敏捷大师Martin Fowler的定义: 持续集成是一种软件开发实践. 在持续集成 ...

  2. Jenkins+MSbuild+SVN实现快速搭建.net持续集成环境(构建、编辑、部署到服务器)

    Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面开始搭建.net持续集成环境 Jenkins和SVN安装这里就不介绍了 一.准备工作 1.Jenkins中系统 ...

  3. jenkins下搭建c++持续集成环境

      运行环境为centos 5.8 1.下载tomcat,并解压 2.下载jenkins,把jenkins.war放到tomcat的webapp目录下 3.在tomcat的bin目录下执行./star ...

  4. centos下搭建Jenkins持续集成环境(安装jenkins)

    1.安装JDK yum install -y java 2.安装jenkins 添加Jenkins库到yum库,Jenkins将从这里下载安装. 1 wget -O /etc/yum.repos.d/ ...

  5. centos下搭建Jenkins持续集成环境

    1.安装JDK yum install -y java 2.安装jenkins 添加Jenkins库到yum库,Jenkins将从这里下载安装. 1 wget -O /etc/yum.repos.d/ ...

  6. docker4dotnet #5 使用VSTS/TFS搭建基于容器的持续交付管道

    在过去的几篇d4d系列中,我给大家介绍了如何使用docker来支持asp.net core的应用开发,打包的场景.Asp.net core的跨平台开发能力为.net开发人员提供了使用容器进行应用开发的 ...

  7. CI Weekly #21 | iOS 持续集成快速入门指南

    搭建 iOS 持续集成环境要多久?每个 iOSer 都有不同的答案.这次我们整理了 flow.ci 的 iOS 持续集成的相关文档和最佳实践,希望帮你更快地完成构建.更新文档见: flow.ci iO ...

  8. Jenkins+MSbuild+SVN实现dotnet持续集成 快速搭建持续集成环境

    Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面开始搭建dotnet持续集成环境 一.准备工作 1.系统管理-->管理插件-->可选插件中找到MS ...

  9. Jenkins+Maven+SVN快速搭建持续集成环境(转)

    Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面看看我们是如何几分钟就快速搭建一个持续集成环境吧. 假设我们目前已经有2个maven项目:entities(J ...

随机推荐

  1. 問題排查:在 ServiceModel 客戶端配置部份中,找不到名稱 和協定 的終結點元素。

    同樣都是刪掉服務參考再重建重編譯重發行,為什麼之前幾次都沒事? 這次只不過是刪掉服務參考,然後換了個名稱重建而已,做完就變這樣? 後來發現問題出在 app.config,因為之前 app.config ...

  2. coredump调试的使用

    一,什么是coredump 跑程序的时候经常碰到SIGNAL 或者 call trace的问题,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满 ...

  3. iOS键盘出现时界面跟着往上推

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillShow:) name:UI ...

  4. vsftpd移植

    1.交叉编译 2.将生成的 vsftpd 复制到目标板 /usr/sbin 目录,vsftpd.conf 复制到目标板 /etc 目录,并添加 vsftpd 为可执行: 3.配置 使用 vi 打开 v ...

  5. maven 创建Hadoop程序

    这里用来将新建的maven project 放入到现有的maven working set 中,这样我们就能看到项目之间的层级关系 选择下面的程序 在父项目中创建公共的pom,在pom中维护项目所需要 ...

  6. 1606: [Usaco2008 Dec]Hay For Sale 购买干草

    Description     约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草.  顿因有H(1≤H≤5000)包 ...

  7. c# 中定时器的用法

    来源于:http://blog.sina.com.cn/s/blog_62c501440100fog1.html System.Threading.Timer 是一个非常常用的定时器类,关于这个类的使 ...

  8. 关于动态生成dom绑定事件失效的原因

    之前做项目都是直接用jquery的bind绑定事件,不过当时都不是动态生成dom元素,而是已经页面中原本存在的dom元素进行事件绑定,最近在测试给动态生成的dom绑定事件的时候发现事件失效,于是就测试 ...

  9. Lvs之NAT、DR、TUN三种模式的应用配置案例

    LVS 一.LVS简介     LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的 ...

  10. 快来玩“Gift大转盘”百分百赚好礼

    现在开始到今年的最后一天,你天天都可以来转100%中奖的“ Gift大转盘 ”.代金券.产品折扣.精美纪念礼,没有多余规则.全部网友都可参加,转到就是你赚到,赶快转起来吧! >>活动主页& ...