Tag: 持续集成

应用商店或App Center参数构建,测试e交付em Apps iOS

O App Center和新曲棍球比赛,将继续进行。 Um dos grandes diferenciaiséque a ferramentanãose res apenas,plataforma Microsoft。 Épossívelusdo to do o seu potencial para as principais tecnologias do mercado,como: Android(Java e Kotlin); iOS(Objective-C e Swift); Xamarin(iOS和Android); React Native(iOS和Android); Windows应用程序(UWP); 应用程序中心(Dentre as principaiscaracterísticasou pilares do App Center),encontram-se: 生成-Gerar生成,自动执行或手动操作,完成应用,关联存储库(Visual Studio Online,GitHub或Bitbucket); 分发—分发自动发布的电子邮件,以免自动发送电子邮件; 测试—测试和执行命令。 在App Center中进行最新的教程构建,测试并在iOS中快速交付应用。 简易性建设者协会,无糖定量竞争者,无糖甜品消费者,简易消费类企业。 Vamos supor que um um colega […]

iOS Dev Weekly的Dave Verwer参与社区活动

在2008年,Dave Verwer才刚刚开始探索iOS开发。 对于那些收到他广受欢迎的iOS Dev Weekly时事通讯的人来说,毫不奇怪,他的第一个尝试就是开发了一个促进社区发展的应用程序。 该应用程序名为“气球”,是他最喜欢的一种儿童消遣方式的虚拟版本,用户可以在气球上写下便条,附加图片并将其发送到空中。 Verwer说:“在该应用程序中,您的虚拟气球会被其他用户捕获,环游世界。” “一旦发现,用户可以阅读您的消息,添加自己的消息,然后将气球发送回去。 您可以跟踪全球的气球进度,并在此过程中与其他用户联系。” 今天,Verwer通过iOS Dev Weekly每周向全世界的开发人员和iOS爱好者发送消息。 从邮件列表开始,到现在已发展成为一个出版物,每周出版物发行量超过45,000(并且还在增加!)。 在这次采访中,Verwer讨论了他从社区的发展和管理中学到的知识,以及任何在线社区的基础是真实性和共同的热情。 在这里,他分享了有关选择内容的重要见解,这些内容可以促进有机读者群并建立社区。 首先进行直觉检查:确保您的社区有基于激情的共同兴趣 简而言之,Verwer创建了iOS Dev Weekly,因为他本人需要它。 “我订阅了其他一些新闻通讯,它们基本上是Web开发人员的社区中心,” Verwer说。 “当我开始构建iOS应用程序时,对于iOS开发人员来说并没有什么比这更好的了。” 他于2011年启动了iOS开发周刊,以填补这一空白。 从一开始,社区就发展很快,并且从未停止过。 显然,有一个iOS社区渴望获得平易近人的内容。 对于那些花时间开发iOS应用程序的人来说,渴望学习更快地构建更好应用程序的新方法是一种永不满足的渴望。 他说,正是这种热情吸引了订户的订阅,并使他们一周又一周地参与其中。 “您必须为任何社区都拥有这个基础,” Verwer说。 强大的社区是围绕其成员的共同利益而建立的。 无论您使用哪种产品,识别并满足用户的共同利益都是关键。 这将推动增长并确定围绕您产品的社区的成功。 成为您自己的社区成员 对于Verwer而言,同时成为社区成员和主持人很容易。 Verwer说:“保持您作为所建立社区的积极成员的身份至关重要。” 除了创建时事通讯,Verwer还通过运行自己的开发者商店来保持iOS生态系统的最新状态。 Verwer和他的团队一直在寻找简化开发过程的方法。 Verwer说:“我会监视出现的所有新开发人员工具。” “我经常包含指向我认为有用或我的同事和朋友认为有用的资源的链接。 显然,我没有使用新闻通讯中链接到的所有内容-太多了。 但是对于任何开发人员来说,重要的是要意识到新产品并在出现令人信服的事情时听取社区的意见。” 选择要分享的内容时,请选择您感兴趣的内容 共享内容是任何在线社区的中心。 在选择内容时,最重要的考虑因素是您不能取悦所有人。 Verwer说:“如果我试图选择其他人觉得有趣的东西,那我就错了。” “所以我分享了引起我共鸣的文章和内容。” “时事通讯来自我,因为内容是从个人角度收集的。 而且,我故意在新闻简报上贴上商标以反映这一点。” 真实性传达给时事通讯读者。 从这个角度出发,他从精心维护的RSS提要集合中收集内容(每周为他提供至少250篇新文章)。 在可能的地方自动化 维持每周新闻简报意味着Verwer总是处于最后期限,因此他说,重要的是要利用任何有助于他提高生产力的工具。 就实际编辑新闻稿本身而言,Verwer在多年手动采购和收集内容,格式化,发布和发送后发现了一个产品机会。 他的新服务curated.co是出于必要而建立的,最初旨在让Verwer成为唯一用户。 它是由Verwer和他的团队构建的,用于自动化每周新闻通讯的编辑过程。 […]

