앱이 제거 될 때 키 체인 항목 삭제
내가 사용하고 idandersen의 scifihifi - 아이폰 키 체인에 대한 코드 및 암호 저장 사용
[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
}
NSUserDefaults
앱이 아직 설정되지 않은 경우 앱의 첫 번째 실행시 "FirstRun"키 / 값을 확인하고 설정합니다. 키 체인에서 값을 삭제하는 코드를 넣어야하는 의견이 있습니다. 시스템이 유지하기 전에 사용자가 앱을 수동으로 종료하는 경우 "FirstRun"키 / 값이 즉시 유지되도록 동기화를 호출 할 수 있습니다.
@amro의 답변의 Swift 3.0 버전을 찾는 사용자 의 경우 :
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 # Xamarin 버전
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의 기본 동작 인 것 같습니다 . 이에 대한 공식적인 문서를 아직 찾지 못했으면 의견을 남겨주십시오.
참고 URL : https://stackoverflow.com/questions/4747404/delete-keychain-items-when-an-app-is-uninstalled
'IT story' 카테고리의 다른 글
파이썬에서 0의 목록 (0) | 2020.04.17 |
---|---|
C ++에서 float의 round () (0) | 2020.04.17 |
지난 24 시간 동안 변경된 파일 찾기 (0) | 2020.04.17 |
시퀀스를 첨자화할 때 파이썬에서 :: (이중 콜론)이란 무엇입니까? (0) | 2020.04.17 |
드래그하는 동안 입력 유형 = 범위의 onchange 이벤트가 firefox에서 트리거되지 않습니다 (0) | 2020.04.17 |