Tag: 持续集成

通过重新运行不稳定的XCUI测试来稳定iOS CI

Apple在WWDC 2015上发布了Xcode UI Testing aka XCUI Test framework,该框架无需使用Appium,Calabash或KIF等任何第三方工具即可直接从Xcode对iOS应用程序进行UI测试。 这些工具自称为移动测试框架,但实际上只不过是UIAutomation或Instruments的包装器而已。 随着Apple停止支持Instruments技术,iOS 10的发布打破了所有这些开源移动测试自动化框架。 剩下的唯一选择是使用Apple的XCTest框架,或者等待那些工具围绕XCUITest构建包装器。 XCTest不是一个新的框架,但是随着Xcode发行版的发展,它发展得相当不错。 您可以在此处阅读有关使用XCTest进行iOS应用测试的优缺点的更多信息 XCUITest +持续集成问题 XCUITest框架仍然是新的,有些用户已经抱怨它非常脆弱,尤其是当我们针对持续集成(CI)服务器运行时。 XCUI测试似乎在本地通过,但是这些测试对CI不确定。 您可以在StackOverflow上找到许多有关XCUITest的问题。 结果是,CI管道变得不可靠且不受信任。 团队一直忽略失败的UI测试,每个人对这些UI测试失去信任,这可能成为持续集成失败的原因。 损坏的UI测试始终被开发团队忽略。 但是,持续交付将不允许将损坏的版本部署到生产中。 现在,每个人都注意损坏的UI测试。 为了解决问题,团队可能会执行以下操作以确保您的UI测试尽可能具有弹性。 遵循“端口和适配器”模式,以覆盖域层的所有业务逻辑,而无需编写任何UI测试。 很好的例子就是用Fitnesse编写更快的iOS验收测试或合同测试 考虑使用存根后端或模拟Web服务器隔离测试UI,以防止意外数据替换真实Word UI测试。 添加了XCUI计算的重试,以找到应用程序上的UI元素或循环运行,直到找到XCUIElement。 在每个CI构建或每个测试套件上重置模拟器。 向XCUITests添加了静态等待,以使测试可靠。 经过所有这些努力,也许很少有测试仍不确定,并且随机失败,人们会感到沮丧。 这是UI测试的常规行为,它们脆弱,易碎且难以维护,无论您付出了多少努力来进行修复,也无论您为防御它而付出了多少防御,运行时环境的特殊性都可能使您感到阴谋。 现在,由于不稳定的UI测试,您的正式发布已被阻止。 现在做什么 ? 解 在上述情况下,我们可以尝试一件明智的事情。 让我们以失败的XCUITests为例,尝试重新运行它们,但是挂起一个,还有另一个问题。 苹果的命令行工具“ xcodebuild”仍然没有从命令行运行单个XCTest的简便方法。 可能需要使用Xcode方案进行测试,但是将单个测试传递给“ xcodebuild”有点棘手。 新版本的“ xcodebuild”具有“仅测试”选项,但是使用脚本很难实现。 幸运的是,有一个名为“ fastlane-plugin-setup_fragile_tests_for_rescan”的fastlane插件可以解决不稳定的XCUI测试问题。 全部的感谢归功于插件“ lyndsey-ferguson”的作者。 这个插件做以下事情 从快速通道扫描生成的Junit报告中进行失败的测试 修改指定的XCUITest方案以跳过通过测试和失败测试的方案 重新运行“扫描” 3次以查看测试结果。 […]

使用Travis CI连续部署iOS

