WWDC 2018 NativeDeveloper和DevOps Tools的愿望清单

最初在XCBlog上发布在 这里

苹果公司的全球开发者大会(WWDC 2018)将于下周的2018年6月4日拉开帷幕。令人遗憾的是,我们无法访问苹果的路线图,因此看到他们向我们展示的内容总是很令人兴奋。在WWDC中,除了一些开源项目(如Swift,程序包管理器和Swift NIO)外,Apple Github存储库中也提供了这些项目。 在这个WWDC中将要进行的演讲/会话也有悬念,在会议开始之前,我们无法看到演讲的标题。

当开发人员在Apple平台上工作时,每个人都希望有一些不错的东西,以便使我们的生活变得轻松。 几乎每个人的愿望清单上都有苹果工程师希望得到的东西。 MacRumors,Macworld,AppleInsider,PC Magazine等发布了有关主要软件或硬件的愿望清单,您可以在此处找到大量收藏,但是,在这篇文章中,我将有自己的愿望清单,以介绍我​​在Continuous领域一直想要的改进集成,持续交付,测试自动化,DevOps和Apple Developer工具。 这与Swift,XCTest,XCUITest,Xcode Server,BuddyBuild,Swift Package Manager等有关。

CI / CD:Xcode服务器+ BuddyBuild

苹果公司推出了自己的称为Xcode Server的持续集成解决方案,以便开发人员可以从Xcode创建机器人,然后在macOS服务器上运行。 在其他CI服务(例如Jenkins,TeamCity,TravisCI,CircleCI)上使用Xcode Server的优缺点。 我写了详细的利弊文章,您可以在这里阅读。 但是,Xcode服务器存在一些局限性,即不能将其用于更大的团队和测试请求请求。 您可以在我之前的博客文章中了解有关Xcode服务器的十大限制的更多信息。 好消息是,苹果现在购买了基于云的CI服务BuddyBuild。 这可能解决了大多数iOS开发难题。 希望苹果不会因为BuddyBuild而杀死Xcode Server。 我的愿望清单中的一些内容来自Xcode Server和BuddyBuild一起工作的团队。

1.不要杀死Xcode服务器

由于苹果购买了新供应商来处理与CI / CD相关的任务。 苹果有可能完全停止对Xcode Server的支持,并要求用户使用BuddyBuild的解决方案。 那将是一场噩梦,公司已经投入了金钱和时间来安装Xcode Server,而切换到其他解决方案将浪费时间和金钱。 仍然可以结合使用Xcode Server和BuddyBuild的功能。 假设Xcode Server用于自托管,而BuddyBuild用于基于云的CI解决方案。

2.对自托管Xcode服务器的请求请求支持

这是大多数开发人员或公司拒绝Xcode Server的唯一原因,因为它不支持测试请求请求。 Xcode现在已经与Github紧密集成,这可以在今年的WWDC中期待

3.从Xcode服务器自动上传到TestFlight

去年在WWDC 2017上,Apple通过许多新功能增强了Xcode Server。 您可以在此处阅读更多新功能,或在Safari上观看WWDC的Safari,这些功能增加了许多功能,使iOS应用程序的持续交付变得轻松。 但是,它错过了将生成的.ipa文件上传到iTunes Connect或TestFlight的最后点。 我们今年可以期待这个功能

5,备份和清理Xcode服务器的策略

当前,Xcode Server没有清除和备份策略。 它存储了所有内容,因此工程师必须编写自定义脚本或手动备份/清理Xcode Server集成。 很高兴看到一些更好地维护Xcode Server的策略。 例如,保留X个构建版本,删除所有集成,每月删除集成等

6,主从架构可扩展性

公司或开发人员拒绝Xcode Server的另一个原因是它的可伸缩性。 没有可扩展性,运行Xcode Server的macOS机器将无法有效利用。 当前,当已经为每个项目分配了macOS服务器时,它可以很好地工作,但是,如果有多个具有多个macOS服务器的项目,我们可以扩展和利用空闲的macOS服务器。 基本上,我们需要类似Jenkins主从架构的东西。

7,BuddyBuild的免费云服务/低成本云服务

随着苹果收购BuddyBuddy,我们可以期待免费或非常低成本的云CI服务。 这将摆脱内部维护macOS服务器和DIY DevOps活动的所有痛苦。

8,不要控制持续集成

包括BuddyBuild在内的大多数基于云的CI服务都读取Xcode项目并对其进行控制,例如猜测方案,自动运行测试等。赋予工程师根据项目需要设置工作流的能力真是太棒了。

9,CI / CD的GUI和CLI选项(管道为代码)

当前,Xcode Server和BuddyBuild都提供了所有可从GUI配置的CI设置,这很棒,但同时具有从命令行配置工作流的能力也很棒。 这可以帮助在代码中编写CI / CD管道的脚本,并将所有基础结构保留为代码。

10,从CI更改Swift工具链

Xcode带有特定的Swift版本。 随着Swift的不断变化,确保应用程序和库仍可与最新版本的Swift一起使用至关重要。 当前,我们可以获得最新的Swift工具链并在不更改Xcode版本的情况下切换版本。 拥有此功能,可以轻松地从Xcode Server或BuddyBuild动态更改Xcode或Swift版本,将是很棒的

11.Parallel Integrations Xcode服务器

不知道是否可以使用多个Xcode,但这是否可以节省时间呢?

12,手动和自动代码签名

Xcode Server和BuddyBuild都对自动代码签名应用程序提供了强大的支持。 但是,最好也支持手动或自定义代码签名,以便我们可以从版本控制系统管理配置文件和证书。

13.自定义和共享报告

Xcode Server具有出色的仪表板,可显示包括代码覆盖范围在内的集成结果。 但是,我们可以根据特定项目的需求对其进行定制,这将是很棒的。

