Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Animation +UIView setAnimationsEnabled being called from a background thread Error

I am showing an initial view controller in my app until login completes. Once login is successful I'm trying to show my Main ViewController using below code in AppDelegate class. It is showing up view controllers properly only but it is showing an error. I might be making some mistake in my code.

I want my Main ViewController viewWillAppear() to be called only after all the work that I'm doing in AppDelegate gets completed.

AppDelegate Class

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        print("Inside App Delegate")

        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.initializeAppViewState()

        LoginManager.shared.login() { (success) -> Void in
            if success {
                print("Login Successful")
                self.setupRootViewController()
            } else {
                print("Login Un-Successful")
            }
        }
        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
    }

    func applicationWillTerminate(_ application: UIApplication) {
    }

    func initializeAppViewState() {
        if (!Thread.isMainThread) {
            DispatchQueue.main.async {
                self.initializeAppViewState()
            }
            return
        }

        self.window!.rootViewController = InitialViewController(nibName: "InitialViewController", bundle: Bundle.main)
        self.window!.makeKeyAndVisible()
    }

    func setupRootViewController() {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let viewController = storyboard.instantiateViewController(withIdentifier :"NavigationController") as! UINavigationController

        if let window = self.window, let rootViewController = window.rootViewController {
            var currentController = rootViewController
            while let presentedController = currentController.presentedViewController {
                currentController = presentedController
            }
            currentController.present(viewController, animated: true, completion: nil)
        }
    }
}

Below is the error I'm getting

