「ホームボタンを押してアプリを閉じたら再度ログイン画面から始まるようにしてほしい」
という要望があったので、プロジェクト設定の Application does not run in background を YES にしてアプリを作成しました。アプリ内でログイン画面に戻る遷移を作成するのが難しかったので、バックグラウンド動作をさせずにアプリを終了させることで、次回は必ずログイン画面が表示されることを期待したわけです。
ところが、電源ボタンを押してスリープモードに入った後、スリープを解除したときログイン画面が表示されず、前回の画面からそのまま使用できることがわかりました。電源ボタンを押したり、自動スリープ機能によってスリープモードに入るときは ApplicationWillResignActive が呼ばれることが分かりましたので、ここに exit(1); を入れて終了するようにしてみました。
※このアプリはAppStoreを通さずに、エンタープライズで配信されるアプリなのでAppleによる審査を受けないことになっています。AppStoreに登録するアプリでは状況が異なると思いますのでご注意ください。
すると、電源ボタンを押してスリープに入ったときはちゃんと終了されるようになりましたが、ホームボタンをダブルクリックでタスク切り替え画面を表示しようとするとアプリ画面がパッと消えてしまったり、5本指でアプリを閉じるときにアニメーションせずにパッと消えてしまうようになってしまいました。
そこで、スリープ時や終了時に呼び出される delegate を調べてみました。
[1]Application does not run in background = NO のとき(標準設定)
起動
didFinishLaunchingWithOptions → applicationDidBecomeActive
ホームボタンを押してバックグラウンドに入れる
applicationWillResignActive → applicationDidEnterBackground(2)
アイコンをタップ(再起動)
applicationWillEnterForeground → applicationDidBecomeActive
ホームダブルクリック
applicationWillResignActive
タスク選択から復帰
applicationDidBecomeActive
電源ボタンを押してロック
applicationWillResignActive → applicationDidEnterBackground(1)
ロックから復帰
applicationWillEnterForeground → applicationDidBecomeActive
5本指で閉じる
applicationWillResignActive → applicationDidEnterBackground
[2]Application does not run in background = YES の場合
起動
didFinishLaunchingWithOptions → applicationDidBecoemActive
ホームボタンを押してバックグラウンドに入れる
applicationDidEnterBackground(2) → applicationWillTerminate
アイコンをタップ(再起動)
didFinishLaunchingWithOptions → applicationDidBecomeActive
ホームボタンをダブルクリック
applicationWillResignAcgive
タスク選択から復帰
applicationDidBecomeActive
電源ボタンを押してロック
applicationWillResignActive
ロックから復帰
applicationDidBecomeActive
5本指で閉じる
applicationWillResignActive → applicationDidEnterBackground(2) → applicationWillTerminate


0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください