2016-03-28 3 views
5

Мое приложение зависает после звонка openURL на iOS 9.3 builds 13E233 & 13E234.iOS 9.3 замораживание после вызова openURL

Я пробовал использовать dispatch_after, но это не исправить проблему.

Вот код, ничего особенного.

+ (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]; 
    }]; 
} 

Это кажется как ошибка IOS, многие другие приложения затронуты тоже.

+0

Вы можете показать свой код? – Fonix

+0

Можете ли вы опубликовать весь код функции, пожалуйста? –

+0

@Fonix Код добавлен –

ответ

7

Это действительно вызывает тупик при вызове основной темы на iOS 9.3 (протестировано на iPhone 6 и 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 

Я обнаружил, что упаковка весь вызов в dispatch_async блока фиксируется вопрос:

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

Я бы подать радар с Apple, и разместить его на Open Radar.

Похоже, это было зафиксировано с прошивкой 9.3.1:

устраняет проблему, которая вызвала приложения, чтобы не отвечать на запросы после нажатия на ссылки в Safari и других приложений.

+0

Я нашел ту же ошибку на моем iPhone6 ​​с iOS 9.3. На самом деле я не могу использовать Safari (я не могу открыть ссылки: S), и все приложение, использующее 'openURL', выйдет из строя. Пример: ** Slack **. Странно, что мой коллега имеет ту же конфигурацию (iPhone6 ​​с iOS9.3), но ошибка не возникает –

+0

Фактически я получаю эту ошибку в консоли: ': Ошибка получения информации о рабочей области NanoAppRegistry: Ошибка домена = код NSCocoaErrorDomain = 4099 «Соединение с сервисом с именем com.apple.nanoappregistry.workspace было признано недействительным». UserInfo = {NSDebugDescription = Соединение с сервисом с именем com.apple.nanoappregistry.workspace было признано недействительным.} ' –

+0

Он должен быть разрешен с выпуском' iOS 9.3.1' –

0

Я столкнулся с той же проблемой на iPad Air 2/3, работающей под управлением iOS 9.3.5, и ответ JAL не разрешил проблему для меня.

Код ниже работает как шарм.

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) 
     } 
    } 
} 
Смежные вопросы