YNAP上的SwiftLint和Danger自动执行iOS代码评论

在YOOX NET-A-PORTER GROUP(YNAP),我们使用Swift构建iOS应用。 Swift是一种现代,快速且类型安全的编程语言。 在iOS应用开发中,获取有关Swift代码的即时反馈至关重要。 作为一种类型安全的语言,Swift上的大多数安全检查均由Swift编译器在编译阶段完成。 但是,有许多干净的编码实践,例如语法检查,样式等,还需要执行。 在本文中,我们将探讨如何在YNAP的iOS应用中使用Danger,Swiftlint和Travis CI自动执行大多数Swift代码检查过程。 代码审查的过程可能很困难,而对于Swift作为一种新的编程语言而言,这尤其困难。 SwiftLint是事实上的工具,它通过执行适用于特定团队或项目的规则来整理Swift源代码。 我们使用了之前博客文章中提到的一些最佳实践,在TravisCI(即我们的持续集成(CI)服务器)上实现了SwiftLint。 我们的SwiftLint配置具有一些严格的规则,我们曾经在Xcode构建阶段中运行SwiftLint,以便开发人员可以在开发时看到Xcode本身中的警告或错误。 但是,与其等到CI构建到达Xcode构建阶段脚本,还不如等到构建开始时就对代码进行反馈。 为此,我们需要一种在CI构建运行时提供早期反馈的机制。 我们还希望通过pull请求可以看到SwiftLint提供的反馈,以便我们立即采取行动。 这就是危险出现的地方。 Danger是一种在CI上运行的工具,用于处理所有琐碎的代码检查任务,例如错字,空格,换行符等。它还使我们能够超越基础知识,并添加更多项目特定检查或执行测试或文档作为其中的一部分。拉取请求。 在此处的官方网站上有很多关于如何开始使用Danger的出色文档。 规则需要在配置文件(称为Dangerfile)中列出。 规则可以用Ruby,JavaScript或Swift编写。 但是,Swift实现相对较新,我们希望使用脚本语言在CI上的预配置环境中运行Danger。 幸运的是,Travis CI macOS映像随附了预装的Ruby和RVM,从而使安装Danger和大多数Danger插件(例如Rubygems)更加容易。 因此,我们决定用Ruby编写Dangerfile规则,以便在实际开始构建之前就可以在Travis CI上明确运行它们。 有了Danger,我们可以按此处所述配置各种规则,但是我们遵循了Swift和iOS特定的规则。 检查较大的请求,尤其是如果有超过500行代码 检查是否已将单元测试作为“拉取请求”的一部分添加,如果应用程序代码已更改 检查“拉取请求”上是否有标签 检查Podfile或Podfile.lock已更新? 如果是这样,则忽略该较大的请求 这些是Danger轻松实现的非常基本的检查-但其真正功能来自于Danger的SwiftLint插件。 此插件将所有SwiftLint规则应用于“拉取请求”中的代码审查过程,从而使Danger可以在发现SwiftLint警告或错误的任何地方自动对“拉取请求”进行注释。 现在,我们已经介绍了Danger和SwiftLint插件的基础知识,下面我们来讨论如何在Travis CI服务器上进行设置。 我们需要以下各项来在Travis CI上设置Danger。 GitHub上的专用Bot帐户/个人访问令牌 我们在GitHub上创建了一个专用的机器人帐户,该帐户可以对“拉取请求”进行评论。 为了做到这一点,我们还需要创建一个具有写访问权限的Github个人访问令牌,使Bot能够对拉取请求进行注释。 可以在iOS项目的Travis CI设置中将此个人访问令牌配置为环境变量DANGER_GITHUB_API_TOKEN 。 在Travis CI上安装Danger和SwiftLint Danger插件 有了Github访问令牌后,接下来我们更新了Travis配置.travis.yml以在before_script阶段安装Danger和SwiftLint Danger插件,如下所示。 由于Travis CI的macOS映像已使用Ruby和RVM进行了预配置,因此我们只需要在脚本中安装Rubygems即可安装Danger和Danger的SwiftLint插件。 注意:如此处文档所述,危险可在任何CI服务器上运行 在Travis CI上运行危险 […]

