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. 安装 composer SSL operation failed with code 1

    gavin@webdev:~> curl -sS https://getcomposer.org/installer | php Downloading... Download failed: ...

  2. php基础-转义字符

    1.php是弱类型语言,定义变量时无需要定义 2.标量类型:整形.浮点型.字符串类型.布尔型 复合类型:数组.对象 其它类型:资源类型(resource如数据库连接,打开文件句柄,资源在不需要时都要释 ...

  3. Java Hotspot G1 GC的一些关键技术

    G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,在JDK 7u4版本发行时被正式推出,相 ...

  4. C++11 删除链表重复数值

    #include <memory> #include <iostream> #include <chrono> #include <thread> us ...

  5. 使用adb 查询data/data下的数据库

    1.用cmd打开adb 2.输入adb shell 3.cd到数据库所在目录 4.输入sqlite3 person.db(person.db为要操作的db名称,根据需要修改) 5.输入sql语句(每个 ...

  6. JavaScript-数据引用类型对象

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. POJ 3468 A Simple Problem with Integers (线段树)

    题意:给定两种操作,一种是区间都加上一个数,另一个查询区间和. 析:水题,线段树. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024 ...

  8. 7.1 Java中的堆和栈

    栈与堆都是Java用来在Ram中存放数据的地方.Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.ane ...

  9. Windows2003 SQL2005解决系统Administrator密码不知道的问题

    Windows2003 SQL2005解决系统Administrator密码不知道的问题 今天上班的时候,有个同事说不知道谁设置了开机密码,那台电脑一直没有开机密码的他现在进不了桌面 那台电脑没有光驱 ...

  10. Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件

    上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...