Tag: fastlane

使用Fastlane和Travis CI建立发行自动化

曾经有种感觉,就像您花费大量的办公时间来构建测试仪一样。 您正在构建版本,而不是对它们报告的错误进行修复。 好吧,如果您这样做了,那么您很幸运。 我们将讨论如何使用iOS开发人员可以使用的两个最简单的工具解决该问题。 快车道 特拉维斯CI 在将Swift集成到项目中(用Objective-C编写)之前,我们的构建时间非常短。 但是随着我们开始越来越多地在Swift中编写代码,这种情况发生了变化。 创建存档只需要3到5分钟的时间,而花费了15到20分钟的时间。 我们尝试了Apple建议的所有优化技术,但令我们沮丧的是,仅几分钟就对我们有所帮助。 如果您要花一些时间来上传构建版本,则很容易花费我们30-40分钟。 因此很显然,我们必须解决此问题,因为它会占用开发人员的时间及其生产力。 所以我们开始吧 如果您想直接跳到本教程,请向下滚动。 对于好奇的人,这里有一些关于我为什么选择Fastlane和Travis的见解。 快车道: 该工具使您可以非常轻松地自动化构建过程。 您的所有进程都位于这些很小的“通道”中,这些通道是可读的,因此,即使是新手,也可以通过查看代码确切地知道发生了什么。 而且,fastlane提供的输出非常有见地并且易于阅读。 管理代码签名:O !!! Fastlane提供与Fabric,HockeyApp,Testflight等第三方应用程序的完美集成。我们使用Fabric从测试人员下载构建的位置上传构建。 由于我想避免使用Fabric编写集成代码,因此Fastlane对我来说是一个显而易见的选择。 它拥有一个了不起的开发人员社区,您可以找到最常见问题的解决方案。 特拉维斯CI: 我不得不使用CI工具来分发我的构建,因此我选择在Jenkins和Travis之间进行一次小型调查。 以下是Travis与Jenkins相比的一些优势: Travis集成了GitHUB Web挂钩! 它还为您提供了一些漂亮的功能,例如在拉取请求中显示构建状态,队列管理,仅在最新提交时运行作业等。 您在Jenkins上确实有GitHUB插件,但是这一次您需要花费时间来集成它。 特拉维斯不需要任何设置。 我只需要创建一个帐户就可以了。 Travis是基于云的解决方案,因此您无需像Jenkins那样依赖于系统。 无论如何,足够了……。 让我们继续前进!!! 该工具将使我们的生成生成过程自动化。 我们将使用fastlane的两个工具: 匹配—管理不同分发方案的证书和配置文件 健身房—创建iPA 在系统上安装fastlane brew cask install fastlane 转到您的项目文件夹并运行 fastlane init 这将在项目目录中创建一个名为fastlane的文件夹,其中包含要在其中写入“ 泳道”的fastfile 。 通道遵循非常简单的结构: 车道:build do 选项 […]

将GitLab CI支持添加到iOS项目

我最近发表了一篇文章,详细介绍了几个持续集成系统以及我最终决定使用的系统:GitLab CI。 今天,我将我的另一个项目转移到了新服务中,我认为我将逐个演示如何使用GitLab CI构建和部署该项目。 关于该项目 有问题的项目是iOS的Scrawl Notes。 这是一个相对简单的应用程序,具有相对简单的要求。 它具有单个依赖项¹,由Carthage管理。 有两个测试目标(UI和单元测试)²,每当我推送到GitLab服务器时,我都希望同时运行它们。 最后,我通过Apple的TestFlight将此应用程序部署到Beta测试人员,因此当我推送到master分支时,我想自动将构建版本上传到那里。 快车道 Fastlane使在其他项目上进行所有这些设置变得更加容易,因此我将在这里再次使用它。 Scrawl Notes尚未使用Fastlane,因此将其添加为第一步。 $ fastlane setup 在设置过程中,Fastlane要求我提供我的Apple ID。 我有一个单独的Apple开发者帐户,仅用于我的持续集成系统。 这主要是因为,如果它完全变成了麻烦,至少它仅限于我的工作,而不是我的雇主或我们的任何客户的工作。 安装完成后,Fastlane为我创建了几个文件: $ git status On branch 1.2-release Changes to be committed: (use “git reset HEAD …” to unstage) new file: fastlane/Appfile new file: fastlane/Deliverfile new file: fastlane/Fastfile … 我在这里关心的主要是Fastfile ,它描述了我希望Fastlane运行的所有任务。 默认生成的文件中包含大量内容,我现在不想要所有这些。 这是我得到的: min_fastlane_version(“2.73.0”) […]

