Skip to content

Commit fab8470

Browse files
authored
fix(biometrics): iOS init keychainItemServiceName before use (#327)
1 parent e393fd4 commit fab8470

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

packages/biometrics/index.ios.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ export class BiometricAuth implements BiometricApi {
1313
BiometricAuth.deleteKeyChainEntry(useKeyName);
1414
}
1515

16+
private static get keychainItemServiceName() {
17+
if (keychainItemServiceName === null) {
18+
const bundleID = NSBundle.mainBundle.infoDictionary.objectForKey('CFBundleIdentifier');
19+
keychainItemServiceName = `${bundleID}.TouchID`;
20+
}
21+
return keychainItemServiceName;
22+
}
23+
1624
available(): Promise<BiometricIDAvailableResult> {
1725
return new Promise((resolve, reject) => {
1826
try {
@@ -85,11 +93,6 @@ export class BiometricAuth implements BiometricApi {
8593
return;
8694
}
8795

88-
if (keychainItemServiceName === null) {
89-
const bundleID = NSBundle.mainBundle.infoDictionary.objectForKey('CFBundleIdentifier');
90-
keychainItemServiceName = `${bundleID}.TouchID`;
91-
}
92-
9396
const keyName = options.keyName ?? keychainItemIdentifier;
9497
const secret = options.secret ?? 'dummy content';
9598

@@ -123,7 +126,7 @@ export class BiometricAuth implements BiometricApi {
123126
const query = NSMutableDictionary.alloc().init();
124127
query.setObjectForKey(kSecClassGenericPassword, kSecClass);
125128
query.setObjectForKey(keyName, kSecAttrAccount);
126-
query.setObjectForKey(keychainItemServiceName, kSecAttrService);
129+
query.setObjectForKey(BiometricAuth.keychainItemServiceName, kSecAttrService);
127130
query.setObjectForKey(true, kSecReturnData);
128131

129132
// Note that you can only do this for Touch ID; for Face ID you need to tweak the plist value of NSFaceIDUsageDescription
@@ -219,7 +222,7 @@ export class BiometricAuth implements BiometricApi {
219222
const query = NSMutableDictionary.alloc().init();
220223
query.setObjectForKey(kSecClassGenericPassword, kSecClass);
221224
query.setObjectForKey(keyName, kSecAttrAccount);
222-
query.setObjectForKey(keychainItemServiceName, kSecAttrService);
225+
query.setObjectForKey(BiometricAuth.keychainItemServiceName, kSecAttrService);
223226

224227
SecItemDelete(query);
225228
}
@@ -228,7 +231,7 @@ export class BiometricAuth implements BiometricApi {
228231
const attributes = NSMutableDictionary.new();
229232
attributes.setObjectForKey(kSecClassGenericPassword, kSecClass);
230233
attributes.setObjectForKey(keyName, kSecAttrAccount);
231-
attributes.setObjectForKey(keychainItemServiceName, kSecAttrService);
234+
attributes.setObjectForKey(BiometricAuth.keychainItemServiceName, kSecAttrService);
232235

233236
const accessControlRef = SecAccessControlCreateWithFlags(
234237
kCFAllocatorDefault,

0 commit comments

Comments
 (0)