iOS中的UI测试

简介✍️ 在本文中,我们将首先解释如何使用Xcode编写UI测试,然后如何添加可视化差异,最后解释如何在Bitrise中进行配置。 为什么要测试用户界面(UI)? 对于产品发布,要测试每个用例并确保没有回归是很痛苦的。 您可能忘记测试一个流程,或者认为您的更改不会影响代码的其他部分……但是有时会这样做。 这是在Appaloosa上为我们的iOS应用程序所发生的情况,其中一些错误逐渐消失。 例如,当发布iOS 11时,我们在导航栏中添加了约束,但是此功能在以前的版本中不可用,并且该应用在iOS 10中崩溃。 它很快被发现并修复,但是警报提醒我们采取更强有力的措施来防止此类问题。 UI测试和单元测试 使用单元测试,您可以独立测试每个小代码,并专注于代码的逻辑方面。 使用UI测试,您可以模拟用户交互和用户流。 让我们以用户尝试登录您的应用程序为例。 它将在整个过程中测试用户与我们的应用程序的不同交互。 设置📚 在Xcode上转到您的项目,单击“ +”按钮(请参见下图)并添加iOS UI测试包。 还将创建一个新目标。 您还可以在Xcode上创建项目时添加它。 样例项目 这是一个示例项目。 我们要测试多个用户流,并确保它们都能按预期工作。 您可以在github上找到完整的代码。 目的是确保我们的登录页面在不同步骤中显示正确的视图。 因此,我们将需要访问页面的不同视图以评估其在测试期间的行为。 您可以通过多种方式检索应用程序的元素: 您可以使用Xcode中的“录制”按钮,它将自动生成您的代码。 您可以在视图上添加可访问性标识符,以更轻松地访问它。 您可以手动编写代码,在这种情况下,您需要知道如何访问元素。 您可以使用LLDB中的以下命令来打印可见屏幕的详细视图层次结构: (lldb)po打印(app.debugDescription) 我更喜欢这最后一种方法,代码更具可读性。 编写您的第一个UI测试 使用无效的凭据登录: 如果用户输入无效的凭据,我们希望该应用程序显示错误消息: 让我们看看它如何转换为代码。 用户想要显示他的应用程序列表: 在这里,我们被迫等待假服务器的响应。 我们需要告诉Xcode等待,直到应用程序完成了视图的渲染。 如果不这样做,则由于目标对象尚未出现,我们的测试将失败。 为了强制Xcode等待,我对XCTestCase使用了扩展名: 用户希望查看应用程序的详细信息: 从Xcode 9开始,我们不再能够比较长度超过128个字符的字符串,因此我们不得不使用谓词:

Xcode9 + Xcode Server =全面的iOS持续集成

