Tag: 持续集成

使用Sentry自动化错误处理的快速入门

Sentry是一个用于跟踪应用程序错误的出色工具,在本简短指南中,我将向您展示如何将其添加到iOS应用程序中。 注册新账号。 您是一名开发人员,我希望我不需要逐步介绍。 2.如果没有设置CocoaPods,请安装它并在项目目录中运行pod init,它将引导您完成创建Podfile的操作 11.将绝对路径复制到脚本中,并将其粘贴到编辑器框中 12.你做完了✅! 您现在可以自动跟踪错误。 🥳

如何通过三个相对简单的步骤为iOS设置GitLab CI

提示:一点都不难。 感谢Angelo Stavrow在2016年发布的帖子,我自己的GitLab设置以及这篇帖子都变得生动起来。让这一切变得有趣起来,在果酱中添加Fastlane,在这篇文章的末尾找到我的下一篇文章的链接。 介绍 作为开发人员,不论年龄大小,职称,无论我们是年轻人还是老人,我们都听说过CI / CD和可用的工具-例如,如果您的项目是开源的,则有很多付费的工具,而另一些则免费的。 酷,我知道。 但是关于不是开源的工作呢? 如果您使用的是GitLab,那么您会很幸运,因为无论项目如何,它都免费提供了内置的CI。 这听起来像是一个很棒的计划:-)。 我不会解释什么是CI / CD,您可以轻松地将其搜索出来。 但是我需要指出的是,至少对我自己而言,拥有CI的更大优势在于,它将使您能够编写那些拖延已久的测试。 因此,让我们这样做。 此帖子使用什么设置? 运行macOS Sierra 10.12.6的 Mac mini 带有iOS 10.3 SDK的 Xcode 8.3.3 第一步-设置您的Xcode项目 首先创建包含单元和/或UI测试的项目并将其与相应的GitLab存储库链接。 确实,确实要确保共享项目的方案 ,否则GitLab CI无法找到构建和测试项目所需的上下文。 为此,您需要在Xcode中打开项目,然后从标签菜单中选择产品 > 方案 > 管理方案 。 当菜单窗口出现时,勾选与您的项目方案相对应的“ 共享”框 ,然后单击“ 关闭”按钮 无需共享任何依赖关系方案。 完成上述步骤后,即可进行提交和推送。 一个好主意是获取xcpretty 。 它 将构建的输出转换为更具可读性的方式。 第二步–安装和注册GitLab Runner 要真正了解什么是Runner,可以查看GitLab的有关它们的文档。 简而言之,它是计算机上的一项服务( 可以是某处的远程服务器,但由于您是iOS开发者,因此可以在Mac上使用,这使您与众不同 ),该服务可以运行特定的版本及其相应的测试过程在一个特殊的配置文件中进行设置。 在您的Mac上实际安装GitLab运行程序非常简单,因此我建议您遵循我们的GitLab朋友专门针对macOS提供的说明。 […]

自动化流星/ Cordova应用程序签名

为什么? 手动部署会带来人为错误的风险,并阻止频繁发布。 因此,自动化应用程序部署是团队的宝贵补充。 我需要了解什么? bash,Jenkins构建代理,应用程序签名过程。 怎么样? 假设我们使用docker进行了最低可行CI配置。 在构建后将添加一些步骤,以准备发布我们的移动应用程序。 您应该已经能够手动签名和构建.apk和.ipa文件。 安卓 自动化android是一件轻而易举的事,很少有问题,因为apk已经构建,只需要签名和压缩即可。 第2步:从1.4.0.1版本开始,流星不能为Android和iOS设置不同的包ID。 因此,如果像我们一样想要使用不同的包ID,则需要查找替换所有Android包ID的实例。 我正在使用npm replace工具,该工具已全局安装在构建代理上,它支持正则表达式,并且在bash脚本中读取效果很好。 步骤3:创建.xcarchive文件,并将其导出到.ipa。 这是大多数问题都会发生的地方。 您的项目可能还有其他配置选项。 在我们的案例中,添加本地cordova插件通常会导致非常奇怪的路径,可能需要修复。 无论您最近的配置更改如何,都可以使用git查看xcode项目中发生的更改,并使用bash进行相同的更改。 版本控制 良好的CI设置应支持可追溯性,因此应增加内部版本号以帮助识别应用程序来自哪个内部版本。 在以下脚本中,我们将获取最新提交的git哈希值,构建日期和Jenkins内部版本号,以提供调试的良好环境。 也可以使用“ cordova-plugin-appversion”来抓取它,并将其在应用程序中提供给用户查看。 我还建议添加一个设置全局变量的简单javascript文件。 这使我们能够检查热推送到设备的代码版本。 编辑mobile-config.js以设置应用程序版本,编辑version.js以影响可以被热代码推送到设备的文件 摘要 因此,到现在为止,我们应该已经准备好使用可以在应用程序和日志中显示的版本号来部署我们的移动应用程序。 我们正在使用fir-cli将这些内容发布到fir.im。 它是免费的,支持回滚和版本号,但有时可能会有些不稳定。 下次,通过尽可能多地记录客户端和服务器上未处理的异常并有效分析日志,调试生产的cordova应用程序。

