diff --git a/UnitTests/ObjCTests/MPBackendControllerTests.m b/UnitTests/ObjCTests/MPBackendControllerTests.m index aaa79429a..4735e82a0 100644 --- a/UnitTests/ObjCTests/MPBackendControllerTests.m +++ b/UnitTests/ObjCTests/MPBackendControllerTests.m @@ -17,6 +17,7 @@ #import "MPKitConfiguration.h" #import "MParticleSwift.h" #import "MPBaseTestCase.h" +#import "MPUserDefaultsConnector.h" #if TARGET_OS_IOS == 1 #import @@ -550,7 +551,7 @@ - (void)testBatchCycle { } - (void)testUploadWithDifferentUser { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; //Set up Identity to exist [userDefaults setMPObject:[NSDate date] forKey:kMPLastIdentifiedDate userId:@1]; @@ -1298,7 +1299,7 @@ - (void)testSetUserAttributeKits { kMPRemoteConfigSessionTimeoutKey:@112}; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; } [self.backendController setUserAttribute:@"foo attribute 3" value:@"foo value 3" timestamp:[NSDate date] completionHandler:^(NSString * _Nonnull key, id _Nullable value, MPExecStatus execStatus) {}]; @@ -2173,7 +2174,7 @@ - (void)testUserIdentitiesForUserIdNoInvalidIdTypes { NSArray *userIdentities = @[validUserId]; MParticleUser *currentUser = [[[MParticle sharedInstance] identity] currentUser]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults setMPObject:userIdentities forKey:kMPUserIdentityArrayKey userId:currentUser.userId]; NSArray *currentUserIdentities = [[[MParticle sharedInstance] backendController] userIdentitiesForUserId:currentUser.userId]; @@ -2197,7 +2198,7 @@ - (void)testUserIdentitiesForUserIdOneInvalidIdType { NSArray *userIdentities = @[validUserId, invalidUserId]; MParticleUser *currentUser = [[[MParticle sharedInstance] identity] currentUser]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults setMPObject:userIdentities forKey:kMPUserIdentityArrayKey userId:currentUser.userId]; NSArray *currentUserIdentities = [[[MParticle sharedInstance] backendController] userIdentitiesForUserId:currentUser.userId]; @@ -2226,7 +2227,7 @@ - (void)testUserIdentitiesForUserIdMultipleInvalidIdTypes { NSArray *userIdentities = @[validUserId, invalidUserId, invalidUserId2]; MParticleUser *currentUser = [[[MParticle sharedInstance] identity] currentUser]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults setMPObject:userIdentities forKey:kMPUserIdentityArrayKey userId:currentUser.userId]; NSArray *currentUserIdentities = [[[MParticle sharedInstance] backendController] userIdentitiesForUserId:currentUser.userId]; diff --git a/UnitTests/ObjCTests/MPKitAPITests.m b/UnitTests/ObjCTests/MPKitAPITests.m index deaa84699..f5aec1017 100644 --- a/UnitTests/ObjCTests/MPKitAPITests.m +++ b/UnitTests/ObjCTests/MPKitAPITests.m @@ -7,6 +7,7 @@ #import "MPKitContainer.h" #import "MPKitConfiguration.h" #import "MPIConstants.h" +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; @interface MPKitContainer_PRIVATE () @@ -116,7 +117,7 @@ - (void)testUserIdentities { @"f":@NO } ]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults setMPObject:userIdentities forKey:kMPUserIdentityArrayKey userId:currentUser.userId]; [userDefaults removeMPObjectForKey:@"ua"]; @@ -159,7 +160,7 @@ - (void)testUserAttributeFromCache { @"better data":@"ABC", @"bad data":@"12345" }; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults setMPObject:userAttributes forKey:kMPUserAttributeKey userId:currentUser.userId]; MParticle* mparticle = MParticle.sharedInstance; MPLog* logger = [[MPLog alloc] initWithLogLevel:[MPLog fromRawValue:mparticle.logLevel]]; diff --git a/UnitTests/ObjCTests/MPKitContainerTests.m b/UnitTests/ObjCTests/MPKitContainerTests.m index 74d0c7a3f..a87f0aeb3 100644 --- a/UnitTests/ObjCTests/MPKitContainerTests.m +++ b/UnitTests/ObjCTests/MPKitContainerTests.m @@ -31,6 +31,7 @@ #import "MParticleSwift.h" #import "MPCCPAConsent.h" #import "MPGDPRConsent.h" +#import "MPUserDefaultsConnector.h" @interface MParticle () @@ -136,7 +137,7 @@ - (void)tearDown { } - (void)setUserAttributesAndIdentities { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSDictionary *userAttributes = @{@"Dinosaur":@"T-Rex", @"Arm length":@"Short", @"Height":@20, @@ -193,11 +194,11 @@ - (void)testUpdateKitConfiguration { MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration stateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController]; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; XCTAssertEqualObjects(responseConfig.configuration, [MPUserDefaults restore].configuration); - NSArray *directoryContents = [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getKitConfigurations]; + NSArray *directoryContents = [MPUserDefaultsConnector.userDefaults getKitConfigurations]; for (NSDictionary *kitConfigurationDictionary in directoryContents) { MPKitConfiguration *kitConfiguration = [[MPKitConfiguration alloc] initWithDictionary:kitConfigurationDictionary]; if ([[kitConfiguration integrationId] isEqual:@(42)]){ @@ -214,7 +215,7 @@ - (void)testUpdateKitConfiguration { - (void)testRemoveKitConfiguration { static NSString *const kTestAppId1 = @"cool app key"; static NSString *const kTestAppId2 = @"cool app key 2"; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] resetDefaults]; + [MPUserDefaultsConnector.userDefaults resetDefaults]; [self setUserAttributesAndIdentities]; NSDictionary *configuration1 = @{ @@ -247,7 +248,7 @@ - (void)testRemoveKitConfiguration { MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration stateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController]; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; XCTAssertEqualObjects(responseConfig.configuration, [MPUserDefaults restore].configuration); @@ -258,7 +259,7 @@ - (void)testRemoveKitConfiguration { } XCTAssertEqualObjects(kTestAppId1, appId); - NSArray *directoryContents = [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getKitConfigurations]; + NSArray *directoryContents = [MPUserDefaultsConnector.userDefaults getKitConfigurations]; for (NSDictionary *kitConfigurationDictionary in directoryContents) { MPKitConfiguration *kitConfiguration = [[MPKitConfiguration alloc] initWithDictionary:kitConfigurationDictionary]; if ([[kitConfiguration integrationId] isEqual:@(42)]){ @@ -290,7 +291,7 @@ - (void)testRemoveKitConfiguration { responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration stateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController]; requestTimestamp = [[NSDate date] timeIntervalSince1970]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; XCTAssertEqualObjects(responseConfig.configuration, [MPUserDefaults restore].configuration); @@ -300,7 +301,7 @@ - (void)testRemoveKitConfiguration { } XCTAssertEqualObjects(kTestAppId1, appId2); - directoryContents = [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getKitConfigurations]; + directoryContents = [MPUserDefaultsConnector.userDefaults getKitConfigurations]; for (NSDictionary *kitConfigurationDictionary in directoryContents) { MPKitConfiguration *kitConfiguration = [[MPKitConfiguration alloc] initWithDictionary:kitConfigurationDictionary]; if ([[kitConfiguration integrationId] isEqual:@(42)]){ @@ -321,7 +322,7 @@ - (void)testRemoveKitConfiguration { } - (void)testIsDisabledByBracketConfiguration { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; userDefaults[@"mpid"] = @2; NSDictionary *bracketConfig = @{@"hi":@(0),@"lo":@(0)}; @@ -2867,7 +2868,7 @@ - (void)testForwardEventToSideloadedKit { } - (void)testAppInfoContainsSideloadKitsFlag { - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setSideloadedKitsCount:3]; + [MPUserDefaultsConnector.userDefaults setSideloadedKitsCount:3]; NSDictionary *dict = [[[MPApplication_PRIVATE alloc] init] dictionaryRepresentation]; diff --git a/UnitTests/ObjCTests/MPNetworkCommunicationTests.m b/UnitTests/ObjCTests/MPNetworkCommunicationTests.m index b4f45b88b..8a632ba5b 100644 --- a/UnitTests/ObjCTests/MPNetworkCommunicationTests.m +++ b/UnitTests/ObjCTests/MPNetworkCommunicationTests.m @@ -13,6 +13,7 @@ #import "MPStateMachine.h" #import "MParticleSwift.h" #import "MPIConstants.h" +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; @@ -596,7 +597,7 @@ - (void)testUploadInvalidDeletion { } - (void)testRequestConfigWithDefaultMaxAge { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSNumber *configProvisioned = userDefaults[kMPConfigProvisionedTimestampKey]; NSNumber *maxAge = userDefaults[kMPConfigMaxAgeHeaderKey]; @@ -656,7 +657,7 @@ - (void)testRequestConfigWithDefaultMaxAge { } - (void)testRequestConfigWithManualMaxAge { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; userDefaults[kMPConfigProvisionedTimestampKey] = @5555; MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; @@ -760,7 +761,7 @@ - (void)testRequestConfigWithManualMaxAgeAndInitialAge { XCTAssert(success); }]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults synchronize]; NSNumber *provisionedInterval = userDefaults[kMPConfigProvisionedTimestampKey]; @@ -771,7 +772,7 @@ - (void)testRequestConfigWithManualMaxAgeAndInitialAge { } - (void)testRequestConfigWithManualMaxAgeOverMaxAllowed { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; userDefaults[kMPConfigProvisionedTimestampKey] = @5555; MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; @@ -828,7 +829,7 @@ - (void)testRequestConfigWithManualMaxAgeOverMaxAllowed { } - (void)testRequestConfigWithComplexCacheControlHeader { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; userDefaults[kMPConfigProvisionedTimestampKey] = @5555; MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; diff --git a/UnitTests/ObjCTests/MPResponseConfigTests.m b/UnitTests/ObjCTests/MPResponseConfigTests.m index 1a6e9973d..3ec5751f2 100644 --- a/UnitTests/ObjCTests/MPResponseConfigTests.m +++ b/UnitTests/ObjCTests/MPResponseConfigTests.m @@ -4,6 +4,7 @@ #import "MPIConstants.h" #import "MPStateMachine.h" #import "MPBaseTestCase.h" +#import "MPUserDefaultsConnector.h" @interface MParticle () @@ -88,7 +89,7 @@ - (void)testSaveRestore { kMPRemoteConfigSessionTimeoutKey:@112}; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; configuration = @{kMPRemoteConfigRampKey:@100, kMPRemoteConfigExceptionHandlingModeKey:kMPRemoteConfigExceptionHandlingModeForce, @@ -117,10 +118,10 @@ - (void)testShouldDeleteDueToMaxConfigAgeWhenNil { kMPRemoteConfigSessionTimeoutKey:@112}; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; XCTAssertFalse([MPUserDefaults isOlderThanConfigMaxAgeSeconds]); - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:configuration eTag:eTag requestTimestamp:(requestTimestamp - 10000.0) currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:configuration eTag:eTag requestTimestamp:(requestTimestamp - 10000.0) currentAge:0 maxAge:nil]; XCTAssertFalse([MPUserDefaults isOlderThanConfigMaxAgeSeconds]); [expectation fulfill]; @@ -142,10 +143,10 @@ - (void)testShouldDeleteDueToMaxConfigAge { kMPRemoteConfigSessionTimeoutKey:@112}; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; XCTAssertFalse([MPUserDefaults isOlderThanConfigMaxAgeSeconds]); - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:configuration eTag:eTag requestTimestamp:(requestTimestamp - 100.0) currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:configuration eTag:eTag requestTimestamp:(requestTimestamp - 100.0) currentAge:0 maxAge:nil]; XCTAssertTrue([MPUserDefaults isOlderThanConfigMaxAgeSeconds]); [expectation fulfill]; @@ -166,16 +167,16 @@ - (void)testDeleteDueToMaxConfigAge { kMPRemoteConfigExceptionHandlingModeKey:kMPRemoteConfigExceptionHandlingModeForce, kMPRemoteConfigSessionTimeoutKey:@112}; - XCTAssertNil([[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); + XCTAssertNil([MPUserDefaultsConnector.userDefaults getConfiguration]); NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970] - 100.0; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; - XCTAssertNotNil([[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); + [MPUserDefaultsConnector.userDefaults setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + XCTAssertNotNil([MPUserDefaultsConnector.userDefaults getConfiguration]); XCTAssertTrue([MPUserDefaults isOlderThanConfigMaxAgeSeconds]); if ([MPUserDefaults isOlderThanConfigMaxAgeSeconds]) { [MPUserDefaults deleteConfig]; } - XCTAssertNil([[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); + XCTAssertNil([MPUserDefaultsConnector.userDefaults getConfiguration]); [expectation fulfill]; }); diff --git a/UnitTests/ObjCTests/MPRoktTests.m b/UnitTests/ObjCTests/MPRoktTests.m index 70279ed99..9d71b18fa 100644 --- a/UnitTests/ObjCTests/MPRoktTests.m +++ b/UnitTests/ObjCTests/MPRoktTests.m @@ -8,6 +8,7 @@ #import "MParticleSwift.h" #import "MPRoktEvent.h" #import "MPIConstants.h" +#import "MPUserDefaultsConnector.h" @interface MPRokt () - (NSArray *> *)getRoktPlacementAttributesMapping; @@ -416,7 +417,7 @@ - (void)testTriggeredIdentifyWithNoIdentities { - (void)testTriggeredIdentifyWithMismatchedEmailIdentity { MParticleUser *currentUser = [MParticle sharedInstance].identity.currentUser; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSArray *userIdentityArray = @[@{@"n" : [NSNumber numberWithLong:MPUserIdentityEmail], @"i" : @"test@yahoo.com"}]; @@ -486,7 +487,7 @@ - (void)testTriggeredIdentifyWithMismatchedOther10Identity { - (void)hashedIdentityTest: (MPIdentity)mpIdentity { MParticleUser *currentUser = [MParticle sharedInstance].identity.currentUser; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSArray *userIdentityArray = @[@{@"n" : [NSNumber numberWithLong:mpIdentity], @"i" : @"test@yahoo.com"}]; @@ -518,7 +519,7 @@ - (void)hashedIdentityTest: (MPIdentity)mpIdentity { - (void)testDontTriggerIdentifyWithNoRoktHashedEmailUserIdentityType { MParticleUser *currentUser = [MParticle sharedInstance].identity.currentUser; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSArray *userIdentityArray = @[@{@"n" : [NSNumber numberWithLong:MPIdentityOther], @"i" : @"test@yahoo.com"}]; @@ -550,7 +551,7 @@ - (void)testDontTriggerIdentifyWithNoRoktHashedEmailUserIdentityType { - (void)testTriggeredIdentifyWithNoRoktHashedEmailUserIdentityType { MParticleUser *currentUser = [MParticle sharedInstance].identity.currentUser; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSArray *userIdentityArray = @[@{@"n" : [NSNumber numberWithLong:MPIdentityOther], @"i" : @"test@yahoo.com"}]; diff --git a/UnitTests/ObjCTests/MPURLRequestBuilderTests.m b/UnitTests/ObjCTests/MPURLRequestBuilderTests.m index 883ba9747..41ab355f2 100644 --- a/UnitTests/ObjCTests/MPURLRequestBuilderTests.m +++ b/UnitTests/ObjCTests/MPURLRequestBuilderTests.m @@ -18,6 +18,7 @@ #import "MPURL.h" #import "MPUpload.h" #import "MParticleSwift.h" +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; @@ -250,7 +251,7 @@ - (void)testEtag { kMPRemoteConfigSessionTimeoutKey:@112}; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:responseConfiguration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:responseConfiguration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPURLRequestBuilder *urlRequestBuilder = [MPURLRequestBuilder newBuilderWithURL:[networkCommunication configURL] message:nil httpMethod:@"GET"]; diff --git a/UnitTests/ObjCTests/MPUserDefaultsTests.m b/UnitTests/ObjCTests/MPUserDefaultsTests.m index a0fa4fa92..e83a101f9 100644 --- a/UnitTests/ObjCTests/MPUserDefaultsTests.m +++ b/UnitTests/ObjCTests/MPUserDefaultsTests.m @@ -6,6 +6,7 @@ #import "MPKitContainer.h" #import "MPStateMachine.h" #import "MParticleSwift.h" +#import "MPUserDefaultsConnector.h" @interface MParticle () @@ -42,15 +43,15 @@ - (void)tearDown { } kitContainer = nil; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setSharedGroupIdentifier:nil]; + [MPUserDefaultsConnector.userDefaults setSharedGroupIdentifier:nil]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] resetDefaults]; + [MPUserDefaultsConnector.userDefaults resetDefaults]; [super tearDown]; } - (void)testUserIDsInUserDefaults { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults setMPObject:[NSDate date] forKey:@"lud" userId:@1]; [userDefaults setMPObject:[NSDate date] forKey:@"lud" userId:[NSNumber numberWithLongLong:INT64_MAX]]; @@ -65,7 +66,7 @@ - (void)testUserIDsInUserDefaults { } - (void)testResetDefaults { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults setMPObject:[NSDate date] forKey:@"lud" userId:@1]; [userDefaults setMPObject:[NSDate date] forKey:@"lud" userId:[NSNumber numberWithLongLong:INT64_MAX]]; @@ -85,7 +86,7 @@ - (void)testResetDefaults { } - (void)testMigrate { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults setObject:@"test" forKeyedSubscript:@"mparticleKey"]; @@ -98,7 +99,7 @@ - (void)testMigrate { } - (void)testMigrateGroupDoesNotMigrateClientDefaults { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [[NSUserDefaults standardUserDefaults] setObject:@"clientSetting" forKey:@"clientKey"]; @@ -109,7 +110,7 @@ - (void)testMigrateGroupDoesNotMigrateClientDefaults { } - (void)testMigrateGroupWithMultipleUsers { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults setMPObject:[NSDate date] forKey:@"lud" userId:@1]; [userDefaults setMPObject:[NSDate date] forKey:@"lud" userId:[NSNumber numberWithLongLong:INT64_MAX]]; @@ -150,9 +151,9 @@ - (void)testValidConfiguration { kMPRemoteConfigSessionTimeoutKey:@112}; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:responseConfiguration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:responseConfiguration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; - XCTAssertEqualObjects(responseConfiguration, [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); + XCTAssertEqualObjects(responseConfiguration, [MPUserDefaultsConnector.userDefaults getConfiguration]); } - (void)testUpdateConfigurations { @@ -172,10 +173,10 @@ - (void)testUpdateConfigurations { kMPRemoteConfigSessionTimeoutKey:@112}; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:responseConfiguration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:responseConfiguration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; - XCTAssertNotEqualObjects(nil, [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); - XCTAssertEqualObjects(responseConfiguration, [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); + XCTAssertNotEqualObjects(nil, [MPUserDefaultsConnector.userDefaults getConfiguration]); + XCTAssertEqualObjects(responseConfiguration, [MPUserDefaultsConnector.userDefaults getConfiguration]); NSDictionary *configuration2 = @{ @"id":@312, @@ -190,10 +191,10 @@ - (void)testUpdateConfigurations { kMPRemoteConfigExceptionHandlingModeKey:kMPRemoteConfigExceptionHandlingModeForce, kMPRemoteConfigSessionTimeoutKey:@112}; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:responseConfiguration2 eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:responseConfiguration2 eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; - XCTAssertNotEqualObjects(responseConfiguration, [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); - XCTAssertEqualObjects(responseConfiguration2, [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); + XCTAssertNotEqualObjects(responseConfiguration, [MPUserDefaultsConnector.userDefaults getConfiguration]); + XCTAssertEqualObjects(responseConfiguration2, [MPUserDefaultsConnector.userDefaults getConfiguration]); } - (void)testValidExpandedConfiguration { @@ -221,7 +222,7 @@ - (void)testValidExpandedConfiguration { kMPRemoteConfigExceptionHandlingModeKey:kMPRemoteConfigExceptionHandlingModeForce, kMPRemoteConfigSessionTimeoutKey:@112}; - MPUserDefaults *standardDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *standardDefaults = MPUserDefaultsConnector.userDefaults; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; [standardDefaults setConfiguration:responseConfiguration eTag:eTag requestTimestamp:requestTimestamp currentAge:4000 maxAge:@90000]; @@ -255,7 +256,7 @@ - (void)testValidExpandedConfigurationWithNilCurrentAge { kMPRemoteConfigExceptionHandlingModeKey:kMPRemoteConfigExceptionHandlingModeForce, kMPRemoteConfigSessionTimeoutKey:@112}; - MPUserDefaults *standardDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *standardDefaults = MPUserDefaultsConnector.userDefaults; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; NSString *currentAge; [standardDefaults setConfiguration:responseConfiguration eTag:eTag requestTimestamp:requestTimestamp currentAge:currentAge.doubleValue maxAge:@90000]; @@ -290,7 +291,7 @@ - (void)testValidExpandedConfigurationNoMaxAge { kMPRemoteConfigExceptionHandlingModeKey:kMPRemoteConfigExceptionHandlingModeForce, kMPRemoteConfigSessionTimeoutKey:@112}; - MPUserDefaults *standardDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *standardDefaults = MPUserDefaultsConnector.userDefaults; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; [standardDefaults setConfiguration:responseConfiguration eTag:eTag requestTimestamp:requestTimestamp currentAge:4000 maxAge:@90000]; @@ -305,30 +306,30 @@ - (void)testValidExpandedConfigurationNoMaxAge { } - (void)testDeleteConfiguration { - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] deleteConfiguration]; + [MPUserDefaultsConnector.userDefaults deleteConfiguration]; - XCTAssertNil([[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); + XCTAssertNil([MPUserDefaultsConnector.userDefaults getConfiguration]); } - (void)testBadDataConfiguration { - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] deleteConfiguration]; + [MPUserDefaultsConnector.userDefaults deleteConfiguration]; NSNumber *userID = [[[MParticle sharedInstance] identity] currentUser].userId; unsigned char ch1[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x04, 0x01, 0x00, 0x0F }; NSData *badData = [[NSData alloc] initWithBytes:ch1 length:sizeof(ch1)]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setMPObject:badData forKey:kMResponseConfigurationKey userId:userID]; + [MPUserDefaultsConnector.userDefaults setMPObject:badData forKey:kMResponseConfigurationKey userId:userID]; - XCTAssertNil([[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); + XCTAssertNil([MPUserDefaultsConnector.userDefaults getConfiguration]); } - (void)testMigrateConfiguration { NSNumber *userID = [[[MParticle sharedInstance] identity] currentUser].userId; [[NSUserDefaults standardUserDefaults] removeObjectForKey:kMResponseConfigurationMigrationKey]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] removeMPObjectForKey:kMPHTTPETagHeaderKey userId:userID]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]; + [MPUserDefaultsConnector.userDefaults removeMPObjectForKey:kMPHTTPETagHeaderKey userId:userID]; + [MPUserDefaultsConnector.userDefaults getConfiguration]; XCTAssertNotNil([[NSUserDefaults standardUserDefaults] objectForKey:kMResponseConfigurationMigrationKey]); } @@ -342,13 +343,13 @@ - (void)testNullConfig { } }; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:configuration1 eTag:@"bar" requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:configuration1 eTag:@"bar" requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; - XCTAssertEqualObjects(configuration1, [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); + XCTAssertEqualObjects(configuration1, [MPUserDefaultsConnector.userDefaults getConfiguration]); } - (void)testSetConfigurationWhenNil { - XCTAssertEqualObjects(nil, [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); + XCTAssertEqualObjects(nil, [MPUserDefaultsConnector.userDefaults getConfiguration]); [MPPersistenceController_PRIVATE setMpid:@12]; @@ -375,9 +376,9 @@ - (void)testSetConfigurationWhenNil { kMPRemoteConfigSessionTimeoutKey:@112}; NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setConfiguration:responseConfiguration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; + [MPUserDefaultsConnector.userDefaults setConfiguration:responseConfiguration eTag:eTag requestTimestamp:requestTimestamp currentAge:0 maxAge:nil]; - XCTAssertEqualObjects(responseConfiguration, [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration]); + XCTAssertEqualObjects(responseConfiguration, [MPUserDefaultsConnector.userDefaults getConfiguration]); } - (void)testStringFromDeviceToken { diff --git a/UnitTests/ObjCTests/MPUserIdentityChangeTests.m b/UnitTests/ObjCTests/MPUserIdentityChangeTests.m index 1a87f9909..fd592fff2 100644 --- a/UnitTests/ObjCTests/MPUserIdentityChangeTests.m +++ b/UnitTests/ObjCTests/MPUserIdentityChangeTests.m @@ -6,6 +6,7 @@ #import "MPBackendController.h" #import "MParticleSwift.h" #import "MPBaseTestCase.h" +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; @interface MParticle () @@ -28,7 +29,7 @@ - (void)testUserIdentityRequest { MParticleUser *currentUser = [[MParticle sharedInstance].identity currentUser]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSArray *userIdentityArray = @[@{@"n" : [NSNumber numberWithLong:MPIdentityCustomerId], @"i" : @"test"}, @{@"n" : [NSNumber numberWithLong:MPIdentityEmail], @"i" : @"test@example.com"}, @{@"n" : [NSNumber numberWithLong:MPIdentityIOSAdvertiserId], @"i" : @"exampleIDFA"}]; [userDefaults setMPObject:userIdentityArray forKey:kMPUserIdentityArrayKey userId:currentUser.userId]; @@ -46,7 +47,7 @@ - (void)testSelectedUserIdentityRequest { NSNumber *selectedUserID = [NSNumber numberWithInteger:58591]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; //Set up Identity to exist [userDefaults setMPObject:[NSDate date] forKey:kMPLastIdentifiedDate userId:selectedUserID]; diff --git a/UnitTests/ObjCTests/MParticleTests.m b/UnitTests/ObjCTests/MParticleTests.m index 2ee866af2..148df9fa6 100644 --- a/UnitTests/ObjCTests/MParticleTests.m +++ b/UnitTests/ObjCTests/MParticleTests.m @@ -17,6 +17,7 @@ #import "MPIConstants.h" #import "MPForwardQueueParameters.h" #import "MPCCPAConsent.h" +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; @interface MParticle () @@ -203,7 +204,7 @@ - (void)testNoAutoTrackingManualEndSession { #if TARGET_OS_IOS == 1 - (void)testAutoTrackingContentAvail { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSData *testDeviceToken = [@"<000000000000000000000000000000>" dataUsingEncoding:NSUTF8StringEncoding]; userDefaults[kMPDeviceTokenKey] = testDeviceToken; @@ -810,9 +811,7 @@ - (void)testSetATTStatusNotDetermined { XCTAssertEqual(instance.stateMachine.attAuthorizationStatus.intValue, MPATTAuthorizationStatusNotDetermined); XCTAssert(instance.stateMachine.attAuthorizationTimestamp); MPLog* logger = [[MPLog alloc] initWithLogLevel:MPILogLevelSwiftDebug]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:instance.stateMachine - backendController:instance.backendController - identity:instance.identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; MPDevice *device = [[MPDevice alloc] initWithStateMachine:(id)instance.stateMachine userDefaults:(id)userDefaults identity:(id)instance.identity @@ -845,9 +844,7 @@ - (void)testSetATTStatusRestricted { XCTAssert(instance.stateMachine.attAuthorizationTimestamp); MPLog* logger = [[MPLog alloc] initWithLogLevel:MPILogLevelSwiftDebug]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:instance.stateMachine - backendController:instance.backendController - identity:instance.identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; MPDevice *device = [[MPDevice alloc] initWithStateMachine:(id)instance.stateMachine userDefaults:(id)userDefaults identity:(id)instance.identity @@ -880,9 +877,7 @@ - (void)testSetATTStatusDenied { XCTAssert(instance.stateMachine.attAuthorizationTimestamp); MPLog* logger = [[MPLog alloc] initWithLogLevel:MPILogLevelSwiftDebug]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:instance.stateMachine - backendController:instance.backendController - identity:instance.identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; MPDevice *device = [[MPDevice alloc] initWithStateMachine:(id)instance.stateMachine userDefaults:(id)userDefaults identity:(id)instance.identity @@ -915,9 +910,7 @@ - (void)testSetATTStatusAuthorized { XCTAssert(instance.stateMachine.attAuthorizationTimestamp); MPLog* logger = [[MPLog alloc] initWithLogLevel:MPILogLevelSwiftDebug]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:instance.stateMachine - backendController:instance.backendController - identity:instance.identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; MPDevice *device = [[MPDevice alloc] initWithStateMachine:(id)instance.stateMachine userDefaults:(id)userDefaults identity:(id)instance.identity @@ -951,7 +944,7 @@ - (void)testSetATTStatusWithTimestamp { XCTAssertEqual(instance.stateMachine.attAuthorizationTimestamp.doubleValue, testTimestamp.doubleValue); MPLog* logger = [[MPLog alloc] initWithLogLevel:MPILogLevelSwiftDebug]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:instance.stateMachine backendController:instance.backendController identity:instance.identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; MPDevice *device = [[MPDevice alloc] initWithStateMachine:(id)instance.stateMachine userDefaults:(id)userDefaults identity:(id)instance.identity @@ -984,9 +977,7 @@ - (void)testSetATTStatusRemoveIDFA { XCTAssert(instance.stateMachine.attAuthorizationTimestamp); MPLog* logger = [[MPLog alloc] initWithLogLevel:MPILogLevelSwiftDebug]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:instance.stateMachine - backendController:instance.backendController - identity:instance.identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; MPDevice *device = [[MPDevice alloc] initWithStateMachine:(id)instance.stateMachine userDefaults:(id)userDefaults identity:(id)instance.identity diff --git a/mParticle-Apple-SDK.xcodeproj/project.pbxproj b/mParticle-Apple-SDK.xcodeproj/project.pbxproj index 6307ccf73..4d93df136 100644 --- a/mParticle-Apple-SDK.xcodeproj/project.pbxproj +++ b/mParticle-Apple-SDK.xcodeproj/project.pbxproj @@ -38,6 +38,8 @@ 35E3FCCD2E54975C00DB5B18 /* MParticleSession+MParticlePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E3FCCB2E54975C00DB5B18 /* MParticleSession+MParticlePrivate.h */; }; 35E3FCCF2E54978C00DB5B18 /* MParticleSession+MParticlePrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 35E3FCCE2E54978C00DB5B18 /* MParticleSession+MParticlePrivate.m */; }; 35E3FCD32E549AF500DB5B18 /* MParticleSession+MParticlePrivateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35E3FCD12E549AED00DB5B18 /* MParticleSession+MParticlePrivateTests.swift */; }; + 35F99CF72F31345C00820648 /* MPUserDefaultsConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = 35F99CF62F31345900820648 /* MPUserDefaultsConnector.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 35F99CF92F31346500820648 /* MPUserDefaultsConnector.m in Sources */ = {isa = PBXBuildFile; fileRef = 35F99CF82F31346200820648 /* MPUserDefaultsConnector.m */; }; 530D24822CFF72D9000FE7E3 /* MPConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 530D24812CFF72D4000FE7E3 /* MPConstants.swift */; }; 531BCF352B28A23400F5C573 /* MPIdentityCaching.h in Headers */ = {isa = PBXBuildFile; fileRef = 531BCF322B28A23400F5C573 /* MPIdentityCaching.h */; }; 531BCF372B28A23400F5C573 /* MPIdentityCaching.m in Sources */ = {isa = PBXBuildFile; fileRef = 531BCF332B28A23400F5C573 /* MPIdentityCaching.m */; }; @@ -278,7 +280,8 @@ D33C8B342B8510C20012EDFD /* MPAudience.h in Headers */ = {isa = PBXBuildFile; fileRef = D33C8B312B8510C20012EDFD /* MPAudience.h */; settings = {ATTRIBUTES = (Public, ); }; }; D33C8B362B8510C20012EDFD /* MPAudience.m in Sources */ = {isa = PBXBuildFile; fileRef = D33C8B322B8510C20012EDFD /* MPAudience.m */; }; D342860A2D3806E600FEC2C8 /* MPUserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = D34286082D3806CF00FEC2C8 /* MPUserDefaults.swift */; }; - D34286102D419CB800FEC2C8 /* MPUploadSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D342860E2D419CA700FEC2C8 /* MPUploadSettings.swift */; }; + D34286122D419CB800FEC2C8 /* MPUploadSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = D342860F2D419CA700FEC2C8 /* MPUploadSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D34286132D419CB800FEC2C8 /* MPUploadSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = D34286112D419CA700FEC2C8 /* MPUploadSettings.m */; }; D356E0252CFE08ED0020898D /* MPResponseConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = D356E0232CFE08ED0020898D /* MPResponseConfig.swift */; }; D3724C192AE02AF60074CD67 /* mParticle_Apple_SDK_NoLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = D3724C182AE02AF60074CD67 /* mParticle_Apple_SDK_NoLocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; D3CEDACB2CB027E1001B32DE /* MPConvertJS.h in Headers */ = {isa = PBXBuildFile; fileRef = D3CEDAC92CB027E1001B32DE /* MPConvertJS.h */; }; @@ -355,6 +358,8 @@ 35E3FCCB2E54975C00DB5B18 /* MParticleSession+MParticlePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MParticleSession+MParticlePrivate.h"; sourceTree = ""; }; 35E3FCCE2E54978C00DB5B18 /* MParticleSession+MParticlePrivate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "MParticleSession+MParticlePrivate.m"; sourceTree = ""; }; 35E3FCD12E549AED00DB5B18 /* MParticleSession+MParticlePrivateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MParticleSession+MParticlePrivateTests.swift"; sourceTree = ""; }; + 35F99CF62F31345900820648 /* MPUserDefaultsConnector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPUserDefaultsConnector.h; sourceTree = ""; }; + 35F99CF82F31346200820648 /* MPUserDefaultsConnector.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPUserDefaultsConnector.m; sourceTree = ""; }; 530D24812CFF72D4000FE7E3 /* MPConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPConstants.swift; sourceTree = ""; }; 531BCF322B28A23400F5C573 /* MPIdentityCaching.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPIdentityCaching.h; sourceTree = ""; }; 531BCF332B28A23400F5C573 /* MPIdentityCaching.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPIdentityCaching.m; sourceTree = ""; }; @@ -608,7 +613,8 @@ D33C8B312B8510C20012EDFD /* MPAudience.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPAudience.h; sourceTree = ""; }; D33C8B322B8510C20012EDFD /* MPAudience.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPAudience.m; sourceTree = ""; }; D34286082D3806CF00FEC2C8 /* MPUserDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPUserDefaults.swift; sourceTree = ""; }; - D342860E2D419CA700FEC2C8 /* MPUploadSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPUploadSettings.swift; sourceTree = ""; }; + D342860F2D419CA700FEC2C8 /* MPUploadSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPUploadSettings.h; sourceTree = ""; }; + D34286112D419CA700FEC2C8 /* MPUploadSettings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPUploadSettings.m; sourceTree = ""; }; D356E0232CFE08ED0020898D /* MPResponseConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPResponseConfig.swift; sourceTree = ""; }; D3724C182AE02AF60074CD67 /* mParticle_Apple_SDK_NoLocation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mParticle_Apple_SDK_NoLocation.h; sourceTree = ""; }; D3B3E2062AE028EC001AB58C /* mParticle_Apple_SDK.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mParticle_Apple_SDK.h; sourceTree = ""; }; @@ -743,6 +749,9 @@ 53A79A7B29CCCD6400E7489F /* mParticle-Apple-SDK */ = { isa = PBXGroup; children = ( + + 35F99CF62F31345900820648 /* MPUserDefaultsConnector.h */, + 35F99CF82F31346200820648 /* MPUserDefaultsConnector.m */, 7213DE822F30F0EC0007A619 /* SceneDelegateHandler.m */, 3513083F2E6B28F5002A3AD6 /* Executor.h */, 729721752EAC2AD60045E55C /* AppEnvironmentProvider.h */, @@ -898,7 +907,8 @@ isa = PBXGroup; children = ( D34286082D3806CF00FEC2C8 /* MPUserDefaults.swift */, - D342860E2D419CA700FEC2C8 /* MPUploadSettings.swift */, + D342860F2D419CA700FEC2C8 /* MPUploadSettings.h */, + D34286112D419CA700FEC2C8 /* MPUploadSettings.m */, 53A79B0229CDFB1F00E7489F /* MPMessageBuilder.m */, D3CEDACA2CB027E1001B32DF /* MPConvertJS.m */, D3CEDAC92CB027E1001B32DE /* MPConvertJS.h */, @@ -1255,7 +1265,9 @@ 351308432E6B28F5002A3AD6 /* Executor.h in Headers */, 35C3DE712F2919B40077C0FD /* MPCCPAConsent.h in Headers */, 35C3DE752F291DAF0077C0FD /* MPGDPRConsent.h in Headers */, + 35F99CF72F31345C00820648 /* MPUserDefaultsConnector.h in Headers */, 35E3FCCD2E54975C00DB5B18 /* MParticleSession+MParticlePrivate.h in Headers */, + D34286122D419CB800FEC2C8 /* MPUploadSettings.h in Headers */, 53A79D3029CE23F700E7489F /* MPConnectorResponseProtocol.h in Headers */, 53A79D3229CE23F700E7489F /* MPConnectorFactoryProtocol.h in Headers */, 53A79D3329CE23F700E7489F /* MPNetworkCommunication.h in Headers */, @@ -1589,6 +1601,7 @@ 53A79D6D29CE23F700E7489F /* MPCustomModulePreference.m in Sources */, 53A79D6E29CE23F700E7489F /* FilteredMPIdentityApiRequest.m in Sources */, 53A79D6F29CE23F700E7489F /* mParticle.m in Sources */, + 35F99CF92F31346500820648 /* MPUserDefaultsConnector.m in Sources */, 53A79D7029CE23F700E7489F /* MPProduct.m in Sources */, 35329FF32E54CA78009AC4FD /* MParticleOptions+MParticlePrivate.m in Sources */, 53A79D7129CE23F700E7489F /* MPPersistenceController.m in Sources */, @@ -1650,7 +1663,7 @@ 53A79DAB29CE23F700E7489F /* MPEvent.m in Sources */, 7E0387822DB913D2003B7D5E /* MPRokt.m in Sources */, 35E3FCC02E53B55900DB5B18 /* MPAttributionResult+MParticlePrivate.m in Sources */, - D34286102D419CB800FEC2C8 /* MPUploadSettings.swift in Sources */, + D34286132D419CB800FEC2C8 /* MPUploadSettings.m in Sources */, 53A79DAD29CE23F700E7489F /* MPAliasResponse.m in Sources */, B3D778622E02F55F00D887A4 /* MPRoktEvent.m in Sources */, 53A79DAE29CE23F700E7489F /* MPKitFilter.m in Sources */, diff --git a/mParticle-Apple-SDK/Custom Modules/MPCustomModulePreference.m b/mParticle-Apple-SDK/Custom Modules/MPCustomModulePreference.m index 7c857a63c..6826ffad5 100644 --- a/mParticle-Apple-SDK/Custom Modules/MPCustomModulePreference.m +++ b/mParticle-Apple-SDK/Custom Modules/MPCustomModulePreference.m @@ -3,6 +3,7 @@ #import "MParticleSwift.h" #import "MPPersistenceController.h" #import "mParticle.h" +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; @interface MParticle () @@ -175,7 +176,7 @@ - (NSString *)uuidWithNoDashes { #pragma mark Public methods - (id)value { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSString *deprecatedKey = [NSString stringWithFormat:@"cms::%@", self.writeKey]; NSString *customModuleKey = [NSString stringWithFormat:@"cms::%@::%@", self.moduleId, self.writeKey]; diff --git a/mParticle-Apple-SDK/Data Model/MPConsumerInfo.m b/mParticle-Apple-SDK/Data Model/MPConsumerInfo.m index 4ca2e8f75..32d004007 100644 --- a/mParticle-Apple-SDK/Data Model/MPConsumerInfo.m +++ b/mParticle-Apple-SDK/Data Model/MPConsumerInfo.m @@ -4,6 +4,7 @@ #import "MParticleSwift.h" #import "MPPersistenceController.h" #import "mParticle.h" +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; @@ -241,7 +242,7 @@ - (void)configureCookiesWithDictionary:(NSDictionary *)cookiesDictionary { } - (NSDictionary *)localCookiesDictionary { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSDictionary *localCookies = [userDefaults mpObjectForKey:kMPRemoteConfigCookiesKey userId:[MPPersistenceController_PRIVATE mpId]]; if (!localCookies) { @@ -267,7 +268,7 @@ - (NSString *)uniqueIdentifier { return _uniqueIdentifier; } - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; if (userDefaults[kMPRemoteConfigUniqueIdentifierKey]) { _uniqueIdentifier = userDefaults[kMPRemoteConfigUniqueIdentifierKey]; [userDefaults removeMPObjectForKey:kMPRemoteConfigUniqueIdentifierKey]; @@ -291,7 +292,7 @@ - (void)setUniqueIdentifier:(NSString *)uniqueIdentifier { - (NSString *)deviceApplicationStamp { __block NSString *value = nil; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; value = userDefaults[kMPDeviceApplicationStampStorageKey]; if (!value) { diff --git a/mParticle-Apple-SDK/Identity/MPIdentityApi.m b/mParticle-Apple-SDK/Identity/MPIdentityApi.m index c88f44e83..76fc83ab8 100644 --- a/mParticle-Apple-SDK/Identity/MPIdentityApi.m +++ b/mParticle-Apple-SDK/Identity/MPIdentityApi.m @@ -15,6 +15,7 @@ #import "MPKitContainer.h" #import "MPUpload.h" #import "MParticleSwift.h" +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; typedef NS_ENUM(NSUInteger, MPIdentityRequestType) { @@ -169,7 +170,7 @@ - (void)onIdentityRequestComplete:(MPIdentityApiRequest *)request identityReques NSString *userIdsString = session.sessionUserIds; NSMutableArray *userIds = [[userIdsString componentsSeparatedByString:@","] mutableCopy]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; if (user.userId.longLongValue != 0) { [userDefaults setMPObject:[NSDate date] forKey:kMPLastIdentifiedDate userId:user.userId]; @@ -216,7 +217,7 @@ - (void)onIdentityRequestComplete:(MPIdentityApiRequest *)request identityReques - (void)onMPIDChange:(MPIdentityApiRequest *)request httpResponse:(MPIdentityHTTPSuccessResponse *)httpResponse previousUser:(MParticleUser *)previousUser newUser:(MParticleUser *)newUser { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSDate *date = [NSDate date]; NSNumber *dateMs = @([date timeIntervalSince1970] * 1000.0); @@ -312,7 +313,7 @@ - (MParticleUser *)currentUser { } - (MParticleUser *)getUser:(NSNumber *)mpId { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; if ([userDefaults isExistingUserId:mpId]) { MParticleUser *user = [[MParticleUser alloc] init]; user.userId = mpId; @@ -343,7 +344,7 @@ - (MParticleUser *)getUser:(NSNumber *)mpId { } - (NSArray *)getAllUsers { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSMutableArray *userArray = [[NSMutableArray alloc] init]; for (NSNumber *userID in [userDefaults userIDsInUserDefaults]) { @@ -360,9 +361,7 @@ - (NSString *)deviceApplicationStamp { MParticle* mparticle = MParticle.sharedInstance; MPLog* logger = [[MPLog alloc] initWithLogLevel:[MPLog fromRawValue:mparticle.logLevel]]; logger.customLogger = mparticle.customLogger; - MPUserDefaults* userDefaults =[MPUserDefaults standardUserDefaultsWithStateMachine:mparticle.stateMachine - backendController:mparticle.backendController - identity:mparticle.identity]; + MPUserDefaults* userDefaults = MPUserDefaultsConnector.userDefaults; MPDevice *device = [[MPDevice alloc] initWithStateMachine:(id)mparticle.stateMachine userDefaults:(id)userDefaults identity:(id)mparticle.identity diff --git a/mParticle-Apple-SDK/Identity/MPIdentityDTO.m b/mParticle-Apple-SDK/Identity/MPIdentityDTO.m index fb216ab10..cf7cb33f6 100644 --- a/mParticle-Apple-SDK/Identity/MPIdentityDTO.m +++ b/mParticle-Apple-SDK/Identity/MPIdentityDTO.m @@ -8,6 +8,7 @@ #import "MPPersistenceController.h" #import "MPConsumerInfo.h" #import "mParticleSwift.h" +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; @interface MParticle () @@ -62,9 +63,7 @@ - (instancetype)initWithIdentityApiRequest:(MPIdentityApiRequest *)apiRequest { MParticle* mparticle = MParticle.sharedInstance; MPLog* logger = [[MPLog alloc] initWithLogLevel:[MPLog fromRawValue:mparticle.logLevel]]; logger.customLogger = mparticle.customLogger; - MPUserDefaults* userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:mparticle.stateMachine - backendController:mparticle.backendController - identity:mparticle.identity]; + MPUserDefaults* userDefaults = MPUserDefaultsConnector.userDefaults; MPDevice *device = [[MPDevice alloc] initWithStateMachine:(id)mparticle.stateMachine userDefaults:(id)userDefaults identity:(id)mparticle.identity diff --git a/mParticle-Apple-SDK/Identity/MParticleUser.m b/mParticle-Apple-SDK/Identity/MParticleUser.m index 2cf41c27b..b8d021983 100644 --- a/mParticle-Apple-SDK/Identity/MParticleUser.m +++ b/mParticle-Apple-SDK/Identity/MParticleUser.m @@ -11,6 +11,7 @@ #import "MPIConstants.h" #import "MPKitContainer.h" #import "mParticleSwift.h" +#import "MPUserDefaultsConnector.h" @interface MParticleUser () @@ -47,7 +48,7 @@ - (instancetype)init } - (NSDate *)firstSeen { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSNumber *firstSeenMs = [userDefaults mpObjectForKey:kMPFirstSeenUser userId:self.userId]; return [NSDate dateWithTimeIntervalSince1970:firstSeenMs.doubleValue/1000.0]; } @@ -56,13 +57,13 @@ - (NSDate *)lastSeen { if ([MParticle.sharedInstance.identity.currentUser.userId isEqual:self.userId]) { return [NSDate date]; } - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSNumber *lastSeenMs = [userDefaults mpObjectForKey:kMPLastSeenUser userId:self.userId]; return [NSDate dateWithTimeIntervalSince1970:lastSeenMs.doubleValue/1000.0]; } - (NSDictionary*)identities { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSArray *userIdentityArray = [userDefaults mpObjectForKey:kMPUserIdentityArrayKey userId:_userId]; NSMutableDictionary *userIdentities = [NSMutableDictionary dictionary]; @@ -157,7 +158,7 @@ - (void)setIdentitySync:(NSString *)identityString identityType:(MPIdentity)iden return foundMatch; }; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSMutableArray *identities = [[userDefaults mpObjectForKey:kMPUserIdentityArrayKey userId:[MPPersistenceController_PRIVATE mpId]] mutableCopy]; if (!identities) { identities = [[NSMutableArray alloc] init]; diff --git a/mParticle-Apple-SDK/Include/MPBackendController.h b/mParticle-Apple-SDK/Include/MPBackendController.h index b19965f3d..1b7042ca0 100644 --- a/mParticle-Apple-SDK/Include/MPBackendController.h +++ b/mParticle-Apple-SDK/Include/MPBackendController.h @@ -1,4 +1,5 @@ #import "MPEnums.h" +#import "MPUploadSettings.h" #if TARGET_OS_IOS == 1 @class MParticleUserNotification; @@ -13,7 +14,6 @@ @class MPCommerceEvent; @class MPConsentState; @class MParticleSession; -@class MPUploadSettings; @class MPNetworkOptions; @class MPNetworkCommunication_PRIVATE; diff --git a/mParticle-Apple-SDK/Kits/MPKitContainer.m b/mParticle-Apple-SDK/Kits/MPKitContainer.m index a7754e726..7d9d57b87 100644 --- a/mParticle-Apple-SDK/Kits/MPKitContainer.m +++ b/mParticle-Apple-SDK/Kits/MPKitContainer.m @@ -33,6 +33,7 @@ #import "MParticleSwift.h" #import "MPCCPAConsent.h" #import "MPGDPRConsent.h" +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; @@ -288,7 +289,7 @@ - (void)initializeKits { return; } - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSArray *directoryContents = [userDefaults getKitConfigurations]; @@ -1997,7 +1998,7 @@ - (void)configureKits:(NSArray *)kitConfigurations { self.originalConfig = kitConfigurations; NSPredicate *predicate; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSDictionary *userAttributes = userDefaults[kMPUserAttributeKey]; NSArray *userIdentities = userDefaults[kMPUserIdentityArrayKey]; NSArray *supportedKits = [self supportedKits]; @@ -2564,7 +2565,7 @@ - (void)forwardSDKCall:(SEL)selector batch:(NSDictionary *)batch kitHandler:(voi return nil; } - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSArray *> *userIdentities = userDefaults[kMPUserIdentityArrayKey]; __block NSMutableArray *forwardUserIdentities = [[NSMutableArray alloc] initWithCapacity:userIdentities.count]; diff --git a/mParticle-Apple-SDK/MPBackendController.m b/mParticle-Apple-SDK/MPBackendController.m index bc5000d3e..b13064afd 100644 --- a/mParticle-Apple-SDK/MPBackendController.m +++ b/mParticle-Apple-SDK/MPBackendController.m @@ -25,6 +25,7 @@ #import "mParticle.h" #import "MParticleSwift.h" #import "MPNetworkCommunication.h" +#import "MPUserDefaultsConnector.h" #if TARGET_OS_IOS == 1 #import "MPNotificationController.h" #endif @@ -168,7 +169,7 @@ - (void)setSession:(MPSession *)session { } - (NSMutableDictionary *)userAttributesForUserId:(NSNumber *)userId { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSMutableDictionary *userAttributes = [[userDefaults mpObjectForKey:kMPUserAttributeKey userId:userId] mutableCopy]; if (userAttributes) { Class NSStringClass = [NSString class]; @@ -186,7 +187,7 @@ - (void)setSession:(MPSession *)session { - (NSMutableArray *> *)identitiesForUserId:(NSNumber *)userId { NSMutableArray *userIdentities = [[NSMutableArray alloc] initWithCapacity:10]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSArray *userIdentityArray = [userDefaults mpObjectForKey:kMPUserIdentityArrayKey userId:userId]; if (userIdentityArray) { [userIdentities addObjectsFromArray:userIdentityArray]; @@ -215,7 +216,7 @@ - (void)setSession:(MPSession *)session { - (NSMutableArray *> *)userIdentitiesForUserId:(NSNumber *)userId { NSMutableArray *identities = [[NSMutableArray alloc] initWithCapacity:10]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSArray *identityArray = [userDefaults mpObjectForKey:kMPUserIdentityArrayKey userId:userId]; if (identityArray) { [identities addObjectsFromArray:identityArray]; @@ -509,7 +510,7 @@ - (void)setUserAttributeChange:(MPUserAttributeChange *)userAttributeChange comp [self logUserAttributeChange:userAttributeChange]; } - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; userDefaults[kMPUserAttributeKey] = userAttributesCopy; [userDefaults synchronize]; @@ -830,9 +831,7 @@ - (void)beginSessionWithIsManual:(BOOL)isManual date:(NSDate *)date { MParticle* mparticle = MParticle.sharedInstance; MPLog* logger = [[MPLog alloc] initWithLogLevel:[MPLog fromRawValue:mparticle.logLevel]]; logger.customLogger = mparticle.customLogger; - MPUserDefaults* userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:mparticle.stateMachine - backendController:mparticle.backendController - identity:mparticle.identity]; + MPUserDefaults* userDefaults = MPUserDefaultsConnector.userDefaults; MPDevice *device = [[MPDevice alloc] initWithStateMachine:(id)mparticle.stateMachine userDefaults:(id)userDefaults identity:(id)mparticle.identity logger:logger]; @@ -1094,7 +1093,7 @@ - (NSNumber *)incrementUserAttribute:(NSString *)key byValue:(NSNumber *)value { userAttributeChange.timestamp = timestamp; [self setUserAttributeChange:userAttributeChange completionHandler:nil]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; userDefaults[kMPUserAttributeKey] = userAttributesCopy; [userDefaults synchronize]; @@ -1422,7 +1421,7 @@ - (void)startWithKey:(NSString *)apiKey secret:(NSString *)secret networkOptions [MParticle sharedInstance].persistenceController = [[MPPersistenceController_PRIVATE alloc] init]; // Check if we've switched workspaces on startup - MPUploadSettings *lastUploadSettings = [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] lastUploadSettings]; + MPUploadSettings *lastUploadSettings = [MPUserDefaultsConnector.userDefaults lastUploadSettings]; if (![lastUploadSettings.apiKey isEqualToString:apiKey]) { // Different workspace, so batch previous messages under old upload settings before starting [self prepareBatchesForUpload:lastUploadSettings]; @@ -1433,7 +1432,7 @@ - (void)startWithKey:(NSString *)apiKey secret:(NSString *)secret networkOptions // Cache the upload settings in case we switch workspaces on startup MPUploadSettings *uploadSettings = [[MPUploadSettings alloc] initWithApiKey:apiKey secret:secret networkOptions:networkOptions]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setLastUploadSettings:uploadSettings]; + [MPUserDefaultsConnector.userDefaults setLastUploadSettings:uploadSettings]; // Restore cached config if exists (void)[MPUserDefaults restore]; @@ -1756,7 +1755,7 @@ - (void)setUserIdentity:(NSString *)identityString identityType:(MPUserIdentity) if (userIdentityChange.changed) { [self logUserIdentityChange:userIdentityChange]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults setObject:userIdentities forKeyedSubscript:kMPUserIdentityArrayKey]; [userDefaults synchronize]; } @@ -1766,7 +1765,7 @@ - (void)setUserIdentity:(NSString *)identityString identityType:(MPUserIdentity) } - (void)clearUserAttributes { - MPUserDefaults *defaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *defaults = MPUserDefaultsConnector.userDefaults; [defaults removeMPObjectForKey:@"ua"]; [defaults synchronize]; } diff --git a/mParticle-Apple-SDK/MPStateMachine.m b/mParticle-Apple-SDK/MPStateMachine.m index e2d83ccd7..55f171112 100644 --- a/mParticle-Apple-SDK/MPStateMachine.m +++ b/mParticle-Apple-SDK/MPStateMachine.m @@ -14,6 +14,7 @@ #import "MParticleSwift.h" #import "MParticleReachability.h" #import "MPIConstants.h" +#import "MPUserDefaultsConnector.h" #if TARGET_OS_IOS == 1 #import @@ -164,7 +165,7 @@ - (NSString *)storedSDKVersion { return _storedSDKVersion; } - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; _storedSDKVersion = userDefaults[@"storedSDKVersion"]; return _storedSDKVersion; @@ -177,7 +178,7 @@ - (void)setStoredSDKVersion:(NSString *)storedSDKVersion { _storedSDKVersion = storedSDKVersion; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; if (MPIsNull(_storedSDKVersion)) { [userDefaults removeMPObjectForKey:@"storedSDKVersion"]; @@ -418,7 +419,7 @@ - (NSString *)minDefaultsKeyForUploadType:(MPUploadType)uploadType { } - (NSDate *)minUploadDateForUploadType:(MPUploadType)uploadType { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSString *defaultsKey = [self minDefaultsKeyForUploadType:uploadType]; NSDate *minUploadDate = userDefaults[defaultsKey]; if (minUploadDate) { @@ -433,7 +434,7 @@ - (NSDate *)minUploadDateForUploadType:(MPUploadType)uploadType { } - (void)setMinUploadDate:(NSDate *)minUploadDate uploadType:(MPUploadType)uploadType { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSString *defaultsKey = [self minDefaultsKeyForUploadType:uploadType]; if ([minUploadDate compare:[NSDate date]] == NSOrderedDescending) { userDefaults[defaultsKey] = minUploadDate; @@ -447,7 +448,7 @@ - (BOOL)optOut { return _optOut; } - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSNumber *optOutNumber = userDefaults[kMPOptOutStatus]; if (optOutNumber != nil) { _optOut = [optOutNumber boolValue]; @@ -464,7 +465,7 @@ - (void)setOptOut:(BOOL)optOut { _optOut = optOut; optOutSet = YES; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; userDefaults[kMPOptOutStatus] = @(_optOut); } @@ -473,7 +474,7 @@ - (NSNumber *)attAuthorizationStatus { return _attAuthorizationStatus; } - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSNumber *authorizationState = userDefaults[kMPATT]; if (authorizationState.integerValue >= 0 && authorizationState.integerValue <= 3) { @@ -488,7 +489,7 @@ - (NSNumber *)attAuthorizationTimestamp { return _attAuthorizationTimestamp; } - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSNumber *authorizationStateTimestamp = userDefaults[kMPATTTimestamp]; _attAuthorizationTimestamp = authorizationStateTimestamp; @@ -501,7 +502,7 @@ - (void)setAttAuthorizationStatus:(NSNumber *)authorizationState { _attAuthorizationStatus = authorizationState; _attAuthorizationTimestamp = MPCurrentEpochInMilliseconds; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; userDefaults[kMPATT] = _attAuthorizationStatus; userDefaults[kMPATTTimestamp] = _attAuthorizationTimestamp; @@ -518,7 +519,7 @@ - (void)setAttAuthorizationTimestamp:(NSNumber *)timestamp { if (timestamp.doubleValue != _attAuthorizationTimestamp.doubleValue) { _attAuthorizationTimestamp = timestamp; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; userDefaults[kMPATTTimestamp] = _attAuthorizationTimestamp; } } @@ -530,7 +531,7 @@ - (NSString *)pushNotificationMode { [self willChangeValueForKey:@"pushNotificationMode"]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSString *pushNotificationMode = userDefaults[kMPRemoteConfigPushNotificationModeKey]; if (pushNotificationMode) { _pushNotificationMode = pushNotificationMode; @@ -552,7 +553,7 @@ - (void)setPushNotificationMode:(NSString *)pushNotificationMode { _pushNotificationMode = pushNotificationMode; [self didChangeValueForKey:@"pushNotificationMode"]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; userDefaults[kMPRemoteConfigPushNotificationModeKey] = _pushNotificationMode; } @@ -610,9 +611,7 @@ - (void)configureRampPercentage:(NSNumber *)rampPercentage { MParticle* mparticle = MParticle.sharedInstance; MPLog* logger = [[MPLog alloc] initWithLogLevel:[MPLog fromRawValue:mparticle.logLevel]]; logger.customLogger = mparticle.customLogger; - MPUserDefaults* userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:mparticle.stateMachine - backendController:mparticle.backendController - identity:mparticle.identity]; + MPUserDefaults* userDefaults = MPUserDefaultsConnector.userDefaults; MPDevice *device = [[MPDevice alloc] initWithStateMachine:mparticle.stateMachine userDefaults:(id)userDefaults identity:(id)mparticle.identity logger:logger]; diff --git a/mParticle-Apple-SDK/MPUserDefaultsConnector.h b/mParticle-Apple-SDK/MPUserDefaultsConnector.h new file mode 100644 index 000000000..f2b8109ab --- /dev/null +++ b/mParticle-Apple-SDK/MPUserDefaultsConnector.h @@ -0,0 +1,17 @@ +#import "MPBackendController.h" +#import "MPStateMachine.h" +#import "MPIdentityApi.h" +#import "mParticle.h" + +@class MPUserDefaults; + +@interface MPUserDefaultsConnector: NSObject + +- (MPStateMachine_PRIVATE*)stateMachine; +- (MPBackendController_PRIVATE*)backendController; +- (MPIdentityApi*)identity; +- (MParticle*)mparticle; + ++ (MPUserDefaults*)userDefaults; + +@end diff --git a/mParticle-Apple-SDK/MPUserDefaultsConnector.m b/mParticle-Apple-SDK/MPUserDefaultsConnector.m new file mode 100644 index 000000000..9c36bc050 --- /dev/null +++ b/mParticle-Apple-SDK/MPUserDefaultsConnector.m @@ -0,0 +1,39 @@ +#import "MPUserDefaultsConnector.h" +#import "MParticleSwift.h" + +@interface MParticle () + +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; +@property (nonatomic, strong) MPKitContainer_PRIVATE *kitContainer_PRIVATE; +@property (nonatomic, strong, nonnull) MPBackendController_PRIVATE *backendController; + +@end + +@interface MPUserDefaultsConnector() + +@end + +@implementation MPUserDefaultsConnector + +- (MPStateMachine_PRIVATE*)stateMachine { + return MParticle.sharedInstance.stateMachine; +} + +- (MPBackendController_PRIVATE*)backendController { + return MParticle.sharedInstance.backendController; +} + +- (MPIdentityApi*)identity { + return MParticle.sharedInstance.identity; +} + +- (MParticle*)mparticle { + return MParticle.sharedInstance; +} + ++ (MPUserDefaults*)userDefaults { + MPUserDefaultsConnector* connector = [[MPUserDefaultsConnector alloc] init]; + return [MPUserDefaults standardUserDefaultsWithConnector:connector]; +} + +@end diff --git a/mParticle-Apple-SDK/Network/MPNetworkCommunication.m b/mParticle-Apple-SDK/Network/MPNetworkCommunication.m index 5a9a003d0..b6413b6ab 100644 --- a/mParticle-Apple-SDK/Network/MPNetworkCommunication.m +++ b/mParticle-Apple-SDK/Network/MPNetworkCommunication.m @@ -24,7 +24,7 @@ #import "MPIdentityCaching.h" #import "MParticleSwift.h" #import "MPNetworkCommunication.h" - +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; NSString *const urlFormat = @"%@://%@/%@/%@%@"; // Scheme, URL Host, API Version, API key, path @@ -448,7 +448,7 @@ - (NSNumber *)maxAgeForCache:(nonnull NSString *)cache { } - (void)requestConfig:(nullable NSObject *)connector withCompletionHandler:(void(^)(BOOL success))completionHandler { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; BOOL shouldSendRequest = [userDefaults isConfigurationExpired]; if (!shouldSendRequest) { @@ -490,7 +490,7 @@ - (void)requestConfig:(nullable NSObject *)connector withCo MPILogVerbose(@"Config Response Code: %ld, Execution Time: %.2fms", (long)responseCode, ([[NSDate date] timeIntervalSince1970] - start) * 1000.0); if (responseCode == HTTPStatusCodeNotModified) { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults setConfiguration:[userDefaults getConfiguration] eTag:userDefaults[kMPHTTPETagHeaderKey] requestTimestamp:[[NSDate date] timeIntervalSince1970] currentAge:ageString.doubleValue maxAge:maxAge]; completionHandler(YES); @@ -526,7 +526,7 @@ - (void)requestConfig:(nullable NSObject *)connector withCo MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configurationDictionary dataReceivedFromServer:YES stateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController]; MPILogDebug(@"MPResponseConfig init: %@", responseConfig.description); - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; [userDefaults setConfiguration:configurationDictionary eTag:eTag requestTimestamp:[[NSDate date] timeIntervalSince1970] currentAge:ageString.doubleValue maxAge:maxAge]; } @@ -1058,7 +1058,7 @@ - (void)identityApiRequestWithURL:(NSURL*)url identityRequest:(MPIdentityHTTPBas } - (void)identify:(MPIdentityApiRequest *_Nonnull)identifyRequest completion:(nullable MPIdentityApiManagerCallback)completion { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; if (!userDefaults[kMPATT] && identifyRequest.identities[@(MPIdentityIOSAdvertiserId)]) { MPILogDebug(@"The IDFA was supplied but the App Tracking Transparency Status not set with [[MParticle sharedInstance] setATTStatus:withATTStatusTimestampMillis:]"); } @@ -1068,7 +1068,7 @@ - (void)identify:(MPIdentityApiRequest *_Nonnull)identifyRequest completion:(nul } - (void)login:(MPIdentityApiRequest *_Nullable)loginRequest completion:(nullable MPIdentityApiManagerCallback)completion { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; if (!userDefaults[kMPATT] && loginRequest.identities[@(MPIdentityIOSAdvertiserId)]) { MPILogDebug(@"The IDFA was supplied but the App Tracking Transparency Status not set with [[MParticle sharedInstance] setATTStatus:withATTStatusTimestampMillis:]"); } @@ -1079,7 +1079,7 @@ - (void)login:(MPIdentityApiRequest *_Nullable)loginRequest completion:(nullable - (void)logout:(MPIdentityApiRequest *_Nullable)logoutRequest completion:(nullable MPIdentityApiManagerCallback)completion { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; if (!userDefaults[kMPATT] && logoutRequest.identities[@(MPIdentityIOSAdvertiserId)]) { MPILogDebug(@"The IDFA was supplied but the App Tracking Transparency Status not set with [[MParticle sharedInstance] setATTStatus:withATTStatusTimestampMillis:]"); } @@ -1089,7 +1089,7 @@ - (void)logout:(MPIdentityApiRequest *_Nullable)logoutRequest completion:(nullab } - (void)modify:(MPIdentityApiRequest *_Nonnull)modifyRequest completion:(nullable MPIdentityApiManagerModifyCallback)completion { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; if (!userDefaults[kMPATT] && modifyRequest.identities[@(MPIdentityIOSAdvertiserId)]) { MPILogDebug(@"The IDFA was supplied but the App Tracking Transparency Status not set with [[MParticle sharedInstance] setATTStatus:withATTStatusTimestampMillis:]"); } diff --git a/mParticle-Apple-SDK/Network/MPURLRequestBuilder.m b/mParticle-Apple-SDK/Network/MPURLRequestBuilder.m index 317c3fa2f..d19d53116 100644 --- a/mParticle-Apple-SDK/Network/MPURLRequestBuilder.m +++ b/mParticle-Apple-SDK/Network/MPURLRequestBuilder.m @@ -9,6 +9,7 @@ #import "MPURL.h" #import "mParticle.h" #import "MParticleSwift.h" +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; static NSDateFormatter *RFC1123DateFormatter; @@ -213,7 +214,7 @@ - (NSMutableURLRequest *)build { NSString *environment = [NSString stringWithFormat:@"%d", (int)[MPStateMachine_PRIVATE environment]]; [urlRequest setValue:environment forHTTPHeaderField:@"x-mp-env"]; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSString *eTag = userDefaults[kMPHTTPETagHeaderKey]; NSDictionary *config = [userDefaults getConfiguration]; if (eTag && config) { diff --git a/mParticle-Apple-SDK/Notifications/MPNotificationController.m b/mParticle-Apple-SDK/Notifications/MPNotificationController.m index 822310842..49d4f3ed8 100644 --- a/mParticle-Apple-SDK/Notifications/MPNotificationController.m +++ b/mParticle-Apple-SDK/Notifications/MPNotificationController.m @@ -4,6 +4,7 @@ #import "mParticle.h" #import "MPNetworkCommunication.h" #import "MParticleSwift.h" +#import "MPUserDefaultsConnector.h" @interface MParticle () @@ -33,7 +34,7 @@ - (instancetype)init { #pragma mark Public static methods - (NSData *)deviceToken { #ifndef MP_UNIT_TESTING - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; deviceToken = userDefaults[kMPDeviceTokenKey]; #else deviceToken = [@"<000000000000000000000000000000>" dataUsingEncoding:NSUTF8StringEncoding]; @@ -77,7 +78,7 @@ - (void)setDeviceToken:(NSData *)devToken { } #ifndef MP_UNIT_TESTING - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; userDefaults[kMPDeviceTokenKey] = deviceToken; [userDefaults synchronize]; #endif diff --git a/mParticle-Apple-SDK/Persistence/MPIdentityCaching.m b/mParticle-Apple-SDK/Persistence/MPIdentityCaching.m index 4f6d3a434..d34eb0eec 100644 --- a/mParticle-Apple-SDK/Persistence/MPIdentityCaching.m +++ b/mParticle-Apple-SDK/Persistence/MPIdentityCaching.m @@ -10,6 +10,7 @@ #import "mParticle.h" #import #import "MParticleSwift.h" +#import "MPUserDefaultsConnector.h" @interface MParticle () @@ -183,11 +184,11 @@ + (void)clearExpiredCache { #pragma mark - Private + (nullable NSDictionary *)getCache { - return [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] mpObjectForKey:kMPIdentityCachingCachedIdentityCallsKey userId:@0]; + return [MPUserDefaultsConnector.userDefaults mpObjectForKey:kMPIdentityCachingCachedIdentityCallsKey userId:@0]; } + (void)setCache:(nullable NSDictionary *)cache { - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] setMPObject:cache forKey:kMPIdentityCachingCachedIdentityCallsKey userId:@0]; + [MPUserDefaultsConnector.userDefaults setMPObject:cache forKey:kMPIdentityCachingCachedIdentityCallsKey userId:@0]; } + (nullable NSString *)keyWithEndpoint:(MPEndpoint)endpoint identities:(nonnull NSDictionary *)identities { diff --git a/mParticle-Apple-SDK/Persistence/MPPersistenceController.m b/mParticle-Apple-SDK/Persistence/MPPersistenceController.m index a9f7068b1..e4759b10c 100644 --- a/mParticle-Apple-SDK/Persistence/MPPersistenceController.m +++ b/mParticle-Apple-SDK/Persistence/MPPersistenceController.m @@ -19,6 +19,7 @@ #import "MPApplication.h" #import "MParticleSwift.h" #import "MParticleUserNotification.h" +#import "MPUserDefaultsConnector.h" // Prototype declaration of the C functions #pragma clang diagnostic push @@ -108,7 +109,7 @@ - (void)migrateDatabaseIfNeeded { } + (NSNumber *)mpId { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSNumber *mpId = userDefaults[@"mpid"]; if (mpId == nil) { mpId = @0; @@ -118,13 +119,13 @@ + (NSNumber *)mpId { } + (void)setMpid:(NSNumber *)mpId { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; userDefaults[@"mpid"] = mpId; [userDefaults synchronize]; } + (nullable MPConsentState *)consentStateForMpid:(nonnull NSNumber *)mpid { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSString *string = [userDefaults mpObjectForKey:kMPConsentStateKey userId:mpid]; if (!string) { return nil; @@ -139,7 +140,7 @@ + (nullable MPConsentState *)consentStateForMpid:(nonnull NSNumber *)mpid { } + (void)setConsentState:(nullable MPConsentState *)state forMpid:(nonnull NSNumber *)mpid { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; if (!state) { [userDefaults removeMPObjectForKey:kMPConsentStateKey userId:mpid]; [userDefaults synchronize]; diff --git a/mParticle-Apple-SDK/Utils/MPApplication.m b/mParticle-Apple-SDK/Utils/MPApplication.m index 19e249314..ccb6ca9db 100644 --- a/mParticle-Apple-SDK/Utils/MPApplication.m +++ b/mParticle-Apple-SDK/Utils/MPApplication.m @@ -9,6 +9,7 @@ #import "mParticle.h" #import "mParticleSwift.h" #import "MPIConstants.h" +#import "MPUserDefaultsConnector.h" NSString *const kMPApplicationInformationKey = @"ai"; NSString *const kMPApplicationNameKey = @"an"; @@ -99,7 +100,7 @@ - (id)init { return nil; } - userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + userDefaults = MPUserDefaultsConnector.userDefaults; return self; @@ -279,7 +280,7 @@ - (NSString *)version { } - (NSNumber *)sideloadedKitsCount { - NSNumber *sideloadedKitsCount = @([[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] sideloadedKitsCount]); + NSNumber *sideloadedKitsCount = @([MPUserDefaultsConnector.userDefaults sideloadedKitsCount]); return sideloadedKitsCount; } @@ -328,7 +329,7 @@ + (NSString *)appStoreReceipt { } + (void)markInitialLaunchTime { - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSNumber *initialLaunchTime = userDefaults[kMPAppInitialLaunchTimeKey]; if (initialLaunchTime == nil) { diff --git a/mParticle-Apple-SDK/Utils/MPUploadBuilder.m b/mParticle-Apple-SDK/Utils/MPUploadBuilder.m index 73a0518d4..b488665b9 100644 --- a/mParticle-Apple-SDK/Utils/MPUploadBuilder.m +++ b/mParticle-Apple-SDK/Utils/MPUploadBuilder.m @@ -15,6 +15,7 @@ #import "mParticle.h" #import "MPILogger.h" #import "MParticleSwift.h" +#import "MPUserDefaultsConnector.h" @import mParticle_Apple_SDK_Swift; @interface MParticle () @@ -68,7 +69,7 @@ - (nonnull instancetype)initWithMpid:(nonnull NSNumber *)mpid sessionId:(nullabl }]; NSNumber *ltv; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; ltv = [userDefaults mpObjectForKey:kMPLifeTimeValueKey userId:mpid]; if (ltv == nil) { ltv = @0; @@ -163,9 +164,7 @@ - (void)build:(void (^)(MPUpload *upload))completionHandler { MParticle* mparticle = MParticle.sharedInstance; MPLog* logger = [[MPLog alloc] initWithLogLevel:[MPLog fromRawValue:mparticle.logLevel]]; logger.customLogger = mparticle.customLogger; - MPUserDefaults* userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:mparticle.stateMachine - backendController:mparticle.backendController - identity:mparticle.identity]; + MPUserDefaults* userDefaults = MPUserDefaultsConnector.userDefaults; MPDevice *device = [[MPDevice alloc] initWithStateMachine:(id)mparticle.stateMachine userDefaults:(id)userDefaults identity:(id)mparticle.identity diff --git a/mParticle-Apple-SDK/Utils/MPUploadSettings.h b/mParticle-Apple-SDK/Utils/MPUploadSettings.h new file mode 100644 index 000000000..99fe5cb68 --- /dev/null +++ b/mParticle-Apple-SDK/Utils/MPUploadSettings.h @@ -0,0 +1,35 @@ +#import + +@protocol MPStateMachineProtocol; +@class MPNetworkOptions; + +@interface MPUploadSettings : NSObject + +@property (nonatomic, copy, nonnull) NSString *apiKey; +@property (nonatomic, copy, nonnull) NSString *secret; +@property (nonatomic, copy, nullable) NSString *eventsHost; +@property (nonatomic, copy, nullable) NSString *eventsTrackingHost; +@property (nonatomic) BOOL overridesEventsSubdirectory; +@property (nonatomic, copy, nullable) NSString *aliasHost; +@property (nonatomic, copy, nullable) NSString *aliasTrackingHost; +@property (nonatomic) BOOL overridesAliasSubdirectory; +@property (nonatomic) BOOL eventsOnly; + ++ (nonnull instancetype)currentUploadSettingsWithStateMachine:(nonnull id)stateMachine + networkOptions:(nonnull MPNetworkOptions *)networkOptions; + +- (nonnull instancetype)initWithApiKey:(nonnull NSString *)apiKey + secret:(nonnull NSString *)secret + networkOptions:(nonnull MPNetworkOptions *)networkOptions; + +- (nonnull instancetype)initWithApiKey:(nonnull NSString *)apiKey + secret:(nonnull NSString *)secret + eventsHost:(nullable NSString *)eventsHost + eventsTrackingHost:(nullable NSString *)eventsTrackingHost + overridesEventsSubdirectory:(BOOL)overridesEventsSubdirectory + aliasHost:(nullable NSString *)aliasHost + aliasTrackingHost:(nullable NSString *)aliasTrackingHost + overridesAliasSubdirectory:(BOOL)overridesAliasSubdirectory + eventsOnly:(BOOL)eventsOnly; + +@end diff --git a/mParticle-Apple-SDK/Utils/MPUploadSettings.m b/mParticle-Apple-SDK/Utils/MPUploadSettings.m new file mode 100644 index 000000000..bd1188df6 --- /dev/null +++ b/mParticle-Apple-SDK/Utils/MPUploadSettings.m @@ -0,0 +1,119 @@ +#import "MPUploadSettings.h" +#import "MPStateMachine.h" +#import "mParticle.h" + +static NSString *const kApiKey = @"apiKey"; +static NSString *const kSecret = @"secret"; +static NSString *const kEventsHost = @"eventsHost"; +static NSString *const kEventsTrackingHost = @"eventsTrackingHost"; +static NSString *const kOverridesEventsSubdirectory = @"overridesEventsSubdirectory"; +static NSString *const kAliasHost = @"aliasHost"; +static NSString *const kAliasTrackingHost = @"aliasTrackingHost"; +static NSString *const kOverridesAliasSubdirectory = @"overridesAliasSubdirectory"; +static NSString *const kEventsOnly = @"eventsOnly"; + +@implementation MPUploadSettings + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _apiKey = @""; + _secret = @""; + _overridesEventsSubdirectory = NO; + _overridesAliasSubdirectory = NO; + _eventsOnly = NO; + } + return self; +} + +- (id)copyWithZone:(NSZone *)zone { + MPUploadSettings *copy = [[MPUploadSettings alloc] initWithApiKey:self.apiKey + secret:self.secret + eventsHost:self.eventsHost + eventsTrackingHost:self.eventsTrackingHost + overridesEventsSubdirectory:self.overridesEventsSubdirectory + aliasHost:self.aliasHost + aliasTrackingHost:self.aliasTrackingHost + overridesAliasSubdirectory:self.overridesAliasSubdirectory + eventsOnly:self.eventsOnly]; + return copy; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.apiKey forKey:kApiKey]; + [coder encodeObject:self.secret forKey:kSecret]; + [coder encodeObject:self.eventsHost forKey:kEventsHost]; + [coder encodeObject:self.eventsTrackingHost forKey:kEventsTrackingHost]; + [coder encodeBool:self.overridesEventsSubdirectory forKey:kOverridesEventsSubdirectory]; + [coder encodeObject:self.aliasHost forKey:kAliasHost]; + [coder encodeObject:self.aliasTrackingHost forKey:kAliasTrackingHost]; + [coder encodeBool:self.overridesAliasSubdirectory forKey:kOverridesAliasSubdirectory]; + [coder encodeBool:self.eventsOnly forKey:kEventsOnly]; +} + +- (nullable instancetype)initWithCoder:(NSCoder *)coder { + self = [super init]; + if (self) { + _apiKey = [coder decodeObjectOfClass:[NSString class] forKey:kApiKey] ?: @""; + _secret = [coder decodeObjectOfClass:[NSString class] forKey:kSecret] ?: @""; + _eventsHost = [coder decodeObjectOfClass:[NSString class] forKey:kEventsHost]; + _eventsTrackingHost = [coder decodeObjectOfClass:[NSString class] forKey:kEventsTrackingHost]; + _overridesEventsSubdirectory = [coder decodeBoolForKey:kOverridesEventsSubdirectory]; + _aliasHost = [coder decodeObjectOfClass:[NSString class] forKey:kAliasHost]; + _aliasTrackingHost = [coder decodeObjectOfClass:[NSString class] forKey:kAliasTrackingHost]; + _overridesAliasSubdirectory = [coder decodeBoolForKey:kOverridesAliasSubdirectory]; + _eventsOnly = [coder decodeBoolForKey:kEventsOnly]; + } + return self; +} + ++ (nonnull instancetype)currentUploadSettingsWithStateMachine:(nonnull id)stateMachine + networkOptions:(nonnull MPNetworkOptions *)networkOptions { + return [[MPUploadSettings alloc] initWithApiKey:stateMachine.apiKey + secret:stateMachine.secret + networkOptions:networkOptions]; +} + +- (nonnull instancetype)initWithApiKey:(nonnull NSString *)apiKey + secret:(nonnull NSString *)secret + networkOptions:(nonnull MPNetworkOptions *)networkOptions { + return [self initWithApiKey:apiKey + secret:secret + eventsHost:networkOptions.eventsHost + eventsTrackingHost:networkOptions.eventsTrackingHost + overridesEventsSubdirectory:networkOptions.overridesEventsSubdirectory + aliasHost:networkOptions.aliasHost + aliasTrackingHost:networkOptions.aliasTrackingHost + overridesAliasSubdirectory:networkOptions.overridesAliasSubdirectory + eventsOnly:networkOptions.eventsOnly]; +} + +- (nonnull instancetype)initWithApiKey:(nonnull NSString *)apiKey + secret:(nonnull NSString *)secret + eventsHost:(nullable NSString *)eventsHost + eventsTrackingHost:(nullable NSString *)eventsTrackingHost + overridesEventsSubdirectory:(BOOL)overridesEventsSubdirectory + aliasHost:(nullable NSString *)aliasHost + aliasTrackingHost:(nullable NSString *)aliasTrackingHost + overridesAliasSubdirectory:(BOOL)overridesAliasSubdirectory + eventsOnly:(BOOL)eventsOnly { + self = [super init]; + if (self) { + _apiKey = [apiKey copy]; + _secret = [secret copy]; + _eventsHost = [eventsHost copy]; + _eventsTrackingHost = [eventsTrackingHost copy]; + _overridesEventsSubdirectory = overridesEventsSubdirectory; + _aliasHost = [aliasHost copy]; + _aliasTrackingHost = [aliasTrackingHost copy]; + _overridesAliasSubdirectory = overridesAliasSubdirectory; + _eventsOnly = eventsOnly; + } + return self; +} + +@end diff --git a/mParticle-Apple-SDK/Utils/MPUploadSettings.swift b/mParticle-Apple-SDK/Utils/MPUploadSettings.swift deleted file mode 100644 index 3e0355544..000000000 --- a/mParticle-Apple-SDK/Utils/MPUploadSettings.swift +++ /dev/null @@ -1,107 +0,0 @@ -// -// MPUploadSettings.swift -// mParticle-Apple-SDK -// -// Created by Brandon Stalnaker on 1/22/25. -// -private let kApiKey = "apiKey" -private let kSecret = "secret" -private let kEventsHost = "eventsHost" -private let kEventsTrackingHost = "eventsTrackingHost" -private let kOverridesEventsSubdirectory: String = "overridesEventsSubdirectory" -private let kAliasHost = "aliasHost" -private let kAliasTrackingHost = "aliasTrackingHost" -private let kOverridesAliasSubdirectory = "overridesAliasSubdirectory" -private let kEventsOnly = "eventsOnly" - -@objc(MPUploadSettings) -public class MPUploadSettings: NSObject, NSCopying, NSSecureCoding { - @objc public var apiKey: String - @objc public var secret: String - @objc public var eventsHost: String? - @objc public var eventsTrackingHost: String? - @objc public var overridesEventsSubdirectory: Bool = false - @objc public var aliasHost: String? - @objc public var aliasTrackingHost: String? - @objc public var overridesAliasSubdirectory: Bool = false - @objc public var eventsOnly: Bool = false - - @objc override public init() { - apiKey = "" - secret = "" - super.init() - } - - public func copy(with _: NSZone? = nil) -> Any { - return MPUploadSettings(apiKey: apiKey, - secret: secret, - eventsHost: eventsHost, - eventsTrackingHost: eventsTrackingHost, - overridesEventsSubdirectory: overridesEventsSubdirectory, - aliasHost: aliasHost, - aliasTrackingHost: aliasTrackingHost, - overridesAliasSubdirectory: overridesAliasSubdirectory, - eventsOnly: eventsOnly) - } - - public static var supportsSecureCoding: Bool = true - - public func encode(with coder: NSCoder) { - coder.encode(apiKey, forKey: kApiKey) - coder.encode(secret, forKey: kSecret) - coder.encode(eventsHost, forKey: kEventsHost) - coder.encode(eventsTrackingHost, forKey: kEventsTrackingHost) - coder.encode(overridesEventsSubdirectory, forKey: kOverridesEventsSubdirectory) - coder.encode(aliasHost, forKey: kAliasHost) - coder.encode(aliasTrackingHost, forKey: kAliasTrackingHost) - coder.encode(overridesAliasSubdirectory, forKey: kOverridesAliasSubdirectory) - coder.encode(eventsOnly, forKey: kEventsOnly) - } - - @objc public required init?(coder: NSCoder) { - apiKey = coder.decodeObject(forKey: kApiKey) as? String ?? "" - secret = coder.decodeObject(forKey: kSecret) as? String ?? "" - eventsHost = coder.decodeObject(forKey: kEventsHost) as? String - eventsTrackingHost = coder.decodeObject(forKey: kEventsTrackingHost) as? String - overridesEventsSubdirectory = coder.decodeBool(forKey: kOverridesEventsSubdirectory) - aliasHost = coder.decodeObject(forKey: kAliasHost) as? String - aliasTrackingHost = coder.decodeObject(forKey: kAliasTrackingHost) as? String - overridesAliasSubdirectory = coder.decodeBool(forKey: kOverridesAliasSubdirectory) - eventsOnly = coder.decodeBool(forKey: kEventsOnly) - } - - @objc public class func currentUploadSettings(stateMachine: MPStateMachineProtocol, - networkOptions: MPNetworkOptions) -> MPUploadSettings { - return MPUploadSettings(apiKey: stateMachine.apiKey, secret: stateMachine.secret, networkOptions: networkOptions) - } - - @objc public init(apiKey: String, secret: String, eventsHost: String? = nil, eventsTrackingHost: String? = nil, - overridesEventsSubdirectory: Bool = false, aliasHost: String? = nil, aliasTrackingHost: String? = nil, - overridesAliasSubdirectory: Bool = false, eventsOnly: Bool = false) { - self.apiKey = apiKey - self.secret = secret - self.eventsHost = eventsHost - self.eventsTrackingHost = eventsTrackingHost - self.overridesEventsSubdirectory = overridesEventsSubdirectory - self.aliasHost = aliasHost - self.aliasTrackingHost = aliasTrackingHost - self.overridesAliasSubdirectory = overridesAliasSubdirectory - self.eventsOnly = eventsOnly - - super.init() - } - - @objc public init(apiKey: String, secret: String, networkOptions: MPNetworkOptions) { - self.apiKey = apiKey - self.secret = secret - eventsHost = networkOptions.eventsHost - eventsTrackingHost = networkOptions.eventsTrackingHost - overridesEventsSubdirectory = networkOptions.overridesEventsSubdirectory - aliasHost = networkOptions.aliasHost - aliasTrackingHost = networkOptions.aliasTrackingHost - overridesAliasSubdirectory = networkOptions.overridesAliasSubdirectory - eventsOnly = networkOptions.eventsOnly - - super.init() - } -} diff --git a/mParticle-Apple-SDK/Utils/MPUserDefaults.swift b/mParticle-Apple-SDK/Utils/MPUserDefaults.swift index ccecb755c..91f84cd24 100644 --- a/mParticle-Apple-SDK/Utils/MPUserDefaults.swift +++ b/mParticle-Apple-SDK/Utils/MPUserDefaults.swift @@ -25,29 +25,24 @@ public protocol MPUserDefaultsProtocol { func synchronize() } +@objc +public protocol MPUserDefaultsConnectorProtocol { + var stateMachine: MPStateMachine_PRIVATE? { get } + var backendController: MPBackendController_PRIVATE? { get } + var identity: MPIdentityApi? { get } + var mparticle: MParticle { get } +} + @objc public class MPUserDefaults: NSObject, MPUserDefaultsProtocol { - private var stateMachine: MPStateMachine_PRIVATE? - private var backendController: MPBackendController_PRIVATE? - private var identity: MPIdentityApi? - - public required init( - stateMachine: MPStateMachineProtocol, - backendController: MPBackendControllerProtocol, - identity: MPIdentityApi - ) { - self.stateMachine = stateMachine as? MPStateMachine_PRIVATE - self.backendController = backendController as? MPBackendController_PRIVATE - self.identity = identity - super.init() + private let connector: MPUserDefaultsConnectorProtocol + + @objc public init(connector: MPUserDefaultsConnectorProtocol) { + self.connector = connector } - @objc public class func standardUserDefaults( - stateMachine: MPStateMachineProtocol, - backendController: MPBackendControllerProtocol, - identity: MPIdentityApi - ) -> MPUserDefaults { + @objc public class func standardUserDefaults(connector: MPUserDefaultsConnectorProtocol) -> MPUserDefaults { if userDefaults == nil { - userDefaults = self.init(stateMachine: stateMachine, backendController: backendController, identity: identity) + userDefaults = MPUserDefaults(connector: connector) } return userDefaults! @@ -161,7 +156,7 @@ public protocol MPUserDefaultsProtocol { } @objc public func getConfiguration() -> [AnyHashable: Any]? { - guard let userID = identity?.currentUser?.userId else { return nil } + guard let userID = connector.identity?.currentUser?.userId else { return nil } if UserDefaults.standard.object(forKey: kMResponseConfigurationMigrationKey) == nil { migrateConfiguration() @@ -196,9 +191,8 @@ public protocol MPUserDefaultsProtocol { return swiftDict } } catch { - let mparticle = MParticle.sharedInstance() - let logger = MPLog(logLevel: MPLog.from(rawValue: mparticle.logLevel.rawValue)) - logger.customLogger = mparticle.customLogger + let logger = MPLog(logLevel: MPLog.from(rawValue: connector.mparticle.logLevel.rawValue)) + logger.customLogger = connector.mparticle.customLogger logger.error("Failed to unarchive configuration: \(error)") } @@ -221,7 +215,7 @@ public protocol MPUserDefaultsProtocol { withRootObject: responseConfiguration, requiringSecureCoding: true ) - let userID = identity?.currentUser?.userId ?? 0 + let userID = connector.identity?.currentUser?.userId ?? 0 setMPObject(eTag, forKey: Miscellaneous.kMPHTTPETagHeaderKey, userId: userID) setMPObject(configurationData, forKey: kMResponseConfigurationKey, userId: userID) @@ -237,7 +231,7 @@ public protocol MPUserDefaultsProtocol { } @objc public func migrateConfiguration() { - guard let userID = identity?.currentUser?.userId else { return } + guard let userID = connector.identity?.currentUser?.userId else { return } let eTag = mpObject(forKey: Miscellaneous.kMPHTTPETagHeaderKey, userId: userID) as? String let fileManager = FileManager.default @@ -411,8 +405,8 @@ public protocol MPUserDefaultsProtocol { @objc public class func restore() -> MPResponseConfig? { if let userDefaults = userDefaults { - if let configuration = userDefaults.getConfiguration(), let stateMachine = userDefaults.stateMachine, - let backendController = userDefaults.backendController { + if let configuration = userDefaults.getConfiguration(), let stateMachine = userDefaults.connector.stateMachine, + let backendController = userDefaults.connector.backendController { let responseConfig = MPResponseConfig( configuration: configuration, stateMachine: stateMachine, diff --git a/mParticle-Apple-SDK/mParticle.m b/mParticle-Apple-SDK/mParticle.m index 427d56e30..86246bf86 100644 --- a/mParticle-Apple-SDK/mParticle.m +++ b/mParticle-Apple-SDK/mParticle.m @@ -20,7 +20,9 @@ #import "Executor.h" #import "AppEnvironmentProvider.h" #import "MPConvertJS.h" +#import "MPUserDefaultsConnector.h" #import "SceneDelegateHandler.h" + @import mParticle_Apple_SDK_Swift; static NSArray *eventTypeStrings = nil; @@ -467,7 +469,8 @@ - (void)startWithOptions:(MParticleOptions *)options { BOOL startKitsAsync = options.startKitsAsync; __weak MParticle *weakSelf = self; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:_stateMachine backendController:_backendController identity:self.identity]; + MPUserDefaultsConnector* connector = [[MPUserDefaultsConnector alloc] init]; + MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithConnector:(id)connector]; BOOL firstRun = [userDefaults mpObjectForKey:kMParticleFirstRun userId:[MPPersistenceController_PRIVATE mpId]] == nil; if (firstRun) { NSDate *firstSeen = [NSDate date]; @@ -552,7 +555,7 @@ - (void)resetForSwitchingWorkspaces:(void (^)(void))completion { [self.kitContainer removeAllSideloadedKits]; // Clean up persistence - [[MPUserDefaults standardUserDefaultsWithStateMachine:self.stateMachine backendController:[MParticle sharedInstance].backendController identity:self.identity] resetDefaults]; + [MPUserDefaultsConnector.userDefaults resetDefaults]; [self.persistenceController resetDatabaseForWorkspaceSwitching]; // Clean up mParticle instance @@ -651,9 +654,7 @@ - (void)reset:(void (^)(void))completion { [executor executeOnMessage:^{ [self.kitContainer flushSerializedKits]; [self.kitContainer removeAllSideloadedKits]; - [[MPUserDefaults standardUserDefaultsWithStateMachine:self.stateMachine - backendController:self.backendController - identity:self.identity] resetDefaults]; + [MPUserDefaultsConnector.userDefaults resetDefaults]; [self.persistenceController resetDatabase]; [executor executeOnMain:^{ predicate = 0; @@ -667,7 +668,7 @@ - (void)reset:(void (^)(void))completion { - (void)reset { [executor executeOnMessageSync:^{ - [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] resetDefaults]; + [MPUserDefaultsConnector.userDefaults resetDefaults]; [[MParticle sharedInstance].persistenceController resetDatabase]; [MParticle setSharedInstance:nil]; }]; @@ -1348,7 +1349,7 @@ - (void)upload { #pragma mark Surveys - (NSString *)surveyURL:(MPSurveyProvider)surveyProvider { NSMutableDictionary *userAttributes = nil; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSDictionary *savedUserAttributes = userDefaults[kMPUserAttributeKey]; if (savedUserAttributes) { userAttributes = [[NSMutableDictionary alloc] initWithCapacity:savedUserAttributes.count]; @@ -1422,7 +1423,7 @@ - (NSString *)webviewBridgeValueWithCustomerBridgeName:(NSString *)customerBridg } NSString *kWorkspaceTokenKey = @"wst"; - NSString *serverProvidedValue = [[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] getConfiguration][kWorkspaceTokenKey]; + NSString *serverProvidedValue = [MPUserDefaultsConnector.userDefaults getConfiguration][kWorkspaceTokenKey]; if ([self isValidBridgeName:serverProvidedValue]) { return serverProvidedValue; } @@ -1727,7 +1728,7 @@ + (void)_setWrapperSdk_internal:(MPWrapperSdk)wrapperSdk version:(nonnull NSStri + (BOOL)isOlderThanConfigMaxAgeSeconds { BOOL shouldConfigurationBeDeleted = NO; - MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity]; + MPUserDefaults *userDefaults = MPUserDefaultsConnector.userDefaults; NSNumber *configProvisioned = userDefaults[kMPConfigProvisionedTimestampKey]; NSNumber *maxAgeSeconds = [[MParticle sharedInstance] configMaxAgeSeconds];