在IOS-8模拟器上,XCTest在应用程序激活之前运行

时间:2016-01-21 18:44:16

标签: ios

我观察到在IOS-8模拟器上,XCTest在应用程序获取调用“applicationDidBecomeActive”之前运行。我也通过检查applicationState来确认这一点。但是,在IOS-9中,XCTests在应用程序被激活后运行,这是这是IOS-8上的一个错误,还是我可以做一些设置来控制何时应该运行XCTest?

1 个答案:

答案 0 :(得分:0)

你观察到的确实是iOS 8中的一个错误(在我看来是一个主要错误)。它与XCTests无关,即使你遇到了这个问题。问题是在iOS 8中启动期间事件到达的顺序。换句话说,问题是不是应用程序尚未激活,而是消息 applicationDidBecomeActive:在iOS 8中来得太晚了。

在iOS 7及之前,事件(在应用代理和根视图控制器之间分配)按此顺序到达:

  • application:didFinishLaunchingWithOptions:
  • viewDidLoad
  • viewWillAppear:
  • applicationDidBecomeActive:
  • viewDidAppear:

但iOS 8带来了一个重大变化:在根视图控制器的界面出现并且根视图控制器已收到applicationDidBecomeActive:之后,应用委托收到viewDidAppear: ,所以iOS 8中的事件开始顺序是这样的:

  • application:didFinishLaunchingWithOptions:
  • viewDidLoad
  • viewWillAppear:
  • viewDidAppear:
  • applicationDidBecomeActive:

对于我的许多应用来说,这是一场灾难,而且它在iOS 9(与iOS 7之前和之前的版本一样)中被颠倒的事实证实了我的观点,即它是一个错误。你只需要以某种方式解决它(或放弃让你的应用程序与iOS 8兼容)。