与Jenkins和Fastlane的iOS持续集成和交付(第1部分)

在这一部分中,我们将: 了解什么是持续集成和持续交付以及为何如此重要 在MacMini上设置Jenkins 创建一个构建作业,从Github存储库中签出您的项目 在构建服务器(以及本地开发计算机)上安装fastlane工具 将fastlane集成到您的项目中并创建示例车道 请注意,我使用MacMini作为专用的构建服务器。 如果您使用的是MacBook,也可以阅读本文。 但是,在生产场景中,您可能要避免在执行自动构建的本地计算机上运行Jenkins。 1.什么是持续集成和持续交付? 持续集成(CI)是一种软件工程实践,通常将孤立的更改集成到较大的代码库中并立即对其进行测试。 持续集成的目标是验证这些更改的正确性,并尽快检测出集成错误。 为此,在每次集成后运行自动化测试是很普遍的。 连续交付(CD)是构建可以随时发布到生产环境的软件的功能。 持续交付的目标是确保软件代码始终处于可部署状态,无论它包括新功能还是仅包含错误修复。 2. CI和CD为什么重要? 每个与许多开发人员一起在开发团队中工作过的人都知道,将团队成员一直在努力的不同分支整合在一起可能会带来问题。 即使没有任何合并冲突,也总是有可能您在不注意或破坏构建的情况下弄乱了某些功能。 如果您使用的是持续集成,则更改将在集成之后立即进行测试,如果有任何问题,几乎会立即通知您。 频繁执行集成测试可确保大大降低交付损坏功能的风险。 频繁执行集成测试可确保大大降低交付损坏功能的风险。 除了对新功能和变更进行测试之外,能够随时发货也很重要。 想象一下,在最新的生产版本中存在一个严重的错误,您需要尽快发布一个错误修正版本。 如果您的交付过程花了几天时间才能准备好发布,这可能已经太迟了,有些用户已经卸载了您的应用程序。 3.为什么要在iOS项目中使用CI / CD? 无论您是定期将内部版本上传到测试服务(如TestFlight,Beta还是Hockey),还是要在较短的发布周期内提交应用程序更新(应该这样做),您都很可能会浪费大量时间重复以下步骤再三,一而再再而三: 执行回归测试 递增版本/内部版本号 负责签名和配置 上载到iTunes Connect 更新AppStore截图和元数据 考虑一下如何可以做一些有生产力的事情。 好在,这是个好消息:您可以轻松地自动化此繁琐的过程。 🚀 4.在MacMini上设置Jenkins 1.重新安装Mac OS X(在本文撰写时为Sierra) 2.创建一个新的管理员用户帐户。 (詹金斯稍后会创建一个单独的用户帐户) 3.从www.jenkins.io下载最新的Mac OS安装程序并运行它。 或者,您可以使用自制软件安装Jenkins( brew install jenkins) 4.安装程序完成后,它将自动打开浏览器并转到http:// localhost:8080,这是您的jenkins的本地地址。 (如果您是Mac OS的全新安装,则需要先安装Java。只需打开终端,输入jave并选择More Info…或从此处下载最新版本的JDK)。 […]

适用于iOS应用程序的Bitrise Fastlane集成