在WWDC 2017上,Apple宣布了几乎所有iOS开发人员都满意的东西,主题为“Xcode和Xcode Server的签名新功能”。 很难解释,使用Xcode 9和Xcode Server在Apple平台(尤其是iOS和macOS)上执行持续集成变得多么容易。 Xcode 9之前的CI Xcode 9发行之前的iOS持续集成非常具有挑战性。 人们可能会尝试跟随 为使用证书和配置文件设置CI服务器计算机而进行了长期的战斗。 使用诸如Fastlane之类的基于Ruby的工具来自动化分析,构建,测试和代码签名的过程。 使用其他第三方云CI服务(例如TravisCI,CircleCI)或自托管解决方案(例如Jenkins,TeamCity)来使用bash脚本构建或Fastlane的自动构建 使用了诸如Facebook的xctool或LinkedIn的Bluepill之类的工具来并行化多个设备和模拟器上的测试。 使用第三方基于Ruby的工具(例如xcov,xcpretty)进行代码覆盖和测试报告。 将Xcode Server与macOS Server应用程序和Xcode Service for CI一起使用,但仍在与代码签名和并行执行作斗争。 带有Xcode 9的Xcode Server满足了所有这些要求。 您现在很少需要上面的东西。 Xcode Server可以轻松地为我们处理所有这一切。 感谢所有致力于开发人员工具以实现这一目标的开发人员。 让我们看看有什么变化 Xcode 9之后的CI 在Xcode 9中,我们在Xcode中集成了以下与CI相关的新功能 Xcode Server内置Xcode 9,因此无需单独的macOS应用。 Xcode Server bot具有新的选项卡,可在自动配置设备的多个设备和模拟器上进行代码签名和并行测试。 开发和发行签名的自动签名。 Xcode Server通过自动或手动签名创建分发IPA Xcode Sever不再启动仍然可以并行运行的模拟器。 现在,我们将看到实际上如何轻松设置和使用Xcode Server。 设置Xcode服务器 如前所述,Xcode Server不再需要macOS Server应用程序,它现在内置在Xcode中。 我们可以在Xcode Preference中看到“ Servers&Bots”标签。 我们可以使用本地Mac或其他Mac设置Xcode […]

宣布iOS DevOps Book的预告片

很高兴宣布我在iOS DevOps上写书的新冒险,该书涵盖了将优质应用交付给AppStore的几乎所有内容。 本书旨在通过应用实用的Mobile DevOps和Continuous Delivery技术解决iOS开发方面的挑战。 本书将帮助您的iOS团队自动化iOS应用程序的整个发行过程,包括分析,构建,测试,实现并分发到App Store。 您还将了解如何处理复杂的iOS开发任务,例如Apple开发证书,供应配置文件,代码签名和分发到AppStore Connect。 本书还介绍了iOS中流行的软件包管理器,以及如何为iOS应用选择合适的软件包管理器。 我们还将介绍iOS持续集成(又名CI)的详细过程,以及如何为iOS应用设置持续集成。 这本书将包含六个主要部分 连续交付和移动DevOps的基础 iOS套件管理员 iOS部署管道 iOS持续整合 iOS代码签名和AppStore Connect Xcode UI测试(XCUITest) 这将是本书的暂定结构,并可能随着我们写作的进行而改变。 如果我们错过了本书要涵盖的内容,请告诉我们,我们很乐意在本书中涵盖有关DevOps,CI / CD或Test Automation的所有内容。 如果您对此书感兴趣,请在此推文。 阅读本书的全部内容,请点击此处 如果您对iOS DevOps,CI / CD和Test Automation感兴趣,请发推文。 像XCBlog的 XCTEQ 发布的帖子一样 ? 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 在 Github 上 搜索我们的 服务 ,开源项目, 或者在 Twitter , Facebook , Youtube 和 LinkedIn 上关注我们 […]

iOS-CI / CD和内部版本号

