3030
3131static NSMutableDictionary * defaultsDictionary;
3232
33- @implementation NSUserDefaultsOverrider
33+ @implementation NSUserDefaultsOverrider {
34+ NSString *suiteName;
35+ }
36+
3437+ (void )load {
35- defaultsDictionary = [[NSMutableDictionary alloc ] init ];
38+ defaultsDictionary = [NSMutableDictionary new ];
39+
40+ // Adding helpers to NSUserDefaults to be used internally
41+ injectToProperClass (@selector (getObjectForKey: ), @selector (getObjectForKey: ), @[], [NSUserDefaultsOverrider class ], [NSUserDefaults class ]);
42+ injectToProperClass (@selector (setObjectForKey:withValue: ), @selector (setObjectForKey:withValue: ), @[], [NSUserDefaultsOverrider class ], [NSUserDefaults class ]);
43+
44+ // initWithSuiteName overrider
45+ injectToProperClass (@selector (overrideInitWithSuiteName: ), @selector (initWithSuiteName: ), @[], [NSUserDefaultsOverrider class ], [NSUserDefaults class ]);
3646
3747 // Sets
3848 injectToProperClass (@selector (overrideSetObject:forKey: ), @selector (setObject:forKey: ), @[], [NSUserDefaultsOverrider class ], [NSUserDefaults class ]);
@@ -50,59 +60,83 @@ + (void)load {
5060}
5161
5262+ (void )clearInternalDictionary {
53- defaultsDictionary = [[NSMutableDictionary alloc ] init ];
63+ defaultsDictionary = [NSMutableDictionary new ];
64+ }
65+
66+ - (nullable instancetype )overrideInitWithSuiteName : (nullable NSString *)suitename {
67+ suiteName = suitename;
68+ return [self overrideInitWithSuiteName: suitename];
69+ }
70+
71+ - (void )setObjectForKey : (NSString *)key withValue : (id )value {
72+ if (!suiteName)
73+ suiteName = @" default" ;
74+
75+ if (!defaultsDictionary[suiteName])
76+ defaultsDictionary[suiteName] = [NSMutableDictionary new ];
77+
78+ defaultsDictionary[suiteName][key] = value;
5479}
5580
5681// Sets
5782-(void )overrideSetObject : (id )value forKey : (NSString *)key {
58- defaultsDictionary[ key] = value;
83+ [ self setObjectForKey: key withValue: value] ;
5984}
6085
6186-(void )overrideSetString : (NSString *)value forKey : (NSString *)key {
62- defaultsDictionary[ key] = value;
87+ [ self setObjectForKey: key withValue: value] ;
6388}
6489
6590- (void )overrideSetDouble : (double )value forKey : (NSString *)key {
66- defaultsDictionary[ key] = [NSNumber numberWithDouble: value];
91+ [ self setObjectForKey: key withValue: [NSNumber numberWithDouble: value] ];
6792}
6893
6994- (void )overrideSetBool : (BOOL )value forKey : (NSString *)key {
70- defaultsDictionary[ key] = [NSNumber numberWithBool: value];
95+ [ self setObjectForKey: key withValue: [NSNumber numberWithBool: value] ];
7196}
7297
7398- (void )overrideSetInteger : (NSInteger )value forKey : (NSString *)key {
74- defaultsDictionary[key] = [NSNumber numberWithInteger: value];
99+ [self setObjectForKey: key withValue: [NSNumber numberWithInteger: value]];
100+ }
101+
102+ - (id )getObjectForKey : (NSString *)key {
103+ if (!suiteName)
104+ suiteName = @" default" ;
105+
106+ if (!defaultsDictionary[suiteName])
107+ defaultsDictionary[suiteName] = [NSMutableDictionary new ];
108+
109+ return defaultsDictionary[suiteName][key];
75110}
76111
77112// Gets
78113- (nullable id )overrideObjectForKey : (NSString *)key {
79114 if ([key isEqualToString: @" XCTIDEConnectionTimeout" ])
80115 return [NSNumber numberWithInt: 60 ];
81116
82- return defaultsDictionary[ key];
117+ return [ self getObjectForKey: key];
83118}
84119
85120- (NSString *)overrideStringForKey : (NSString *)key {
86- return defaultsDictionary[ key];
121+ return [ self getObjectForKey: key];
87122}
88123
89124- (NSInteger )overrideIntegerForKey : (NSString *)key {
90125 if ([key isEqualToString: @" XCTIDEConnectionTimeout" ])
91126 return 60.0 ;
92127
93- return [defaultsDictionary[ key] integerValue ];
128+ return [[ self getObjectForKey: key] integerValue ];
94129}
95130
96131- (double )overrideDoubleForKey : (NSString *)key {
97132 if ([key isEqualToString: @" XCTIDEConnectionTimeout" ])
98133 return 60.0 ;
99134
100- return [defaultsDictionary[ key] doubleValue ];
135+ return [[ self getObjectForKey: key] doubleValue ];
101136}
102137
103138- (BOOL )overrideBoolForKey : (NSString *)key {
104- return [defaultsDictionary[ key] boolValue ];
139+ return [[ self getObjectForKey: key] boolValue ];
105140}
106141
107142@end
108-
0 commit comments