在Telestax,我们相信持续集成与部署是我们生产的所有软件的组成部分。 随着我们的移动开源WebRTC SDK变得更加成熟,我们开始意识到,越来越多的时间花在了测试和部署的手动步骤上,而不是实际的开发上,现在是时候该死了,并引入CI / CD设施。 在本期中,我们将介绍如何使用Travis CI解决Restcomm Olympus应用程序的持续部署问题,该应用程序是我们在GitHub上托管的开源WebRTC Restcomm iOS SDK的一部分。 更具体地说,我们将: 构建并导出已签名的restcomm-olympus.ipa,并准备进行企业部署。 将restcomm-olympus.ipa上传到TestFairy Beta测试平台,以便我们的Beta测试人员和社区可以立即使用。 这说起来容易做起来难,所以让我们深入了解一下细节。 iOS签名简介 为了能够部署到任何物理设备,而不必每次我们要在新设备上进行测试时都必须更新配置文件,我们将使用企业分发。 这样就可以在Apple App Store外部自由分发App。 要构建以这种方式可分发的.ipa,构建过程分为两个步骤: 生成存档的存档构建步骤。 为此,您需要在CI服务器中安装“开发身份和开发配置文件” 导出步骤,用于对存档进行签名并生成可用于实际分发的.ipa。 为此,您需要在CI服务器中安装分发标识和分发配置文件 但首先.. 关于自动签名 从Xcode 8开始,随着自动签名的引入,很多地方在Signing区域中进行了更改,从而解决了过去的许多问题-请记住,如果以前使用的生成脚本可能会向后兼容,可以与Xcode 7一起使用。有关更多信息,我敦促查看有关该主题的Apple最新的WWDC会议。 另外,对于更技术性的方法,这是一个很好的阅读材料,它首先概述了Apple的代码签名机制,然后描述了Xcode 8中的更改。 我们将使用自动签名,我敦促您也这样做,因此,如果您还没有这样做,现在是升级到Xcode 8的好时机。对于新的Xcode 8项目,默认为自动签名,并且要求您执行以下操作。在创建项目时选择您的团队ID ,并自动为您设置签名身份和配置文件。 您可以在会员中心的“ Apple帐户会员”页面中找到您的团队ID: 如果您已经使用早期版本的Xcode创建了应用程序,则应导航至主要目标的“常规设置”,然后勾选“ 自动管理签名”: 再次,您将被要求输入团队ID,所有内容应自动为您处理。 在这一点上,需要指出的是, Apple并不真正支持在您无法访问UI和Xcode IDE的无头机器上进行构建 ,例如Travis CI的情况(不幸的是,这是我们从Apple那里得到的回应当我们针对某些问题提出技术支持事件时,我们就遇到了麻烦。 主要问题如下: 无法提供自动解决方案来解决有关身份和配置文件的问题(即只能从Xcode IDE中获得解决方案)。 您无法解决UI中显示的任何安全提示,例如在codesign步骤中授予访问权限。 但是不要害怕! 如果您确保在构建之前已安装了正确的身份和配置文件,并且已在脚本中采取了一些其他步骤来授权codesign在没有这些UI提示的情况下工作,那么一切都会正常进行。 我们将稍等一下。 请记住,这里的总体思路是,您首先必须在本地OS […]

在iOS项目上使用Travis-CI和Fastlane设置CI

持续集成(CI)是一种很棒的软件工程实践。 它要求开发人员在每次提交之后频繁提交。 这样,可以自动运行测试,计算覆盖率,执行静态代码分析等,以确保每次提交都不会破坏构建过程并且不会带来副作用。 如果提交破坏了构建,则进行更改的人员将收到一封电子邮件,需要检查并修复构建。 通常,在构建结束时,会创建一个测试版本。 通常,这就是过程,但是各个公司的过程可能有所不同。 这种工作流程的好处来自频繁的集成-您很快就会发现问题所在,并有机会快速进行修复。 团队越大,拥有这样的自动化集成过程就越重要,因为在每次提交之后,都有可能破坏代码库。 在本文中,我们将使用Travis CI和Fastlane为一个开源iOS项目设置CI。 目标是在GitHub存储库上的每次提交上运行CI,并在自述文件部分中显示有关构建状态和覆盖率的信息。 实作 特拉维斯CI 首先,您需要在GitHub上拥有一个带有单元测试的开源iOS项目。 在这篇文章中,我将与即将发布的iOS框架GirdersSwift合作。 第一步是通过单击“使用GitHub登录”按钮将GitHub帐户连接到Travis CI。 系统将要求您提供对Travis CI的某些权限,以使他们能够访问您的开源存储库。 Travis CI对于开源项目是免费的,但是对于商业项目也有一些付费计划。 成功注册Travis CI后,您应该在仪表板中看到所有项目。 找到您要为其添加配置项的配置项,然后启用绿色开关。 这就是我们目前在Travis CI上需要做的所有事情。 有了这个小的更改,我们已经告诉Travis CI,它应该为GirdersSwift回购运行连续构建,但是我们仍然没有告诉它该怎么做。 Travis CI不知道它是iOS,Android,Java还是其他类型的项目。 它还不知道是否应该运行测试,计算覆盖率等等。 我们通过在GitHub项目的根目录下创建.travis.yml文件来提供此信息。 让我们看看这个文件应该包含什么。 osx_image:xcode9.3 语言:迅捷 脚本: – fastlane ios覆盖率 如您所见,我们告诉Travis CI,它应该使用Xcode 9.3运行构建,并且语言是Swift。 在脚本部分,我们提供了每次构建后都需要执行的步骤。 在这里,我们使用Fastlane进行测试和覆盖。 快车道 Fastlane是一个出色的工具,可以自动完成与iOS开发相关的所有繁琐工作,从测试,构建,创建发行版到部署到商店。 它基于在Fastfile中定义的通道的概念。 您可以在一个泳道中定义几个动作,并且已经开发了动作,这些动作是我们iOS工程师最需要的。 通过在项目的根目录中键入fastlane init ,为项目启用fastlane。 您也可以输入您的开发者帐户信息,但这不是必需的。 这将创建一个Fastlane目录,其中包含Fastfile。 现在,让我们定义我们的覆盖范围,它将用于执行连续构建。 default_platform:ios […]

须藤save_time

“时间是我们最想要的,但我们最浪费的是” ― 威廉·佩恩 在我们开始之前… 每个开发人员迟早都必须打开Safari并键入https://itunesconnect.apple.com来设置要通过AppStore分发的应用程序。 但是恰好在登录iTunes后,您将了解,应该首先设置开发人员帐户。 并且自开始以来,您将看到更多应执行的其他步骤: 创建一个applicationID 生成证书(用于开发和分发) 设置应用程序功能(例如,推送—通知) 生成一组配置文件以及更多 即使完成此操作,也应该管理所有创建的内容,与队友共享,考虑安全性等等。 是的,很多东西,我知道… “等等,我只想将我的应用程序发送到AppStore。 为什么不能只使用一个命令行命令?»。 实际上,它被称为Fastlane。 概述和要求 «fastlane —是一个用于iOS,Mac和Android开发人员的工具,用于自动化繁琐的任务,例如生成屏幕快照,处理配置文件和发布应用程序。»—这是您在git页面上看到的第一行(https: //github.com/fastlane/fastlane),这是100%正确的。 Fastlane是用Ruby编写的,它是一组或多或少独立的模块,已构建了其丰富的功能集。 它的结构很容易扩展,因为如果您想向系统添加一些新功能,则可以编写简单的Ruby脚本,并在现有的fastlane模块中使用它们,甚至可以向fastlane添加新模块。 Fastlane提供了一堆命令,可帮助自动执行应用程序部署,甚至执行不同的常见任务。 Fastlane是非常灵活且可扩展的工具。 目前,fastlane由200多个不同的模块组成。 我们将在下面列出最有用和最受欢迎的内容,并显示使用fastlane的iTunesConnect传递系统的基本设置。 由于我是iOS平台的软件开发人员,因此我们将深入探讨大多数适用于iOS开发人员的使用fastlane的过程,但是我敢肯定,此强大工具所支持的所有平台的主要步骤都相同。 适用于iOS的Fastlane需要安装以下工具: macOS X El Capitan或更高 Xcode-开发人员-适用于xCode 7或更高版本的工具 红宝石/酒(可选,推荐) textEditor🙂 快车道能为我们做些什么? 好吧,这个列表很大,包括很多东西: 交付:将屏幕截图,元数据和您的应用程序上载到App Store 供应:将您的Android应用及其元数据上传到Google Play 快照:自动在每台设备上拍摄您的iOS和tvOS应用程序的本地化屏幕截图 screengrab:自动在每台设备上拍摄Android应用的本地化屏幕截图 frameit:快速将屏幕截图放入正确的设备框架中 pem:自动生成和更新您的推送通知配置文件 感叹:因为您宁愿花时间在建物上,也不愿与资源调配作斗争 产生:使用命令行在iTunes Connect和Dev Portal上创建新的iOS应用 cert:自动创建和维护iOS代码签名证书 飞船:Ruby库可访问Apple Dev Center和iTunes Connect […]

iOS与Xcode Server持续集成的入门指南

Apple在Xcode Server以及与OSX Server(应用程序)和Xcode Server(服务器应用程序内的Xcode)的持续集成方面拥有非常全面的文档。 如果指南中记录了所有内容,您可能想知道这篇文章的意义是什么? 但是,Apple指南仍比macOS Server读作OSX Server,但Apple发布了新的macOS Server(5.2),并对Automated Xcode Builds进行了一些改进。 无论如何,这都是一个小教程,旨在设置Mac以使其作为具有Xcode Service的macOS服务器运行,以及为具有Xcode 8的macOS服务器设置基本Xcode Bot以执行持续集成。 我们将介绍macOS Server的基础知识和设置 配置Xcode以使用macOS Server的Xcode服务 设置开发Xcode以在macOS服务器上使用Xcode Server 使用Github上的XCFit Swift Package示例创建Xcode机器人 运行Bot集成并分析结果 要求 为了使用macOS Server和Xcode Service设置持续集成,我们需要 安装了macOS Server 5.2应用程序的Mac或Mac Mini。 从App Store下载 服务器上安装了Xcode 8。 从App Store下载 确保已安装Swift 3 Github上托管的Xcode Project存储库(本教程可选) 我们可以从中触发Xcode机器人的另一台开发Mac(本教程为可选) macOS Server 5.2的新功能 Apple已将其旧的OSX Server重命名为macOS Server,它具有许多新功能,例如配置文件管理器,缓存服务器,NFS,Xsan 5等,但让我们关注Xcode Service的新功能。 macOS Server不支持旧的Xcode版本。 支持Xcode […]

如何使用Fastlane和Bitrise为多个iOS和tvOS应用设置CI

最近,我不得不为多个版本的iOS和tvOS应用程序设置一个持续集成(CI)管道。 由于没有找到有关如何以简单方式执行此操作的大量信息,因此决定撰写此博客文章。 用例 如果您有以下内容,则此帖子很有用: 白标应用程序(WLA),其中包含同一应用程序的多个变体; 针对多个平台的应用程序(iOS / tvOS / macOS); 而且,您不想在CI管道中重复或在管道中定义环境变量。 就我而言,我有一个通用应用程序(iOS和tvOS)两个版本(精简版和高级版),因此共有四个版本。 工具类 我使用Fastlane工具来自动化部署应用程序所需的任务。 像所有工具一样,它也有优点和缺点。 优点 : 您的管道不依赖于任何特定服务; 它可以在本地,服务或远程计算机中运行; 它取决于一个开源项目; 缺点 : 您需要时间进行配置; 您需要时间来维护它; 如果您不熟悉Fastlane,请参阅其文档。 快速通道配置 阅读fastlane的文档,使用环境变量似乎最适合我的用例。 为了为应用程序的每个版本加载不同的变量,您需要为每个版本定义一个文件。 在我的情况下,我用以下名称定义了4个文件: .env.ios .env.iosfree .env.tvos .env.tvosfree 每个文件都包含构建特定版本的应用程序所需的变量: 还需要设置Secrets以构建应用程序(FASTLANE_USER,FASTLANE_APPLE_ID,FASTLANE_PASSWORD),并验证在我的情况下选择的正确堆栈是macOS 10.13上的Xcode9.3.x。 如果您还想使用Bitrise,并且此帖子对您有所帮助,请使用我的推荐链接,以便我可以赢得Bitrise T恤😄。 结论 在此博文中,我们看到了如何使用Fastlane和Bitrise为不同平台,iOS和tvOS自动部署同一应用程序的多个版本。

使用Xcode Server进行iOS持续集成的利与弊

持续集成aka CI是iOS开发过程中不可或缺的一部分,当在应用程序开发过程中出现问题时,它可以提供早期反馈。 在敏捷应用程序开发中,生产可运行的应用程序不仅在编写良好的代码,而且还建立了可连续交付的基础架构。 持续集成和自动化构建的过程可以帮助实现持续交付。 市场上有各种持续集成工具可供iOS团队使用。 CI服务器解决方案可以是自托管的或云的。 您可以在此处获得有关CI服务器的完整列表以及建议。 在iOS开发中,选择自托管CI服务器时,我们几乎没有挑战性的选择 Xcode服务器 詹金斯 团队城市 如果您正在寻找云解决方案,那么有一些有希望的服务,例如 TravisCI CircleCI BuddyBuild 比特升 温室CI 有多种工具,因此挑战在于如何选择和评估为什么一个要比另一个更好。 Cloud CI服务器易于设置,可以由其他公司进行管理,并且只要配置正确,它们就可以正常工作。 另一件事是在使用云CI解决方案时,我们不需要有人来管理服务器。 但是,在使用基于云的解决方案时,您必须注意各种事项,例如隐私,成本,易用性,可用性和平台支持。 选择自托管vs Cloud CI有其自身的优缺点,您应该考虑最适合您的团队的问题。 对于自托管CI,Xcode Server似乎是简单的选择,因为它由Apple管理并与Xcode深度集成。 在本文中,让我们看看使用Xcode Server进行iOS持续集成的优缺点。 Xcode服务器简介 Xcode Server是Apple开发的一个持续集成平台,用于分析,构建和测试以及存档iOS和macOS应用程序。 iOS开发中最痛苦的部分之一是证书和配置文件配置文件。 当我们想在CI服务器上设置证书和配置文件时,变得更加忙碌。 最新版本的Xcode Server解决了证书和配置文件方面的许多问题。 Xcode Server与Xcode紧密结合,因此设置和使用Xcode Sever进行持续集成变得非常轻松。 苹果在CI的Xcode Server设置上有非常全面的文档,但是我写了简短的教程来设置最新的macOS Server来运行Xcode机器人,该教程也在DZone上发布。 您可以参考这些指南来开始使用Xcode Server。 Xcode Server具有以下功能 免费或廉价解决方案 自托管并与Xcode深度集成 设备测试 无线(OTA)安装 由苹果公司管理和维护 Xcode Server具有所有这些功能,但是有些人为使Xcode Server正常工作付出了很多努力。 让我们看看使用Xcode […]

iOS Mobile与React Native,Yarn,GreenhouseCI,CodePush和HockeyApp的持续集成

自从问世以来不到两年,但是React Native已经扰乱了移动开发。 React Native采用了卓越的开发经验,轻松的启动时间,“一次学习,随处编写”的精神以及热情的社区,因此赢得了本机和Web开发人员的一致好评。 随着React Native社区的不断发展和成熟,软件工程最佳实践开始显现。 任何平台开发的一项重要最佳实践是持续集成的概念。 一段时间以来,出于自动化的原因,自动化的构建和部署一直是Web开发社区的主要内容:效率低下,手动且易于出错的构建和部署在现代开发中不应该成为现实。 相同的信念已经进入移动开发,现在有大量支持自动化构建和部署的工具。 在本文中,我们将利用一套流行的工具(GreenhouseCI,CodePush和HockeyApp)以及React Native应用程序来实现强大的移动CI系统。 重要说明: GreenhouseCI不“正式”支持React Native,但其构建系统具有促进React Native应用程序CI的所有先决条件。 这就是下面的说明如此涉及的部分原因。 可以在此链接上找到此博客文章的示例应用程序。 假设条件 本博客文章假定以下内容: 您具有React Native开发的工作知识,包括NPM的工作知识 您已经为iOS应用设置了证书和配置文件 您正在使用Yarn管理您的React Native依赖项 关于版本的注意事项 此博客文章的编写具有以下版本: 节点:6.9.0(LTS) React Native:0.36 纱:0.15.1 贸易工具 在开始之前,需要注意这些工具的含义以及它们对于有效的移动CI系统的重要性。 GreenhouseCI : “ CI即服务”平台,可轻松配置适用于本机和混合应用程序的移动CI Yarn :Facebook创建的程序包管理器,允许进行快速,确定性的依赖项管理 CodePush :由Microsoft构建的库和基础结构,可通过无线(OTA)更新基于JavaScript的混合平台 HockeyApp :Microsoft的一项服务,允许将应用程序Beta有效地分发给测试人员 和谐地使用所有这些工具,使移动开发人员可以将更多的精力放在他们产品的质量上,而手动准备好要测试和部署的应用程序效率低下。 我们的目标 到本文结尾,我们将完成以下工作: 为我们的iOS React Native应用程序设置CodePush项目 在我们的iOS React Native应用程序中集成了CodePush 为我们的iOS React Native应用设置一个HockeyApp 为我们的iOS […]

如何使用Jenkins和VSTS为iOS项目设置CI和CD?

在我们开始之前,我想告诉您对CI / CD的轻微监督(持续集成/持续交付,持续部署)。 CI的成功取决于开发团队对文化的改变。 在这样的过程中,不需要人来决定何时以及什么生产。 CI / CD系统的最后一步将自动部署成功退出交付管道的所有构建组件/程序包。 因此,这里我将向您展示如何使用TFS插件通过VSTS配置Jenkins。 使用TFS插件使将Jenkins与VSTS一起使用来创建完整的CI / CD管道非常容易。 我不会涵盖有关Jenkins的任何细节,因为我假设如果您正在阅读此书,那么您已经知道如何使用Jenkins。 如果您不熟悉CI / CD,只需使用VSTS,无需安装,即可构建Xcode项目。 如果您知道如何使用Jenkins,那么我将向您展示如何将其连接到VSTS。 您将需要以下内容 完全安装和配置的Jenkins服务器 Team Foundation Server插件 免费的Visual Studio Team Services(VSTS)帐户 个人访问令牌 通过上面的内容,我们准备配置一个项目以从存储库中提取,使用Jenkins触发并构建VSTS。 创建团队项目 创建VSTS Team项目之后,我们可以切换到Jenkins。 在Jenkins中创建一个新项目以构建代码 对于源代码管理,选择Git或您使用的任何版本控制。 在库URL中复制库URL 单击添加,然后单击凭据旁边的詹金斯下拉列表 6.输入以下内容 字段名称-值 域-全局凭据(不受限制) 种类—用户名和密码 范围-全局(詹金斯,节点,项目,所有子项目等) 用户名-[留空] 密码-[VSTS个人访问令牌] ID — VSTS 说明— VSTS 点击添加 选择“ Archive theartifacts”生成后操作来归档生成的输出 保存项目 一旦我们触发了构建,我们将返回项目,以便触发发布 使用Jenkins,我们可以配置VSTS以在每次提交时启动此构建。 从“ […]

使用Jenkins在iOS中进行持续集成,立即进行Jenkins中的第一项工作。

要安装和设置Jenkins,您需要先阅读本教程。 您的第一份工作有以下职责。 iPA的所有Debug版本都将自动上传到Hockey App,或者您可以通过轻松修改脚本将其上传到任意位置。 所有版本的iPA版本都将自动上载到ItunesConnect。 现在,不浪费时间,让我们开始从事詹金斯的第一份工作。 从Jenkins主菜单中选择“凭据”。 点击(全局) 在单击“全局”时,您将找到以下屏幕截图,点击“添加一些凭证?”。 填写以下详细信息,在用户名和密码下面是您的GIT凭据。 按确定。 现在,凭据将在下面被喜欢。 复制“ id”即“ Git_Credentials” 进入菜单选项,选择“管理詹金斯”。 选择“管理插件”。 下载Xcode,Build TimeStamp,活动选择,掩码密码和管道插件。 选中“安装插件后重新启动jenkins”。 选择ManageJenkins,配置系统。 转到Xcode Builder设置。 填写详细信息,按照以下步骤查找您的团队ID。 确保钥匙串路径是安装证书的路径。 按“保存”。 现在该创建您的第一个Job了。 选择创建新作业。 选择管道,然后将作业命名为“ iOS_Builds”,然后按确定。 在当前登录用户(即/Users/Sudhir.kumar/.jenkins/jobs/iOS_Builds)中搜索.jenkins目录。 在此路径中,您将找到config.xml文件。 将此文件的内容替换为FILE的内容 现在转到Manage Jenkins并选择“从磁盘重新加载配置”。 点击iOS_Builds作业,然后单击带有参数的构建,您将看到这个漂亮的视图。 从作业菜单中单击配置,然后根据需要进行配置。 一件事是在管道脚本中,需要设置四个参数。 确保方案名称或工作空间名称中没有空格。 Your_WorkSpace_Name:这是从Git中签出的工作空间的名称 Your_Path_To_Info.Plist:$ {workspace}是作业文件夹之前的路径。 您必须提供作业文件夹之后的路径,直到info.plist Your_Product_Name:您要用来创建存档或Ipa的名称 Your_GIT_ID_FROM_CREDENTIALS:这是Jenkins Credentials菜单中的ID“ Git_Credentials”。 下载ExportOptions_Release.plist和ExportOptions_debug.plist并将它们保存在桌面上。 根据您的信息更新plist。 确保在xcode中,您的项目代码签名应为“手动”方式,应取消选中“自动管理签名”。 如需更多帮助,请遵循此。 填写完信息后,请单击build,您将看到此漂亮的GUI执行您的工作。 如果您在系统上设置jenkins时遇到任何问题,可以免费向我咨询,只需给我发送电子邮件至Sudhirkumar0187@gmail.com。 您也可以在评论中问我。 如果您喜欢这篇文章,请留下一些鼓掌。 […]