生成并托管您的iOS文档

作为程序员,每个人都告诉您要负责并编写代码。 它为您正在编写的代码提供了上下文,并使您更容易了解正在发生的事情。 记录我们的代码很棒,但是如果我们可以直接从代码中生成并托管漂亮的文档,该怎么办? 通过正确的设置,我们甚至可以搜索文档。 请看下面的样本文档页面: BackgroundColorState枚举参考 可以通过用下一个后台状态覆盖状态来更新状态。 jgsamudio.github.io 有什么计划? 在这篇文章中,我们将使用Jazzy为我们的文档生成一个网站。 然后学习如何在Github Pages上托管它,最后确保它与Travis CI保持最新。 如果您不熟悉CI或尚未为项目设置Travis CI,请查看此博客以获取一些见解:“如何为CI和iOS Project自动化CI” 产生文件 开发人员可以尽可能快地编写文档,但速度却已过时。 我们需要一种生成文档的方法,这样就可以避免在很多地方都必须更新文档。 Jazzy是一个命令行应用程序,可以将Swift和Objective-C文档生成到html网站中。 爵士安装 在安装Jazzy之前,我们需要安装“ Xcode命令行工具”。 您可以运行以下命令来安装它们: xcode-select —-install 。 安装完成后,您可以运行[sudo] gem install jazzy来安装Jazzy。 成功安装后,我们可以运行Jazzy并使用不同的文档选项对其进行自定义。 爵士乐 –min-acl内部\ –no-hide-documentation-coverage \ -主题全角\ –output ./docs \ –documentation =。/ *。md 1. min-acl内部 min-acl属性控制生成的最低访问级别。 由于我们正在记录所有公共函数和变量,因此将其设置为internal 。 私有和Fileprivate函数和变量将不在生成的文档中。 要记录所有内容,必须将min-acl设置为private 。 2.无隐藏文档覆盖 在文档中启用文档百分比计数器。 3.主题全角 使用搜索栏更改为自定义主题。 […]

无需虚拟化即可在Mac OS上重现和包含CI

