iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【iOS】Firestoreで強制アップデート機能をつける

Firestoreを使って、アプリ側の強制アップデート機能を実装したので、今回はその方法を簡単に紹介していきたいと思います👷‍♀️

それではやっていく

まず重要なのは、現在のバージョンが必須バージョンを満たしているかどうかの条件分岐です。これは以前のブログでも書きましたが、下記のようになります。

        if requiredVersion.compare(currentVersion) == .orderedDescending {
            // 必須バージョンを満たしてない
        }

currentVersionは下記のように取得できます。

let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String

yamato8010.hatenablog.com

そして、今回の場合requiredVersion(必須バージョン)は、Firestoreのconfigure/configドキュメントに下記のように保存しています。

f:id:yum_fishing:20210424195844p:plain

ということで、アプリ側でこのrequiredVersionを元に強制アップデートアラートを表示できるようにしてみます。

    private func showRequiredVersionAlertIfNeeded() {
        let requiredVersion = configUseCase.get().updateRequiredVersion
        if let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String,
           requiredVersion.compare(currentVersion) == .orderedDescending {
            let alert = UIAlertController(title: "アップデートのお知らせ", message: "Fideeの新規バージョンがご利用になれます。今すぐ\(requiredVersion)にアップデートしてください。", preferredStyle: .alert)
            alert.addAction(.init(title: "アップデート", style: .default, handler: { _ in
                // MARK: Force unwrap🚨
                let url = URL(string: "https://apps.apple.com/jp/app/apple-store/id1563534779")!
                UIApplication.shared.open(url, options: [:], completionHandler: nil)
            }))
            window?.rootViewController?.present(alert, animated: true, completion: nil)
        }
    }

また、今回のアプリの場合よりリアルタイムにアップデートのアラートを表示したいので、ドキュメントをリッスンして、変更があった場合にアラートを表示できるようにしました。

        configUseCase.listenUpdateRequiredVersion()
            .observeOnMain()
            .subscribe(onNext: {[unowned self] _ in
                showRequiredVersionAlertIfNeeded()
            })
            .disposed(by: disposeBag)

てな感じで本日も以上となります🍺

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com