• ios 清空全部key chain以及userDefaults相关


    清空相关信息,再构造唯一id等可做一键新机

    清空全部key chain

    + (void)clearKeyChain {
        NSMutableDictionary *query = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                      (__bridge id)kCFBooleanTrue, (__bridge id)kSecReturnAttributes,
                                      (__bridge id)kSecMatchLimitAll, (__bridge id)kSecMatchLimit,
                                      nil];
        NSArray *secItemClasses = [NSArray arrayWithObjects:
                                   (__bridge id)kSecClassGenericPassword,
                                   (__bridge id)kSecClassInternetPassword,
                                   (__bridge id)kSecClassCertificate,
                                   (__bridge id)kSecClassKey,
                                   (__bridge id)kSecClassIdentity,
                                   nil];
        for (id secItemClass in secItemClasses) {
            NSLog(@"secItemClass %@",secItemClass);
            [query setObject:secItemClass forKey:(__bridge id)kSecClass];
            
            CFTypeRef result = NULL;
            SecItemCopyMatching((__bridge CFDictionaryRef)query, &result);
            if (result != NULL) CFRelease(result);
    
            NSDictionary *spec = @{(__bridge id)kSecClass: secItemClass};
            SecItemDelete((__bridge CFDictionaryRef)spec);
        }
    }
    

      清空 userDefaults 用户相关

    + (void)clearUserDefaults {
        NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
        [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
        [[NSUserDefaults standardUserDefaults] synchronize];
        
        NSString *path = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).lastObject;
        path = [path stringByAppendingPathComponent:@"Preferences"];
        NSArray *fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
        
        for (NSString * filename in fileList) {
            NSString *filepath = [path stringByAppendingPathComponent:filename];
            BOOL isDir = NO;
            [[NSFileManager defaultManager] fileExistsAtPath:filepath isDirectory:(&isDir)];
            if (!isDir && [filename hasSuffix:@".plist"] && (![filename isEqualToString:appDomain])) {
                NSString *suitename = [filename stringByDeletingPathExtension];
                NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:suitename];
                [userDefaults removePersistentDomainForName:suitename];
                [[NSFileManager defaultManager] removeItemAtPath:filepath error:nil];
            }
        }
    }
    本文章仅供学习参考,如有版权侵犯,请联系作者修改,转载请注明出处!
  • 相关阅读:
    php-Zip打包文件
    PHP命令行类库 climate
    vim 添加块注释
    冒泡排序|插入排序
    PHP-SeasLog安装和使用
    链表
    多线程上下文切换
    竞态与线程安全
    线程的生命周期
    线程创建的两种方法
  • 原文地址:https://www.cnblogs.com/HugJun/p/15774276.html
Copyright © 2020-2023  润新知