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. 剑指offer题目21-30

    面试题21:包含min函数的栈 import java.util.Stack; public class Solution { private Stack<Integer> stack = ...

  2. oracle 用户的管理<二>

    oracle 用户的管理 创建用户 概述:在 oracle 中要创建一个新的用户使用 create user 语句,一般是具有 dba(数据库管理员)的权限才能使用. create user 用户名 ...

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

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

  4. 代码中修改组件的margin属性

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_ ...

  5. Android之ListView——ArrayAdapter的学习与总结

    问题:当ListView选定的ListItem视图中存在一些UI组件,如CheckBox,希望保存状态,但实际上第一次完成时发现勾选后的选项在列表往下滑再滑回去后,状态没有保存 解决过程: 1)思考后 ...

  6. EXCEL某列长度超过255个字符导入SQL SERVER的处理方法

    问题描述: [Excel 源 [1]] 错误: 输出“Excel 源输出”(9) 上的 输出列“Description 3”(546) 出错.返回的列状态是:“文本被截断,或者一个或多个字符在目标代码 ...

  7. iOS 开发中的CGFloat,CGPoint,CGSize和CGRect

    CGGeometry类定义几何元素的结构和操作集合元素的函数 1. 数据类型 CGFloat: 浮点值的基本类型 CGPoint: 表示一个二维坐标系中的点 CGSize: 表示一个矩形的宽度和高度 ...

  8. 用dom4j解析xml 报java.lang.NoClassDefFoundError:org/jaxen/JaxenException

    转自:http://www.myexception.cn/java%20exception/95.html 源码如下: import java.io.File; import java.util.Li ...

  9. HTTPD服务 openssl的https服务机制

    环境: 环境: httpd服务器:10.140.165.169 CA服务器:10.140.165.93 CA服务器配置: 1.安装openssl [root@cnhzdhcp16593 ~]# yum ...

  10. android和ubifs

    原文地址: http://opendevkit.com/?e=37 1. ubifs号称性能比yaffs2 好,同时压缩可读写,文件系统image体较小同时可写,相当不错 2. ubifs制作 (1) ...