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. Java集合类之ArrayList

    学习Java的集合类 (1)成员变量以及初始化 private static final int DEFAULT_CAPACITY = 10; private static final Object[ ...

  2. javascript 高级程序设计 十二

    1.组合使用原型模式和构造函数模式: 由于原型模式创建对象也有它的局限性------有智慧的人就把原型模式和构造函数模式进行了组合. function Person(name, age, job){/ ...

  3. codeforces 420B Online Meeting

    一道实现很蛋疼的题.必须静下理清思路,整理出各种情况.不然就会痛苦地陷入一大堆if..else里不能自拔. #pragma comment(linker, "/STACK:102400000 ...

  4. Maven学习之 Settings

    虽然天天在用,但是没有系统的学习过,总觉得别扭. 只能用于Java项目. 约定: repository  翻译成 仓库 build 翻译成 构建 build system 翻译成 构建系统 build ...

  5. 怎么把U盘启动改为硬盘启动(适用于U盘安装系统时)

    两种方法: 一:安装时: 在自定义创建分区后,如图: 选择系统的启动程序安装的位置,在change  device 里设置第一启动装置,和第二启动装置! 二:安装后: 开机未进入系统按F2,进入BIO ...

  6. .NET Interop.SHDocVw和MSHTML引用如何操作

    Interop.SHDocVw:引用Com:Microsoft HTML Object Library 和 Microsoft Internet Controls MSHTML:引用-->COM ...

  7. Exception in thread “main” com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String

    String json="A valid json"; Job job = new Gson().fromJson(json, Job.class); Exception in t ...

  8. echo中的逗号

    作为一个自学PHP的小白来说,echo是用来打印字符串的,总结几种输入方式如下: $a = 'good morning'; echo $a; echo $a . 'boys'; echo " ...

  9. 状态伪类选择器(E::selection)

    E::selection选择器:  E::selection{background:#FF6600;  color:#fff;}     //当文字被选中时,背景是红色,文字是白色 E::-moz-s ...

  10. office2003-2007 绿色版 出错 文件丢失(未解决)

    - 这个版本是我大学时候(2012)年一直用到现在的版本:目录结构如下: 原来一直在32位系统中使用,没有出错过; - 刚装的两台电脑系统分别为 Win7Pro 和 Win10Pro ,都是64位的: ...