有关如何将fastlane(iOS和Android的CD工具)集成到Bitrise中以及如何在 Bitrise 上运行相同命令的 逐步指南 。 Moses Kim的来宾帖子。 原始帖子出现在 Shakuro博客上 。 本文基于对移动开发人员Sergey Laschuk和Ruslan Krohalev的采访。 摩西是Shakuro数字产品代理商的作家。 他喜欢研究技术,体验设计和武术。 在自动化测试以及构建Web和移动应用程序的部署方面,有几种完善的持续集成服务。 然而,Bitrise在2017年获得了广泛的宣传,并拥有在2018年获得更多关注的所有好机会。 什么是Bitrise Bitrise是一个主要致力于移动开发的持续集成平台。 持续集成(CI)是在特定的时间表上将开发人员构建副本合并到共享主线的一种普遍接受的做法。 换句话说,这是一个用于版本控制和复制部署的工作流,而不会失去对开发过程的跟踪。 Bitrise允许创建包含构建步骤的多个工作流程。 一个应用程序可以为其定义多个工作流程,还可以使用webhook来指定为哪个触发器(webhook)选择了哪个工作流程。 映射到工作流程的触发器使用预定义的工作流程启动构建。 对构建步骤进行编程,以执行由命令行脚本实现的各种功能。 记录所有虚拟机构建步骤,以保留工作流每一步的信息。 我们与Bitrise合作的项目 Bitrise允许Jira集成,这对我们来说是个不错的选择,因为要实现的所有功能,时间跟踪和估算都是由我们公司的Jira运行的。 构建自动化 到目前为止,我们已经在两个主要的移动开发项目上使用了Bitrise,其中一个是已经在App Store上运行的iOS应用程序。 凭借每天生成的新版本,Bitrise可以自动将主版本更改货件自动交付给App Store测试。 工作流还配置为仅在实施更改后才交付新的版本。 因此,产品负责人仅收到有关已发货的重要产品的信息。 测试自动化 新功能会自动进行测试,如果发现错误,则不会提供任何构建。 最新的Bitrise功能之一允许在设备模拟器上运行功能用户测试。 如果这些单元测试中的任何一个失败,则通知将直接发送给开发人员。 对于我们的一个iOS应用,每天都会从项目GitHub存储库上的提交收集所有消息。 在本周或冲刺结束时,或在具有里程碑意义的情况下,产品负责人(客户)提出了对修补程序的描述以及添加到内部版本的新功能。 提交随附的文件中列出了所有功能和修复。 这些描述的组合由Bitrise自动化。 总而言之,每次上传到TestFlight最多需要1个小时。 但是,由于它是由Bitrise虚拟机完成的,因此对我们来说不算什么。 什么是快车道 Fastlane是适用于iOS和Android的持续交付工具。 Fastlane是用红宝石编写的工具,可以通过红宝石宝石安装。 与Bitrise一样,Fastlane也有构建步骤,称为“动作”。 每个动作都是必须执行才能获得某种结果的任务。 可以将所有Fastlane动作收集到称为Lanes的单个实体中。 泳道就像Bitrise中的工作流。 当在Fastlane中运行通道时,如果任何一个操作执行不正确,则会执行该通道中的每个操作,并且构建失败。 通道在称为Fastlife的文件中定义。 在所有类似方面,Bitrise和Fastlane并不冲突且彼此重复,但是正如我们发现的那样,Fastlane可以大大补充Bitrise在移动开发项目中的参与。 […]

结构— Fastlane安装问题

因此,我尝试通过Fabric应用程序安装Fastlane,因为这似乎是安装它的最简单方法。 fastlane命令本身似乎可以很好地安装,但是尝试运行任何fastlane工具(例如snap)会导致错误-即因为未安装这些工具。 解: 卸载由Fabric应用程序安装的fastlane版本(有一个方便的按钮)。 通过Ruby Gems手动安装fastlane。

通过重新运行不稳定的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次以查看测试结果。 […]

在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设置Fastlane MATCH

