我目前在测试 iOS 12 模拟器时遇到了一个非常奇怪的问题,我真的不知道如何尝试解决它。
我会尽力在这里解释,但我不完全理解发生了什么,如果这没有多大意义,请原谅我!
我有一个 Xcode 工作区,其中包含几个单独的项目,每个项目都包含一些功能测试。
该工作区还连接到 Bitrise,以便在打开合并请求时运行测试。
在我将所有项目和目标升级到 Swift 4.2 之前,一切都运行良好。升级本身顺利进行,应用程序委托中只有 1 个小更改以及项目文件中的设置,所以我很确定迁移中没有任何问题导致问题。
以前,所有测试都可以在本地模拟器和 Bitrise 上运行并顺利通过。
现在,在这次迁移之后,Bitrise 上的 2 个测试都失败了,而且每次都是一样的两个。
经过一番尝试,我设法在本地进行了复制,发现如果仅在 iOS 12 模拟器初始启动上运行,这些测试将在本地失败。
如果我第一次在新的 iOS 11.4 模拟器上进行测试,测试全部通过。
如果我第一次在新的 iOS 12 模拟器上测试,这两个测试都失败了。
如果我随后关闭 iOS 12 模拟器并再次对其进行测试,则两个测试之一将失败。
它似乎与全新的模拟器启动有关,这一事实解释了 Bitrise 失败的原因,因为我想象它在新的环境中运行,每次构建都有新的模拟器(尽管也许我会幸运地在某个时候运行在一台机器上已经运行了 iOS 12 模拟器,所以一切都可以正常工作?!)。
测试本身与区域监控有关。我有一个模拟位置管理器,它在发送区域的监视请求时将区域附加到数组中,并在发送停止监视的请求时将其删除。
失败的测试是 的一部分testStopScanningRemovesMonitoredRegions
,所以我添加了几个区域进行监控,然后逐个删除它们,确保监控区域的数量减少。
添加两个区域的断言通过。
每次删除后的断言都会失败。
我正在测试我创建的中间人对象是否正确请求这些启动/停止监视事件,而不是CLLocationManager
它本身。
我希望这有一定的意义,如果有点漫无边际,我很抱歉;我只是想包括所有相关信息!