Tag: 持续集成

Travis与iOS应用程序的持续集成

持续集成(CI)是一种软件工程实践,可自动构建和测试触发器,例如代码提交或提取请求。 通常,测试和部署花费了开发时间的很大一部分,尤其是当组织遵循较小的发布周期时。 持续集成使该过程自动进行! 设置持续集成涉及运行构建服务器,构建代理和大量配置设置。 您将负责维护构建服务器和构建代理。 如果很乏味,我们可以提供Travis ,它是CI的托管服务。 1. Travis仅适用于Github上的项目,免费适用于开源应用 2.它在专用虚拟机上运行。 因此,Travis会为您维护构建代理和构建服务器 3.它与GitHub无缝集成,并且易于配置。 注册Travis Travis通过Github Webhooks和服务进行通信。 前往travis网站并使用Gi​​thub进行注册。 您所有的Github公共项目都将同步,并显示在您的个人资料页面中。 默认情况下,所有项目都禁用Travis。 启用需要Travis集成的项目。 现在您可以看到Travis已添加到Github项目设置的Installed app部分。 推送提交或为项目创建请求请求,然后导航到Travis中的项目页面。 您将看到构建失败。 现在该让Travis知道这是一个iOS项目,并设置其他必需的配置。 设置.travis.yml Travis根据编程语言提供了默认的构建环境和默认的构建步骤。 但是,对于iOS,它使用Facebook的xctool,该工具无法与最新的Xcode版本很好地配合使用。 Travis使用.travis.yml来了解您的项目和构建步骤。 导航到项目的根目录,并使用基本配置创建.travis.yml vi .travis.yml 指定语言,osx_image和xcodebuild命令 语言:迅捷 osx_image:xcode9.3 脚本:xcodebuild构建 -sdk iphonesimulator -project SplitBill.xcodeproj 方案SplitBill -安静 CODE_SIGNING_REQUIRED =否 在终端中独立测试脚本以确保其正常运行。 使用xcodebuild -showsdks指定特定的SDK 使用xcodebuild -list来 找到方案和目标名称 注意x对于osx_image中的’xcode9.3’是小写 在Travis中触发构建! 繁荣! 您的构建成功。 运行测试 要运行测试用例,请在“测试”下为您的架构添加测试目标 […]

Jenkins for iOS版本

