iOS アプリが初めて起動されたことを検出するにはどうすればよいですか?
7 に答える
Marc と Chris が言ったこととほぼ同じですが、アプリケーションの複数の領域でそれについて知る必要がある場合に備えて、アプリの終了時に値を変更することを好みます。コード内:
Objective-C
// -applicationDidFinishLaunching:
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstLaunch",nil]];
// to check it:
[[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"];
// -applicationWillTerminate:
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"];
スイフト5.0
// -applicationDidFinishLaunching:
UserDefaults.standard.register(defaults: ["firstLaunch":true])
// to check it:
UserDefaults.standard.bool(forKey: "firstLaunch")
// -applicationWillTerminate:
UserDefaults.standard.set(false, forKey: "firstLaunch")
この質問はかなり古いものだと思いますが、「新規インストール」後の最初の起動(アップグレード/ダウングレード後の最初の起動と比較して)を検出する1つの方法を考え出すために使用し、ここでコードを共有すると思いましたそれが役立つ場合に備えて、将来の視聴者。
// Get current version ("Bundle Version") from the default Info.plist file
NSString *currentVersion = (NSString*)[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSArray *prevStartupVersions = [[NSUserDefaults standardUserDefaults] arrayForKey:@"prevStartupVersions"];
if (prevStartupVersions == nil)
{
// Starting up for first time with NO pre-existing installs (e.g., fresh
// install of some version)
[self firstStartAfterFreshInstall];
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:currentVersion] forKey:@"prevStartupVersions"];
}
else
{
if (![prevStartupVersions containsObject:currentVersion])
{
// Starting up for first time with this version of the app. This
// means a different version of the app was alread installed once
// and started.
[self firstStartAfterUpgradeDowngrade];
NSMutableArray *updatedPrevStartVersions = [NSMutableArray arrayWithArray:prevStartupVersions];
[updatedPrevStartVersions addObject:currentVersion];
[[NSUserDefaults standardUserDefaults] setObject:updatedPrevStartVersions forKey:@"prevStartupVersions"];
}
}
// Save changes to disk
[[NSUserDefaults standardUserDefaults] synchronize];
通常、ユーザーの既定値の firstLaunch 値には、ブール値の代わりにアプリのバージョン番号を使用します。これにより、新規インストールの最初の起動とアップグレードの最初の起動を区別できます。将来のバージョンで役立つかもしれません...
最初の起動時にコードの他の場所で検出したい場合、これは正しく機能しません。「applicationWillTerminate」はマルチタスクのため iOS 4.0 から動作しません。このリンクは良い解決策を提供します: http://mobiledevblog.metalcompass.com/?p=43
これを行うために、ユーザーのデフォルトにブール値を設定できます。を呼び出すときにキーを false にregisterDefaults:
設定し、次に true に設定し、最初のヘルプ画面または必要な操作をすべて表示した後に true に変更します。
アプリの終了後に常に保存される永続的なデータ ファイルがある場合は、そのファイルが存在するかどうかを確認することも別の方法です。
ユーザー設定として保存します。たとえば、had_first_launch を起動時に true に設定すると、初回のみ false になります...