63
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

[iOS] 「インストール直後のみxxする/アップデート直後のみyyする」的な処理を簡単に書く方法

インストール直後やアップデート直後の初回起動時のみに何かを実行したいことって、あると思います。

例えばインストール直後にアプリのチュートリアルを表示したり、アップデート直後に新機能の紹介をしたりなんかですね。

そこでインストールやアップデートを起点にした処理を簡単に書けるようなライブラリを作ってみたので紹介します。

SRGAppVerWatcher

導入してみる

Podfileに以下の行を追加してpod updateします。

Podfile
pod 'SRGAppVerWatcher'

導入後は利用するクラスファイルでSRGAppVerWatcher.hをimportすれば利用できます。

File.m
#import "SRGAppVerWatcher.h"

インストール直後に特定の処理を実行してみる

AppDelegateでインストール後の初回起動時にのみ特定の処理を実行する場合は以下のようなコードになります。

AppDelegate.m
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    .... 
    [[SRGAppVerWatcher sharedWatcher] executeOnceAfterInstall:^{
        // この処理はアプリインストール後に一度だけ実行されます.
        // (例:チュートリアルをenableにする処理やremote-logingなどなど )
    }];
}

executeOnceAfterInstallに渡したBlocksがインストール直後に起動した時に一度だけ実行され、2回目以降は実行されません。

アップデート直後に特定の処理を実行してみる

AppDelegateでアップデート後の初回起動時にのみ特定の処理を実行する場合は以下のようにブロックを渡します。ブロック引数のfromにはアップデート前のバージョンが、toにはアップデート後のバージョンが入っています。

AppDelegate.m
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    .... 
    [[SRGAppVerWatcher sharedWatcher] executeOnceAfterUpdate:^(NSString *from, NSString*to){
        // この処理はアップデート後に一度だけ実行されます.
        // (例:アプデによる新機能の紹介処理、データ以降処理、remote-logingなどなど)
    }];
}

バージョンに関する記録を取得する

Example.m
// インストール日の取得
NSDate *installDate     = [[SRGAppVerWatcher sharedWatcher] installDate];

// 最初にインストールした時のアプリのバージョンの取得
NSString *installVersion = [[SRGAppVerWatcher sharedWatcher] installVersion];

// 現在のバージョンにアップデート(orインストール)した日付を取得
NSDate *updateDate      = [[SRGAppVerWatcher sharedWatcher] updateDate];

// バージョン2.0にアップデート(orインストール)した日付を取得
NSDate *updateDateOfVer2  = [[SRGAppVerWatcher sharedWatcher] updateDateOf:@"2.0"];

インストール後、xx日以上経過したユーザにのみ特定の処理を実行

インストールやバージョンごとのアップデートの日付が取得できるので以下のようにすれば、経過日数で処理をわけることもできます。

Example.m
NSTimeInterval Days    = 60*60*24;
NSDate *installDate    = [[SRGAppVerWatcher sharedWatcher] installDate];
NSTimeInterval elapsed = [[NSDate date] timeIntervalSinceDate:installDate];

if( elapsed > 10*Days ){
    // インストール後 10日以上経過している場合のみ実行される
}

注意点

内部での実装としてSRGAppVerWatcherはインスタンスが生成される部分の処理で、現在のバージョンと、保持しているバージョンを比較してインストールかアップデートかを判定しています。 

なのでSRGAppVerWatcherを導入する際は、最初のバージョンから導入しておかなければインストールなのかアップデートなのかの判定ができません。

アップデートの履歴などは後からとれるものでもないので、新規プロジェクトで、もしかしたら必要になるかも?と思ったら、とりあえず導入しておいて損はないかもです!

以上、バージョンの変更情報を検知/保持するSRGAppVerWatcherの紹介でした!

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
63
Help us understand the problem. What are the problem?