在Azure DevOps Server (TFS)的流水线中编译和测试Xcode移动应用(iPhone)

Azure DevOps Server 2020.1 新增功能 (TFS) 1. 概述自2005年开始,微软在VSS的基础上发布了TFS(2019年开始更名为Azure DevOps Server)的第一个版本TFS 2005,后续陆续发布了2008/2010/2012/2013/2015/2017/2018/2019/2020,每个版本都会给用户带来令人兴奋的功能。同样,微软即将发布的Azure DevOps Server 2020 Update 1也为我们带来了一波... 阅读详情

概述

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)
    image
    image

    注意下面几项设置:操作:是指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 Pipelines来实现Teams App的CI 我在之前的文章里介绍了如何一步步配置CI/CD来部署Teams App( 之前的文章 ),随着Azure DevOps的发展,微软推出了Azure Pipelines。在这篇文章中,主要介绍什么是Azure Pipelines,以及如何使用Azure Pipelines来进行Teams App的构建、测试和部署工作负载 什么是Azure Pipelines 微软发布了Azure Pipeli... 阅读详情

相关推荐

TFS2010 入门使用步骤图解说明详细截图说明doc

TFS2010 入门使用步骤图解说明详细截图说明doc 每个步骤都有详细说明加截图说明

DevOps Azure Pipeline 发布失败 MSB4226

Error

Impossible==I'm possible. 519

手把手教您构建自己的DevOps流水线

导读:DevOps是一套实践方法,在保证高质量的前提下缩短系统变更从提交到部署至生产环境的时间,其中持续集成和持续交付是DevOps里面非常重要的一环。本文讲述了达到自动化持续交付需要做的准备工作,流水线构建方法和最佳实践。持续交付是一组能够帮助软件开发团队极大的提高其软件交付的速度和质量的模式和最佳实践组成。不同于低频率发布相对较大的版本,实施持续交付的团队希望比通常更频繁地将更小批量的变更投入生产,例如每周,每天或一天之内就能够发布多个版本。这种软件交付方式可以带来许多的好处,就像市场领导者Facebook,LinkedIn和Twitter那样,他们频繁地,以迭代方式发布软件,并取得了巨大

devops使用+vscode使用

官方文档。

weixin_44656422的博客 1148

UVM概述及uvm_component和uvm_object(一)

UVM:Universal Verification Methodology(通用验证方法学) UVM:是建立在systemverilog平台上的一个库,提供了一系列的接口,让我们能够更方便的进行验证。验证平台组成: Driver:用来把不同的激励施加给DUT; Monitor:用来检测DUT的输出; Scoreboard:专门用来比较期望值与monitor检测到的DUT输出; Refer

南国之邱 1万+

LSF调度实战:如何用bsub命令实现多队列资源抢占与公平调度

本文深入探讨了LSF作业调度系统的高级实战技巧,重点解析如何通过配置`lsb.queues`文件与灵活运用`bsub -R`命令,构建一套兼顾效率与公平的多队列资源抢占与调度体系。文章详细介绍了队列优先级设计、公平共享机制、资源感知调度以及抢占策略的实施,帮助集群管理员解决高优先级任务等待、资源分配不均等常见问题,实现计算资源的精细化管理和高效利用。

vvv99的博客 218

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

变量概述在Azure DevOps Server的流水线中,变量是衔接不同任务和不通代理之间的桥梁,它可以使相对松散、各自独立的任务之间相关影响并共享数据。在流水线中使用变量,可以在各任务之间相互调用关键性的数据。顾名思义,变量是一个可以在流水线中变化值。在CI/CD的执行流水线中,我们都需要使用到各种用途的字符、数字,对象这些字符、数据的定义,我们可以采用变量的方式实现,而不需要在代码中硬编码...

Azure DevOps Server(原名TFS) 496

告别jom Error 2:深入理解QtCreator、CMake与MSVC工具链的协作机制

本文深入解析QtCreator构建过程中常见的jom Error 2问题,揭示CMake与MSVC工具链的协作机制。从CMake生成器的工作原理到MSVC工具链的组件协作,帮助开发者系统化诊断构建错误,提升开发效率。

weixin_30654419的博客 432

使用TFS玩转Docker自动化部署

简介 本文将介绍如何通过微软的Team Foundation Server平台,结合Docker完成程序的持续集成、持续部署。这里小编以.NET Core为例向大家分享整个DevOps流水线的搭建过程以及思路,其他语言平台均适用。 作者:周文洋 LEANSOFT研发总监,认证 Scrum Master,曾为多家客户提供微软Team Foundation Serv...

788

告别手动操作!用Python脚本批量处理Siemens NX零件文件(导入/导出/移除参数)

本文详细介绍了如何利用Python脚本实现Siemens NX零件文件的批量处理,包括导入、导出和移除参数等操作。通过NX Open API和Python UF接口,工业设计师可以大幅提升工作效率,告别繁琐的手动操作。文章提供了完整的实战指南,涵盖环境配置、核心功能实现以及性能优化技巧,特别适合需要进行Siemens-NXUG二次开发的工程师参考。

