【swift】強制アップデート機能用ライブラリsirenの解説と実装

環境

xcode 11.3
swift 5.1.3
CocoaPods 1.8.4

手順

完成形


(github : sirenページより引用)

CocoaPodsによるライブラリのインストール

以下を追加後、ターミナルでpod installを実行

pod 'Siren'

コードの記述

import Siren
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        // sirenの強制アップデート設定用関数
        forceUpdate()

        return true
    }

    // 途中省略
}

// 以下、追記
private extension AppDelegate {

    func forceUpdate() {
        let siren = Siren.shared
        // 言語を日本語に設定
        siren.presentationManager = PresentationManager(forceLanguageLocalization: .japanese)

        // ruleを設定
        siren.rulesManager = RulesManager(globalRules: .critical)

        // sirenの実行関数
        siren.wail { results in
            switch results {
            case .success(let updateResults):
                print("AlertAction ", updateResults.alertAction)
                print("Localization ", updateResults.localization)
                print("Model ", updateResults.model)
                print("UpdateType ", updateResults.updateType)
            case .failure(let error):
                print(error.localizedDescription)
            }
        }

        // 以下のように、完了時の処理を無視して記述することも可能
        // siren.wail()
    }
}

sirenの解説

使用例

以下の使用例まとめをみると、どうやって使えばいいのかがわかりやすい。

github : Siren/Example/Example/AppDelegate.swift

PresentationManagerとは

表示されるアラートの設定を行うものという認識。
呼び出し時に引数として渡すことで設定できるのは、以下のプロパティたち。

  • appName: アプリ名
  • alertTitle: アラートのタイトル
  • alertMessage: アラートのメッセージ
  • updateButtonTitle: 更新ボタンのタイトル
  • nextTimeButtonTitle: 次回更新ボタンのタイトル
  • skipButtonTitle: スキップボタンのタイトル
  • forceLanguageLocalization forceLanguage: 言語

基本的に、言語を日本語に設定すれば、他は特にいじらなくても大丈夫そう。
何も指定しない場合は、iPhoneの本体の設定言語で表示されるため、日本人以外にもターゲティングしてる場合はそちらで。

コードは以下。

github : Siren/Sources/Managers/PresentationManager.swift

RuleManagerとは

強制アップデートのルールを設定するものという認識。

ruleに関して

更新頻度の種類

.immediately.daily.weekly
毎アプリ起動時1日1回1週間に1回

アラートタイプの種類

.force.optional.skip.none
更新ボタンのみ更新ボタン・次回起動時ボタン更新ボタン・次回起動時ボタン・このアップデートをスキップするボタンアラートを表示しない

更新頻度・アラートタイプの組み合わせ表現

annoyingcriticaldefaulthintingpersistentrelaxed
更新頻度.immediately.immediately.daily.weekly.daily.weekly
アラートタイプ.option.force.skip.option.option.skip

一括で指定する場合

RulesManager(globalRules: .critical)

それぞれ指定する場合

RulesManager(
    majorUpdateRules: Rules(promptFrequency: .immediately, forAlertType: .force), // A.b.c.d
    minorUpdateRules: Rules(promptFrequency: .immediately, forAlertType: .optional), // a.B.c.d
    patchUpdateRules: Rules(promptFrequency: .daily, forAlertType: .skip), // a.b.C.d
    revisionUpdateRules: Rules(promptFrequency: .weekly, forAlertType: .skip) // a.b.c.D
)

RuleManagerのコードは以下。

github : Siren/Sources/Managers/RulesManager.swift

参考資料

強制アップデートで検索すると検索するとここら辺の記事が出てくる

teckmemo : 簡単にアプリのアップデート通知を行う
Sirenを使って iOSアプリに強制アップデート実装するよ
狛ログ : iOSアプリのアップデートをSirenを使って実装する。

以下がsirenのソース。これを読んだ方がわかりやすい

github : ArtSabintsev/Siren