【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の解説
使用例
以下の使用例まとめをみると、どうやって使えばいいのかがわかりやすい。
PresentationManagerとは
表示されるアラートの設定を行うものという認識。
呼び出し時に引数として渡すことで設定できるのは、以下のプロパティたち。
- appName: アプリ名
- alertTitle: アラートのタイトル
- alertMessage: アラートのメッセージ
- updateButtonTitle: 更新ボタンのタイトル
- nextTimeButtonTitle: 次回更新ボタンのタイトル
- skipButtonTitle: スキップボタンのタイトル
- forceLanguageLocalization forceLanguage: 言語
基本的に、言語を日本語に設定すれば、他は特にいじらなくても大丈夫そう。
何も指定しない場合は、iPhoneの本体の設定言語で表示されるため、日本人以外にもターゲティングしてる場合はそちらで。
コードは以下。
RuleManagerとは
強制アップデートのルールを設定するものという認識。
ruleに関して
更新頻度の種類
.immediately | .daily | .weekly |
---|---|---|
毎アプリ起動時 | 1日1回 | 1週間に1回 |
アラートタイプの種類
.force | .optional | .skip | .none |
---|---|---|---|
更新ボタンのみ | 更新ボタン・次回起動時ボタン | 更新ボタン・次回起動時ボタン・このアップデートをスキップするボタン | アラートを表示しない |
更新頻度・アラートタイプの組み合わせ表現
annoying | critical | default | hinting | persistent | relaxed | |
---|---|---|---|---|---|---|
更新頻度 | .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のコードは以下。
参考資料
強制アップデートで検索すると検索するとここら辺の記事が出てくる
teckmemo : 簡単にアプリのアップデート通知を行う
Sirenを使って iOSアプリに強制アップデート実装するよ
狛ログ : iOSアプリのアップデートをSirenを使って実装する。
以下がsirenのソース。これを読んだ方がわかりやすい