質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iOS 8

iOS 8(アイ・オーエス8)は、アップル社が2014年9月に発表したオペレーティングシステムです。iPhone 4sより対応しています。デザイン性の変更はなく、アプリや各種機能が強化されています。また、サードパーティ開発者のために、多くのAPIが開放されています。

Q&A

1回答

4242閲覧

UIApplication.sharedApplication().openURL()でサファリを起動し、戻ってくるとクラッシュする

yukitoto

総合スコア53

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iOS 8

iOS 8(アイ・オーエス8)は、アップル社が2014年9月に発表したオペレーティングシステムです。iPhone 4sより対応しています。デザイン性の変更はなく、アプリや各種機能が強化されています。また、サードパーティ開発者のために、多くのAPIが開放されています。

0グッド

0クリップ

投稿2016/09/03 22:38

編集2016/10/26 01:57

iOS8・Xcode7.3、swift2という環境でiOSアプリの開発を行っています。

現在、あるURLをsafariで起動するという実装を行っており、UIApplication.sharedApplication().openURL(url!)を利用することで無事起動することが出来ました。

swift

1 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 2 if url != nil && UIApplication.sharedApplication().canOpenURL(url!) { 3 UIApplication.sharedApplication().openURL(url!) 4 } 5}

しかし、Safariを開いたあとにアプリに戻ってくると例外なく、AppDelegate.swiftでクラッシュします。エラーログは一切出ません。

対処策として、Safariを開いた直後に、ViewControllerを変更する(self.navigationController?.popViewControllerAnimated(true)のようなメソッドを呼び出す)とクラッシュは防げます。

何卒宜しくお願い致します。

クラッシュした様子

追記

TakeOneさんからの質問

sharedApplication().openURL(url!)
の行だけ削除したらSafariが起動されないだけでクラッシュしなくなるんですか

こちらはクラッシュ致しませんでした。

openURLの実行によりアプリはバックグラウンド状態に移行しますから、その際にapplicationWillResignActive()やapplicationDidEnterBackground()が呼ばれます。

また、戻ってくる際にはapplicationWillEnterForeground()やapplicationDidBecomeActive()が呼ばれます。

そのあたりに問題のある処理がないか確認した方がよいと思います。

こちらも現在行っていた処理をすべてなくしても同じ現象でした。
ちなみにapplicationWillEnterForeground()が呼ばれる前にクラッシュしております。

また、[Window]-[Devices]でデハッグ中の端末を選択すると、端末のコンソールメッセージが表示されますから、それを確認すれば、何か見えてなかったものが見えてくるかもしれません。

コンソールで確認し、ログを取得出来たので追記させていただきました。

####デバイスログ

Safariへの遷移時
Sep 4 09:31:19 assertiond[30736]: assertion failed: 15E65 13E230: assertiond + 15801 [3C808658-78EC-3950-A264-79A64E0E463B]: 0x1 Sep 4 09:31:19 --- last message repeated 5 times --- Sep 4 09:31:19 assertiond[30736]: assertion failed: 15E65 13E230: assertiond + 17314 [3C808658-78EC-3950-A264-79A64E0E463B]: 0x1 Sep 4 09:31:19 assertiond[30736]: assertion failed: 15E65 13E230: assertiond + 53689 [3C808658-78EC-3950-A264-79A64E0E463B]: 0x1 Sep 4 09:31:20 assertiond[30736]: assertion failed: 15E65 13E230: assertiond + 15801 [3C808658-78EC-3950-A264-79A64E0E463B]: 0x1 Sep 4 09:31:20 --- last message repeated 2 times --- Sep 4 09:31:20 SpringBoard[30732]: [MPUSystemMediaControls] Updating supported commands for now playing application. Sep 4 09:31:20 assertiond[30736]: assertion failed: 15E65 13E230: assertiond + 15801 [3C808658-78EC-3950-A264-79A64E0E463B]: 0x1
アプリへ戻ってくる時
Sep 4 09:33:19 assertiond[30736]: assertion failed: 15E65 13E230: assertiond + 15801 [3C808658-78EC-3950-A264-79A64E0E463B]: 0x1 Sep 4 09:33:19 syslogd[30718]: ASL Sender Statistics Sep 4 09:33:19 assertiond[30736]: assertion failed: 15E65 13E230: assertiond + 15801 [3C808658-78EC-3950-A264-79A64E0E463B]: 0x1 Sep 4 09:33:19 --- last message repeated 3 times --- Sep 4 09:33:19 assertiond[30736]: assertion failed: 15E65 13E230: assertiond + 53689 [3C808658-78EC-3950-A264-79A64E0E463B]: 0x1 Sep 4 09:33:19 SpringBoard[30732]: [MPUSystemMediaControls] Updating supported commands for now playing application. Sep 4 09:33:19 assertiond[30736]: assertion failed: 15E65 13E230: assertiond + 15801 [3C808658-78EC-3950-A264-79A64E0E463B]: 0x1

※時々CoreAnimation: updates deferred for too longというメッセージが表示されています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

例えば、
UIApplication.sharedApplication().openURL(url!)
の行だけ削除したらSafariが起動されないだけでクラッシュしなくなるんですか?
相変わらずクラッシュするならopenURLの問題ではないでしょう。

クラッシュしなくなるなら、openURLの実行が引き金となっていると考えられますが、
openURLの実行によりアプリはバックグラウンド状態に移行しますから、その際にapplicationWillResignActive()applicationDidEnterBackground()が呼ばれます。
また、戻ってくる際にはapplicationWillEnterForeground()applicationDidBecomeActive()が呼ばれます。
そのあたりに問題のある処理がないか確認した方がよいと思います。

また、[Window]-[Devices]でデハッグ中の端末を選択すると、端末のコンソールメッセージが表示されますから、それを確認すれば、何か見えてなかったものが見えてくるかもしれません。

投稿2016/09/03 23:40

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukitoto

2016/09/04 00:33

丁寧なご回答ありがとうございます!! > UIApplication.sharedApplication().openURL(url!) の行だけ削除したらSafariが起動されないだけでクラッシュしなくなるんですか? こちらはクラッシュ致しませんでした。 > openURLの実行によりアプリはバックグラウンド状態に移行しますから、その際にapplicationWillResignActive()やapplicationDidEnterBackground()が呼ばれます。 また、戻ってくる際にはapplicationWillEnterForeground()やapplicationDidBecomeActive()が呼ばれます。 > そのあたりに問題のある処理がないか確認した方がよいと思います。 こちらも現在行っていた処理をすべてなくしても同じ現象でした。 > また、[Window]-[Devices]でデハッグ中の端末を選択すると、端末のコンソールメッセージが表示されますから、それを確認すれば、何か見えてなかったものが見えてくるかもしれません。 コンソールで確認し、ログを取得出来たので追記させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問