アプリ起動時のUIApplication#openURLの動作
Xcode5でビルドしたアプリをiOS7の端末で起動させると初回起動になぜかUIApplication#openURLが正常にブラウザを起動してくれない現象が発生。
正確にはアプリが起動して10秒ぐらい何も表示されない状態が続く。
ちなみにiOS6、Xcode4だと問題なし。
今のところ、以下のメソッド内で openURL を呼び出した時のみ上記問題が発生する。
・didFinishLaunchingWithOptions
・viewDidLoad
・viewWillAppear
原因はバグなのかAppleとしてもう(広告の計測のために)アプリ起動時にブラウザを開かせたくないのかわからないけど、とりあえず対応策としては非同期の別スレッドでUIApplication#openURLを呼ぶ出す形で対応。
+ (void)openURL:(NSURL *)url { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; } }); }
ちなみにブラウザ起動でなく、単純に非同期でHTTP通信したい場合は NSOperationQueue を使うとよさそう。
参考:
http://thata.tumblr.com/post/20235526244
http://blog.tarunon.com/2013/09/ios7xcode5uiwebview.html