diff --git a/node_modules/react-native-mmkv-storage/android/src/main/java/com/ammarahmed/mmkv/StorageGetters.java b/node_modules/react-native-mmkv-storage/android/src/main/java/com/ammarahmed/mmkv/StorageGetters.java
index 568e369..229b911 100644
--- a/node_modules/react-native-mmkv-storage/android/src/main/java/com/ammarahmed/mmkv/StorageGetters.java
+++ b/node_modules/react-native-mmkv-storage/android/src/main/java/com/ammarahmed/mmkv/StorageGetters.java
@@ -52,8 +52,12 @@ public class StorageGetters {
                     case Constants.DATA_TYPE_MAP:
                     case Constants.DATA_TYPE_ARRAY:
                         Bundle bundle = kv.decodeParcelable(key, Bundle.class);
-                        WritableMap map = Arguments.fromBundle(bundle);
-                        callback.invoke(null, map);
+                        if (bundle == null) {
+                            callback.invoke(null, null);
+                        } else {
+                            WritableMap map = Arguments.fromBundle(bundle);
+                            callback.invoke(null, map);
+                        }
                         break;
                     
                 }
diff --git a/node_modules/react-native-mmkv-storage/ios/SecureStorage.m b/node_modules/react-native-mmkv-storage/ios/SecureStorage.m
index 70f3a01..30d7251 100644
--- a/node_modules/react-native-mmkv-storage/ios/SecureStorage.m
+++ b/node_modules/react-native-mmkv-storage/ios/SecureStorage.m
@@ -46,7 +46,6 @@ - (void) setSecureKey: (NSString *)key value:(NSString *)value
 - (NSString *) getSecureKey:(NSString *)key
                    callback:(RCTResponseSenderBlock)callback
 {
-    
     @try {
         [self handleAppUninstallation];
         NSString *value = [self searchKeychainCopyMatching:key];
@@ -130,7 +129,8 @@ - (void) removeSecureKey:(NSString *)key
 
 - (NSMutableDictionary *)newSearchDictionary:(NSString *)identifier {
     NSMutableDictionary *searchDictionary = [[NSMutableDictionary alloc] init];
-    serviceName = [[NSBundle mainBundle] bundleIdentifier];
+    // this value is shared by main app and extensions, so, is the best to be used here
+    serviceName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AppGroup"];
     
     [searchDictionary setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass];
     
@@ -139,6 +139,9 @@ - (NSMutableDictionary *)newSearchDictionary:(NSString *)identifier {
     [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;
 }
 
@@ -240,10 +243,13 @@ - (void)clearSecureKeyStore
 
 - (void)handleAppUninstallation
 {
-    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"RnSksIsAppInstalled"]) {
+    // 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];
-        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"RnSksIsAppInstalled"];
-        [[NSUserDefaults standardUserDefaults] synchronize];
+        [userDefaults setBool:YES forKey:@"RnSksIsAppInstalled"];
+        [userDefaults synchronize];
     }
 }
 
diff --git a/node_modules/react-native-mmkv-storage/ios/StorageGetters.m b/node_modules/react-native-mmkv-storage/ios/StorageGetters.m
index 909d056..d62814a 100644
--- a/node_modules/react-native-mmkv-storage/ios/StorageGetters.m
+++ b/node_modules/react-native-mmkv-storage/ios/StorageGetters.m
@@ -38,8 +38,13 @@ +(void) getItem:(NSString *)ID
         if ([kv containsKey:key]) {
             switch (type.integerValue) {
                 case 1:
-                    
-                    callback(@[[NSNull null], [kv getObjectOfClass:NSString.class forKey:key]]);
+                    {
+                        NSString* string = [kv getObjectOfClass:NSString.class forKey:key];
+                        if (!string) {
+                            string = (NSString *)[NSNull null];
+                        }
+                        callback(@[[NSNull null], string]);
+                    }
                     break;
                 case 2:
                     
diff --git a/node_modules/react-native-mmkv-storage/ios/StorageIndexer.m b/node_modules/react-native-mmkv-storage/ios/StorageIndexer.m
index e7c914b..891cf93 100644
--- a/node_modules/react-native-mmkv-storage/ios/StorageIndexer.m
+++ b/node_modules/react-native-mmkv-storage/ios/StorageIndexer.m
@@ -58,7 +58,11 @@ + (void) removeKeyFromIndexer:(MMKV *)kv
     if (index != NULL && [index containsObject:key]) {
         
         [index removeObject:key];
-        [kv setObject:index forKey:stringsIndexKey];
+        if (!index || [index count] == 0) {
+            [kv removeValueForKey:stringsIndexKey];
+        } else {
+            [kv setObject:index forKey:stringsIndexKey];
+        }
         return;
     }
     
@@ -67,7 +71,11 @@ + (void) removeKeyFromIndexer:(MMKV *)kv
     if (index != NULL && [index containsObject:key]) {
         
         [index removeObject:key];
-        [kv setObject:index forKey:intIndexKey];
+        if (!index || [index count] == 0) {
+            [kv removeValueForKey:intIndexKey];
+        } else {
+            [kv setObject:index forKey:intIndexKey];
+        }
         return;
     }
     
@@ -76,7 +84,11 @@ + (void) removeKeyFromIndexer:(MMKV *)kv
     if (index != NULL && [index containsObject:key]) {
         
         [index removeObject:key];
-        [kv setObject:index forKey:boolIndexKey];
+        if (!index || [index count] == 0) {
+            [kv removeValueForKey:boolIndexKey];
+        } else {
+            [kv setObject:index forKey:boolIndexKey];
+        }
         return;
     }
     
@@ -85,7 +97,11 @@ + (void) removeKeyFromIndexer:(MMKV *)kv
     if (index != NULL && [index containsObject:key]) {
         
         [index removeObject:key];
-        [kv setObject:index forKey:mapIndexKey];
+        if (!index || [index count] == 0) {
+            [kv removeValueForKey:mapIndexKey];
+        } else {
+            [kv setObject:index forKey:mapIndexKey];
+        }
         return;
     }
     
@@ -94,7 +110,11 @@ + (void) removeKeyFromIndexer:(MMKV *)kv
     if (index != NULL && [index containsObject:key]) {
         
         [index removeObject:key];
-        [kv setObject:index forKey:arrayIndexKey];
+        if (!index || [index count] == 0) {
+            [kv removeValueForKey:arrayIndexKey];
+        } else {
+            [kv setObject:index forKey:arrayIndexKey];
+        }
         return;
     }