programing

앱 제거 시 키 체인 항목 삭제

starjava 2023. 5. 17. 22:17
반응형

앱 제거 시 키 체인 항목 삭제

나는 idandersen의 scifi-iphone 코드를 키 체인에 사용하고 있으며 다음을 사용하여 암호를 저장합니다.

[SFHFKeychainUtils storeUsername:@"User" andPassword:@"123"
              forServiceName:@"TestService" updateExisting:YES error:&error];

단말기에서 앱을 삭제하면 암호가 키 체인에 남아 있습니다.

사용자가 단말기에서 앱을 삭제할 때 키 체인에서 암호를 제거하고 싶습니다.어떻게 해야 하나요?

당신은 그 사실을 이용할 수 있습니다.NSUserDefaults 제거를 통해 삭제됩니다.예:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //Clear keychain on first run in case of reinstallation
    if (![[NSUserDefaults standardUserDefaults] objectForKey:@"FirstRun"]) {
        // Delete values from keychain here
        [[NSUserDefaults standardUserDefaults] setValue:@"1strun" forKey:@"FirstRun"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }

    //...Other stuff that usually happens in didFinishLaunching
}

이 명령은 "First Run" 키/값을 확인하고 설정합니다.NSUserDefaults앱이 아직 설정되지 않은 경우 처음 실행됩니다.키 체인에서 값을 삭제하기 위해 코드를 넣어야 한다는 댓글이 있습니다.Synchronize(동기화)를 호출하여 사용자가 시스템이 앱을 유지하기 전에 수동으로 종료하는 경우 "FirstRun" 키/값이 즉시 유지되도록 할 수 있습니다.

Swift 3.0 버전의 @amro 답변을 찾는 사용자:

let userDefaults = UserDefaults.standard

if !userDefaults.bool(forKey: "hasRunBefore") {
     // Remove Keychain items here

     // Update the flag indicator
     userDefaults.set(true, forKey: "hasRunBefore")
}

*synchronize(동기화) 기능은 더 이상 사용되지 않습니다.

단말기에서 앱을 삭제할 때 코드를 수행하는 트리거가 없습니다.키 체인에 대한 액세스는 애플리케이션에 서명하는 데 사용되는 프로비저닝 프로파일에 따라 달라집니다.따라서 다른 응용 프로그램은 키 체인에서 이 정보에 액세스할 수 없습니다.

사용자가 장치에서 응용 프로그램을 삭제할 때 키 체인에서 암호를 제거하는 것은 도움이 되지 않지만 암호에 액세스할 수 없는 것은 원래 응용 프로그램을 다시 설치하는 경우에만 가능하다는 점에서 다소 위안이 됩니다.

@amro의 답변의 Swift 버전을 찾는 사람들:

    let userDefaults = NSUserDefaults.standardUserDefaults()

    if userDefaults.boolForKey("hasRunBefore") == false {

        // remove keychain items here


        // update the flag indicator
        userDefaults.setBool(true, forKey: "hasRunBefore")
        userDefaults.synchronize() // forces the app to update the NSUserDefaults

        return
    }

C# 사마린 버전

    const string FIRST_RUN = "hasRunBefore";
    var userDefaults = NSUserDefaults.StandardUserDefaults;
    if (!userDefaults.BoolForKey(FIRST_RUN))
    {
        //TODO: remove keychain items
        userDefaults.SetBool(true, FIRST_RUN);
        userDefaults.Synchronize();
    }

키 체인에서 레코드를 지웁니다(위의 TODO 주석).

        var securityRecords = new[] { SecKind.GenericPassword,
                                    SecKind.Certificate,
                                    SecKind.Identity,
                                    SecKind.InternetPassword,
                                    SecKind.Key
                                };
        foreach (var recordKind in securityRecords)
        {
            SecRecord query = new SecRecord(recordKind);
            SecKeyChain.Remove(query);
        }

사용자가 앱을 제거할 때 앱의 문서 디렉터리에서 파일이 삭제됩니다.이것을 알면, 당신은 파일이 존재하는지 확인하기만 하면 됩니다.application:didFinishLaunchingWithOptions:그런 다음 무조건 파일을 만듭니다(단, 더미 파일이라도).

확인 시점에 파일이 존재하지 않는 경우 최근 설치 이후 처음 실행되는 것입니다.앱에서 나중에 알아야 할 경우, 부울 결과를 앱 대표 구성원에게 저장합니다.

@amro의 답변은 Swift 4.0으로 번역되었습니다.

if UserDefaults.standard.object(forKey: "FirstInstall") == nil {
    UserDefaults.standard.set(false, forKey: "FirstInstall")
    UserDefaults.standard.synchronize()
}

이것은 사람들이 베타 #2에서 목격한 행동에 근거하여 iOS 10.3의 기본 동작인 것 같습니다.아직 이에 대한 공식 문서를 찾지 못했으니, 있다면 코멘트 부탁드립니다.

앱 설정 번들을 추가하고 앱을 다시 시작할 때 또는 설정을 통해 선택한 값을 기반으로 키 체인을 재설정하는 토글을 구현하기만 하면 됩니다(userDefaults를 통해 사용 가능).

언급URL : https://stackoverflow.com/questions/4747404/delete-keychain-items-when-an-app-is-uninstalled

반응형