最近,我一直在研究Mac OS(特别是iOS)的持续集成的状态。 我想了解人们在Mac OS上如何进行CI,以及常见的最佳做法是什么。 不幸的是,对于我来说,没有什么惊喜,因为Mac OS的构建自动化状态非常糟糕。 在这篇博客文章中,我将总结一下我的发现,并描述我提出的实验性解决方案。 首先,我们需要弄清楚我们在寻找什么版本。 良好的CI设置通常旨在确保以下几点: 灵活可复制的环境 。 应该可以指定执行构建的环境。 不同类型的构建可能需要不同版本的工具和框架,CI应当保证某种类型的构建将始终在同一环境中执行。 隔离建筑物 。 顺序或并行构建不能相互干扰执行。 对于每个新构建,应从先前构建的工件中清除环境。 表现 。 与在开发人员的本地计算机上构建的CI相比,CI构建的性能应具有最小的影响。 常见的CI系统使用一种模式,在该模式下,执行构建AKA工作的计算机会安装一个称为CI代理的程序,该程序会不断拉动主服务器进行工作。 早在20年前,代理只是运行shell脚本,开发人员的工作是确保这些脚本编写正确并提供上述保证。 但是根本不可能做出脚本,最重要的是要保持这样的保证。 从那以后,不幸的是,并没有发生很多变化 。 该体系结构中最显着的变化是使用虚拟机作为CI工作者的转变,以拥有这种灵活且可复制的环境。 除此之外,设置CI系统甚至使用完全托管的解决方案变得更加容易。 这是Uber工程师的精彩演讲,内容涉及他们从一台物理Mac Mini到数千台虚拟机的旅程(始于13:20,Medium不支持时间标签)。 这篇演讲基本上展示了上述事物的整体演变。 这是一个./chamber.sh ./script/ci.sh脚本,可以像./chamber.sh ./script/ci.sh一样使用它来在./chamber.sh ./script/ci.sh中运行现有的CI脚本。 该脚本已经在多个项目上进行了测试,但仍然是WIP。 我强烈建议您尝试一下并报告任何问题。 不过,请阅读它,其中包含有关其功能以及如何调试/配置功能的详细注释。 运行虚拟机仍然很困难。 如果不是苹果公司,那么也许像Veertu这样具有现代Anka虚拟化技术的公司将为Mac OS的自动化带来类似Docker的感觉。 在此之前,人们将寻找解决方法和黑客手段。 本文中介绍的Chamber概念只是一个有趣的想法,似乎适用于一些中小型项目。 但这是实验性的 。 仍然存在一些问题: 测试各种项目。 使xcodebuild在nix-shell 。 我无法使其正常运行,因此使用nix-shell来计算用于在沙箱中运行脚本的PATH 。 目前尚不清楚如何支持多个Xcode版本。 应该是Nix包装吗? 它应该是一个单独的工具吗? 我希望这是一个有趣的阅读。 如有任何疑问,请随时在Twitter上对我进行ping操作。 […]

Flutter与Codemagic的持续集成

如果您甚至对移动应用程序开发不感兴趣,那么您就会知道一个陌生的孩子– Flutter。 Google的新移动应用SDK,允许开发人员使用相同的源代码和语言编写iOS和Android应用。 随着一些最大的公司开始为其应用程序选择Flutter,Flutter的受欢迎程度正在迅速提高。 例如,世界电子商务巨头阿里巴巴。 随着越来越多的应用程序,对于Flutter应用程序的持续集成和持续交付(CI / CD)需求也越来越大,以便可以对其进行定期测试和发布。 幸运的是,Google与Nevercode合作,开发了专门针对Flutter应用程序的Codemagic CI / CD解决方案。 在本文中,我们将说明如何为您正在开发或已经开发的Flutter应用设置Codemagic。 Codemagic — Flutter的第一个CI Codemagic使您可以测试和发布Flutter应用程序,而不会出现问题且没有配置。 开发人员可以运行自定义脚本并为其应用创建自定义工作流。 开始吧! 要求 要开始使用Codemagic,您需要做一些事情: 您的Flutter应用经过了一些测试。 该应用程序应托管在GitHub,GitLab或Bitbucket上。 如果您想发布到App Store或Play商店,请进行代码签名的详细信息,例如证书和配置文件。 可选的Slack工作空间,用于发送构建报告和工件。 就这样! 如果您有上述物品,现在可以将CI / CD添加到Flutter应用程序中。 现在,让我们看一下来自实际应用程序的一些基本示例。 注册Codemagic 前往codemagic.io并使用您的GitHub,Bitbucket或GitLab帐户进行注册。 您可以使用一个Codemagic帐户连接所有这些存储库,因此可以将所有应用程序放在一个位置。 创建您的第一个版本 登录后会看到的第一件事是带有应用程序存储库的仪表板,您可以在其中过滤或搜索应用程序以找到Flutter应用程序。 现在,您可以通过单击“开始您的第一个构建”按钮开始。 默认构建工作流程 一旦开始构建,Codemagic将为Flutter项目创建工作流程。 如果需要,可以对其进行自定义以满足您的需求。 默认工作流程将通过以下步骤开始构建。 这些步骤包括准备构建机器,签出源代码,安装Flutter依赖项,运行测试,构建应用程序以及发布工件。 建立报告 构建完成后,您将能够看到所有详细信息的概述。 看起来像这样: 您还将收到包含所有这些详细信息的电子邮件。 如果您希望在Slack频道中拥有构建报告,也可以这样做。 那很容易,不是吗? 构建失败 不幸的是,并非所有构建都成功。 在这种情况下会发生什么? Codemagic提供每个步骤的非常详细的日志,无论该步骤是否通过。 在这里,我们可以看到失败的单元测试,并且所有详细信息都记录在构建失败中。 如我们所见,集成测试和小部件测试通过了,但是单元测试失败了。 您可以解决问题以修复构建。 […]

