移动技术主管(iOS)-实施卫生心态

您是否觉得所有项目都应该使开发人员可以轻松地开始工作,而不是在“哦,在运行代码之前,请先执行此工作清单”和“我们应如何管理依赖项”上进行相同的讨论? 这是我较早的文章的第2部分,描述了为获得平稳的工作经验而必须培养的卫生意识。

这篇文章详细介绍了较早的文章,并提供了实际实施“卫生观念”各部分的示例。 此实现基于一个大型iOS应用程序项目,在该项目中我们还拥有一个Android App,因此选择了一些解决方案,以便也可以扩展到Android世界。 使用曲棍球而不是纯TestFlight。 它还假定要支持CI管道。

实作

首先成为一个富有同情心的文明成人-遵循以下简单方法可以

利益相关者确定优先级—敏捷原则或瀑布

  • 敏捷价值观(4)和原则(12)通过在业务利益相关者和开发人员之间建立协作与信任,通过及早且频繁地交付工作软件来确保专注于客户满意度
  • 我们发现Scrum简洁明了,易于解释。 练习它需要纪律。
  • 瀑布可能在服务或维护项目中很有用,也许对位于不同位置和时区的团队而言

开发人员具有大屏幕-iMac屏幕或4K大屏幕

开发人员拥有IDE

  • Xcode(Dev机器上AppStore的最新稳定版本)
  • AppCode(需要许可证)

使用的版本控制系统

  • Git还因为Xcode附带
  • 许可的GUI工具(如GitUp,Tower),因为我们喜欢成为可视化的人
  • Github Enterprise,它灌输了代码管理的良好实践

第三方经理的依赖管理器到位

  • Cocoapods或Carthage,因此对我们的依赖项已被锁定和神奇地管理🙂
  • Gemfile定义您对fastlane,Cocoapods和其他gem的依赖。 捆绑器使用。

确定要使用的包管理器

  • Homebrew-用于在macOS机器上安装软件包
  • Bundler —是一种Ruby宝石,允许您将所有项目的宝石及其版本打包在一个名为Gemfile的文件中。 `bundler`用于打包`gem`依赖,例如`fastlane`和`cocoapods`。

用于项目的Mac Environment设置应该是可发现的并且是自动化的

  • 项目存储库具有引导脚本,用于安装常用的工具链(较小的引导程序)
  • 在Mac上使用密钥进行git设置以进行版本管理
  • 系统软件包管理器(自制软件)
  • Ruby程序包管理器(Bundler)
  • Ruby版本管理器(rbenv)
  • Ruby安装程序(ruby构建)
  • 最新稳定版本的Ruby或使用rbenv安装项目所需的Ruby版本
  • JavaScript软件包管理器(NPM)

在签出和引导过程之后,Devs&CI应该能够直接在Xcode中构建和运行代码

  • 查看所有Pod来源
  • 检入gitignore或gitmodules(对于子模块)
  • 检入供应商/捆绑软件和供应商/缓存中是否有安装在特定版本的ruby上的gem,以便CI在干净签出后触发“ bundle install local”,并使用用于开发的gem,而不必检查

真相的单一来源-如果Android和iOS应用程序位于同一存储库中,则在存储库中包含配置和内容可确保

  • 一个发行分支就足够了,而不必在每个共享存储库中都创建一个,这使得更容易通过一个发行分支来更新CI上的构建计划。
  • 如果这些公共存储库包含在子模块中,则无需在项目中进行子模块管理

使构建更快

  • 将功能分解为独立的模块,然后将其整合为框架。 Xcode不会一次重新编译框架构建并且不会更改,因此在大型项目中这会加快构建时间。 但是,请注意,有时您可能需要通过清理派生数据和构建项目来强制进行构建,以防在切换分支时看到预期行为与实际行为之间的差异

简化模拟

  • 模拟服务器— Node JS,Express。 模拟服务器托管一个快速实例,该实例将应用程序请求的URL映射到您可以创建的响应。
  • 启动和停止服务器的脚本很方便
  • 如果需要触发特定的数据流,则可以播种到特定的方案文件夹

使Web服务API测试成为应用外体验

  • 用JS,Mocha,Express,Node JS编写的Web服务api测试

使测试直观

  • 设置Xcode记录方案的覆盖率报告
  • 知道Xcode在测试覆盖率以及单元和UI测试报告中的位置
  • Xcov报告工作正常(可以通过fastlane使用)。 与Jenkins / Bamboo共享Xcode报告,以图表形式显示:Slather报告,将Xcode单元测试plist报告转换为Junit XML。 但是,一旦沿着这条路走,它的坡度就会变滑,因为不同的配置项需要不同的格式,例如竹子需要三叶草格式

记录中

  • 网络响应-记录的请求和响应应该屏蔽了用户数据
  • Alpha版本-(通常是内部应用程序用户的Hockey / TestFlight版本)-可以打开完整日志记录
  • 使用Apple API进行日志记录,该日志将登录到NSLogger或控制台。
  • New Relic-显示用户访问的屏幕的面包屑,崩溃报告(甚至为未选择加入的用户显示崩溃报告),其他自定义报告,这些报告可帮助基于自定义标签提供指标
  • iTunes Connect —针对仅选择加入的用户的崩溃报告,针对每种设备类型和操作系统的切片报告

知识-要以上述方式实施,开发人员将扮演开发人员的角色,因此需要iOS以外的以下领域的知识,这绝非易事

  • 敏捷(混乱)
  • 自制酒,Bundler
  • 椰子足,迦太基
  • 快车道
  • 红宝石
  • 文件类型:三叶草,cubertina,junit xml
  • 宝石
  • Git:子模块
  • Java脚本,摩卡,Express,Node JS
  • 曲棍球/ TestFlight
  • NSLogger /新文物/ iTunes Connect

为您带来的收益:

当一个项目开始时,您可能看不到这里的所有需求。 享受这次! 但是,随着它增长到中等大小,成千上万的代码行,并且您的团队开始招聘,您希望能够设置开发环境并安装代码并继续使用功能,而不是尝试调试设置失败的原因。 您需要启动自动化的Dev Ops。 使用此清单作为清单,可以帮助您确定到达目的地的方向。

促销:

你可以阅读我的其他文章

移动技术主管(iOS)-卫生

移动技术主管(iOS)-体系结构

敏捷手段? -我真正学到的意味着

功能标记不是银弹