앱 제거 시 키 체인 항목 삭제
나는 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
'programing' 카테고리의 다른 글
kestrel 웹 서버가 비로컬 호스트 요청을 수신하도록 하려면 어떻게 해야 합니까? (0) | 2023.05.17 |
---|---|
urrlib.request.urlopen에 대한 Python 3의 사용자 에이전트 변경 (0) | 2023.05.17 |
다른 분기 없이 하나의 Git 분기만 푸시하는 방법은 무엇입니까? (0) | 2023.05.17 |
WPF에서 현재 화면의 크기를 얻는 방법은 무엇입니까? (0) | 2023.05.17 |
메타데이터예외:지정한 메타데이터 리소스를 로드할 수 없습니다. (0) | 2023.05.17 |