XCFit 7.0发布:XCTActivity,新的Xcode模板和多个CI服务支持

XCFit-7.0的新版本刚刚发布,具有一些新功能。 XCFit在版本6.0发行版中已经支持Xcode 9和Swift 4。 XCFit是Xcode for iOS应用程序中Xcode的面向全栈协议的BDD,使用Swift使用XCUITest。 XCFit允许我们使用诸如Give / When / Then格式的工具以人类可读的语言编写Swift的BDD样式API /合同级别,UI和验收测试。 在这篇简短的文章中,我们将看到XCFit-7.0的新功能。 此版本具有一些新功能,例如XCTActivity,新Xcode模板和持续集成服务支持。 我们将详细介绍以下新内容 XCTActivity支持 Xcode 9和XCTActivity支持的新Xcode模板 对XCFit的多个持续集成服务支持 UI测试通常是长时间运行的,并且在那里发生许多动作,例如,点击按钮,滑动等。到目前为止,XCTest报告显示了测试报告中的所有动作,这些动作不是特别可读。 活动是通过提供有意义的名称来将这些操作组织到组中的方法,因此XCTest结果将在结果中使用该活动名称以使其更具可读性。 您可以在此处阅读有关Apple官方文档的更多活动。 我们可以将活动分散到任何一组操作上,例如以干净状态启动应用程序 XCTContext.runActivity(名称:“鉴于我已经以干净状态启动了应用程序”) XCUIApplication()。launchArguments = [“ -StartFromCleanState”,“ YES”] XCUIApplication()。launch() } 当我们运行测试时,然后在测试报告中,我们将看到“鉴于我已经以干净状态启动了该应用程序”,因此更具可读性。 我们仍然可以通过扩展活动来访问基本操作。 XCTActivity现在支持XCFit预定义步骤。 现在,所有步骤都包装在XCTActivities中,以便可以读取Xcode报告。 您将在本文结尾的演示视频中看到这一点。 如果您使用过XCFit,那么您可能知道XCFit提供了Xcode模板,以开始使用Xcode中的面向协议的BDD。 可以使用Rubygem安装XCFit模板 $ gem install xcfit 如果您正在使用系统(预安装)Ruby(2.0),则可能需要使用sudo。 XCFit gem将用于为Xcode设置所有Xcode模板。 当前的Xcode模板具有Xcode组结构,如下所示 Feature.swift 该文件具有您的功能,它将所有可以作为验收测试实现的需求(测试)。 该文件包含Swift协议。 FeatureSteps.swift 该文件包含模板代码,该模板代码如何在功能协议之上使用Swift扩展实现给定功能的步骤定义。 它还提供了一些示例,这些示例在实现步骤定义时如何使用XCTActivity。 FeatureElements.swift 该文件包含与功能有关的所有XCUIElement。 […]

使用Bitrise上的构建缓存在构建之间传递工件

可以 在 Bitrise 上 使用 Cache:Push 和 Cache:Pull 步骤在 构件之间传递工件 ,如果要使用一个 构件 在 另一个构件中 生成的文件,这非常方便。 例如,在第一个构建中,您可以存档您的iOS项目并从xcarchive导出Development ipa文件,然后可以由测试人员进行测试。 测试人员完成后,无需再次存档项目,但是可以使用xcarchive (由第一个版本生成)来导出一个ipa文件供App Store分发并将其部署到App Store。 让我们看看如何做到这一点: 1,使用iOS项目的存储库在Bitrise上创建一个新项目。 Bitrise将对其进行扫描,并将生成包含primary工作流程和deploy工作流程的初始配置。 您需要使用配置为能够导出到Development和App Store类型的ipa文件的iOS应用。 此外,该项目需要已经部署(至少一次)到iTunesConnect,以便能够使用Bitrise自动进行后续部署。 format_version: ‘4’ default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git project_type: ios trigger_map: – push_branch: “*” workflow: primary – pull_request_source_branch: “*” workflow: primary workflows: deploy: steps: – activate-ssh-key@3.1.1: run_if: ‘{{getenv “SSH_RSA_PRIVATE_KEY” | ne “”}}’ […]

