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
)
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")
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With