// // AppGroupUserDefaultsManager.m // OutLive // // Created by AI Assistant on 2025/11/13. // #import "AppGroupUserDefaultsManager.h" #import // App Group标识符 static NSString * const APP_GROUP_ID = @"group.com.anonymous.digitalpilates"; @implementation AppGroupUserDefaultsManager RCT_EXPORT_MODULE(); - (NSArray *)supportedEvents { return @[]; } + (BOOL)requiresMainQueueSetup { return YES; } - (NSUserDefaults *)getAppGroupUserDefaults { return [[NSUserDefaults alloc] initWithSuiteName:APP_GROUP_ID]; } RCT_EXPORT_METHOD(setString:(NSString *)groupId key:(NSString *)key value:(NSString *)value resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { @try { NSUserDefaults *defaults = [self getAppGroupUserDefaults]; if (defaults) { [defaults setObject:value forKey:key]; [defaults synchronize]; resolve(nil); } else { reject(@"APP_GROUP_ERROR", @"Failed to access App Group UserDefaults", nil); } } @catch (NSException *exception) { reject(@"SET_STRING_ERROR", exception.reason, nil); } } RCT_EXPORT_METHOD(getString:(NSString *)groupId key:(NSString *)key resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { @try { NSUserDefaults *defaults = [self getAppGroupUserDefaults]; if (defaults) { NSString *value = [defaults stringForKey:key]; resolve(value ?: [NSNull null]); } else { reject(@"APP_GROUP_ERROR", @"Failed to access App Group UserDefaults", nil); } } @catch (NSException *exception) { reject(@"GET_STRING_ERROR", exception.reason, nil); } } RCT_EXPORT_METHOD(setNumber:(NSString *)groupId key:(NSString *)key value:(nonnull NSNumber *)value resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { @try { NSUserDefaults *defaults = [self getAppGroupUserDefaults]; if (defaults) { [defaults setObject:value forKey:key]; [defaults synchronize]; resolve(nil); } else { reject(@"APP_GROUP_ERROR", @"Failed to access App Group UserDefaults", nil); } } @catch (NSException *exception) { reject(@"SET_NUMBER_ERROR", exception.reason, nil); } } RCT_EXPORT_METHOD(getNumber:(NSString *)groupId key:(NSString *)key resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { @try { NSUserDefaults *defaults = [self getAppGroupUserDefaults]; if (defaults) { NSNumber *value = [defaults objectForKey:key]; resolve(value ?: @0); } else { reject(@"APP_GROUP_ERROR", @"Failed to access App Group UserDefaults", nil); } } @catch (NSException *exception) { reject(@"GET_NUMBER_ERROR", exception.reason, nil); } } RCT_EXPORT_METHOD(removeKey:(NSString *)groupId key:(NSString *)key resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { @try { NSUserDefaults *defaults = [self getAppGroupUserDefaults]; if (defaults) { [defaults removeObjectForKey:key]; [defaults synchronize]; resolve(nil); } else { reject(@"APP_GROUP_ERROR", @"Failed to access App Group UserDefaults", nil); } } @catch (NSException *exception) { reject(@"REMOVE_KEY_ERROR", exception.reason, nil); } } RCT_EXPORT_METHOD(setArray:(NSString *)groupId key:(NSString *)key value:(NSArray *)value resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { @try { NSUserDefaults *defaults = [self getAppGroupUserDefaults]; if (defaults) { [defaults setObject:value forKey:key]; [defaults synchronize]; resolve(nil); } else { reject(@"APP_GROUP_ERROR", @"Failed to access App Group UserDefaults", nil); } } @catch (NSException *exception) { reject(@"SET_ARRAY_ERROR", exception.reason, nil); } } RCT_EXPORT_METHOD(getArray:(NSString *)groupId key:(NSString *)key resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { @try { NSUserDefaults *defaults = [self getAppGroupUserDefaults]; if (defaults) { NSArray *value = [defaults arrayForKey:key]; resolve(value ?: [NSNull null]); } else { reject(@"APP_GROUP_ERROR", @"Failed to access App Group UserDefaults", nil); } } @catch (NSException *exception) { reject(@"GET_ARRAY_ERROR", exception.reason, nil); } } @end