概述

Xcode是开发基于苹果macOS系统的桌面应用和移动应用的主要IDE工具。使用Azure DevOps Server (原名TFS)系统中的pipelines流水线功能,可以方便的集成Xcode项目,使用web浏览器在DevOps服务器上,实现一键编译、测试和发布等工作,省却测试发布过程中复杂的流程,大幅提高测试发布的效率,提高开发和测试团队之间的协作效率。
本文已经某银行的IOS手机银行移动端为例,介绍如何在Azure DevOps Server中试系Xcode项目的持续集成和测试。

前提条件

由于苹果公司技术的封闭性,开发移动应用必须在macOS系统上完成编译、调试和打包任务,因此实现Xcode项目的编译必须首先安装一个macOS的代理,否则无法完成Xcode的自动编译和打包功能。
我在博客“在macOS苹果电脑上安装Azure DevOps Server(TFS)代理”(https://www.cnblogs.com/danzhang/p/11954476.html )一文中详细介绍了安装苹果代理的操作步骤。

配置流水线

在macOS上安装的Azure DevOps Server的代理后,就可以使用流水线功能来配置自动打包和测试功能了。
可以使用yaml脚本或者传统的窗口界面来新建一条Xcode的流水线。下面的示例我们使用窗口界面,以便可以更加直观的说明Xcode的配置信息。

  1. 新建一条流水线,选择编译的的代码,可以使用TFVC、Azure Git、gitHu、gitLab、SVN等多种源代码库

  2. 选择代理池,就是我们在前提条件中配置的macOS代理池
  3. 选择xCode模板,Azure DevOps Server会自动添加与Xcode相关的任务,在我们的示例程序中,比较关键的操作是Xcode的打包任务(下图中的Xcode archive)


    注意下面几项设置:
    操作:是指Xcode中的任务,例如build、archive;这里填写archive,指的是生成打包需要的所有文件
    工作区或项目路径:是指xcode项目的工作区配置文件(对于代码库来说,实际上是一个文件夹,其中包含了编译的配置文件,是编译Xcode项目的起始文件)
    方案:是指Xcode项目中的具体项目;可以是移动应用,也可以是独立的库library。
    签名样式:可以选择手动签名、默认签名、自动签名等;我的示例项目中选择了手动签名,实际上使用了Xcode项目中配置的签名信息。
    创建应用包:选择创建应用包后,可以自动生成移动应用ipa文件
  4. 设置如何存储编译后的ipa文件
    在我的这个项目实施过程中,由于客户需要将ipa文件发布到一个web服务器上,供测试人员点击下载。我额外配置了一台FTP服务器,使用流水线中的FTP任务,将ipa文件上传到FTP服务器,供Web浏览器下载使用。

------------------------------------------------------------

http://www.cnblogs.com/danzhang/  DevOps MVP 张洪君

------------------------------------------------------------

在Azure DevOps Server (TFS)的流水线中编译和测试Xcode移动应用(iPhone)的更多相关文章

  1. 在Azure DevOps Server (TFS 2019) 流水线传递参数

    变量概述 在Azure DevOps Server的流水线中,变量是衔接不同任务和不通代理之间的桥梁,它可以使相对松散.各自独立的任务之间相关影响并共享数据.在流水线中使用变量,可以在各任务之间相互调 ...

  2. 在Azure DevOps Server (TFS)中实现VUE项目的自动打包

    概述 Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.由于它在数据绑定.页面展示和使用简单方面有很大的优势,逐渐被越来越多的前端开发团队使用.本文 ...

  3. Azure DevOps Server (TFS) 代码库Repo管理培训

    Repo是分布式代码库Git中的一个专用词,用于存储和管理开发团队中特定的源代码. 使用Git,可以协调整个团队的代码更改. 即使您只是一个开发人员,版本控制也可以帮助您在修复错误和开发新功能时保持井 ...

  4. 还原Azure DevOps Server (TFS)中误删除的生成流水线

    流水线历史记录 DevOps Server流水线的历史记录有完善的版本日志,用户可以随时回退到修改过程中的任何一个版本,还能比较差异.这个历史记录功能可以和代码库中的版本控制媲美. 图一:生成历史记录 ...

  5. Azure DevOps Server (TFS)中代码文件换行问题解决方案(Git)

    之前写过一篇博客"探索TFS Git 库文件换行(CRLF)的处理方式",主要是针对TFVC代码库的. 下面这篇文章说明如何在TFS的Git库中处理代码换行的问题. 概述 在Azu ...

  6. 集成Azure DevOps Server(TFS) 与微软Teams

    1.概述 Microsoft Teams是Office 365中团队协作的中心.将团队的所有聊天.会议.文件和应用程序放在一个位置.软件开发团队可以在一个专门的协作中心中即时访问他们所需的所有内容,T ...

  7. 在Windows操作系统的文件管理器中集成Azure DevOps Server (TFS)工具菜单

    故事场景 使用过SVN的用户,都知道在Windows的文件夹上点击鼠标右键,就会弹出Tortoise SVN的操作菜单(俗称小乌龟).通过这个功能,用户不需要打开SVN工具,可以直接在Windows的 ...

  8. Azure DevOps Server (TFS) 修改工作项附件大小限制

    1. 问题描述 当上传工作项附件时,系统提示"附件大小限制" 2.解决方案 2.1 默认设置 默认情况下,Azure DevOps Service和Team Foundation ...

  9. Azure DevOps Server (TFS) 修改Git文件大小限制

    签入Git的所有文件将永远保留在存储库中,限制大文件签入到代码库,可以增加磁盘使用效率,提高系统备份还原等日常维护的效率. 通过下面的设置,团队项目管理员可以阻止超过特定大小的文件进入存储库.如果推送 ...

随机推荐

  1. elementui中的el-table中拼接两个列表字段

    我们知道,在ElementUI中我们是使用下面的语法来展示列表字段的: <el-table :data="yanggbs" stripe style="width: ...

  2. 记一次Python与C#的AES加密对接

    前言 这几天做自动化测试的同事找到我,说是帮她看看有个AES加密的问题要怎么处理. 大概就是文档中贴了一段C#的AES加密代码,然后她要翻译成python的版本,去做一些测试相关的工作. 在我印象中, ...

  3. 使用zabbix监控oracle的后台日志

    本文将介绍如何使用zabbix监控oracle的后台日志,当oracle后台日志出现“ORA-”或“Error”时,第一时间将该信息报警出来 zabbix agent端 以下所有操作均用root执行 ...

  4. Java匹马行天下之学编程的起点——编程常识知多少

    学编程的起点——编程常识知多少 前言: 刚去大学那会,我就知道我被录取的学院是软件学院,还知道一点就是软件学院主要是学电脑的,但具体要学什么其实一无所知.待的时间久了,慢慢的,像“编程”.“软件”.“ ...

  5. LazyCoder修仙之路

    本人不才,没有高文凭,茹果本人的修仙[开发]之路能 ,走的很远,后来的人能看的上我 作品,有不足,和不对,帮帮我完善和理解.这也是我 学习笔记把!

  6. git clone和git pull的区别

    1.需不需要本地文件夹是仓库 git clone是将整个工程复制下来所以,不需要本地是仓库(没有.git文件夹)   git clone git pull需要先初始化本地文件夹文一个仓库   git ...

  7. Typescript基础(1)——数据类型

    前言 这是开始学习Typescript的一些笔记,涉及的都是很基础的知识点.大神们请绕路或者欢迎指点.今天开始第一部分数据类型的学习. 数据类型 Typescript中为了使代码编写更加规范,更加易于 ...

  8. springcloud微服务实战:Eureka+Zuul+Ribbon+Hystrix+SpringConfig

    原文地址:http://blog.csdn.net/yp090416/article/details/78017552 springcloud微服务实战:Eureka+Zuul+Ribbon+Hyst ...

  9. IDEA设置默认WorkingDirectory

  10. c++ 模板特化与局部特化

    c++ 模板特化与局部特化 模板的由来是要处理泛化,也就是任何类型都可以处理.但是泛化的同时,如果针对某种特殊的类型,又更加效率的处理方法.c++提供针对特殊的类型,可以定义不同的处理方法.针对某种特 ...