iOSDC 2021 「バックグラウンドでアプリがキルされても怖くない!アプリの状態を元に戻すリストア機能の全て」の補足


はじめに

iOSDC 2021 Day2、バックグラウンドでアプリがキルされても怖くない!アプリの状態を元に戻すリストア機能の全てについて登壇させていただきました。
トーク賞を取ろうと色々な手段でコメントをもらえる策を講じていたのですが届かず。残念。

後日動画がYouTubeにアップロードされる予定なので、動画が公開されたら更新します。

以下は伝えてなかったことや質問やコメントについての補足になります。

SceneDelegate NSUserActivityのUserInfoについて

NSUserActivityのUserInfoは[AnyHashable : Any] となっていますが、入れられる値の型はドキュメントにあるとおり、 NSArray, NSData, NSDate, NSDictionary, NSNull, NSNumber, NSSet, NSString, or NSURL となっています。これらの値以外を入れた場合、クラッシュしたりするので注意してください。

SceneDelegate backなどでViewControllerが破棄された場合

ナビゲーションでbackなどが起きた時など、復元対象のViewControllerが破棄された場合、UserInfoに復元情報を載せている場合は復元されないようにその情報を削除する必要があります。
AppleのサンプルアプリではviewWillDisappearの時にuserActivityをnilしています。

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        // This view controller is going away, no more user activity to track.
        if #available(iOS 13.0, *) {
            view.window?.windowScene?.userActivity = nil
        } else {
            userActivity = nil
        }
    }

SceneDelegate 元に戻すビューコントローラーの選定

SceneDelegateのリストアはStoryboardと違って手作業で画面遷移を作らないといけないので、全てを元通りに戻そうとするとかなり大変です。

  • アプリとして非常に価値が高い画面
  • 長文入力、動画編集、画像加工など、ユーザーが長時間かけてコンテンツを作成する画面

などなど、重要と思われる画面だけ元に戻す対象にするのも一つの手かと思います。

日向さんとてもスリムになっててびっくりしてるのワイだけ??

はい、そうなんです。
今年はHealthKitのトークがしたいなーと思って体作りから初めて、ナトリウムと食塩相当量、リボフラビンととビタミンB2の関係など、徹底的にHKQuantityTypeIdentifierの内容と日本栄養成分表示の関係などについて語る
一年間で25Kg痩せた!現役エンジニアが教えるHealthKitメソッドというプロポーザルを出していたのですが、残念ながら非採択でした。
どこかで機会があれば違った形でアウトプットできればと思います。その際は25Kgという数字は下方修正される可能性大です。

終わりに

Staff、Sponsor、Speaker、Sankashaの皆さんお疲れ様でした。