Program Tip

iOS 앱이 처음 실행되는시기를 감지 하시겠습니까?

programtip 2020. 11. 19. 21:55
반응형

iOS 앱이 처음 실행되는시기를 감지 하시겠습니까?


iOS 앱이 처음 실행될 때 어떻게 감지합니까?


Marc와 Chris가 말한 내용과 거의 비슷하지만 앱에 대해 알아야 할 여러 영역이있는 경우 앱이 종료 될 때 값을 변경하는 것을 선호합니다. 코드에서 :

목표 -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")

이 질문이 꽤 오래되었다는 것을 알고 있지만 "새로 설치"(업그레이드 / 다운 그레이드 후 첫 시작과 비교) 후 첫 번째 시작을 감지하는 한 가지 방법 을 생각해 내고 여기에서 코드를 공유 할 것이라고 생각했습니다. 도움이 될 경우를 대비하여 미래의 시청자.

// 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 값에 부울 대신 앱 버전 번호를 사용합니다. 이렇게하면 새 설치의 첫 번째 실행과 업그레이드의 첫 번째 실행을 구분할 수 있습니다. 향후 버전에서 유용 할 수 있습니다 ...


이것은 정말 간단한 바로 가기이지만 처음 앱을 실행할 때 NSUserDefault 키 값 쌍이 항상 NULL이라는 것을 알았습니다.

// Check to see if its the first time
if ([[NSUserDefaults standardUserDefaults] valueForKey:@"firstTime"] == NULL) {
   [[NSUserDefaults standardUserDefaults] setValue:@"Not" forKey:@"firstTime"];
}

이 코드를 애플리케이션이 시작될 때 나타나는 뷰 컨트롤러의 awakeFromNib에 배치합니다. 다른 답변이 문제에 맞는지 모르겠지만 이것이 내가 해결 한 방법입니다.


사용자 기본값에서 부울 값을 설정하여이를 수행 할 수 있습니다. 를 호출 할 때 키를 false registerDefaults:로 설정 한 다음, 초기 도움말 화면이나 필요한 작업을 표시 한 후 true로 변경하십시오.

If you have a persistent data file that's always saved after the app closes, checking to see if it exists would be another way.


Save it as a user preference, eg had_first_launch, set to true on startup, it will only be false on the first time...


This will not work properly if you want to detect during other places of the code if its first launch. The "applicationWillTerminate" will not work from iOS 4.0 due to multitasking. this link provides a good solution: http://mobiledevblog.metalcompass.com/?p=43

참고URL : https://stackoverflow.com/questions/308832/detect-when-an-ios-app-is-launched-for-the-first-time

반응형