Login Successful
2019-10-03 20:49:00.707020+0530 IoT Simulator[47491:1653133] [Animation] +[UIView setAnimationsEnabled:] being called from a background thread. Performing any operation from a background thread on UIView or a subclass is not supported and may result in unexpected and insidious behavior.                                                                                                                              trace=(
    0   UIKitCore                           0x0000000111b7bdda kFixedAnimationDuration_block_invoke_5 + 107
    1   libdispatch.dylib                   0x000000011016cdb5 _dispatch_client_callout + 8
    2   libdispatch.dylib                   0x000000011016e83c _dispatch_once_callout + 66
    3   UIKitCore                           0x0000000111b7bd6d +[UIView(Animation) setAnimationsEnabled:] + 76
    4   UIKitCore                           0x0000000111b7bebb +[UIView(Animation) performWithoutAnimation:] + 84
    5   UIKitCore                           0x0000000110e06d46 -[UIVisualEffectView _updateSubviews] + 325
    6   UIKitCore                           0x0000000110e07b56 -[UIVisualEffectView _configureAllEffects] + 1435
    7   UIKitCore                           0x0000000110e05fe5 -[UIVisualEffectView setBackgroundEffects:] + 396
    8   UIKitCore                           0x0000000110e100ee -[_UIBarBackground updateBackground] + 229
    9   UIKitCore                           0x0000000110e1039d -[_UIBarBackground transitionBackgroundViews] + 208
    10  UIKitCore                           0x0000000110e99bde -[_UINavigationBarVisualProviderModernIOS _updateBackgrounds] + 850
    11  UIKitCore                           0x0000000110e99e20 -[_UINavigationBarVisualProviderModernIOS layoutSubviews] + 272
    12  UIKitCore                           0x0000000110e4ee4c -[UINavigationBar layoutSubviews] + 256
    13  UIKitCore                           0x0000000111b89e69 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1417
    14  UIKitCore                           0x0000000110e4eba4 -[UINavigationBar layoutSublayersOfLayer:] + 248
    15  QuartzCore                          0x000000011310cd22 -[CALayer layoutSublayers] + 173
    16  QuartzCore                          0x00000001131119fc _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 396
    17  UIKitCore                           0x0000000111b74e2d -[UIView(Hierarchy) layoutBelowIfNeeded] + 646
    18  UIKitCore                           0x0000000110ffa271 -[UINavigationController _positionNavigationBarHidden:edge:initialOffset:] + 800
    19  UIKitCore                           0x0000000110ffa4f0 -[UINavigationController _positionNavigationBarHidden:edge:] + 388
    20  UIKitCore                           0x000000011100149d -[UINavigationController loadView] + 239
    21  UIKitCore                           0x00000001110a7d04 -[UIViewController loadViewIfRequired] + 172
    22  UIKitCore                           0x00000001110a8524 -[UIViewController view] + 27
    23  UIKitCore                           0x0000000110fcf5b4 -[_UIFullscreenPresentationController _setPresentedViewController:] + 89
    24  UIKitCore                           0x0000000110fc36aa -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 133
    25  UIKitCore                           0x00000001110bb18a -[UIViewController _presentViewController:withAnimationController:completion:] + 3700
    26  UIKitCore                           0x00000001110bddd7 __63-[UIViewController _presentViewController:animated:completion:]_block_invoke + 98
    27  UIKitCore                           0x00000001110be2ef -[UIViewController _performCoordinatedPresentOrDismiss:animated:] + 511
    28  UIKitCore                           0x00000001110bdd3e -[UIViewController _presentViewController:animated:completion:] + 172
    29  UIKitCore                           0x00000001110bdf9c -[UIViewController presentViewController:animated:completion:] + 150
    30  IoT Simulator                       0x000000010b9568a1 $s13IoT_Simulator11AppDelegateC23setupRootViewControlleryyF + 913
    31  IoT Simulator                       0x000000010b9514dc $s13IoT_Simulator11AppDelegateC11application_29didFinishLaunchingWithOptionsSbSo13UIApplicationC_SDySo0k6LaunchJ3KeyaypGSgtFySbcfU_ + 284
    32  IoT Simulator                       0x000000010b9516e3 $s13IoT_Simulator11AppDelegateC11application_29didFinishLaunchingWithOptionsSbSo13UIApplicationC_SDySo0k6LaunchJ3KeyaypGSgtFySbcfU_TA + 19
    33  IoT Simulator                       0x000000010b958eb8 $s13IoT_Simulator12LoginManagerC5login5retry10completionySb_ySbctFySbcfU_ + 296
    34  IoT Simulator                       0x000000010b958f47 $s13IoT_Simulator12LoginManagerC5login5retry10completionySb_ySbctFySbcfU_TA + 23
    35  IoT Simulator                       0x000000010b95a8e9 $s13IoT_Simulator12LoginManagerC20acquireTokenSilently10completionyySbc_tFySo22ADAuthenticationResultCcfU_ + 3129
    36  IoT Simulator                       0x000000010b95a955 $s13IoT_Simulator12LoginManagerC20acquireTokenSilently10completionyySbc_tFySo22ADAuthenticationResultCcfU_TA + 21
    37  IoT Simulator                       0x000000010b95ae92 $sSo22ADAuthenticationResultCIegg_ABIeyBy_TR + 66
    38  ADAL                                0x000000010bc9953a __70-[ADAuthenticationRequest(AcquireToken) acquireToken:completionBlock:]_block_invoke + 3050
    39  ADAL                                0x000000010bc9a131 __63-[ADAuthenticationRequest(AcquireToken) validatedAcquireToken:]_block_invoke + 113
    40  ADAL                                0x000000010bc9a58f __56-[ADAuthenticationRequest(AcquireToken) getAccessToken:]_block_invoke + 271
    41  ADAL                                0x000000010bc818cf __40-[ADAcquireTokenSilentHandler getToken:]_block_invoke + 799
    42  ADAL                                0x000000010bc84a64 -[ADAcquireTokenSilentHandler getAccessToken:] + 2660
    43  ADAL                                0x000000010bc81572 -[ADAcquireTokenSilentHandler getToken:] + 178
    44  ADAL                                0x000000010bc9a424 -[ADAuthenticationRequest(AcquireToken) getAccessToken:] + 484
    45  ADAL                                0x000000010bc9a03b -[ADAuthenticationRequest(AcquireToken) validatedAcquireToken:] + 331
    46  ADAL                                0x000000010bc99964 __70-[ADAuthenticationRequest(AcquireToken) acquireToken:completionBlock:]_block_invoke.162 + 644
    47  ADAL                                0x000000010bca98ab __74-[ADAuthorityValidation checkAuthority:validateAuthority:completionBlock:]_block_invoke + 299
    48  ADAL                                0x000000010bcaa185 __76-[ADAuthorityValidation validateAADAuthority:requestParams:completionBlock:]_block_invoke_2 + 53
    49  libdispatch.dylib                   0x000000011016bd7f _dispatch_call_block_and_release + 12
    50  libdispatch.dylib                   0x000000011016cdb5 _dispatch_client_callout + 8
    51  libdispatch.dylib                   0x000000011016f7b9 _dispatch_queue_override_invoke + 1022
    52  libdispatch.dylib                   0x000000011017d632 _dispatch_root_queue_drain + 351
    53  libdispatch.dylib                   0x000000011017dfca _dispatch_worker_thread2 + 130
    54  libsystem_pthread.dylib             0x00000001105556b3 _pthread_wqthread + 583
    55  libsystem_pthread.dylib             0x00000001105553fd start_wqthread + 13
)
like image 765
Pinnacler Avatar asked Mar 28 '26 17:03

Pinnacler


1 Answers

Try calling setupRootViewController on main thread because most completion handlers are on background Threads

LoginManager.shared.login() { (success) -> Void in
        if success {
            print("Login Successful")
    DispatchQueue.main.async{ 
        self.setupRootViewController()
       }
    } else {
            print("Login Un-Successful")
        }
    }
like image 83
Abdul Waheed Avatar answered Mar 30 '26 08:03

Abdul Waheed



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!