diff --git a/node_modules/react-native-mmkv-storage/ios/SecureStorage.m b/node_modules/react-native-mmkv-storage/ios/SecureStorage.m index eacd030..f4b1b96 100644 --- a/node_modules/react-native-mmkv-storage/ios/SecureStorage.m +++ b/node_modules/react-native-mmkv-storage/ios/SecureStorage.m @@ -96,6 +96,9 @@ NSString *serviceName = nil; - (NSMutableDictionary *)newSearchDictionary:(NSString *)identifier { NSMutableDictionary *searchDictionary = [[NSMutableDictionary alloc] init]; + // this value is shared by main app and extensions, so, is the best to be used here + serviceName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AppGroup"]; + if(serviceName == nil){ serviceName = [[NSBundle mainBundle] bundleIdentifier]; } @@ -107,6 +110,9 @@ NSString *serviceName = nil; [searchDictionary setObject:encodedIdentifier forKey:(id)kSecAttrAccount]; [searchDictionary setObject:serviceName forKey:(id)kSecAttrService]; + NSString *keychainGroup = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"KeychainGroup"]; + [searchDictionary setObject:keychainGroup forKey:(id)kSecAttrAccessGroup]; + return searchDictionary; } @@ -208,11 +214,14 @@ NSString *serviceName = nil; - (void)handleAppUninstallation { - // if (![[NSUserDefaults standardUserDefaults] boolForKey:@"RnSksIsAppInstalled"]) { - // [self clearSecureKeyStore]; - //[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"IsAppInstalled"]; - [[NSUserDefaults standardUserDefaults] synchronize]; - // } + // use app group user defaults to prevent clear when it's share extension + NSString *suiteName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AppGroup"]; + NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:suiteName]; + if (![userDefaults boolForKey:@"RnSksIsAppInstalled"]) { + [self clearSecureKeyStore]; + [userDefaults setBool:YES forKey:@"RnSksIsAppInstalled"]; + [userDefaults synchronize]; + } } - (void) setServiceName:(NSString *)_serviceName