近一个月(或更长时间),我正在尝试找到处理iOS应用程序内部版本号的最佳方法。 好吧,是的,如果您是唯一处理代码的人,这绝对是容易的。 但是,即使在这种情况下,值得有人照顾也是值得的,为什么不呢? 另外,在一个正确建立的构建管道中更有意义。 因为找出大多数自动化的东西总是更好的,因为它可以帮助团队中的所有开发人员最少地担心它。 在开始共享我的解决方案之前,我觉得最好退一步并分享我的发现背后的思考过程。 敏捷开发是所有软件开发行业的需求。 在这里,您必须以可装运产品的形式交付一小部分工作。 因此,您完成了一个工作项(用户故事/ Jira票证等),然后将构建版本发布到质量检查中。 这正是您想到的一个步骤,我将如何自动增加内部编号以使每个人的生活变得轻松? 现在,当我说“正确建立的构建管道”时,至少意味着您具有代码的基准主分支,每个开发人员都使用该基线主分支来创建该分支,以进行特定工作项的工作。 一旦完成工作,他们就必须将其分支合并到master分支中,这是QA接收构建的地方。 因此,简单的步骤看起来像- 1.选择要处理的项目并从母版创建分支 2.完成工作并提交+将更改推送到分支 3.合并代码到master分支 4.假设CI / CD版本是从master分支构建的,则您的QA将获得一个新的构建以测试您的工作 等一下…。 我在哪里更新内部版本号? 到目前为止,这是答案。 在发现阶段,我遇到了以下选项,该选项可以帮助您维护iOS应用程序的内部版本号- 在.plist文件中手动更新您的内部版本号,然后执行commit + push,然后合并代码(是的,我也不太喜欢它。 使用Fastlane的crement_build_number操作(更多信息在这里) 使用XCode agvtool(更多信息在这里) 发布构建阶段脚本(更多信息请点击此处) 所有选项都包含在此处,并在一篇文章中进行了说明 即使拥有了上述所有选项,我仍然想写这篇文章并共享我的解决方案,因为我认为这些参考足以了解增加内部版本号的方法。 但是,仍然缺少如何在CI / CD管道中实际实现这一目标的步骤? 更重要的是,哪一个最容易且最适合CI / CD? 提出最佳解决方案的方法与开发人员在发布构建版本的过程中执行的实际步骤一致。 因此,步骤是- 设置内部版本号(例如#1 完成工作项 将代码合并到Master分支 生成(#1)由管道释放 增加内部版本号(#2)以用于下一个版本 …..并重复这些步骤。 我之所以认为它与实际步骤一致,是因为首先设置内部版本号,然后开始为其工作,而不是以其他方式进行,这是有意义的。 因为管理内部版本号非常容易,并且更适合实际版本号的实际情况。 意思是,一旦您将1.0版本发布到App Store,此后您要使用的是下一个版本号,而不是1.0版本。 因此,更有意义的是先更新版本号,然后再开始使用它。 这也将有助于跟踪所有可交付成果到正确的版本。 例如,在开发过程中针对特定版本执行的测试用例,等等。 这样,它也是内联的,内部解释也一样。 […]

具有Fastlane和Ansible的iOS连续交付-第2部分

这是我在Photobox Group处理iOS应用程序持续部署的经验的第二部分。 在上一篇文章中,我们看到了我们如何使用Fastlane从持续集成服务器中连续部署iOS应用。 连续交付过程中最棘手的障碍之一是“在机器上工作”现象。 几乎每个工程师都至少遇到一次此问题。 我们还遇到了“在我的机器上工作”一文中提到的相同问题。 挑战性 在维护连续集成服务器的同时,我们遇到了以下挑战。 使用所有与iOS相关的软件手动设置CI服务器计算机需要花费几天的工程师。 在CI服务器上产生的结果在本地开发人员机器上无法再现。 我们的构建配置步骤与TeamCity持续集成服务器中的GUI配置紧密结合。 开发人员机器和CI服务器上的软件版本不同 我们失去了对CI服务器的信任,最终花费大量时间寻找问题的根本原因。 在此阶段,我们确实需要一些配置管理工具,该工具可让我们使用相同的配置来设置所有计算机,并应能够从头开始进行配置。 我们需要我们的iOS基础架构由代码(也称为基础架构)驱动。 我们正在为达尔文寻找类似Docker的产品。 有很多选择,例如Chef,Puppet等,但我们碰到了Ansible,因为它是用于基础结构自动化的简单但功能强大的工具,而无需了解其他任何语言(如Ruby)。 在这篇文章中,我们将看到如何使用Ansible来配置CI服务器。 使用Ansible设置iOS CI 以前,我们曾经使用交付iOS应用程序所需的所有软件来手动设置CI或持续集成服务器。 工程师必须手动下载并安装带有其他组件的Xcode,安装所需的自制软件包,设置RVM和rubygems。 它还涉及将构建服务器设置为TeamCity Build Agent。 要花费大约一两天的时间才能使构建机器处于工作状态。 这种方法既费时,又很难管理构建服务器上安装的软件版本。 我们使用Ansible设法使上述几乎所有内容自动化。 能够在需要时重置,重新构建iOS Continuous Integration Server环境非常重要。 Apple不断发布Xcode的新版本或Beta版本以及其他开发人员工具,因此我们应该能够快速设置和使用这些功能。 可编程基础结构或作为代码的基础结构是持续交付的关键,因此我们需要一个脚本来自动设置这些内容,而无需人工干预。 Ansible允许我们编写代码以管理部署以及基础架构的自动配置。 Ansible任务和剧本是简单的YAML文件,因此无需学习其他编程语言(如Ruby)来编写iOS基础结构脚本。 iOS持续集成服务器的配置涉及以下任务 预配置Xcode和Xcode命令行工具的安装 调配iOS开发所需的自制程序包 使用RVM设置红宝石环境 设置macOS默认值 为TeamCity服务器配置TeamCity代理 以上每个步骤都有Ansible任务,让我们更深入地研究这些任务 Ansible Xcode任务 包括Xcode在内的大多数Apple软件都是专有软件。 您需要Apple开发人员帐户才能下载安装这些软件。 设置Xcode的安装是一项重大挑战。 我们已决定下载特定Xcode版本的Xcode .xip文件,并将其托管在公司托管的SAMBA服务器上。 我们可以将Xcode .xip挂载到任何构建服务器机器上以安装Xcode。 然后,我们可以提供其他Xcode相关任务,例如接受协议,安装命令行工具,使用Ansible任务安装其他组件。 示例Ansible任务如下所示: — […]

带有Xcode 10的Xcode服务器

Xcode Server是几年前由Apple推出的一项持续集成服务。 在上一篇有关Xcode Server和Xcode 9的帖子中,我们介绍了WWDC 2017上有关“Xcode和Xcode Server签名的新增功能”的会议中宣布的大部分主要增强功能,自此之后,使用Xcode Server变得如此容易且容易使用无痛。 Xcode 9版本中宣布的主要增强功能是 内置Xcode服务器 服务器内的代码签名和设备配置以及自动代码签名 Xcode服务器上运行的无头测试 所有这些功能使Xcode Server成为iOS应用程序连续集成的轻松选择。 但是,在2018年初发生了一些改变游戏规则的事情。苹果收购了另一项持续集成服务BuddyBuild。 这是Xcode Server及其持续开发中的主要工作。 这可能是原因,WWDC2018在持续集成方面是如此令人兴奋。 苹果没有对持续集成和Xcode Server一言不发。 这是非常可疑的事情。 好吧,这是一个完全不同的主题,但是作为本文的一部分,我们将介绍在Xcode 10中使用Xcode Server的外观以及是否有任何更改。 Xcode 10:Xcode服务器 Xcode 10具有深色模式,因此很有趣的是从头开始设置Xcode Server的外观。 我们将在Xcode 10中创建一个包含单元和UI测试目标的空白应用程序,我们将其称为Xcode10-XcodeServer。 启用Xcode服务器 和以前一样,我们可以在Xcode Preference中看到“ Servers&Bots”标签。 我们可以使用本地Mac或其他Mac设置Xcode Server。 我们需要选择Mac和Integration用户。 请参阅下面的GIF,以了解在Xcode 10中启用Xcode Server的过程。 启用Xcode Server之后,我们将收到macOS通知,告知Xcode Server已准备就绪,并且我们将在顶部显示一个图标,其状态为Xcode Server,如下所示。 现在,我们已经设置了等待集成的Xcode Server。 添加Xcode服务器 一旦启用了Xcode服务器,则需要将其添加到本地Xcode中,以便我们可以创建机器人。 和往常一样,可以通过添加新的Xcode Server从Xcode Preference-> Account部分完成。 我们必须提供Xcode […]

iOS管道中DevOps友好XCTest的重要提示

最初在 这里 发布在XCBlog上 苹果已经引入了XCTest框架,可以为各种苹果平台创建单元,集成,性能和UI测试。 XCUITest是XCTest之上的一个性感扩展,它使开发人员可以为iOS和macOS应用编写UI测试。 自从在WWDC 2015中启动以来,XCUITest受到了很多关注和增强。 它使用Swift语言创建测试,这使iOS开发人员可以轻松地使用相同的编程语言为iOS应用程序添加UI测试。 另一方面,DevOps和Continuous Delivery实践诱使企业在开发新功能后立即发布它们。 根据权衡,单元和集成测试是轻量级的,并且速度更快。 但是,UI测试非常缓慢,难以维护。 许多移动测试金字塔表明,我们应该进行最少的UI测试,并涵盖业务逻辑较低级别的轻量级测试。 但是,UI测试是不可替代的,并且如果执行得当,则可以在更高的级别上提供更多的价值。 就发布应用程序的信心而言,单个UI测试可以击败数千个单元测试。 为了混合使用DevOps和XCTests的实践,我们必须在不干扰CI / CD管道的情况下,就如何编写XCTest做出一些明智的决定。 在本文中,我们将介绍一些对DevOps友好的XCTests的技术。 为了允许频繁发布iOS应用,设置和维护CI / CD管道非常重要。 iOS开发中最痛苦的事情之一就是发布了该应用程序。 它涉及许多活动,这些活动可能容易出错,重复且耗时。 CI / CD管道的作用是使所有无聊的任务自动化。 典型的iOS发布管道包括以下内容 查看源代码 Swift代码的静态分析(例如SwiftLint) 编译和构建iOS应用 运行各种测试,例如单元,集成,API,UI,性能,安全性 代码签名和存档iOS应用 将iOS应用分发到iTunes Connect或第三方测试服务 创建标签或在Source Control上发布,例如Github Releases 最后但并非最不重要的一点是,通过发行说明通知人们有关新版本的信息 可能有更多的东西正在筹备中,但上面列出了一些非常常见的东西。 很明显,如果没有自动化测试,CI / CD管道将无法完成。 自动化测试提供了释放iOS应用程序的价值和信心,而无需担心。 现在,我们将看到如何精巧地编写XCTest,以在不影响iOS应用程序质量的情况下加速管道。 用单元测试覆盖所有生产代码始终是一个好主意,这样Continuous Integration可以在生命周期的早期检测到错误。 单元测试通常写得很快,而且琐碎。 使用XCTest,我们可以通过编写单元测试来覆盖大多数代码。 在某些情况下,我们必须编写集成测试,而单元测试不足以覆盖业务逻辑。 进行轻量级和更快的测试的好处是生成速度更快,可以提供早期反馈。 苹果在这里用XCTest框架编写单元测试的文档非常丰富 iOS应用程序使用后端或服务器端API是一种非常常见的做法。 确保iOS应用使用的API遵循消费者驱动的合同,这一点非常重要。 否则,他们可能会完全破坏iOS应用程序。 […]