Jenkins是一个用Java编写的开源自动化服务器,旨在使开发人员发现自己重复的某些任务自动化。 Jenkins支持多个插件,使您可以使用许多第三方服务。 最好的事情是,如果找不到或使用插件,则只能受自己的脚本编写能力的限制,因为它能够运行任意的Shell脚本。 安装: 以下是在系统上安装Jenkins的先决条件,您的系统应具有: Homebrew是一个免费的开源软件包管理系统,可简化在Apple macOS操作系统上安装软件的过程。 爪哇 要安装brew运行以下命令: ruby -e“ $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 有时它会拒绝访问,然后执行以下两个命令,然后执行上述命令: sudo chown -R“ $ USER”:admin / usr / local sudo chown -R“ $ USER”:admin /库/缓存/自制 要安装Jenkins: 酿造安装詹金斯 如果您的系统上未安装Java,请运行以下命令来安装Java: brew cask安装java 要安装Jenkins: 酿造安装詹金斯 ln -sfv /usr/local/opt/jenkins/*.plist〜/ Library / LaunchAgents launchctl加载〜/ Library / LaunchAgents / homebrew.mxcl.jenkins.plist 要启动Jenkins,请运行以下命令: 詹金斯 它将启动Jenkins并生成密码。 设定: 转到http:// localhost:8080,输入生成的密码。 […]

Buildkite和Fastlane-iOS开发人员改善睡眠的关键

在开始构建Tink应用程序的Swift版本之前,我们没有这些限制。 大多数开发人员在开始新项目时,都有他们想要实现的抱负和目标。 干净的代码。 没有警告。 良好的测试覆盖率。 主分支应始终建立。 我们实现这一目标的一种方法是建立一个持续集成和持续交付系统。 在开始对此进行讨论时,我们研究了可以使用的选项。 我们通常找到两个选项-托管和自托管解决方案。 借助托管服务(例如Circle,Bitrise),我们发现我们不得不移交对GitHub存储库的过多访问权限。 由于我们的应用程序可以处理数十万客户的财务数据,因此安全性至关重要,我们宁愿不这样做。 在阅读我们的工程博客时,您可能会注意到,我们在安全性方面非常重要。 这是我们和我们客户的财务风险。 我们选择使用自托管解决方案。 Tink的其他团队已经将Buildkite用于其CI / CD需求,因此,很显然,从长远来看,使用相同的系统对我们也将有所帮助。 建立,使用和修复可能发生的任何问题的知识已经在建筑物中了。 我们只需要点击它。 建筑风筝 我们在办公室中发现了一个旧的15英寸MacBook Pro,它的机身凹陷,视频卡出现故障以及古老的规格。它很快成为我们的第一台构建机器。当我们将笔记本电脑升级到新的USB-C MacBook Pro时,第二台旧的MacBook Pro成为了也可用-我们的第二个构建机器。 设置我们的构建机器非常容易,只需九步。 这些处理使我们的构建在机器上运行的设置过程。 我们还有其他设置机器的步骤,例如设置File Vault,在此不再赘述。 我们的服务器机房目前容纳我们的两台构建机器。 重要的是Trigger a build on all the lanes on the new build machine.突出显示“ Trigger a build on all the lanes on the new build machine. 这样,build文件夹是由Buildkite创建的,我们可以将带有秘密的keys文件复制到其中。

保护您在Bitrise上的秘密

保持您的秘密env vars对于所有永恒的 事物 以及属于某些应用程序的文件受到保护,以防止从 Bitrise 下载 。 从现在开始,属于您的应用程序的秘密环境变量不会默认显示,只会显示它们的列表和键(它们的名称),直到您将其设置为其他值为止。 我们还为您应用的“秘密”和“代码签名”标签添加了一项新功能:名为“受保护”的切换按钮。 这样,您就可以使您的秘密无法泄露,并且代码签名证书也无法下载。 您应将此功能用于要保密的秘密。 😎这可能是您不希望其他团队成员看到的密码,即使他们有权访问“秘密”选项卡也是如此。 或者,CTO可以设置一个API密钥并锁定它,以便开发人员无法看到或编辑它,但是构建仍可以使用它。 您可以在“秘密”标签下将新的秘密添加到您的应用中。 保存它们并刷新页面后,将出现星号而不是值。 (直到现在,这些值始终始终在此处打印。)这些值仅在单击眼睛时才会发送到前端,如果将其设置为保护状态,则仅会发送到构建计算机。 秘密密钥(及其值)不能更改,只能删除。 我们添加了一个交叉的眼睛图标,它将显示秘密并显示其价值。 下拉菜单(…)下提供了另一个新功能:您可以Make it protected 。 如果将环境变量设置为受保护,则将无法再看到该值,实际上,没有人可以再看到它,删除该值是唯一的选择。 如果单击该按钮,则会出现一个弹出窗口,警告您该操作是不可逆的。 请注意,您必须保存页面才能使环境变量受保护。 受保护的环境变量用锁指示。 “代码签名”选项卡上提供了类似的选项。 对于此处上传的所有文件,您会在下拉菜单(…)下找到“ Make protected ”: 然后出现警告,从您单击按钮的那一刻起这是不可逆的,不需要保存。 使文件受保护意味着您不能下载它,而只能删除它。 和 快乐保密! 🤐 最初发布在 Bitrise博客上 。

持续集成e Delivery com Jenkins + Fastlane

普遍存在的iOS,CI,Porémquaissãoos reaisbenefícios等极端问题,以及所有不动产的使用情况。 取消时间限制后,您将收到一份详细的表述,并注明时间。 议程 o持续集成e持续交付无关联性的重要内容。 安装快速通道 证明工作单位 建造辅助睾丸的工作 在AppStore上上传作业 Oéé持续集成(CI) Quantas否决了2个合并的违约情况,trabalhando em分支,separados的问题,a que que bra decódigo的问题,acho queééumum否环境的desenvolvimento com pois es desémésrés, ques nossocódigoestásemperestávele atualizado a mesmo tempo? 继续阅读完整内容的方法。 集成商(Ela Consemble em)提交了一份完整的声明,并在一份完整的声明中对您的担保书进行了说明。 示例,解散的A trabalha em uma特征,separada,解构的量化的B acaba de fazer o合并de sua特征Recémentrega。 Nosso sistema de持续集成,A证明书,A证明书和Mantida证明书的完整集成(Testes de UI por exemplo)。 Assim podemos identities erros deintegraçãoe pequenos bugs mais […]

#1即时发布

作为iOS开发人员,您需要持续交付的3个原因 持续交付是iOS开发人员一直在寻求的解决方案,可帮助他们自动化重复执行的持续发布管理工作,也就是说,将其应用程序从Xcode移交给测试人员和用户。 尽管在功能和错误开发方面花了很多时间,但许多iOS开发人员仍继续手动构建并发布iOS应用更新到其测试人员和应用商店。 他们的发布管理策略包括在Xcode上构建并导出一个ipa,以在TestFlight上与他们的测试人员一起验证其最新版本,手动摸索其配置文件和证书,并且不得不定期处理繁琐的推送到App Store的繁琐工作,这很浪费宝贵的时间,并且在大多数情况下,可能会将人为错误引入到任务中。 这就是持续交付拯救移动开发人员的地方。 作为iOS开发人员,您需要持续交付的三个原因如下: 通过专注于他们最擅长的事情,开发人员将更少的时间花在摆弄Xcode,iTunes Connect和Developer Portal上,以处理预配置文件,证书以及准备和分发您的应用程序所伴随的所有怪癖前往TestFlight和App Store。 您可以不必依赖产品经理来更新应用程序,而可以依靠连续交付来使流程自动化,这样您就可以定期进行每日TestFlight内部分发,或者利用诸如Jenkins CI的持续集成平台,可以根据合并到存储库中的新代码来分发新的iOS应用。 从Xcode到iPhone,这可能是一个非常繁琐的过程,并且允许自动化系统按逻辑顺序执行这些任务,您的产品经理感到高兴,您的客户也很高兴能立即期待您的应用程序有全新的构建。 无论其他更改的大小和范围如何,Facebook都会定期向App Store发行版本,无论更改的大小和范围是每周还是每隔一周,这都是很重要的,因为它调整了客户的期望,可以征求即时响应 。 产品所有者可以验证功能的唯一方法是实际使用该应用程序。 将您的应用众包到Beta测试人员可以进一步验证概念和想法,还可以捕获由于您离项目太近而可能未发现的模糊错误。 持续交付可确保您的产品所有者,Beta测试人员和实际用户获得定期的定期更新,而无需开发人员每次都手动发布该应用程序,从而在应用程序中修复或功能重新开发方面具有即时响应能力。 持续集成的相同方式使开发人员可以立即对代码错误做出反应。 在过去的五年左右的时间里,当代的开发实践已朝着连续性方向发展,使团队具备了连续测试代码的能力。 在新兴企业需要即时反馈的市场中, 持续集成已进入确保新代码推送不会破坏现有功能的阶段。 在微观层面上,开发人员还一直追求连续测试的口号,将其作为测试驱动开发的一部分,这使每个开发人员都有责任确保代码在通过一系列测试用例和套件之前无法通过。 能够通过更短的周转时间快速解决问题,获得用户的反馈,从而降低了发行周期较长时通常预期的风险。 必须依靠带有大量更改的大版本发布仪式,这意味着您将把开发时间和精力投入到未经验证的计划中,实际上,您可能会通过无法控制的代码更改记录和更广泛的代码覆盖范围掩盖技术上的债务和问题。 较短的迭代次数等于较低的风险周期。 Doron Katz是《 使用Fastlane进行移动持续交付 》一书的作者,这是 您学习从代码签名,持续测试,构建,部署和发布应用程序的持续部署和自动化的精典指南 。

iOS版Travis CI

最近,我想为我的应用程序实现持续集成。 我想很多人和我偶然发现了Travis CI上的objc.io文章。 不幸的是,这篇文章已经过时了,它是从2013年11月开始的。 同时,自从撰写本文以来,Facebook的xctool项目中一直在讨论xctool是否要支持Xcode8。但是,我们已经在Xcode 9上了。与此同时,已经发生了很多变化,文章已过时。 我个人认为objc.io应该不时测试他们的文章,或者至少要提到所使用的技术无效或无法正常工作。 由于他们没有更新他们的文章,我觉得我应该发布更新。 因此,基本上改变的是xctool has some new commands, for example test has been replaced by run-tests 。 此外, xctool不再构建您的项目,我们必须退回到xcodebuild , xcbuild或Buck(Facebook的新项目)。 假设您知道如何使用GitHub帐户将项目链接到Travis CI,我将主要讨论.travis.yml文件。 我只强调了.travis.yml文件的一些区别。 您仍然需要在objc.io文章中添加仍然正确的其他元素。 如您所见,存在一些差异。 例如:(1)我们可以安全地将语言设置为Swift,如今,(2)应该仍然可以正常工作,但是我仍然更喜欢使用xctool 。 (3)完全是错误的, 这不再起作用 。 (4)这就是正确调用xctool ! 使用xcodebuild或您喜欢并且可能已经使用的任何其他构建系统来构建工作区。 然后使用xctool运行测试。 在第14行的摘要中,如果您将-scheme TravisExampleTests更改为-scheme TravisExampleTests ,则还可以免费运行UI测试。 这需要其他配置,因为以这种方式运行将导致断言失败: NSInternalInconsistencyException, “No target application path specified via test configuration” 。 […]

单元测试中的存根网络调用

确保您知道您的回应 几年前,我被要求支持公司的其他分支机构。 他们的iOS开发人员很快就离开了,他正在开发的应用程序即将完成。 我去那儿修复了大约10个错误……它以50多个问题结束,但是我们都知道,这在开发过程中很正常。 尤其是当您有一位对利润非常挑剔的出色设计师时。 无论如何..我到了那里,想测试一些网络代码。 我以为我既年轻又年轻(大约一年前才开始使用Kiwi),所以我可以使用这些方法,然后继续前进。 我的一个同事不太喜欢这个主意。 她建议使用当前存在的依赖项,而不要引入新的依赖项(在此期间,我们使用的是XCTest,而不是Kiwi)。 那么她的解决方案是什么? 她已经在使用KIF,并且针对后端运行UI测试并不好玩。 而是使用OHHTTPStubs。 使用此库,您可以拦截网络请求并返回所需的任何内容。 我的猜测是,它在NSURL上使用方法刷新进行拦截,但是如果有库,为什么要自己做。 如何使用 编写拦截器非常容易。 只需指定要拦截的主机和路径并返回响应即可。 我倾向于在包含我的拦截器的OHHTTPStubs上使用类方法创建扩展。 响应是您的JSON对象。 根据要返回的内容,您可以使用库提供的初始化程序。 我还创建了一个匹配器,以便于检查是否调用了正确的网址。 OHHTTPStubs提供了一些,但是有时您必须编写自己的。 这是通过创建OHHTTPStubsTestBlock来完成的。 这是一个闭包,将在其中传递一个RequestObject并返回一个Bool。 与往常一样,要设置我们的套件,我们可以使用beforeEach或beforeSuite。 只是不要忘记事后清理! 所以请不要忘记: OHHTTPStubs.removeAllStubs() 结论 我喜欢这个图书馆。 这是您进行单元测试所需的全部。 几个月前,我向团队介绍了它,从那时起,我们的网络测试就针对OHHTTPStubs进行了。 使用OHHTTPStubs使我们能够测试整个应用程序,而不必在生产系统中引入任何测试代码。 这样,我们可以确定,只要后端api不变,我们的应用程序就会按照我们期望的方式运行。 下一步:TDD向后 上一篇:测试苹果MVC

自动将您的iOS代码签名文件上传到Bitrise

我们刚刚推出了Codesigndoc的更新,如果您使用它,您一定会感激的:我们添加了一个选项,用于将配置文件和证书上传到 Bitrise 。 到目前为止,我们仅导出了属于某个项目的配置文件和证书,但是您必须手动上传它们。 从现在开始,您也可以使用Codesigndoc上载它们,因此在导出后,我们会询问您是否要将导出的文件上载到Bitrise,从而为您节省了麻烦并简化了iOS代码签名。 在上传任何内容之前,该步骤将检查您要上传的文件是否已经上传以避免重复。 这意味着您不必记住已上传的文件。 💭 该功能使用Bitrise API(在此处了解更多信息),该API利用访问令牌对用户进行身份验证。 要为您的用户获取个人访问令牌,请在bitrise.io上与该用户登录,转到“帐户设置”页面,然后选择左侧的“安全性”选项卡。 向用户请求访问令牌(请参见上文)。 应用程序列表将从Bitrise下载。 您可以选择要为其上传导出文件的应用程序。 检查服务器上的重复项。 上载新的配置文件和证书。 我们希望您会喜欢Codesigndoc的新增功能! 建设愉快! 最初发布在 Bitrise博客上 。

Swift —测试驱动开发(TDD)

本文是同时介绍TDD和多个CI概念的指南的一部分。 您可以在 此处 查看介绍性文章 。 代码测试是开发中至关重要的部分,以确保您编写的代码既可以执行预期的工作,又可以确保将来的更改不会破坏过去的工作(眨眼眨眼的持续集成)。 TDD,即测试驱动开发,它不仅是一个时髦的词,而且是一种非常有趣且易于使用的开发方法。 有了它,您应该首先编写测试,然后再编写使它们通过的代码: 编写测试(该测试将失败,因为您还没有代码!) 编写最少的代码以使测试通过 进一步增强您刚才编写的代码的测试 重构代码以使新测试通过 在添加测试和重构代码之间进行迭代,直到达到所需的功能和代码质量为止。 为了向自己介绍TDD方法,我遵循了Yvette Cook的TDD指南,因此您应该很清楚地解释该概念,并逐步指导您实施示例项目。 有几个吊舱可以使测试过程更加简化并简化编写测试的任务。 他们是: 快 敏捷 因此,接下来,我将展示您可以对它们进行哪些使用: 将两个Pod导入到项目中: 2.从以下位置更改标题: 至 3.代码在spec()函数中运行: 4.用beforeEach块替换setUp()块: 5.使用Nimble,我们可以使用更易于阅读的方法编写测试。 例如: 变成: Nimble不仅易于编写,而且还赋予您更多表达结果的自由,并且还建立在其他XCTAssert功能的基础上(例如,在测试网络请求时,指定异步期望非常简单)。 请查看Nimble的文档以获取更多信息。 您可以在下面找到进一步的比较: 而旧的(如果失败的话)将不会显示文本错误消息(除非我们指定自定义消息,例如XCTAssert(1 == 2, “your custom error message here”) ,它会采用Nimble方法,它将自动使用在it(“message”)标头中指定的描述。 通过使用这些Pod,我认为我的测试不仅易于编写,而且最终也易于阅读(因此,将来可以根据需要进行更新)。 我打算在我现在开始使用的另外两个Pod上写一篇单独的文章,使您可以用更少的代码以不同的方式测试UI🙂现在,您可以检查他们的github页面: 敏捷快照 KIF 确立了测试的重要性之后,接下来的系列文章现在将重点介绍CI方法:它的重要性以及如何在XCode,Swift项目中将其付诸实践。 在这里检查。