Hello, Apple developer,
I found in the documentation that the evaluatedPolicyDomainState API has been deprecated in iOS 18. In my project, many users rely on this value for comparison. I would like to ask, what does it mean that this API is deprecated? Will the value returned by this API be empty in the future? How should I adapt for existing users?"
Let me know if you'd like any adjustments!
Thank you. Good luck.
[[context evaluatedPolicyDomainState] bytes]
Post
Replies
Boosts
Views
Activity
Hello Apple Developer,
I have some questions regarding slow keychain access. We recently launched a product, and users with certain specific device models have reported slow performance. I'm not sure what's causing this issue and would appreciate your help in analyzing it.When using keychain groups, I didn’t specify a group, and on some devices, the queries are particularly slow. I'm unsure of the reason for this.I’m using kSecAttrTokenIDSecureEnclave, and each time I execute SecItemCopyMatching or SecItemDelete, the operation is particularly slow, taking around 2 seconds.It’s strange that when setting the default keychain group (team ID + bundle ID), the access is not slow. However, since the project has enabled the keychain group, if I set a keychain group, I cannot access the data that was stored before setting the keychain group.
Here is a snippet of my code:
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] initWithObjectsAndKeys:(__bridge id)kSecAttrTokenIDSecureEnclave,(__bridge id)kSecAttrTokenID,
(__bridge id)kSecAttrKeyTypeEC,(__bridge id)kSecAttrKeyType,
@256,(__bridge id)kSecAttrKeySizeInBits,
PrivateKeyAttrs,(__bridge id)kSecPrivateKeyAttrs,nil];
privateKey = SecKeyCreateRandomKey((__bridge CFDictionaryRef)parameters, &error);
Here is a search of my code:
SecKeyRef privateKey = NULL;
//CFTypeRef *private = &privateKey;
NSDictionary *query = nil;
query = @{
(__bridge id)kSecClass: (__bridge id)kSecClassKey,
(__bridge id)kSecAttrApplicationTag: serviceID,
(__bridge id)kSecReturnRef: @YES
};
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&privateKey);
if (privateKey) {
CFRelease(privateKey);
}