从零到英雄:ImmobilienScout24 II上本地应用程序开发的故事

由Mohamed Iyad Tamer Agha撰写

技术

多年来,iOS应用程序的开发中使用了许多技术。 与2011年的标准一样,使用Objective-C作为编程语言。2014年底,Apple引入了一种用于开发iOS / OS X应用程序的新编程语言,称为Swift。

Swift是一种强大而直观的编程语言,它使应用程序的编程变得更加轻松和安全。 而且,Swift是开源的,它使每个开发人员都可以查看Swift的源代码并参与其开发。 为了从Swift的优势中受益,我们ImmobilienScout24于2015年春季开始使用它来编写我们的iOS应用程序的一部分。

团队使用的其他技术是:

  • Xcode和appCode作为开发环境(IDE)
  • git与github和gitlab进行版本控制
  • XCTest和OCMock用于单元测试
  • KIF和EarlGrey用于UI测试
  • HockeyApp用于崩溃监控和Beta测试应用程序分发
  • NewRelic用于应用程序监视

除了这些技术措施外,我们还在日常工作中采用了许多质量改进措施。

技术措施:自动测试

编写自动测试软件部分的测试已成为生产软件时的行业标准。 不同种类的测试之间有区别。 ImmobilienScout24应用程序的开发过程中使用了三种测试。

单元测试:单元测试用于测试软件的最小可能组件(单元)。 更具体地说,这意味着项目中的每个Objective-C或Swift类都有一个测试功能准确性的单元测试类。 可以使用某些工具来衡量整个项目的测试范围。 拥有2,000多个单元测试,我们项目的测试覆盖率超过80%。 单元测试的另一个方面是所谓的“测试驱动开发”,简称TDD,其中测试是在实际软件组件之前编写的。 然后,以符合测试要求的方式实施软件组件。 在我们的团队中,每个人都知道单元测试非常重要,但是由每个开发人员来决定是在软件组件之前还是之后编写测试。

快照测试:快照测试是一种集成测试,其中保存了应用程序每个屏幕的屏幕快照,并且每次测试运行都用于检查屏幕显示是否有所更改。 因此,在更改程序代码时,可以快速识别应用程序中的显示错误。 使用Facebook开源框架来实现这种测试。

UI测试:在UI测试期间,将自动启动并单击该应用程序,以检查该应用程序中各个屏幕的交互和整体导航是否符合预期。 由于此类测试的可操作性取决于许多变量,因此是一个真正的挑战,多年来,我们尝试了各种工具和框架,以确保此测试的稳定性。 我们目前正在评估一个名为EarlGrey的新Google框架。

持续整合系统

流畅,高效的软件开发过程需要使用持续集成系统(简称CI)。 CI的任务是为每个git commit构建整个软件并执行所有自动化测试。 如果没有错误,将创建该应用程序的版本。 否则,将通知开发人员,以便可以快速修复该错误。
对于我们的应用程序,我们使用Team City作为CI系统。 我们选择Team City是因为它已经成为ImmobilienScout24的标准配置,并提供了我们工作所需的所有功能。 其他CI系统(例如免费的Jenkins)也可以完成这项工作。

应用分析

Apple的Xcode提供了一个有用的工具,称为Instruments,用于分析应用程序的行为。 使用Instruments可以衡量的关键功能之一是应用程序的内存使用情况。 内存是有限资源,应谨慎使用,尤其是在智能手机上。 iPhone的操作系统可能会很快迫使浪费内存的应用程序关闭。 因此,在发布应用程序版本之前,我们曾使用Instruments进行了内存分析。 这项分析有助于确定我们应用程序中需要在内存使用方面进行改进的部分。

崩溃监控

尽管我们尽了最大努力,但几乎不可能实现100%无错误的软件。 崩溃监控系统允许在生产过程中监控应用崩溃。 每次应用崩溃时,它都会登录到系统中,以便开发人员可以在下一版本中修复该错误。 我们最初使用一个名为HockeyApp的平台来监视应用程序崩溃。 ImmobilienScout24现在使用New Relic,它不仅可以记录应用程序崩溃,而且还可以记录应用程序崩溃,例如,还提供了有关该应用程序的其他有用信息,例如应用程序的响应时间和网络的错误率。