weixin_28222493的博客 261

Ubuntu 22.04 局域网安装GitLab

下面直接给你一份。

u013250861的博客 672

使用TFS CI/CD 完成 VSTS 插件自动化部署和发布

Visual Studio Team Service 经过了13年的版本演进和5年的在线运营,现在已经是最成熟的商用DevOps工具链,Marketplace作为VSTS...

dotNET跨平台 3636

LangGraph实战训练营-打造 WhatsApp 全自动消息收发AI智能助手

本文系统梳理了项目架构(WhatsApp Bridge + Talon Host + LangGraph Agent Harness三层设计)、完整环境搭建流程(Docker/本地双模式部署)、核心原理(WhatsApp桥接机制、NVIDIA Parakeet语音转录管线、Cron定时调度、Agent图状状态机),并提供了基础对话、文件操作、语音处理、定时任务等六大实战示例。同时涵盖安全策略、性能优化、数据备份等生产级运维实践,以及十个高频问题的排查方案。

program哲学 195

CI/CD 码农的流水线(Azure DevOps Server 2019 使用)

一、简介 Azure DevOps Server 2019是微软原TFS的升级版本,也是一个支持本地离线开发的版本,对应有一个在线云托管版本的Azure DevOps Service2019。 Azure DevOps为支持团队提供开发人员服务,以计划工作,协作进行代码开发以及生成和部署应用程序。Azure DevOps支持一种文化和一组流程,这些流程和流程将开发人员,项目经理和贡献者聚集在一起,以完成软件开发。它使组织可以比传统软件开发方法更快地创建和改进产品。 其内容管理组织方式为先在Azu...

zhujisoft的专栏 2万+

华为OD机试双机位C卷-敌情监控 (Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【敌情监控】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 敌情监控。

qq_45776114的博客 938

手把手教你学基带SOC芯片(4.2)--基带soc芯片的存储器设计

基带 SoC 中的存储器设计需要综合考虑功耗、成本和性能等因素。SRAM 适合高速缓存,DRAM 适合主内存,Flash 存储器适合非易失性存储。通过优化存储单元设计、阵列布局和外围电路,可以提高存储器的性能和效率。

MHD0815的博客 351

基于Kubernetes的CI/CD&Pipeline流水线解决方案

Pipeline 介绍  要实现在 Jenkins 中的构建工作,可以有多种方式,我们这里采用比较常用的 Pipeline 这种方式。Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。  总体架构  在开始我们的工作之前,让我们花一点时间分析开始使用Jenkins使用Kub...

技术成就梦想 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 303

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

第三篇 第 6 课

前置:第三篇第 1 课(stdx 引入),第二篇第 1 课(std.regex)。环境:仓颉 SDK 1.2.0。本文所有代码与输出均逐行实测。

weixin_41618057的博客 528

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 355

信创环境下PageOffice文档控件适配与实践

信创适配做到文档控件这一层,拼的已经不是"有没有国产版本",而是同一个功能在两类终端上是否真的等价。等价的标准很具体:同一次点击能得到同样的结果,同一份公文能得到同样的版式,同一个项目不需要维护两套代码。这背后是三件并不轻松的工作:服务端用一套接口同时支撑两类终端,客户端把两种系统与四种芯片的安装包分发清楚,文档内核层由产品侧跟着 WPS 的版本走。浏览器这一层的压力,则被收进了产品自己的窗口里——升级节奏由产品掌握,不再交给运气。

zi_wu_xian的专栏 332

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 564

Java 集合容器高频面试题全解:HashMap 树化阈值、1.7 死循环与 ConcurrentHashMap 演进(2026 招聘 JD 真题复盘)

HashMap 树化阈值 8 的泊松分布依据、退化阈值 6 的防抖设计、JDK 1.7 头插成环死循环的排查与修复、1.8 尾插后为何仍线程不安全、ConcurrentHashMap 放弃分段锁的原因与 ForwardingNode 协作扩容、computeIfAbsent 死锁陷阱、大集合找重复的场景题选型,附三层追问链自测。题目来源为 38 期公开招聘 JD 样本与字节、拼多多、建行、美团、快手公开面经。

蒙眼过河 422

spdlog 同步日志库使用详解

spdlog是一个轻量级 C++ 日志库,支持同步日志、异步日志、多线程日志、日志文件轮转和自定义日志格式。对于嵌入式 Linux 应用开发,我建议先使用。它可以帮我们完成:日志级别过滤。时间戳和线程 ID 输出。日志格式化。终端和文件输出。多线程安全写入。日志文件按大小或时间轮转。我们不需要自己实现互斥锁、文件写入、日志格式化和轮转等底层功能。

zengjiajun2006的博客 1121

JavaSE通关手册:数据类型与变量

代码无需额外处理,编译时编译器自动完成转换。

xys_678的博客 231
上一篇: 在macOS苹果电脑上安装Azure DevOps Server(TFS)代理
下一篇: Azure DevOps Server (TFS)搜索功能概述
Azure DevOps
博客等级 码龄6年 219粉丝 296原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值