Rocket.Chat.ReactNative/patches/react-native-mmkv-storage+0...

86 lines
3.6 KiB
Diff
Raw Normal View History

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];
}