Objective-C
Objective-C
Windows Credentials Manager / Apple Keychain - List Matching Secrets
See more Secrets Examples
List secrets matching one or more wildcarded names for app, service, domain, and username.Note: This example requires Chilkat v10.1.0 or later.
Chilkat Objective-C Downloads
#import <CkoSecrets.h>
#import <CkoJsonObject.h>
#import <NSString.h>
BOOL success = NO;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
CkoSecrets *secrets = [[CkoSecrets alloc] init];
// On Windows, this is the Windows Credentials Manager
// On MacOS/iOS, it is the Apple Keychain
secrets.Location = @"local_manager";
// Set wildcarded or exact values for appName, service, domain, and username.
// Omit any members where anything is allowed to match, or alternatively specify "*" to match anything.
CkoJsonObject *jsonMatch = [[CkoJsonObject alloc] init];
[jsonMatch UpdateString: @"appName" value: @"Test*"];
[jsonMatch UpdateString: @"service" value: @"*"];
[jsonMatch UpdateString: @"domain" value: @"*"];
[jsonMatch UpdateString: @"username" value: @"Starfish*"];
CkoJsonObject *results = [[CkoJsonObject alloc] init];
results.EmitCompact = NO;
success = [secrets ListSecrets: jsonMatch jsonOut: results];
if (success == NO) {
NSLog(@"%@",secrets.LastErrorText);
return;
}
NSLog(@"%@",[results Emit]);
// Sample output on Windows.
// The "targetName" is purely informational and indicates the raw TargetName of the secret (i.e. Credential) stored in the Credentials Manager.
// {
// "secrets": [
// {
// "appName": "Test2",
// "service": "Custom",
// "domain": "Ocean",
// "username": "Starfish20",
// "targetName": "Test2/Custom/Ocean/Starfish20"
// },
// {
// "appName": "Test2",
// "service": "Custom",
// "domain": "Ocean",
// "username": "Starfish",
// "targetName": "Test2/Custom/Ocean/Starfish"
// }
// ]
// }
// ---------------------------------------------------------------------------------------
// Here's sample code for parsing the JSON list of secrets.
NSString *appName = 0;
NSString *service = 0;
NSString *domain = 0;
NSString *username = 0;
NSString *targetName = 0;
NSString *keyChainService = 0;
NSString *keyChainAccount = 0;
int i = 0;
int count_i = [[results SizeOfArray: @"secrets"] intValue];
while (i < count_i) {
results.I = [NSNumber numberWithInt: i];
appName = [results StringOf: @"secrets[i].appName"];
service = [results StringOf: @"secrets[i].service"];
domain = [results StringOf: @"secrets[i].domain"];
username = [results StringOf: @"secrets[i].username"];
// Information field for Windows Credentials Manager.
targetName = [results StringOf: @"secrets[i].targetName"];
// Informational fields if on MacOS using the Apple Keychain.
keyChainService = [results StringOf: @"secrets[i].keyChainService"];
keyChainAccount = [results StringOf: @"secrets[i].keyChainAccount"];
i = i + 1;
}