SwiftLint入门教程

与团队的开发人员在项目中保持代码库的一致性和可维护性有时可能会非常困难,不同的约定和样​​式,以及跨开发人员使用该语言的不同层次的经验,可能会导致应用程序在大多数情况下很难调试和对于加入团队的新开发人员而言,大多数情况很难理解。 在研究一个项目的CI时,该项目将对我的团队有帮助,并且我避免了bug并保持代码的清洁。我发现了Swiftlint,这是一种用于执行Swift样式和约定的工具,它很好地遵循了Swift准则,由Realm团队维护,开源,这意味着Swift社区会不断对其进行更新。 首先,我将逐步向您展示如何将Swiftlint集成到您的项目中,这样它将在每次构建它时运行,然后,如果您不想在计算机上下载Swiftlint,则如何使用Hound CI, 我将使用我的一个存储库向您展示,但是如果您有任何小型应用程序或小型项目可以使用它,则必须使用自己的存储库,步骤相同,因此应该可以使用。 如果您没有安装Brewlin,我将使用Brew来安装Swiftlint,您可以按照其网站上的步骤进行操作。 安装完成后,打开终端并运行 酿造安装swiftlint 安装完成后,导航到您的项目文件夹,您可以按照此处的说明将其添加到您的项目中,但让我向您展示它,复制它… 如果哪个swiftlint> / dev / null; 然后 swiftlint elseecho“警告:未安装SwiftLint,请从https://github.com/realm/SwiftLint下载” 科幻 我们将向您的Xcode项目添加一个新的“运行脚本阶段”,因此,如果您不知道如何添加脚本,则打开您的项目,选择目标并转到“构建阶段”,请检查此链接。 像这样粘贴代码段… 构建您的应用程序,您应该有很多错误和警告,主要是如果您的项目安装了Pod,所以不用担心,很酷的事情是,我们可以配置使用Swiftlint时要检查或不检查的规则,我建议继续到其仓库中的Swiftlint规则文件,并查看所有这些文件。 要配置它非常简单,您要做的就是在项目文件夹中创建一个名为…的新文档。 .swiftlint.yml 就我而言,我是这样使用终端做的…… 触摸.swiftlint.yml 打开文件… 打开.swiftlint.yml 添加您想要或不包含的内容,此处的“配置”部分提供了一个示例。 不知道您的警告是什么样子,但是在我的项目中我可以看到很多Trailing_whitespace警告,这意味着行之间不应有任何空格,警告看起来像这样:“ Trailing Whitespace Violation:行不应包含尾随空格。 (trailing_whitespace)” 我没有在代码中保留空白的乐趣,但是我确实喜欢在签名和函数主体之间保留一个空格,因此我将禁用该规则,即默认情况下启用该规则,我怎么知道? 很好,规则库中的规则文件包含您需要的所有信息,请将其复制并粘贴到新文件中以禁用该规则,并避免检查吊舱中的代码。 disabled_rules: #排除运行中的规则标识符 -Trailing_whitespace 排除: #掉毛期间要忽略的路径。 优先于“ included”。 -迦太基 -豆荚 保存并构建后,您将看到警告和错误的数量现在大大减少了。 Swiftlint的一个很棒的事情是它还可以通过在终端上运行来自动纠正某些违规行为… swiftlint自动更正 在使用自动更正功能之前,只需做一个注释,磁盘上的文件就会被更正的版本覆盖。 请注意,运行前请确保已备份这些文件,swiftlint会自动更正,否则重要数据可能会丢失。 好吧,现在,如果您希望可以运行自动更正,我做到了,并且在我的终端上,它说“完成36个文件的修正!”,现在警告的数量从250降为46,对我来说更容易一个并决定我要保留什么样的规则并重构我需要的规则; 将来,我的代码将遵循这些规则。 在第一部分中就差不多了,现在让我向您展示如何使用Hound CI自动执行代码审查。 无需本地下载Swiftlint 我将为此使用另一个项目,并且我邀请您也使用您的另一个项目。 […]

