Skip to content

Instantly share code, notes, and snippets.

@larryhou
Last active October 8, 2017 04:45
Show Gist options
  • Select an option

  • Save larryhou/38638f97573b96049eb2c60756751b72 to your computer and use it in GitHub Desktop.

Select an option

Save larryhou/38638f97573b96049eb2c60756751b72 to your computer and use it in GitHub Desktop.
- (void)removePreferences
{
    NSArray* classCollection =  [NSArray arrayWithObjects:
                                 (__bridge id)kSecClassInternetPassword,
                                 (__bridge id)kSecClassGenericPassword,
                                 (__bridge id)kSecClassCertificate,
                                 (__bridge id)kSecClassKey,
                                 (__bridge id)kSecClassIdentity, nil];
    for (int n = 0; n < classCollection.count; n++)
    {
        NSMutableDictionary* query = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                      (__bridge id)kSecMatchLimitAll,(__bridge id)kSecMatchLimit,
                                      (__bridge id)kCFBooleanTrue, (__bridge id)kSecReturnAttributes,
                                      classCollection[n], (__bridge id)kSecClass, nil];
        
        CFTypeRef result = NULL;
        if (SecItemCopyMatching((__bridge CFDictionaryRef)query, &result) == errSecSuccess)
        {
            NSArray *itemCollection = (__bridge NSArray *)result;
            for (int i = 0; i < itemCollection.count; i++)
            {
                NSDictionary *item = (NSDictionary *)itemCollection[i];
                NSDictionary *data = [item mutableCopy];
                [data setValue:classCollection[n] forKey:(__bridge id)kSecClass];
                
                OSStatus status = SecItemDelete((CFDictionaryRef)data);
                NSLog(@"DEL => %@ success:%@ %d", item, status == errSecSuccess ? @"true" : @"false", (int)status);
            }
        }
    }
    
    NSURL *folder = [[[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] firstObject] URLByAppendingPathComponent:@"Preferences"];
    for (NSURL *item in [[NSFileManager defaultManager] contentsOfDirectoryAtURL:folder includingPropertiesForKeys:nil options:NSDirectoryEnumerationSkipsHiddenFiles error:nil])
    {
        NSError *error = nil;
        [[NSFileManager defaultManager] removeItemAtURL:item error:&error];
        NSLog(@"DEL => %@ error:%@", item, error);
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment