mapbox / ios-sdk-examples

Live example code for the Mapbox iOS SDK
https://www.mapbox.com/ios-sdk/examples/
Other
95 stars 35 forks source link

Device rotation deadlocks the app #361

Closed friedbunny closed 4 years ago

friedbunny commented 4 years ago

On iOS 13.0 (Xcode 11.0GM2), rotating the device back-and-forth will lead to a completely unresponsive app. This does not reproduce on an iOS 12.4 simulator (with Xcode 10.3).

Notably, I don’t see this behavior in Studio Preview, which also uses a split view controller, but with a collection view as the primary menu.

Reproduction

  1. Load any example.
  2. Rotate the device, then rotate it again to the original orientation.
  3. Observe deadlock and incompletely-redrawn views:

Instruments time profile of the main thread

Click to expand thread trace... ``` 33.20 s 99.9% 0 s Main Thread 0x47b0d9 33.20 s 99.9% 0 s start 33.20 s 99.9% 0 s main 33.20 s 99.9% 0 s UIApplicationMain 33.20 s 99.9% 0 s GSEventRunModal 33.20 s 99.9% 0 s CFRunLoopRunSpecific 33.20 s 99.9% 0 s __CFRunLoopRun 33.20 s 99.9% 0 s __CFRunLoopDoSources0 33.20 s 99.9% 0 s __CFRunLoopDoSource0 33.20 s 99.9% 0 s __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ 33.20 s 99.9% 0 s -[FBSSerialQueue _performNextFromRunLoopSource] 33.20 s 99.9% 0 s -[FBSSerialQueue _queue_performNextIfPossible] 33.20 s 99.9% 0 s __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ 33.20 s 99.9% 0 s _dispatch_block_invoke_direct 33.20 s 99.9% 0 s _dispatch_client_callout 33.20 s 99.9% 0 s __88-[FBSWorkspaceScenesClient sceneID:updateWithSettingsDiff:transitionContext:completion:]_block_invoke 33.20 s 99.9% 0 s -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] 33.20 s 99.9% 0 s __88-[FBSWorkspaceScenesClient sceneID:updateWithSettingsDiff:transitionContext:completion:]_block_invoke_2 33.20 s 99.9% 0 s -[FBSSceneImpl updater:didUpdateSettings:withDiff:transitionContext:completion:] 33.20 s 99.9% 0 s -[UIApplicationSceneClientAgent scene:handleEvent:withCompletion:] 33.20 s 99.9% 0 s -[UIScene scene:didUpdateWithDiff:transitionContext:completion:] 33.20 s 99.9% 0 s -[UIScene _emitSceneSettingsUpdateResponseForCompletion:afterSceneUpdateWork:] 33.20 s 99.9% 0 s __64-[UIScene scene:didUpdateWithDiff:transitionContext:completion:]_block_invoke 33.20 s 99.9% 0 s -[_UIWindowSceneDeviceOrientationSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:] 33.20 s 99.9% 0 s _UISceneSettingsDiffActionPerformActionsWithDelayForTransitionContext 33.20 s 99.9% 0 s __163-[_UIWindowSceneDeviceOrientationSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]_block_invoke 33.20 s 99.9% 0 s -[_UIWindowSceneDeviceOrientationSettingsDiffAction _updateDeviceOrientationWithSettingObserverContext:windowScene:transitionContext:] 33.20 s 99.9% 0 s _UISceneSettingsDiffActionPerformChangesWithTransitionContext 33.20 s 99.9% 0 s +[BSAnimationSettings(UIKit) tryAnimatingWithSettings:actions:completion:] 33.20 s 99.9% 0 s __134-[_UIWindowSceneDeviceOrientationSettingsDiffAction _updateDeviceOrientationWithSettingObserverContext:windowScene:transitionContext:]_block_invoke 33.20 s 99.9% 0 s -[UIDevice setOrientation:animated:] 33.20 s 99.9% 0 s -[NSNotificationCenter postNotificationName:object:userInfo:] 33.20 s 99.9% 0 s _CFXNotificationPost 33.20 s 99.9% 0 s -[_CFXNotificationRegistrar find:object:observer:enumerator:] 33.20 s 99.9% 0 s ___CFXNotificationPost_block_invoke 33.20 s 99.9% 0 s _CFXRegistrationPost1 33.20 s 99.9% 0 s __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ 33.20 s 99.9% 0 s -[UIWindow _updateToInterfaceOrientation:duration:force:] 33.20 s 99.9% 0 s __57-[UIWindow _updateToInterfaceOrientation:duration:force:]_block_invoke 33.20 s 99.9% 0 s -[UIWindow _setRotatableViewOrientation:updateStatusBar:duration:force:] 33.20 s 99.9% 0 s -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:] 33.20 s 99.9% 0 s -[UIWindow _rotateWindowToOrientation:updateStatusBar:duration:skipCallbacks:] 33.20 s 99.9% 0 s -[UIWindow _rotateToBounds:withAnimator:transitionContext:] 33.20 s 99.9% 0 s -[_UIWindowRotationAnimationController animateTransition:] 33.20 s 99.9% 0 s +[UIView(UIViewAnimationWithBlocks) animateWithDuration:delay:options:animations:completion:] 33.20 s 99.9% 0 s +[UIView(UIViewAnimationWithBlocks) _setupAnimationWithDuration:delay:view:options:factory:animations:start:animationStateGenerator:completion:] 33.20 s 99.9% 0 s __58-[_UIWindowRotationAnimationController animateTransition:]_block_invoke 33.20 s 99.9% 0 s +[UIView(Internal) _performBlockDelayingTriggeringResponderEvents:forScene:] 33.20 s 99.9% 0 s __58-[_UIWindowRotationAnimationController animateTransition:]_block_invoke_2 33.20 s 99.9% 0 s +[UIView(UIViewAnimationWithBlocks) animateWithDuration:delay:options:animations:completion:] 33.20 s 99.9% 0 s +[UIView(UIViewAnimationWithBlocks) _setupAnimationWithDuration:delay:view:options:factory:animations:start:animationStateGenerator:completion:] 33.20 s 99.9% 0 s -[_UIViewControllerTransitionContext __runAlongsideAnimations] 33.20 s 99.9% 0 s -[_UIViewControllerTransitionCoordinator _applyBlocks:releaseBlocks:] 33.20 s 99.9% 0 s __95-[UIViewController(AdaptiveSizing) _window:viewWillTransitionToSize:withTransitionCoordinator:]_block_invoke.3449 33.20 s 99.9% 0 s -[UIViewController window:willAnimateRotationToInterfaceOrientation:duration:newSize:] 33.20 s 99.9% 0 s +[UIView(UIViewAnimationWithBlocks) animateWithDuration:delay:options:animations:completion:] 33.20 s 99.9% 0 s +[UIView(UIViewAnimationWithBlocks) _setupAnimationWithDuration:delay:view:options:factory:animations:start:animationStateGenerator:completion:] 33.20 s 99.9% 0 s __86-[UIViewController window:willAnimateRotationToInterfaceOrientation:duration:newSize:]_block_invoke 33.20 s 99.9% 0 s -[CALayer layoutIfNeeded] 33.20 s 99.9% 1.00 ms CA::Layer::layout_if_needed(CA::Transaction*) 33.15 s 99.8% 2.00 ms -[CALayer layoutSublayers] 31.84 s 95.8% 2.00 ms -[UINavigationBar layoutSublayersOfLayer:] 31.78 s 95.6% 9.00 ms -[UIView(CALayerDelegate) layoutSublayersOfLayer:] 31.52 s 94.9% 4.00 ms -[UINavigationBar layoutSubviews] 31.33 s 94.3% 4.00 ms -[_UINavigationBarVisualProviderModernIOSAccessibility layoutSubviews] 22.63 s 68.1% 2.00 ms AXPerformBlockAsynchronouslyOnMainThread 22.54 s 67.8% 1.00 ms dispatch_async 22.53 s 67.8% 0 s _dispatch_introspection_queue_item_enqueue_hook 22.14 s 66.6% 2.74 s gcd_queue_item_enqueue_hook 19.30 s 58.1% 19.30 s __gcd_queue_item_enqueue_hook_block_invoke ```

/cc @captainbarbosa @julianrex