年度回顾2018:主要学习和个人成就

原始链接: 年度回顾2018:主要学习和个人成就 今天是2018年的最后一天,今年,2018年我的个人和职业生涯发生了很多惊人的事情…… shashikantjagtap.net 今天是2018年的最后一天,今年,我的个人和职业生涯发生了很多惊人的事情。 对于生命中如此美好的一年,对于2018年,我感激不尽。 去年,我写了类似的文章“我在2017年经历的十件事”自我回顾了我在2017年的工作和成就。如果您是我的博客a.ka的读者或关注者。 XCBlog,无论是在我的个人博客上还是在Medium或DZone上,您都必须对iOS工程活动充满热情,而不仅仅是在Xcode中编写功能开发代码(Swift / Objective-C)。 互联网上已经有很多Swift和iOS博客,但是XCBlog涵盖了苹果生态系统中iOS工程活动中的怪异事物,例如基础设施自动化,脚本CI / CD管道,处理代码签名,管理复杂的iOS基础设施,依赖管理等。 XCBlog一直领先于iOS自动化和DevOps空间中的新事物。 在这篇文章中,我将介绍2018年的关键学习,成就,成功,失败和福祉。 当科技行业赞赏您所做的工作,而辛勤的工作真的能带来回报时,这真的感觉很棒。 显然,这不是一个一夜之间的过程,就像一个SEO,内容/作品的真正价值逐渐显现出来。 DevOps 100通过TechBeacon 当我在TechBeacon发布的DevOps 100列表中获得一席之地时,这是我感到骄傲的时刻。 TechBeacon已发布了DevOps 100,DevOps 100名领导者,从业者和专家将在社交媒体上关注。 TechBeacon精心挑选了100名杰出作家,演讲者和领导者,他们可以教给您很多有关DevOps的知识。 主题包括通用DevOps,云,容器,无服务器,监视,系统工程等。我在通用DevOps部分中被归类为我在iOS应用程序的DevOps和CI / CD中的贡献。 您可以在此处详细阅读我的整个DevOps旅程。 FitSmallBusiness评选的2018年最佳技术影响者 对我来说,另一个值得骄傲的时刻是当它被FitSmallBusiness选为2018年度最佳技术影响者名单时。 很高兴能跻身顶尖技术影响者之列。 FitSmallBusiness凭借强大的社交媒体影响力在网络上搜寻技术影响者,并将以下2018年顶级技术影响者列表汇总在一起。他们发现列出的影响者具有与技术行业以及相关行业的杰出证书,专业知识和技能,以及数量惊人的社交媒体关注者。 2018年最大的成就是我在伦敦成立了自己的公司XCTEQ Limited。 公司的使命是在组织内部实现移动DevOps和智能测试自动化实践,并为客户提供丰富的营销内容。 我通常在周末在XCTEQ限时工作,因为我仍然想长期从事全职工作。 目前,XCTEQ为客户提供博客或白皮书等内容,但计划雇用和培训更多作者。 与XCTEQ客户端(例如Bitbar和Nevercode)合作的主要好处是,我可以提前接触到闪亮的新工具和技术。 例如,与Nevercode合作使我有机会与Flutter和Codemagic CI / CD一起用于Flutter应用程序。 同样,与Bitbar的合作使我有机会尝试使用世界上最大的AI驱动的应用程序测试解决方案(也称为AI Testbot)来使用人工智能测试移动应用程序。 您可以在此处找到有关XCTEQ产品,服务和客户的更多信息 作为一名充满激情的技术博客,我今年写了约75篇文章。 其中一些写在我的个人博客上,另一些则写给客户或雇主。 XCBlog上的60帖子(个人博客) 今年,我设法在个人博客上写了60个帖子(包括这篇文章)。 这些帖子也重新发布在Medium和DZone上,这意味着,我每个月只能在自己的个人博客上撰写5个帖子。 您可以在shashikantjagtap.net上阅读所有这些文章。 Bitbar的11个帖子(XCTEQ客户端) Bitbar博客上有11个帖子,这些帖子包括XCUITest 101系列以及其他一些针对移动应用程序的基于AI的测试技术。 […]