在本文中,我将向您展示如何创建快速通道匹配以自动化构建和发布移动应用程序的过程。 注意 : 如果要添加现有证书以匹配git repo,请转到步骤9 什么是快车道? Fastlane是旨在简化Android和iOS部署的开源平台。 fastlane使您可以自动化开发和发布工作流程的各个方面。 自动截图 -自动为应用商店生成本地化的截图。 Beta部署 -轻松为测试人员分发Beta版本。 App Store部署 -在几秒钟内将新版本发布到App Store。 代码签名 -可靠,一致地对您的应用程序进行代码签名,不再麻烦。 —设置快速通道匹配: 什么是快车道比赛? iOS代码签名的新方法:在整个开发团队中共享一个代码签名标识,以简化代码签名设置并防止代码签名问题。 match创建所有必需的证书和配置文件,并将它们存储在单独的git存储库中。 每个有权访问该存储库的团队成员都可以使用这些凭据进行代码签名。 匹配还会自动修复损坏和过期的凭据。 这是在团队之间共享签名凭证的最简单方法。 在设置Fastlane匹配之前,让我们先在本地计算机上安装Fastlane, 须藤宝石安装fastlane 第1步 : 创建一个git仓库。 创建一个新的私有Git存储库(例如,在bitbucket.org/xxx中的特定项目中),您可以将其命名为 certificate 。 注意 :确保将存储库设置为 私有 步骤2: Apple开发人员帐户 创建一个新的共享Apple开发人员帐户(例如projectname@company.com),此帐户将在您的团队之间共享。 如果您已经拥有一个,请忽略此步骤。 您还可以在匹配文件中添加Apple帐户的用户名和密码字段(您将了解匹配文件)。 步骤3 : 设置SSH密钥 为您的git帐户设置ssh密钥,以克隆将由fastlane匹配文件使用的存储库。 这很重要,因为匹配需要用户名和密码才能访问git repo。 没有身份验证,构建将失败。 使用SSH,您可以对将存储证书和配置文件的存储库进行身份验证。 步骤4: 启动快速通道 为您的项目文件夹启动fastlane(其中包含.xcworkspace或.xcodeproj) 快速通道初始化 project1 $:快速通道初始化 […]

Jenkins + iOS构建

不久前,我需要为iOS项目设置构建管道。 这是一个经典的故事,开发团队解散了,公司需要一些外部软件帮助。 长话短说,这成为我修补iOS构建自动化的借口。 编译良好且有文档证明的开源项目是一回事,编译没有文档且无人问津的iOS项目,至少让我非常兴奋。 该项目是为iPad设计的,我认为我需要一个实际的项目来开发。 事实证明,为Apple设备开发软件仅需要Apple计算机。 不需要手机或平板电脑。 一切都可以通过模拟器来完成。 下一个困难的部分是弄清构建配置和库依赖关系。 这是我第一次听到cocoapods,事实证明它很整洁。 就像NPM用于节点,pip用于python,Cocoapods用于快速/目标C项目。 我不能在这里分享代码,但是可以分享我学到的课程。 资质认证 对于新开发者来说,这可能是最令人困惑的事情,但是实际上,这并不太疯狂。 所有这些都是关于知道谁编写了代码以及谁在分发应用程序。 证书 -每个开发人员都应在developer.apple.com上获得一个帐户,并生成自己的开发证书。 这用于签名代码。 您稍后将使用您的用户名和密码来获取证书。 证书的私钥仅在证书创建期间可用。 那些.p12私钥需要导入Mac的钥匙串中才能对代码进行签名。 标识符 -只是某种Java类,例如命名约定ID即可识别应用程序。 设备 -允许将设备注册到公司帐户,并且配置文件可以指定允许安装该应用程序的设备。 供应配置文件 -证书+应用程序ID +设备的组合。 它用于对应用程序进行签名。 编译中 安装Xcode和CLI工具。 安装分发证书和该证书的私钥。 Fastlane是人们多年来构建的实用程序的组合,可帮助实现iOS项目构建的自动化。 Jenkins Side自动化 对于Jenkins服务器端,在Jenkins管理内创建一个slave node 。 您可以: 在Mac上创建SSH帐户,让skin进入ssh。 要么 使用webstart方法,从Mac上从Jenkins的master下载slave.jar并手动启动。 可以为slave.jar创建自动启动。 在工作中,使用jenkin的插件将文件从jenkin的文件系统复制到Mac从节点。 为了执行构建, #!/ bin / bash -l export LANG =“ zh_CN.UTF-8” #秘密文件本地存储在构建服务器上 […]