IOS 9.3 freeze after openURL call

My application freezes after calling openURL in iOS 9.3, builds 13E233 and 13E234.

I tried using dispatch_after , but this does not fix the problem.

Here is the code, nothing special.

 + (void)someMethod:(UIView *)senderView { [Utility showLoadingHUDWithText:nil inView:senderView]; [[SomeClient sharedClient] someNetworkAPI:^(id result) { [Utility hideAllHUDsForView:senderView]; NSDictionary *dict = (NSDictionary *)result; NSString *someString = dict[@"someKey"]; NSURL *url = [NSURL URLWithString:someString]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; } } fail:^(NSError *error) { [Utility hideAllHUDsForView:senderView]; [Utility showMessageHUD:error.localizedDescription]; }]; } 

Looks like an iOS bug, and many other apps have also been hit.

+5
ios objective-c openurl
source share
2 answers

This really causes a dead end when calling the main thread on iOS 9.3 (tested on iPhone 6 and iPhone 6 Plus).

semaphore

Backtrace:

 * thread #1: tid = 0x41840, 0x0000000180ac1014 libsystem_kernel.dylib`semaphore_wait_trap + 8, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP * frame #0: 0x0000000180ac1014 libsystem_kernel.dylib`semaphore_wait_trap + 8 frame #1: 0x000000010023fa20 libdispatch.dylib`_dispatch_semaphore_wait_slow + 244 frame #2: 0x0000000180bda934 libxpc.dylib`xpc_connection_send_message_with_reply_sync + 204 frame #3: 0x000000018276a238 MobileCoreServices`_LSStartOpenOperation + 232 frame #4: 0x0000000182791efc MobileCoreServices`-[LSOpenOperation main] + 1160 frame #5: 0x0000000182771bc0 MobileCoreServices`-[LSApplicationWorkspace openURL:withOptions:error:] + 472 frame #6: 0x000000018633cdd8 UIKit`-[UIApplication _openURL:] + 356 frame #7: 0x0000000100096c04 MyApp`__29-[ViewController someMethod]_block_invoke(.block_descriptor=0x0000000125d37e20) + 216 at ViewController.m:57 frame #8: 0x000000010022da7c libdispatch.dylib`_dispatch_call_block_and_release + 24 frame #9: 0x000000010022da3c libdispatch.dylib`_dispatch_client_callout + 16 frame #10: 0x00000001002334e4 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 2096 frame #11: 0x0000000180ef8dd8 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12 frame #12: 0x0000000180ef6c40 CoreFoundation`__CFRunLoopRun + 1628 frame #13: 0x0000000180e20d10 CoreFoundation`CFRunLoopRunSpecific + 384 frame #14: 0x0000000182708088 GraphicsServices`GSEventRunModal + 180 frame #15: 0x00000001860f5f70 UIKit`UIApplicationMain + 204 frame #16: 0x00000001000970d0 MyApp`main(argc=1, argv=0x000000016fd6fae8) + 124 at main.m:14 frame #17: 0x00000001809be8b8 libdyld.dylib`start + 4 

I found that ending the entire call in the dispatch_async block fixes the problem:

 dispatch_async(dispatch_get_main_queue(), ^{ if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; } }); 

I would put a radar with Apple and put it on Open Radar .

It looks like this has been fixed using iOS 9.3.1:

Fixes an issue where apps don’t respond after clicking on links in Safari and other apps.

+7
source share

I ran into the same issue on an iPad Air 2/3 running iOS 9.3.5, and the JAL answer didn't solve the problem for me.

The code below works like a charm.

 fileprivate func letApplicationHandleUrl(_ url: URL) { guard UIApplication.shared.canOpenURL(url) else { return } if #available(iOS 10.0, *) { UIApplication.shared.open(url, options: [:], completionHandler: nil) } else { DispatchQueue.global(qos: .userInteractive).async { UIApplication.shared.openURL(url) } } } 
0
source share

All Articles