Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why in iOS 11, my UIApplicationState show as inactive state instead of active?

I have updated to latest xcode - 9 and iOS 11, now I am facing issue in UIApplicationState. Can anyone tell me why apple have done this changes in ApplicationState.

For instance: During viewController viewWillAppear, I am checking UIApplicationState:

     UIApplicationState applicationState = [UIApplication sharedApplication].applicationState;
        if (applicationState == UIApplicationStateActive)
        {
        }

But I am getting applicationState = UIApplicationStateInactive.

Or do I need to handle separately for iOS 11 version by extra codes:

  if (applicationState == UIApplicationStateActive || (@available(iOS 11, *) && applicationState == UIApplicationStateInactive)){
}

Any other answers to maintain application state consistently throughout all versions?

Thanks in advance,

like image 745
Abilash Balasubramanian Avatar asked Sep 25 '17 13:09

Abilash Balasubramanian


1 Answers

** UPDATED ANSWER **

I used the following code to test states on both an iOS 10 and iOS 11 device.

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        print("\(#function) active: \(UIApplication.shared.applicationState == .active)")
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("\(#function) active: \(UIApplication.shared.applicationState == .active)")
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("\(#function) active: \(UIApplication.shared.applicationState == .active)")

        DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
            print("\(#function) with delay active: \(UIApplication.shared.applicationState == .active)")
        }
    }
}

When running on iOS 10:

viewDidLoad() active: false
viewWillAppear active: false
viewDidAppear active: true // This differs from 11
viewDidAppear with delay active: true

When running on iOS 11:

viewDidLoad() active: false
viewWillAppear active: false
viewDidAppear active: false
viewDidAppear with delay active: true

I can't tell you if this is intentional or not, but something has definitely changed. Perhaps file a radar on it?

like image 192
CodeBender Avatar answered Nov 15 '22 04:11

CodeBender