diff --git a/Podfile.lock b/Podfile.lock index 4d996a7..172b212 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -16,4 +16,4 @@ SPEC CHECKSUMS: OCMockito: 4981140c9a9ec06c31af40f636e3c0f25f27e6b2 Specta: 96fe05fe5c7348b5223f85e862904f6e832abb14 -COCOAPODS: 0.37.0 +COCOAPODS: 0.38.2 diff --git a/README.md b/README.md index 532f0e7..0ea517b 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,13 @@ UserDefaults.boolForKey('keyForMyBool') }); ``` +#### Writing to user defined suite name +```javascript +//Set the suite name +var suiteName = 'mySuiteName'; +UserDefaults.setSuiteName(suiteName); +// then start reading and writing to UserDefaults as the standardUserDefaults + ### Todos for 1.0 release - [ ] Implement `dataForKey:` diff --git a/RNUserDefaultsIOS.js b/RNUserDefaultsIOS.js index 830f6d2..720febc 100644 --- a/RNUserDefaultsIOS.js +++ b/RNUserDefaultsIOS.js @@ -4,6 +4,7 @@ var { NativeModules } = require('react-native'); var Promise = require('bluebird'); // jshint ignore:line var UserDefaults = NativeModules.RNUserDefaultsIOS; +var _setSuiteName = Promise.promisify(UserDefaults.setUserDefaultsSuiteName); var _setObjectForKey = Promise.promisify(UserDefaults.setObjectForKey); var _setBoolForKey = Promise.promisify(UserDefaults.setBoolForKey); @@ -41,7 +42,10 @@ var UserDefaults = { }, removeItemForKey(key) { return _removeItemForKey(key); - } + }, + setSuiteName(name) { + return _setSuiteName(name); + }, }; module.exports = UserDefaults; diff --git a/RNUserDefaultsIOS.xcodeproj/project.pbxproj b/RNUserDefaultsIOS.xcodeproj/project.pbxproj index a56b012..4c98ac2 100644 --- a/RNUserDefaultsIOS.xcodeproj/project.pbxproj +++ b/RNUserDefaultsIOS.xcodeproj/project.pbxproj @@ -299,6 +299,7 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -339,6 +340,7 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -351,6 +353,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.1; MTL_ENABLE_DEBUG_INFO = NO; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -366,6 +369,7 @@ "$(SRCROOT)/../react-native/React/**", "$(SRCROOT)/node_modules/react-native/React/**", ); + ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -382,6 +386,7 @@ "$(SRCROOT)/../react-native/React/**", "$(SRCROOT)/node_modules/react-native/React/**", ); + ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -392,6 +397,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 809831CEBAB242911E70061A /* Pods-RNUserDefaultsIOSTests.debug.xcconfig */; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", @@ -402,6 +408,7 @@ ); INFOPLIST_FILE = RNUserDefaultsIOSTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -410,12 +417,14 @@ isa = XCBuildConfiguration; baseConfigurationReference = 8A87FCE5AE5E0842B36D1575 /* Pods-RNUserDefaultsIOSTests.release.xcconfig */; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = RNUserDefaultsIOSTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/RNUserDefaultsIOS/RNUserDefaultsIOS.m b/RNUserDefaultsIOS/RNUserDefaultsIOS.m index f869ebe..5713736 100644 --- a/RNUserDefaultsIOS/RNUserDefaultsIOS.m +++ b/RNUserDefaultsIOS/RNUserDefaultsIOS.m @@ -9,34 +9,54 @@ #import "RNUserDefaultsIOS.h" #import "UserDefaultsManager.h" +@interface RNUserDefaultsIOS () + +@property (nonatomic, strong) UserDefaultsManager *userDefaultsManager; + +@end + @implementation RNUserDefaultsIOS RCT_EXPORT_MODULE() +- (id) init +{ + self = [super init]; + if (self) { + _userDefaultsManager = [UserDefaultsManager new]; + } + return self; +} + +RCT_EXPORT_METHOD(setUserDefaultsSuiteName:(NSString *)suiteName callback:(RCTResponseSenderBlock)callback) { + [self.userDefaultsManager setUserDefaultsSuiteName:suiteName]; + callback(@[[NSNull null], @"success"]); +} + RCT_EXPORT_METHOD(setObjectForKey:(id)object key:(NSString *)key callback:(RCTResponseSenderBlock)callback) { - [UserDefaultsManager setObject:object forKey:key]; + [self.userDefaultsManager setObject:object forKey:key]; callback(@[[NSNull null], @"success"]); } RCT_EXPORT_METHOD(setBoolForKey:(BOOL)value key:(NSString *)key callback:(RCTResponseSenderBlock)callback) { - [UserDefaultsManager setBool:value forKey:key]; + [self.userDefaultsManager setBool:value forKey:key]; callback(@[[NSNull null], @"success"]); } RCT_EXPORT_METHOD(removeObjectForKey:(NSString *)key callback:(RCTResponseSenderBlock)callback) { - [UserDefaultsManager removeObjectForKey:key]; + [self.userDefaultsManager removeObjectForKey:key]; callback(@[[NSNull null], @"success"]); } RCT_EXPORT_METHOD(arrayForKey:(NSString *)key callback:(RCTResponseSenderBlock)callback) { - id response = [UserDefaultsManager arrayForKey:key]; + id response = [self.userDefaultsManager arrayForKey:key]; if (response) { @@ -50,7 +70,7 @@ @implementation RNUserDefaultsIOS RCT_EXPORT_METHOD(stringForKey:(NSString *)key callback:(RCTResponseSenderBlock)callback) { - id response = [UserDefaultsManager stringForKey:key]; + id response = [self.userDefaultsManager stringForKey:key]; if (response) { @@ -64,7 +84,7 @@ @implementation RNUserDefaultsIOS RCT_EXPORT_METHOD(objectForKey:(NSString *)key callback:(RCTResponseSenderBlock)callback) { - id response = [UserDefaultsManager objectForKey:key]; + id response = [self.userDefaultsManager objectForKey:key]; if (response) { @@ -78,7 +98,7 @@ @implementation RNUserDefaultsIOS RCT_EXPORT_METHOD(boolForKey:(NSString *)key callback:(RCTResponseSenderBlock)callback) { - bool response = [UserDefaultsManager boolForKey:key]; + bool response = [self.userDefaultsManager boolForKey:key]; callback(@[[NSNull null], [NSNumber numberWithBool:response]]); } diff --git a/RNUserDefaultsIOS/UserDefaultsManager.h b/RNUserDefaultsIOS/UserDefaultsManager.h index f449439..8bf73e9 100644 --- a/RNUserDefaultsIOS/UserDefaultsManager.h +++ b/RNUserDefaultsIOS/UserDefaultsManager.h @@ -10,18 +10,20 @@ @interface UserDefaultsManager : NSObject -+ (void)setObject:(id)object forKey:(NSString *)key; +- (void)setUserDefaultsSuiteName:(NSString *)suiteName; -+ (void)setBool:(bool)value forKey:(NSString *)key; +- (void)setObject:(id)object forKey:(NSString *)key; -+ (void)removeObjectForKey:(NSString *)key; +- (void)setBool:(bool)value forKey:(NSString *)key; -+ (NSArray *)arrayForKey:(NSString *)key; +- (void)removeObjectForKey:(NSString *)key; -+ (NSString *)stringForKey:(NSString *)key; +- (NSArray *)arrayForKey:(NSString *)key; -+ (id)objectForKey:(NSString *)key; +- (NSString *)stringForKey:(NSString *)key; -+ (bool)boolForKey:(NSString *)key; +- (id)objectForKey:(NSString *)key; + +- (bool)boolForKey:(NSString *)key; @end diff --git a/RNUserDefaultsIOS/UserDefaultsManager.m b/RNUserDefaultsIOS/UserDefaultsManager.m index 3c506fc..d261d1e 100644 --- a/RNUserDefaultsIOS/UserDefaultsManager.m +++ b/RNUserDefaultsIOS/UserDefaultsManager.m @@ -8,41 +8,64 @@ #import "UserDefaultsManager.h" +@interface UserDefaultsManager () + +@property (nonatomic, strong) NSUserDefaults *userDefaults; + +@end + @implementation UserDefaultsManager -+ (void)setObject:(id)object forKey:(NSString *)key { +- (id)init +{ + self = [super init]; + if (self) { + _userDefaults = [NSUserDefaults standardUserDefaults]; + } + return self; +} + +- (void)setUserDefaultsSuiteName:(NSString *)suiteName +{ + _userDefaults = [[NSUserDefaults alloc] initWithSuiteName:suiteName]; +} + +- (void)setObject:(id)object forKey:(NSString *)key { - [[NSUserDefaults standardUserDefaults] setObject:object forKey:key]; + [self.userDefaults setObject:object forKey:key]; + [self.userDefaults synchronize]; } -+ (void)setBool:(bool)value forKey:(NSString *)key { +- (void)setBool:(bool)value forKey:(NSString *)key { - [[NSUserDefaults standardUserDefaults] setBool:value forKey:key]; + [self.userDefaults setBool:value forKey:key]; + [self.userDefaults synchronize]; } -+ (void)removeObjectForKey:(NSString *)key { +- (void)removeObjectForKey:(NSString *)key { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:key]; + [self.userDefaults removeObjectForKey:key]; + [self.userDefaults synchronize]; } -+ (NSArray *)arrayForKey:(NSString *)key { +- (NSArray *)arrayForKey:(NSString *)key { - return [[NSUserDefaults standardUserDefaults] arrayForKey:key]; + return [self.userDefaults arrayForKey:key]; } -+ (NSString *)stringForKey:(NSString *)key { +- (NSString *)stringForKey:(NSString *)key { - return [[NSUserDefaults standardUserDefaults] stringForKey:key]; + return [self.userDefaults stringForKey:key]; } -+ (id)objectForKey:(NSString *)key { +- (id)objectForKey:(NSString *)key { - return [[NSUserDefaults standardUserDefaults] objectForKey:key]; + return [self.userDefaults objectForKey:key]; } -+ (bool)boolForKey:(NSString *)key { +- (bool)boolForKey:(NSString *)key { - return [[NSUserDefaults standardUserDefaults] boolForKey:key]; + return [self.userDefaults boolForKey:key]; } @end diff --git a/RNUserDefaultsIOSTests/UserDefaultsManagerSpec.m b/RNUserDefaultsIOSTests/UserDefaultsManagerSpec.m index a5bdfb6..0b6dc06 100644 --- a/RNUserDefaultsIOSTests/UserDefaultsManagerSpec.m +++ b/RNUserDefaultsIOSTests/UserDefaultsManagerSpec.m @@ -27,7 +27,7 @@ @interface UserDefaultsManager (Test) it(@"sets a string for given key", ^{ - [UserDefaultsManager setObject:@"someString" forKey:@"anyKey"]; + [[UserDefaultsManager new] setObject:@"someString" forKey:@"anyKey"]; NSString *sut = [userDefaults objectForKey:@"anyKey"]; @@ -37,7 +37,7 @@ @interface UserDefaultsManager (Test) it(@"sets an array for a given key", ^{ - [UserDefaultsManager setObject:@[@"someStringInAnArray"] forKey:@"anyKey"]; + [[UserDefaultsManager new] setObject:@[@"someStringInAnArray"] forKey:@"anyKey"]; NSArray *sut = [userDefaults arrayForKey:@"anyKey"]; @@ -51,7 +51,7 @@ @interface UserDefaultsManager (Test) it(@"sets a bool for given key", ^{ - [UserDefaultsManager setBool:YES forKey:@"anyKey"]; + [[UserDefaultsManager new] setBool:YES forKey:@"anyKey"]; BOOL sut = [userDefaults boolForKey:@"anyKey"]; @@ -61,7 +61,7 @@ @interface UserDefaultsManager (Test) it(@"sets a different bool for given key", ^{ - [UserDefaultsManager setBool:NO forKey:@"anyKey"]; + [[UserDefaultsManager new] setBool:NO forKey:@"anyKey"]; BOOL sut = [userDefaults boolForKey:@"anyKey"]; @@ -77,7 +77,7 @@ @interface UserDefaultsManager (Test) [userDefaults setObject:@"anyValue" forKey:@"objectToRemove"]; - [UserDefaultsManager removeObjectForKey:@"objectToRemove"]; + [[UserDefaultsManager new] removeObjectForKey:@"objectToRemove"]; expect([userDefaults objectForKey:@"objectToRemove"]).to.beNil(); @@ -87,7 +87,7 @@ @interface UserDefaultsManager (Test) [userDefaults setBool:YES forKey:@"objectToRemove"]; - [UserDefaultsManager removeObjectForKey:@"objectToRemove"]; + [[UserDefaultsManager new] removeObjectForKey:@"objectToRemove"]; expect([userDefaults boolForKey:@"objectToRemove"]).to.equal(NO); @@ -105,7 +105,7 @@ @interface UserDefaultsManager (Test) [userDefaults setValue:@[@"anyArray"] forKey:@"anyArray"]; - NSArray *sut = [UserDefaultsManager arrayForKey:@"anyArray"]; + NSArray *sut = [[UserDefaultsManager new] arrayForKey:@"anyArray"]; expect(sut).to.equal(@[@"anyArray"]); @@ -115,7 +115,7 @@ @interface UserDefaultsManager (Test) [userDefaults setValue:@[@"different", @"array"] forKey:@"anyArray"]; - NSArray *sut = [UserDefaultsManager arrayForKey:@"anyArray"]; + NSArray *sut = [[UserDefaultsManager new] arrayForKey:@"anyArray"]; expect(sut).to.equal(@[@"different", @"array"]); @@ -129,7 +129,7 @@ @interface UserDefaultsManager (Test) [userDefaults setValue:@"anyValue" forKey:@"anyKey"]; - NSString *sut = [UserDefaultsManager stringForKey:@"anyKey"]; + NSString *sut = [[UserDefaultsManager new] stringForKey:@"anyKey"]; expect(sut).to.equal(@"anyValue"); @@ -139,7 +139,7 @@ @interface UserDefaultsManager (Test) [userDefaults setValue:@"aDifferentValue" forKey:@"anyKey"]; - NSString *sut = [UserDefaultsManager stringForKey:@"anyKey"]; + NSString *sut = [[UserDefaultsManager new] stringForKey:@"anyKey"]; expect(sut).to.equal(@"aDifferentValue"); @@ -155,7 +155,7 @@ @interface UserDefaultsManager (Test) [userDefaults setObject:testDict forKey:@"anyKey"]; - NSDictionary *sut = [UserDefaultsManager objectForKey:@"anyKey"]; + NSDictionary *sut = [[UserDefaultsManager new] objectForKey:@"anyKey"]; expect(sut).to.equal(testDict); @@ -167,7 +167,7 @@ @interface UserDefaultsManager (Test) [userDefaults setObject:testDict forKey:@"anyKey"]; - NSDictionary *sut = [UserDefaultsManager objectForKey:@"anyKey"]; + NSDictionary *sut = [[UserDefaultsManager new] objectForKey:@"anyKey"]; expect(sut).to.equal(testDict); @@ -181,7 +181,7 @@ @interface UserDefaultsManager (Test) [userDefaults setBool:YES forKey:@"anyKey"]; - BOOL sut = [UserDefaultsManager boolForKey:@"anyKey"]; + BOOL sut = [[UserDefaultsManager new] boolForKey:@"anyKey"]; expect(sut).to.equal(YES); @@ -191,7 +191,7 @@ @interface UserDefaultsManager (Test) [userDefaults setBool:NO forKey:@"anyKey"]; - BOOL sut = [UserDefaultsManager boolForKey:@"anyKey"]; + BOOL sut = [[UserDefaultsManager new] boolForKey:@"anyKey"]; expect(sut).to.equal(NO);