86 lines
3.6 KiB
Diff
86 lines
3.6 KiB
Diff
diff --git a/node_modules/react-native-mmkv-storage/ios/MMKVNative.mm b/node_modules/react-native-mmkv-storage/ios/MMKVNative.mm
|
|
index 9af089d..12ff53b 100644
|
|
--- a/node_modules/react-native-mmkv-storage/ios/MMKVNative.mm
|
|
+++ b/node_modules/react-native-mmkv-storage/ios/MMKVNative.mm
|
|
@@ -37,12 +37,43 @@ - (instancetype)init
|
|
rPath = rootDir;
|
|
_secureStorage = [[SecureStorage alloc] init];
|
|
[MMKV initializeMMKV:rootDir];
|
|
+ [self addSkipBackupAttributeToDir:rootDir];
|
|
});
|
|
|
|
|
|
return self;
|
|
}
|
|
|
|
+- (BOOL)addSkipBackupAttributeToURLAtPath:(NSURL *)url
|
|
+{
|
|
+ if (!url) return NO;
|
|
+ if (![[NSFileManager defaultManager] fileExistsAtPath:url.path]) return NO;
|
|
+
|
|
+ NSError *error = nil;
|
|
+ NSNumber *value = nil;
|
|
+ BOOL success = [url getResourceValue:&value forKey:NSURLIsExcludedFromBackupKey error:&error];
|
|
+ if (value.boolValue == YES) {
|
|
+ NSLog(@"%@ already marked for backup exclusion", [url lastPathComponent]);
|
|
+ return YES;
|
|
+ }
|
|
+
|
|
+ success = [url setResourceValue:[NSNumber numberWithBool:YES]
|
|
+ forKey:NSURLIsExcludedFromBackupKey error:&error];
|
|
+ if(!success){
|
|
+ NSLog(@"Error excluding %@ from backup: %@", [url lastPathComponent], error);
|
|
+ } else {
|
|
+ NSLog(@"Succesfully marked %@ for backup exclusion", [url lastPathComponent]);
|
|
+ }
|
|
+ return success;
|
|
+}
|
|
+
|
|
+- (BOOL) addSkipBackupAttributeToDir:(NSString *)path
|
|
+{
|
|
+ if (!path) return NO;
|
|
+ NSURL *pathUrl = [[NSURL alloc] initFileURLWithPath:path isDirectory:YES];
|
|
+ return [self addSkipBackupAttributeToURLAtPath:pathUrl];
|
|
+}
|
|
+
|
|
MMKV *getInstance(NSString *ID) {
|
|
if ([[mmkvInstances allKeys] containsObject:ID]) {
|
|
MMKV *kv = [mmkvInstances objectForKey:ID];
|
|
diff --git a/node_modules/react-native-mmkv-storage/ios/SecureStorage.m b/node_modules/react-native-mmkv-storage/ios/SecureStorage.m
|
|
index dbea26b..2483375 100644
|
|
--- a/node_modules/react-native-mmkv-storage/ios/SecureStorage.m
|
|
+++ b/node_modules/react-native-mmkv-storage/ios/SecureStorage.m
|
|
@@ -40,14 +40,14 @@ - (NSString *) getSecureKey:(NSString *)key
|
|
@try {
|
|
[self handleAppUninstallation];
|
|
NSString *value = [self searchKeychainCopyMatching:key];
|
|
- dispatch_sync(dispatch_get_main_queue(), ^{
|
|
- int readAttempts = 0;
|
|
- // See: https://github.com/ammarahm-ed/react-native-mmkv-storage/issues/195
|
|
- while (![[UIApplication sharedApplication] isProtectedDataAvailable] && readAttempts++ < 100) {
|
|
- // sleep 25ms before another attempt
|
|
- usleep(25000);
|
|
- }
|
|
- });
|
|
+// dispatch_sync(dispatch_get_main_queue(), ^{
|
|
+// int readAttempts = 0;
|
|
+// // See: https://github.com/ammarahm-ed/react-native-mmkv-storage/issues/195
|
|
+// while (![[UIApplication sharedApplication] isProtectedDataAvailable] && readAttempts++ < 100) {
|
|
+// // sleep 25ms before another attempt
|
|
+// usleep(25000);
|
|
+// }
|
|
+// });
|
|
if (value == nil) {
|
|
NSString* errorMessage = @"key does not present";
|
|
|
|
@@ -100,6 +100,9 @@ - (void) removeSecureKey:(NSString *)key
|
|
|
|
- (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];
|
|
}
|