XC测试

随着XCTest框架在单元测试,UI和性能测试中越来越受欢迎,开发人员总是渴望改善开发流程。 市场上有许多XUnit类型的框架可用于其他编程语言,例如JUnit,NUnit,PHPUnit,测试单元等,XCTest仍必须达到这一水平才能与它们当前提供的功能竞争。 很高兴在今年WWDC的XCTest中看到这些功能

15.XCTest的参数支持

当前,XCTest方法不接受任何参数,这些参数限制了将数据从任何数据提供者添加到测试的能力。 很好的例子是PHPUnit测试,该测试接受来自PHPUnit文档的数组作为数据提供者。 你可以在这里阅读更多

  <?php 
使用PHPUnit \ Framework \ TestCase;
  DataTest类扩展了TestCase 
{
/ **
* @dataProvideradditionalProvider
* /
公共功能testAdd($ a,$ b,$ expected)
{
$ this-> assertEquals($ expected,$ a + $ b);
}
 公共功能additionalProvider() 
{
返回[
[0,0,0],
[0,1,1],
[1、0、1],
[1,1,3]
];
}
}
?>

尽管上面的示例是针对PHPUnit框架的,但该机制对于XCTest的单元和UI测试也将非常有用。 我们可以从任何数据提供程序(例如数组,Swift中的字典)驱动XCTests

16. XCTest的官方模拟框架

每个成熟的测试框架都支持完善的或官方的模拟框架。 当前,使用XCTests的开发人员必须手动编写所有模拟,这很痛苦。 如果有正式的可用于Swift的模拟框架轻松地模拟XCTest,那将是很好的。

17,性能测试增强

XCTest也可以用于性能测试,但是,几乎没有关于使用XCTest进行iOS应用程序性能测试的讨论。 我在这里写了一篇有关XCTest性能测试的详细文章,解释了XCTest性能测试的基础。 今年,我们可以预期XCTest的性能测试策略将有所改进,从而使iOS开发人员可以轻松地了解性能测试的有用性。

XCUI测试

Apple在WWDC 2015上宣布了Xcode的UI测试支持。UI测试被设计为完全黑盒,无需访问主应用程序代码和数据。 XCUITest使用两个独立的进程Test Runner和Target应用程序,测试运行器启动了目标应用程序,并使用UIKit内置的可访问性功能与在单独进程中运行的应用程序进行交互。 随着XCTest框架越来越流行用于iOS应用程序的UI测试。 但是,如果有以下几点可能会更好

18,在测试之间使用内置启动参数重置应用

这与XCUITest有关,当前,XCUITest批量运行时使用相同的会话。 没有干净的方法可以在两次测试之间重置应用程序状态而不更改主应用程序中的生产代码。 最好有一个本地的launchArgument在每个测试或测试类中休息一个应用程序。

19,更多的原生启动参数

Apple已经为国际化和本地化设置了一些默认的启动参数和环境,但是,最好为时区和其他常规设置添加参数。

20.支持打开深层链接URL

当前,无法从XCUITests打开通用链接或深层链接。 我们必须使用使用其他应用程序(例如iMessage或Notes)的方法来自动执行此过程。 支持在应用程序中打开深层链接并在屏幕上声明UI元素将是一件很不错的事情。

21.修复可访问性错误

当前,XCUITest中存在一个奇怪的错误,即如果将超级视图设置为可访问,则XCUITest可能无法访问其子视图。 为了XCUITest,这迫使开发人员禁用某些UI元素的可访问性。 希望这也应该作为Xcode 10或Xcode X的一部分修复

xcodebuild

从Xcode 8开始,xcodebuild具有许多新功能。 现在,我们还有更多选项可以传递给构建动态化。 我希望今年有几件事

  • 新的SWIFT构建系统的其他参数打开和关闭
  • 根据用户要求显示模拟器的选项。 当前,从命令行运行时,所有XCUITest都会无情地运行
  • 改进目标选项以进行并行测试,而无需重复模拟器名称或ID

SIMCTL

使用xcrun simctl实用程序控制iOS模拟器变得如此容易。 我们可以使用该实用程序将模拟器设置为几乎任何状态,并包含任何数据。 但是,我今年希望看到一些缺失的地方

  • 启动模拟器时可以使用simctl旋转或设置方向。
  • 能够设置模拟器的位置以支持国际测试
  • 禁用动画的能力,因为某些应用程序在后台运行动画,但是XCUITest在后台运行动画时无法运行。

迅捷软件包管理器

苹果已经宣布了这个快速的软件包管理器,它正在Github上公开开发。 但是,Swift软件包管理器目前不支持iOS。 我们可以清楚地看到Github上的开发,它尚未准备好用于iOS应用程序,但是一些内部Apple魔术可以为我们提供有关此的好消息。 这是我们可以从Swift Package Manager期待的唯一大事情。 这将有助于从iOS工具箱中删除CocoaPods或Carthage之类的工具。

结论

这是一个很长的愿望清单,并且有望得到WWDC的更多关注,但是该节目将在下周开始。 让我们拭目以待,看看苹果工程师为我们带来了什么。 在WWDC之后,我将写另一篇文章,总结苹果从这个大愿望清单中提供的东西。 敬请关注!

像XCBlog的 XCTEQ 发布的帖子一样 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 Github 搜索我们的 服务 ,开源项目, 或者在 Twitter Facebook Youtube LinkedIn 上关注我们 下载我们的 XCBlog iOS应用程序以离线阅读博客。

X CTEQ 一家专门从事基于Mobile DevOps,CI / CD,Mobile,AI / ML的测试自动化Checkout XCTEQ产品和服务的公司, 网址 http://www.xcteq.co.uk 或写信给我们info@xcteq.co。英国..