diff --git a/UnitTests/MPAppNotificationHandlerTests.m b/UnitTests/MPAppNotificationHandlerTests.m index 344785aea..e38707cf5 100644 --- a/UnitTests/MPAppNotificationHandlerTests.m +++ b/UnitTests/MPAppNotificationHandlerTests.m @@ -9,7 +9,7 @@ @interface MParticle () + (dispatch_queue_t)messageQueue; -@property (nonatomic, strong) MPStateMachine *stateMachine; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; @property (nonatomic, strong, readonly) MPAppNotificationHandler *appNotificationHandler; @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; diff --git a/UnitTests/MPBackendControllerTests.m b/UnitTests/MPBackendControllerTests.m index ee6f15a50..2b5be603f 100644 --- a/UnitTests/MPBackendControllerTests.m +++ b/UnitTests/MPBackendControllerTests.m @@ -15,10 +15,11 @@ #import "mParticle.h" #import "MPKitContainer.h" #import "MPKitConfiguration.h" -#import "MPResponseConfig.h" +#import "MParticleSwift.h" #import "MPBaseTestCase.h" #import "MPIUserDefaults.h" #import "MPDevice.h" +#import "MPLaunchInfo.h" #if TARGET_OS_IOS == 1 #import @@ -47,10 +48,10 @@ @interface MPIdentityApi () @interface MParticle (Tests) + (dispatch_queue_t)messageQueue; -@property (nonatomic, strong, nonnull) MPBackendController *backendController; +@property (nonatomic, strong, nonnull) MPBackendController_PRIVATE *backendController; @property (nonatomic, strong) MPPersistenceController *persistenceController; -@property (nonatomic, strong) MPStateMachine *stateMachine; -@property (nonatomic, strong) MPKitContainer *kitContainer; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; +@property (nonatomic, strong) MPKitContainer_PRIVATE *kitContainer_PRIVATE; @property (nonatomic, strong, nullable) NSString *dataPlanId; @property (nonatomic, strong, nullable) NSNumber *dataPlanVersion; @property (nonatomic, strong, nonnull) MParticleOptions *options; @@ -58,16 +59,16 @@ + (dispatch_queue_t)messageQueue; @end #pragma mark - MPKitContainer category for unit tests -@interface MPKitContainer(Tests) +@interface MPKitContainer_PRIVATE(Tests) - (id)startKit:(NSNumber *)integrationId configuration:(MPKitConfiguration *)kitConfiguration; @end #pragma mark - MPBackendController+Tests category -@interface MPBackendController(Tests) +@interface MPBackendController_PRIVATE(Tests) -@property (nonatomic, strong) MPNetworkCommunication *networkCommunication; +@property (nonatomic, strong) MPNetworkCommunication_PRIVATE *networkCommunication; @property (nonatomic, strong) NSMutableDictionary *userAttributes; @property (nonatomic, strong) NSMutableArray *userIdentities; @@ -75,7 +76,7 @@ - (NSString *)caseInsensitiveKeyInDictionary:(NSDictionary *)dictionary withKey: - (void)cleanUp; - (void)handleApplicationDidFinishLaunching:(NSNotification *)notification; - (void)handleApplicationDidBecomeActive:(NSNotification *)notification; -- (void)logRemoteNotificationWithNotificationController:(MPNotificationController *const)notificationController; +- (void)logRemoteNotificationWithNotificationController:(MPNotificationController_PRIVATE *const)notificationController; - (void)parseConfigResponse:(NSDictionary *)configurationDictionary; - (void)parseResponseHeader:(NSDictionary *)responseDictionary session:(MPSession *)session; - (NSNumber *)previousSessionSuccessfullyClosed; @@ -102,9 +103,9 @@ @interface MPBackendControllerTests : MPBaseTestCase )[MParticle sharedInstance]]; + [MParticle sharedInstance].backendController = [[MPBackendController_PRIVATE alloc] initWithDelegate:(id)[MParticle sharedInstance]]; self.backendController = [MParticle sharedInstance].backendController; [self notificationController]; } @@ -186,12 +187,12 @@ - (NSDictionary *)remoteNotificationDictionary { return remoteNotificationDictionary; } -- (MPNotificationController *)notificationController { +- (MPNotificationController_PRIVATE *)notificationController { if (_notificationController) { return _notificationController; } - _notificationController = [[MPNotificationController alloc] init]; + _notificationController = [[MPNotificationController_PRIVATE alloc] init]; return _notificationController; } @@ -233,7 +234,7 @@ - (void)testEndSession { self.session = self.backendController.session; NSMutableArray *sessions = [persistence fetchSessions]; MPSession *session = [sessions lastObject]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; XCTAssertEqualObjects(session, stateMachine.currentSession, @"Current session and last session in the database are not equal."); NSDictionary *messagesDictionary = [persistence fetchMessagesForUploading]; @@ -296,7 +297,7 @@ - (void)testAutomaticSessionEnd { self.session = self.backendController.session; NSMutableArray *sessions = [persistence fetchSessions]; MPSession *session = [sessions lastObject]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; XCTAssertEqualObjects(session, stateMachine.currentSession, @"Current session and last session in the database are not equal."); NSDictionary *messagesDictionary = [persistence fetchMessagesForUploading]; @@ -332,7 +333,7 @@ - (void)testBackgroundBlock { self.session = self.backendController.session; NSMutableArray *sessions = [persistence fetchSessions]; MPSession *session = [sessions lastObject]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; XCTAssertEqualObjects(session, stateMachine.currentSession, @"Current session and last session in the database are not equal."); NSDictionary *messagesDictionary = [persistence fetchMessagesForUploading]; @@ -373,14 +374,14 @@ - (void)testSessionStartTimestamp { - (void)testCheckAttributeValueEmpty { NSError *error = nil; - BOOL success = [MPBackendController checkAttribute:[NSDictionary dictionary] key:@"foo" + BOOL success = [MPBackendController_PRIVATE checkAttribute:[NSDictionary dictionary] key:@"foo" value:[NSNull null] error:&error]; XCTAssertTrue(success); XCTAssertNil(error); error = nil; - [MPBackendController checkAttribute:[NSDictionary dictionary] key:@"foo" + [MPBackendController_PRIVATE checkAttribute:[NSDictionary dictionary] key:@"foo" value:@"" error:&error]; XCTAssertTrue(success); @@ -389,14 +390,14 @@ - (void)testCheckAttributeValueEmpty { - (void)testCheckAttributeStringAttribute { NSError *error = nil; - BOOL success = [MPBackendController checkAttribute:[NSDictionary dictionary] key:@"foo" value:@"bar" error:&error]; + BOOL success = [MPBackendController_PRIVATE checkAttribute:[NSDictionary dictionary] key:@"foo" value:@"bar" error:&error]; XCTAssert(success); XCTAssertNil(error); } - (void)testCheckAttributeNumberAttribute { NSError *error = nil; - BOOL success = [MPBackendController checkAttribute:[NSDictionary dictionary] key:@"foo" value:@123.0 error:&error]; + BOOL success = [MPBackendController_PRIVATE checkAttribute:[NSDictionary dictionary] key:@"foo" value:@123.0 error:&error]; XCTAssert(success); XCTAssertNil(error); } @@ -404,7 +405,7 @@ - (void)testCheckAttributeNumberAttribute { - (void)testCheckAttributeArrayAttribute { NSError *error = nil; NSArray *arrayValue = @[ @"foo", @"bar"]; - BOOL success = [MPBackendController checkAttribute:[NSDictionary dictionary] key:@"foo" value:arrayValue error:&error]; + BOOL success = [MPBackendController_PRIVATE checkAttribute:[NSDictionary dictionary] key:@"foo" value:arrayValue error:&error]; XCTAssert(success); XCTAssertNil(error); } @@ -414,7 +415,7 @@ - (void)testCheckAttributeArrayValuesTooLongAttribute { id mockValue = [OCMockObject mockForClass:[NSString class]]; OCMStub([mockValue length]).andReturn(LIMIT_ATTR_VALUE_LENGTH); NSArray *arrayValue = @[@"foo", mockValue]; - BOOL success = [MPBackendController checkAttribute:[NSDictionary dictionary] key:@"foo" value:arrayValue error:&error]; + BOOL success = [MPBackendController_PRIVATE checkAttribute:[NSDictionary dictionary] key:@"foo" value:arrayValue error:&error]; XCTAssertFalse(success); XCTAssertNotNil(error); XCTAssertEqual(kExceededAttributeValueMaximumLength, error.code); @@ -425,7 +426,7 @@ - (void)testCheckAttributeArrayValueInvalidLongAttribute { id mockValue = [OCMockObject mockForClass:[NSString class]]; OCMStub([mockValue length]).andReturn(LIMIT_ATTR_VALUE_LENGTH); NSArray *arrayValue = @[@"foo", @10.0]; - BOOL success = [MPBackendController checkAttribute:[NSDictionary dictionary] key:@"foo" value:arrayValue error:&error]; + BOOL success = [MPBackendController_PRIVATE checkAttribute:[NSDictionary dictionary] key:@"foo" value:arrayValue error:&error]; XCTAssertFalse(success); XCTAssertNotNil(error); XCTAssertEqual(kInvalidDataType, error.code); @@ -436,7 +437,7 @@ - (void)testCheckAttributeNoMaximum { id mockAttributes = [OCMockObject mockForClass:[NSMutableDictionary class]]; OCMStub([mockAttributes count]).andReturn(200); NSError *error = nil; - BOOL success = [MPBackendController checkAttribute:mockAttributes key:@"foo" value:@"bar" error:&error]; + BOOL success = [MPBackendController_PRIVATE checkAttribute:mockAttributes key:@"foo" value:@"bar" error:&error]; XCTAssertTrue(success); XCTAssertNil(error); } @@ -446,7 +447,7 @@ - (void)testCheckAttributeKeyTooLong { OCMStub([mockKey length]).andReturn(LIMIT_ATTR_KEY_LENGTH+1); NSError *error = nil; - BOOL success = [MPBackendController checkAttribute:[NSDictionary dictionary] key:mockKey value:@"foo" error:&error]; + BOOL success = [MPBackendController_PRIVATE checkAttribute:[NSDictionary dictionary] key:mockKey value:@"foo" error:&error]; XCTAssertFalse(success); XCTAssertNotNil(error); XCTAssertEqual(kExceededAttributeKeyMaximumLength, error.code); @@ -457,7 +458,7 @@ - (void)testCheckAttributeValueTooLong { OCMStub([mockValue length]).andReturn(LIMIT_ATTR_VALUE_LENGTH+1); OCMStub([mockValue stringByTrimmingCharactersInSet:OCMOCK_ANY]).andReturn(@"foo"); NSError *error = nil; - BOOL success = [MPBackendController checkAttribute:[NSDictionary dictionary] key:@"foo" value:mockValue error:&error]; + BOOL success = [MPBackendController_PRIVATE checkAttribute:[NSDictionary dictionary] key:@"foo" value:mockValue error:&error]; XCTAssertFalse(success); XCTAssertNotNil(error); XCTAssertEqual(kExceededAttributeValueMaximumLength, error.code); @@ -466,7 +467,7 @@ - (void)testCheckAttributeValueTooLong { - (void)testCheckAttributeValueNil { NSError *error = nil; NSString *nilValue = nil; - BOOL success = [MPBackendController checkAttribute:[NSDictionary dictionary] key:@"foo" value:nilValue error:&error]; + BOOL success = [MPBackendController_PRIVATE checkAttribute:[NSDictionary dictionary] key:@"foo" value:nilValue error:&error]; XCTAssertFalse(success); XCTAssertNotNil(error); XCTAssertEqual(kNilAttributeValue, error.code); @@ -475,14 +476,14 @@ - (void)testCheckAttributeValueNil { - (void)testCheckAttributeKeyNullNil { NSError *error = nil; NSString *nilKey = (NSString*)[NSNull null]; - BOOL success = [MPBackendController checkAttribute:[NSDictionary dictionary] key:nilKey value:@"foo" error:&error]; + BOOL success = [MPBackendController_PRIVATE checkAttribute:[NSDictionary dictionary] key:nilKey value:@"foo" error:&error]; XCTAssertFalse(success); XCTAssertNotNil(error); XCTAssertEqual(kInvalidKey, error.code); error = nil; nilKey = nil; - success = [MPBackendController checkAttribute:[NSDictionary dictionary] key:nilKey value:@"foo" error:&error]; + success = [MPBackendController_PRIVATE checkAttribute:[NSDictionary dictionary] key:nilKey value:@"foo" error:&error]; XCTAssertFalse(success); XCTAssertNotNil(error); XCTAssertEqual(kInvalidKey, error.code); @@ -704,7 +705,7 @@ - (void)testRampUpload { NSArray *uploads = [persistence fetchUploads]; XCTAssertGreaterThan(uploads.count, 0, @"Failed to retrieve messages to be uploaded."); - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; [stateMachine configureRampPercentage:@100]; XCTAssertFalse(stateMachine.dataRamped, @"Data ramp is not respecting 100 percent upper limit."); @@ -726,7 +727,7 @@ - (void)testDidBecomeActiveWithAppLink { [self.backendController beginSession]; }); self.session = self.backendController.session; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; NSURL *url = [NSURL URLWithString:@"fb487730798014455://applinks?al_applink_data=%7B%22user_agent%22%3A%22Bolts%20iOS%201.0.0%22%2C%22target_url%22%3A%22http%3A%5C%2F%5C%2Fexample.com%5C%2Fapplinks%22%2C%22extras%22%3A%7B%22myapp_token%22%3A%22t0kEn%22%7D%7D"]; NSString *sourceApplication = @"com.mParticle.UnitTest"; @@ -818,7 +819,7 @@ - (void)testDidBecomeActive { [self.backendController beginSession]; }); self.session = self.backendController.session; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; NSURL *url = [NSURL URLWithString:@"particlebox://unit_test"]; NSString *sourceApplication = @"com.mParticle.UnitTest"; @@ -865,7 +866,7 @@ - (void)testPreviousForegroundTime { [self.backendController beginSession]; }); self.session = self.backendController.session; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; NSURL *url = [NSURL URLWithString:@"particlebox://unit_test"]; NSString *sourceApplication = @"com.mParticle.UnitTest"; @@ -911,7 +912,7 @@ - (void)testIsLaunchCheck { [self.backendController beginSession]; }); self.session = self.backendController.session; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; NSURL *url = [NSURL URLWithString:@"particlebox://unit_test"]; NSString *sourceApplication = @"com.mParticle.UnitTest"; @@ -1057,12 +1058,12 @@ - (void)testSetUserTagFromUser { } - (void)testSetUserAttributeKits { - if (![MPKitContainer registeredKits]) { + if (![MPKitContainer_PRIVATE registeredKits]) { MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"KitTest" className:@"MPKitTestClassNoStartImmediately"]; - [MPKitContainer registerKit:kitRegister]; + [MPKitContainer_PRIVATE registerKit:kitRegister]; kitRegister = [[MPKitRegister alloc] initWithName:@"KitSecondTest" className:@"MPKitSecondTestClass"]; - [MPKitContainer registerKit:kitRegister]; + [MPKitContainer_PRIVATE registerKit:kitRegister]; NSDictionary *configuration1 = @{ @"id":@42, @@ -1897,7 +1898,7 @@ - (void)testLogCrashTruncatePlCrashReportField { NSString *message = @"crash report"; NSString *stackTrace = @"stack track from crash report"; NSString *plCrashReport = @"plcrash report test string"; - MPStateMachine *stateMachine = [[MPStateMachine alloc] init]; + MPStateMachine_PRIVATE *stateMachine = [[MPStateMachine_PRIVATE alloc] init]; id mockStateMachine = OCMPartialMock(stateMachine); [[[mockStateMachine stub] andReturnValue:OCMOCK_VALUE(@7)] crashMaxPLReportLength]; @@ -1949,7 +1950,7 @@ - (void)testLogCrashTruncatePlCrashReportFieldNil { NSString *message = @"crash report"; NSString *stackTrace = @"stack track from crash report"; NSString *plCrashReport = @"plcrash report test string"; - MPStateMachine *stateMachine = [[MPStateMachine alloc] init]; + MPStateMachine_PRIVATE *stateMachine = [[MPStateMachine_PRIVATE alloc] init]; id mockStateMachine = OCMPartialMock(stateMachine); [[[(id)mockStateMachine stub] andReturn:nil] crashMaxPLReportLength]; @@ -2071,7 +2072,7 @@ - (void)testPersistanceMaxAgeCleanup { options.persistenceMaxAgeSeconds = @(maxAge); // 24 hours instance.options = options; - MPBackendController *backendController = [[MPBackendController alloc] init]; + MPBackendController_PRIVATE *backendController = [[MPBackendController_PRIVATE alloc] init]; MPPersistenceController *persistenceController = [[MPPersistenceController alloc] init]; id mockPersistenceController = OCMPartialMock(persistenceController); diff --git a/UnitTests/MPBaseTestCase.m b/UnitTests/MPBaseTestCase.m index e5283f878..d58ea2f0b 100644 --- a/UnitTests/MPBaseTestCase.m +++ b/UnitTests/MPBaseTestCase.m @@ -10,6 +10,7 @@ #import "MPNetworkCommunication.h" #import "MPConnectorProtocol.h" #import "MPConnectorFactoryProtocol.h" +#import "MPIConstants.h" @interface MParticle (Tests) @property (nonatomic, strong) MPPersistenceController *persistenceController; @@ -42,13 +43,13 @@ - (void)setUpWithCompletionHandler:(void (^)(NSError * _Nullable))completion { } [instance reset:^{ - MPNetworkCommunication.connectorFactory = [[MPTestConnectorFactory alloc] init]; + MPNetworkCommunication_PRIVATE.connectorFactory = [[MPTestConnectorFactory alloc] init]; completion(nil); }]; } - (void)tearDown { - MPNetworkCommunication.connectorFactory = nil; + MPNetworkCommunication_PRIVATE.connectorFactory = nil; [super tearDown]; } diff --git a/UnitTests/MPDataModelTests.m b/UnitTests/MPDataModelTests.m index 96c205a7d..bcf01ea4e 100644 --- a/UnitTests/MPDataModelTests.m +++ b/UnitTests/MPDataModelTests.m @@ -11,7 +11,7 @@ @interface MParticle () -@property (nonatomic, strong) MPStateMachine *stateMachine; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; @end diff --git a/UnitTests/MPEventTests.m b/UnitTests/MPEventTests.m index 70b178911..8af4e084e 100644 --- a/UnitTests/MPEventTests.m +++ b/UnitTests/MPEventTests.m @@ -13,8 +13,8 @@ #pragma mark - MParticle+Tests category @interface MParticle (Tests) -@property (nonatomic, strong, nonnull) MPBackendController *backendController; -@property (nonatomic, strong) MPStateMachine *stateMachine; +@property (nonatomic, strong, nonnull) MPBackendController_PRIVATE *backendController; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; @end @@ -146,7 +146,7 @@ - (void)testInvalidTypes { - (void)testDictionaryRepresentation { MPSession *session = [[MPSession alloc] initWithStartTime:[[NSDate date] timeIntervalSince1970] userId:[MPPersistenceController mpId]]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; stateMachine.currentSession = session; NSNumber *eventDuration = @2; @@ -180,7 +180,7 @@ - (void)testDictionaryRepresentation { - (void)testDictionaryRepresentationWithDictionaryValues { MPSession *session = [[MPSession alloc] initWithStartTime:[[NSDate date] timeIntervalSince1970] userId:[MPPersistenceController mpId]]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; stateMachine.currentSession = session; NSNumber *eventDuration = @2; @@ -215,7 +215,7 @@ - (void)testDictionaryRepresentationWithDictionaryValues { - (void)testDictionaryRepresentationWithDictionaryValuesContainingDictionary { MPSession *session = [[MPSession alloc] initWithStartTime:[[NSDate date] timeIntervalSince1970] userId:[MPPersistenceController mpId]]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; stateMachine.currentSession = session; NSNumber *eventDuration = @2; @@ -250,7 +250,7 @@ - (void)testDictionaryRepresentationWithDictionaryValuesContainingDictionary { - (void)testDictionaryRepresentationWithNullValues { MPSession *session = [[MPSession alloc] initWithStartTime:[[NSDate date] timeIntervalSince1970] userId:[MPPersistenceController mpId]]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; stateMachine.currentSession = session; NSNumber *eventDuration = @2; diff --git a/UnitTests/MPIUserDefaultsTests.m b/UnitTests/MPIUserDefaultsTests.m index dc1a44be9..ef3353cc1 100644 --- a/UnitTests/MPIUserDefaultsTests.m +++ b/UnitTests/MPIUserDefaultsTests.m @@ -10,13 +10,13 @@ @interface MParticle () @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong) MPStateMachine *stateMachine; -@property (nonatomic, strong) MPKitContainer *kitContainer; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; +@property (nonatomic, strong) MPKitContainer_PRIVATE *kitContainer_PRIVATE; @end @interface MPIUserDefaultsTests : MPBaseTestCase { - MPKitContainer *kitContainer; + MPKitContainer_PRIVATE *kitContainer; } @end @@ -29,12 +29,12 @@ - (void)setUp { [MParticle sharedInstance].stateMachine.apiKey = @"unit_test_app_key"; [MParticle sharedInstance].stateMachine.secret = @"unit_test_secret"; - [MParticle sharedInstance].kitContainer = [[MPKitContainer alloc] init]; - kitContainer = [MParticle sharedInstance].kitContainer; + [MParticle sharedInstance].kitContainer_PRIVATE = [[MPKitContainer_PRIVATE alloc] init]; + kitContainer = [MParticle sharedInstance].kitContainer_PRIVATE; } - (void)tearDown { - for (MPKitRegister *kitRegister in [MPKitContainer registeredKits]) { + for (MPKitRegister *kitRegister in [MPKitContainer_PRIVATE registeredKits]) { kitRegister.wrapperInstance = nil; } kitContainer = nil; @@ -471,7 +471,7 @@ - (void)testConfigParameters { XCTAssertNotNil(firstParameters); MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"KitTest" className:@"MPKitTestClassNoStartImmediately"]; - [MPKitContainer registerKit:kitRegister]; + [MPKitContainer_PRIVATE registerKit:kitRegister]; XCTAssertEqualObjects(responseConfiguration, [[MPIUserDefaults standardUserDefaults] getConfiguration]); XCTAssertTrue([[MPIUserDefaults standardUserDefaults] isConfigurationParametersOutdated]); diff --git a/UnitTests/MPIdentityTests.m b/UnitTests/MPIdentityTests.m index 653dde739..04c717680 100644 --- a/UnitTests/MPIdentityTests.m +++ b/UnitTests/MPIdentityTests.m @@ -23,7 +23,7 @@ typedef NS_ENUM(NSUInteger, MPIdentityRequestType) { }; @interface MPIdentityTests : MPBaseTestCase { - MPKitContainer *kitContainer; + MPKitContainer_PRIVATE *kitContainer; } @end @@ -43,7 +43,7 @@ - (void)onModifyRequestComplete:(MPIdentityApiRequest *)request httpResponse:(MP - (NSArray *)sortedUserArrayByLastSeen:(NSMutableArray *)userArray; @end -@interface MPNetworkCommunication () +@interface MPNetworkCommunication_PRIVATE () - (void)modifyWithIdentityChanges:(NSArray *)identityChanges blockOtherRequests:(BOOL)blockOtherRequests completion:(nullable MPIdentityApiManagerModifyCallback)completion; - (void)identityApiRequestWithURL:(NSURL*)url identityRequest:(MPIdentityHTTPBaseRequest *_Nonnull)identityRequest blockOtherRequests: (BOOL) blockOtherRequests completion:(nullable MPIdentityApiManagerCallback)completion; @end @@ -58,7 +58,7 @@ - (instancetype)initWithIdentities:(NSDictionary *)identities; @interface MParticle () -@property (nonatomic, strong) MPKitContainer *kitContainer; +@property (nonatomic, strong) MPKitContainer_PRIVATE *kitContainer_PRIVATE; @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; @end @@ -502,7 +502,7 @@ - (void)testConstructIdentityApiRequestWithAuthorizedATTStatus { } - (void)testNoEmptyModifyRequests { - MPNetworkCommunication *network = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *network = [[MPNetworkCommunication_PRIVATE alloc] init]; id partialMock = OCMPartialMock(network); @@ -614,8 +614,8 @@ - (void)testIdentifyIdentityRequestCompleteWithKits { [[[mockPersistenceController stub] andReturn:@"42"] mpId]; id mockInstance = OCMClassMock([MParticle class]); - id mockContainer = OCMClassMock([MPKitContainer class]); - [[[mockInstance stub] andReturn:mockContainer] kitContainer]; + id mockContainer = OCMClassMock([MPKitContainer_PRIVATE class]); + [[[mockInstance stub] andReturn:mockContainer] kitContainer_PRIVATE]; [[[mockInstance stub] andReturn:mockInstance] sharedInstance]; id mockUser = OCMClassMock([MParticleUser class]); @@ -646,8 +646,8 @@ - (void)testLoginIdentityRequestCompleteWithKits { [[[mockPersistenceController stub] andReturn:@"42"] mpId]; id mockInstance = OCMClassMock([MParticle class]); - id mockContainer = OCMClassMock([MPKitContainer class]); - [[[mockInstance stub] andReturn:mockContainer] kitContainer]; + id mockContainer = OCMClassMock([MPKitContainer_PRIVATE class]); + [[[mockInstance stub] andReturn:mockContainer] kitContainer_PRIVATE]; [[[mockInstance stub] andReturn:mockInstance] sharedInstance]; id mockUser = OCMClassMock([MParticleUser class]); @@ -678,8 +678,8 @@ - (void)testLogoutIdentityRequestCompleteWithKits { [[[mockPersistenceController stub] andReturn:@"42"] mpId]; id mockInstance = OCMClassMock([MParticle class]); - id mockContainer = OCMClassMock([MPKitContainer class]); - [[[mockInstance stub] andReturn:mockContainer] kitContainer]; + id mockContainer = OCMClassMock([MPKitContainer_PRIVATE class]); + [[[mockInstance stub] andReturn:mockContainer] kitContainer_PRIVATE]; [[[mockInstance stub] andReturn:mockInstance] sharedInstance]; id mockUser = OCMClassMock([MParticleUser class]); @@ -706,8 +706,8 @@ - (void)testIdentifyIdentityRequestCompleteWithKitsAndNoUserChange { [[[mockPersistenceController stub] andReturn:@"42"] mpId]; id mockInstance = OCMClassMock([MParticle class]); - id mockContainer = OCMClassMock([MPKitContainer class]); - [[[mockInstance stub] andReturn:mockContainer] kitContainer]; + id mockContainer = OCMClassMock([MPKitContainer_PRIVATE class]); + [[[mockInstance stub] andReturn:mockContainer] kitContainer_PRIVATE]; [[[mockInstance stub] andReturn:mockInstance] sharedInstance]; id mockUser = OCMClassMock([MParticleUser class]); @@ -738,8 +738,8 @@ - (void)testLoginIdentityRequestCompleteWithKitsAndNoUserChange { [[[mockPersistenceController stub] andReturn:@"42"] mpId]; id mockInstance = OCMClassMock([MParticle class]); - id mockContainer = OCMClassMock([MPKitContainer class]); - [[[mockInstance stub] andReturn:mockContainer] kitContainer]; + id mockContainer = OCMClassMock([MPKitContainer_PRIVATE class]); + [[[mockInstance stub] andReturn:mockContainer] kitContainer_PRIVATE]; [[[mockInstance stub] andReturn:mockInstance] sharedInstance]; id mockUser = OCMClassMock([MParticleUser class]); @@ -770,8 +770,8 @@ - (void)testLogoutIdentityRequestCompleteWithKitsAndNoUserChange { [[[mockPersistenceController stub] andReturn:@"42"] mpId]; id mockInstance = OCMClassMock([MParticle class]); - id mockContainer = OCMClassMock([MPKitContainer class]); - [[[mockInstance stub] andReturn:mockContainer] kitContainer]; + id mockContainer = OCMClassMock([MPKitContainer_PRIVATE class]); + [[[mockInstance stub] andReturn:mockContainer] kitContainer_PRIVATE]; [[[mockInstance stub] andReturn:mockInstance] sharedInstance]; id mockUser = OCMClassMock([MParticleUser class]); @@ -798,8 +798,8 @@ - (void)testMPIdZeroToMPId { [[[mockPersistenceController stub] andReturn:@"0"] mpId]; id mockInstance = OCMClassMock([MParticle class]); - id mockContainer = OCMClassMock([MPKitContainer class]); - [[[mockInstance stub] andReturn:mockContainer] kitContainer]; + id mockContainer = OCMClassMock([MPKitContainer_PRIVATE class]); + [[[mockInstance stub] andReturn:mockContainer] kitContainer_PRIVATE]; [[[mockInstance stub] andReturn:mockPersistenceController] persistenceController]; [[[mockInstance stub] andReturn:mockInstance] sharedInstance]; @@ -855,8 +855,8 @@ - (void)testModifyRequestComplete { - (void)testModifyRequestCompleteWithKits { id mockInstance = OCMClassMock([MParticle class]); - id mockContainer = OCMClassMock([MPKitContainer class]); - [[[mockInstance stub] andReturn:mockContainer] kitContainer]; + id mockContainer = OCMClassMock([MPKitContainer_PRIVATE class]); + [[[mockInstance stub] andReturn:mockContainer] kitContainer_PRIVATE]; [[[mockInstance stub] andReturn:mockInstance] sharedInstance]; id mockUser = OCMClassMock([MParticleUser class]); diff --git a/UnitTests/MPKitAPITests.m b/UnitTests/MPKitAPITests.m index 3896c20f7..c383965a8 100644 --- a/UnitTests/MPKitAPITests.m +++ b/UnitTests/MPKitAPITests.m @@ -13,7 +13,7 @@ #import "MPIUserDefaults.h" #import "MPIConstants.h" -@interface MPKitContainer () +@interface MPKitContainer_PRIVATE () - (id)startKit:(NSNumber *)integrationId configuration:(MPKitConfiguration *)kitConfiguration; @@ -22,13 +22,13 @@ @interface MPKitContainer () @interface MParticle () + (dispatch_queue_t)messageQueue; -@property (nonatomic, strong) MPBackendController *backendController; +@property (nonatomic, strong) MPBackendController_PRIVATE *backendController; @property (nonatomic, strong) MPPersistenceController *persistenceController; -@property (nonatomic, strong) MPKitContainer *kitContainer; +@property (nonatomic, strong) MPKitContainer_PRIVATE *kitContainer_PRIVATE; @end -@interface MPBackendController () +@interface MPBackendController_PRIVATE () - (void)clearUserAttributes; @@ -46,7 +46,7 @@ - (id)initWithKitCode:(NSNumber *)integrationId; @interface MPKitAPITests : MPBaseTestCase @property (nonatomic) MPKitAPI *kitApi; -@property (nonatomic) MPKitContainer *kitContainer; +@property (nonatomic) MPKitContainer_PRIVATE *kitContainer; @end @@ -55,15 +55,15 @@ @implementation MPKitAPITests - (void)setUp { [super setUp]; - [MParticle sharedInstance].kitContainer = [[MPKitContainer alloc] init]; - _kitContainer = [MParticle sharedInstance].kitContainer; + [MParticle sharedInstance].kitContainer_PRIVATE = [[MPKitContainer_PRIVATE alloc] init]; + _kitContainer = [MParticle sharedInstance].kitContainer_PRIVATE; [MParticle sharedInstance].persistenceController = [[MPPersistenceController alloc] init]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; if (!registeredKits) { MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"KitTest" className:@"MPKitTestClassNoStartImmediately"]; - [MPKitContainer registerKit:kitRegister]; + [MPKitContainer_PRIVATE registerKit:kitRegister]; NSDictionary *configuration = @{ @"id":@42, @@ -83,7 +83,7 @@ - (void)testIntegrationAttributes { XCTestExpectation *expectation = [self expectationWithDescription:@"Integration attributes"]; MParticle *mParticle = [MParticle sharedInstance]; - mParticle.backendController = [[MPBackendController alloc] initWithDelegate:(id)mParticle]; + mParticle.backendController = [[MPBackendController_PRIVATE alloc] initWithDelegate:(id)mParticle]; [[MParticle sharedInstance] setIntegrationAttributes:@{@"Test key":@"Test value"} forKit:@42]; dispatch_sync([MParticle messageQueue], ^{ @@ -154,7 +154,7 @@ - (void)testUserIdentities { - (void)testUserAttributeFromCache { XCTestExpectation *expectation = [self expectationWithDescription:@"Integration attributes"]; MParticle *mParticle = [MParticle sharedInstance]; - mParticle.backendController = [[MPBackendController alloc] initWithDelegate:(id)mParticle]; + mParticle.backendController = [[MPBackendController_PRIVATE alloc] initWithDelegate:(id)mParticle]; MParticleUser *currentUser = [[MParticle sharedInstance].identity currentUser]; NSDictionary *userAttributes = @{ @@ -199,7 +199,7 @@ - (void)testUserAttributeFromCache { - (void)testUserAttributeManuallySet { XCTestExpectation *expectation = [self expectationWithDescription:@"Integration attributes"]; MParticle *mParticle = [MParticle sharedInstance]; - mParticle.backendController = [[MPBackendController alloc] initWithDelegate:(id)mParticle]; + mParticle.backendController = [[MPBackendController_PRIVATE alloc] initWithDelegate:(id)mParticle]; MParticleUser *currentUser = [[MParticle sharedInstance].identity currentUser]; NSDictionary *userAttributes = @{ diff --git a/UnitTests/MPKitActivityTests.m b/UnitTests/MPKitActivityTests.m index b5487e8fd..ce7e99e28 100644 --- a/UnitTests/MPKitActivityTests.m +++ b/UnitTests/MPKitActivityTests.m @@ -8,16 +8,17 @@ #import "MPStateMachine.h" #import #import "MPBaseTestCase.h" +#import "MParticle.h" @interface MParticle () -@property (nonatomic, strong) MPStateMachine *stateMachine; -@property (nonatomic, strong) MPKitContainer *kitContainer; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; +@property (nonatomic, strong) MPKitContainer_PRIVATE *kitContainer_PRIVATE; @end #pragma mark - MPKitContainer category for unit tests -@interface MPKitContainer(Tests) +@interface MPKitContainer_PRIVATE(Tests) - (id)startKit:(NSNumber *)integrationId configuration:(MPKitConfiguration *)kitConfiguration; + (NSMutableSet > *)kitsRegistry; @@ -43,20 +44,20 @@ - (void)setUp { [MParticle sharedInstance].stateMachine.apiKey = @"unit_test_app_key"; [MParticle sharedInstance].stateMachine.secret = @"unit_test_secret"; - [MParticle sharedInstance].kitContainer = [[MPKitContainer alloc] init]; + [MParticle sharedInstance].kitContainer_PRIVATE = [[MPKitContainer_PRIVATE alloc] init]; MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"KitTest" className:@"MPKitTestClassNoStartImmediately"]; - [MPKitContainer registerKit:kitRegister]; + [MPKitContainer_PRIVATE registerKit:kitRegister]; NSDictionary *configuration = @{@"id": @42, @"as": @{@"appId":@"MyAppId"}}; MPKitConfiguration *kitConfiguration = [[MPKitConfiguration alloc] initWithDictionary:configuration]; - [[[MParticle sharedInstance].kitContainer startKit:@42 configuration:kitConfiguration] start]; + [[[MParticle sharedInstance].kitContainer_PRIVATE startKit:@42 configuration:kitConfiguration] start]; } - (void)tearDown { _kitActivity = nil; // Ensure registeredKits is empty - [MPKitContainer.kitsRegistry removeAllObjects]; + [MPKitContainer_PRIVATE.kitsRegistry removeAllObjects]; [super tearDown]; } @@ -90,11 +91,11 @@ - (void)testKitAlreadyStarted { }; NSArray *kitConfigs = @[configuration]; - [[MParticle sharedInstance].kitContainer configureKits:nil]; - [[MParticle sharedInstance].kitContainer configureKits:kitConfigs]; + [[MParticle sharedInstance].kitContainer_PRIVATE configureKits:nil]; + [[MParticle sharedInstance].kitContainer_PRIVATE configureKits:kitConfigs]; MPKitConfiguration *kitConfiguration = [[MPKitConfiguration alloc] initWithDictionary:configuration]; - [[MParticle sharedInstance].kitContainer startKit:@42 configuration:kitConfiguration]; + [[MParticle sharedInstance].kitContainer_PRIVATE startKit:@42 configuration:kitConfiguration]; BOOL isKitActive = [self.kitActivity isKitActive:@42]; XCTAssertTrue(isKitActive); diff --git a/UnitTests/MPKitContainerTests.m b/UnitTests/MPKitContainerTests.m index 512e3c05a..7ed668f75 100644 --- a/UnitTests/MPKitContainerTests.m +++ b/UnitTests/MPKitContainerTests.m @@ -1,5 +1,6 @@ #import #import +#import "mParticle.h" #import "MPKitContainer.h" #import "MPIConstants.h" #import "MPForwardQueueItem.h" @@ -22,7 +23,6 @@ #import "MPKitConfiguration.h" #import "MPIUserDefaults.h" #import "MPForwardQueueParameters.h" -#import "MPResponseConfig.h" #import "MPConsentKitFilter.h" #import "MPPersistenceController.h" #import "MPBaseTestCase.h" @@ -34,8 +34,9 @@ @interface MParticle () + (dispatch_queue_t)messageQueue; -@property (nonatomic, strong) MPStateMachine *stateMachine; -@property (nonatomic, strong) MPKitContainer *kitContainer; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; +@property (nonatomic, strong) MPKitContainer_PRIVATE *kitContainer_PRIVATE; +@property (nonatomic, strong, readonly) MPBackendController_PRIVATE *backendController; @end @@ -46,7 +47,7 @@ @interface MParticleUser () @end #pragma mark - MPKitContainer category for unit tests -@interface MPKitContainer(Tests) +@interface MPKitContainer_PRIVATE(Tests) @property (nonatomic, strong) NSMutableArray *forwardQueue; @property (nonatomic, unsafe_unretained) BOOL kitsInitialized; @@ -75,7 +76,7 @@ - (void)attemptToLogEventToKit:(id)kitRegister kitFilter #pragma mark - MPKitContainerTests @interface MPKitContainerTests : MPBaseTestCase { - MPKitContainer *kitContainer; + MPKitContainer_PRIVATE *kitContainer; } @end @@ -89,19 +90,19 @@ - (void)setUp { [MParticle sharedInstance].stateMachine.apiKey = @"unit_test_app_key"; [MParticle sharedInstance].stateMachine.secret = @"unit_test_secret"; - [MParticle sharedInstance].kitContainer = [[MPKitContainer alloc] init]; - kitContainer = [MParticle sharedInstance].kitContainer; + [MParticle sharedInstance].kitContainer_PRIVATE = [[MPKitContainer_PRIVATE alloc] init]; + kitContainer = [MParticle sharedInstance].kitContainer_PRIVATE; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; if (!registeredKits) { MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"KitTest" className:@"MPKitTestClassNoStartImmediately"]; - [MPKitContainer registerKit:kitRegister]; + [MPKitContainer_PRIVATE registerKit:kitRegister]; kitRegister = [[MPKitRegister alloc] initWithName:@"KitSecondTest" className:@"MPKitSecondTestClass"]; - [MPKitContainer registerKit:kitRegister]; + [MPKitContainer_PRIVATE registerKit:kitRegister]; kitRegister = [[MPKitRegister alloc] initWithName:@"AppsFlyer" className:@"MPKitAppsFlyerTest"]; - [MPKitContainer registerKit:kitRegister]; + [MPKitContainer_PRIVATE registerKit:kitRegister]; NSDictionary *configuration = @{ @"id":@42, @@ -118,12 +119,12 @@ - (void)setUp { id kitAppsFlyer = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; if (!kitAppsFlyer) { MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"AppsFlyer" className:@"MPKitAppsFlyerTest"]; - [MPKitContainer registerKit:kitRegister]; + [MPKitContainer_PRIVATE registerKit:kitRegister]; } } - (void)tearDown { - for (MPKitRegister *kitRegister in [MPKitContainer registeredKits]) { + for (MPKitRegister *kitRegister in [MPKitContainer_PRIVATE registeredKits]) { kitRegister.wrapperInstance = nil; } kitContainer = nil; @@ -186,12 +187,12 @@ - (void)testUpdateKitConfiguration { kMPRemoteConfigExceptionHandlingModeKey:kMPRemoteConfigExceptionHandlingModeForce, kMPRemoteConfigSessionTimeoutKey:@112}; - MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration]; - + MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration stateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController]; + NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; [[MPIUserDefaults standardUserDefaults] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:@"0" maxAge:nil]; - XCTAssertEqualObjects(responseConfig.configuration, [MPResponseConfig restore].configuration); + XCTAssertEqualObjects(responseConfig.configuration, [MPIUserDefaults restore].configuration); NSArray *directoryContents = [[MPIUserDefaults standardUserDefaults] getKitConfigurations]; for (NSDictionary *kitConfigurationDictionary in directoryContents) { @@ -237,12 +238,12 @@ - (void)testRemoveKitConfiguration { kMPRemoteConfigExceptionHandlingModeKey:kMPRemoteConfigExceptionHandlingModeForce, kMPRemoteConfigSessionTimeoutKey:@112}; - MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration]; - + MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration stateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController]; + NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; [[MPIUserDefaults standardUserDefaults] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:@"0" maxAge:nil]; - XCTAssertEqualObjects(responseConfig.configuration, [MPResponseConfig restore].configuration); + XCTAssertEqualObjects(responseConfig.configuration, [MPIUserDefaults restore].configuration); dispatch_sync(dispatch_get_main_queue(), ^{ }); XCTAssertEqual(@"cool app key", [self->kitContainer.kitConfigurations objectForKey:@(42)].configuration[@"appId"]); @@ -269,12 +270,12 @@ - (void)testRemoveKitConfiguration { kMPRemoteConfigExceptionHandlingModeKey:kMPRemoteConfigExceptionHandlingModeForce, kMPRemoteConfigSessionTimeoutKey:@112}; - responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration]; - + responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration stateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController]; + requestTimestamp = [[NSDate date] timeIntervalSince1970]; [[MPIUserDefaults standardUserDefaults] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:@"0" maxAge:nil]; - XCTAssertEqualObjects(responseConfig.configuration, [MPResponseConfig restore].configuration); + XCTAssertEqualObjects(responseConfig.configuration, [MPIUserDefaults restore].configuration); XCTAssertEqual(@"cool app key", [self->kitContainer.kitConfigurations objectForKey:@(42)].configuration[@"appId"]); @@ -506,7 +507,7 @@ - (void)testFilterEventType { @"modality":@"sprinting"}; event.category = @"Olympic Games"; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; id registeredKit = [[registeredKits objectsPassingTest:^BOOL(id _Nonnull obj, BOOL * _Nonnull stop) { if ([obj conformsToProtocol:@protocol(MPExtensionKitProtocol)]) { id kitExtension = (id)obj; @@ -801,7 +802,7 @@ - (void)testFilterMessageType { @"modality":@"sprinting"}; event.category = @"Olympic Games"; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; id registeredKit = [[registeredKits objectsPassingTest:^BOOL(id _Nonnull obj, BOOL * _Nonnull stop) { if ([obj conformsToProtocol:@protocol(MPExtensionKitProtocol)]) { id kitExtension = (id)obj; @@ -837,7 +838,7 @@ - (void)testFilterEventTypeNavigation { MPEvent *event = [[MPEvent alloc] initWithName:@"Dinosaur Run" type:MPEventTypeNavigation]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; id registeredKit = [[registeredKits objectsPassingTest:^BOOL(id _Nonnull obj, BOOL * _Nonnull stop) { if ([obj conformsToProtocol:@protocol(MPExtensionKitProtocol)]) { id kitExtension = (id)obj; @@ -882,7 +883,7 @@ - (void)testFilterEventNameAndAttributes { @"modality":@"sprinting"}; event.category = @"Olympic Games"; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; id registeredKit = [[registeredKits objectsPassingTest:^BOOL(id _Nonnull obj, BOOL * _Nonnull stop) { if ([obj conformsToProtocol:@protocol(MPExtensionKitProtocol)]) { id kitExtension = (id)obj; @@ -949,7 +950,7 @@ - (void)testFilterForSelector { [kitContainer configureKits:nil]; [kitContainer configureKits:configurations]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 42"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -974,7 +975,7 @@ - (void)testFilterForUserAttribute { [kitContainer configureKits:nil]; [kitContainer configureKits:configurations]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 42"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -1069,7 +1070,7 @@ - (void)testFilterForUserAttributes { [kitContainer configureKits:nil]; [kitContainer configureKits:configurations]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 42"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -1112,7 +1113,7 @@ - (void)testFilterForUserIdentity { [kitContainer configureKits:nil]; [kitContainer configureKits:configurations]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 42"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -1145,7 +1146,7 @@ - (void)testFilterCommerceEvent_EventType { [kitContainer configureKits:nil]; [kitContainer configureKits:configurations]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; id registeredKit = [registeredKits anyObject]; MPProduct *product = [[MPProduct alloc] initWithName:@"DeLorean" sku:@"OutATime" quantity:@1 price:@4.32]; @@ -1198,7 +1199,7 @@ - (void)testFilterCommerceEvent_EntityType { [kitContainer configureKits:nil]; [kitContainer configureKits:configurations]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; id registeredKit = [registeredKits anyObject]; MPProduct *product = [[MPProduct alloc] initWithName:@"DeLorean" sku:@"OutATime" quantity:@1 price:@4.32]; @@ -1262,7 +1263,7 @@ - (void)testFilterCommerceEvent_Other { [kitContainer configureKits:nil]; [kitContainer configureKits:configurations]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; id registeredKit = [registeredKits anyObject]; MPProduct *product = [[MPProduct alloc] initWithName:@"DeLorean" sku:@"OutATime" quantity:@1 price:@4.32]; @@ -1327,7 +1328,7 @@ - (void)testFilterCommerceEvent_TransactionAttributes { [kitContainer configureKits:nil]; [kitContainer configureKits:configurations]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 42"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -2103,7 +2104,7 @@ - (void)testAttributeHashProjection { } - (void)testAllocation { - MPKitContainer *localKitContainer = [[MPKitContainer alloc] init]; + MPKitContainer_PRIVATE *localKitContainer = [[MPKitContainer_PRIVATE alloc] init]; XCTAssertNotNil(localKitContainer); } @@ -2190,7 +2191,7 @@ - (void)testExpandedCommerceEventProjection { } - (void)testShouldDelayUploadMaxTime { - MPKitContainer *localKitContainer = [[MPKitContainer alloc] init]; + MPKitContainer_PRIVATE *localKitContainer = [[MPKitContainer_PRIVATE alloc] init]; [localKitContainer setKitsInitialized:NO]; XCTAssertFalse([localKitContainer shouldDelayUpload:0]); XCTAssertTrue([localKitContainer shouldDelayUpload:10000]); @@ -2210,11 +2211,11 @@ - (void)testIsDisabledByConsentKitFilterGPDR { filter.filterItems = [filterItems copy]; - BOOL isDisabled = [[MParticle sharedInstance].kitContainer isDisabledByConsentKitFilter:filter]; + BOOL isDisabled = [[MParticle sharedInstance].kitContainer_PRIVATE isDisabledByConsentKitFilter:filter]; XCTAssertTrue(isDisabled); filter.shouldIncludeOnMatch = NO; - isDisabled = [[MParticle sharedInstance].kitContainer isDisabledByConsentKitFilter:filter]; + isDisabled = [[MParticle sharedInstance].kitContainer_PRIVATE isDisabledByConsentKitFilter:filter]; XCTAssertFalse(isDisabled); filter.shouldIncludeOnMatch = YES; @@ -2241,11 +2242,11 @@ - (void)testIsDisabledByConsentKitFilterGPDR { [MPPersistenceController setConsentState:state forMpid:[MPPersistenceController mpId]]; MParticle.sharedInstance.identity.currentUser.consentState = state; - isDisabled = [[MParticle sharedInstance].kitContainer isDisabledByConsentKitFilter:filter]; + isDisabled = [[MParticle sharedInstance].kitContainer_PRIVATE isDisabledByConsentKitFilter:filter]; XCTAssertFalse(isDisabled); filter.shouldIncludeOnMatch = NO; - isDisabled = [[MParticle sharedInstance].kitContainer isDisabledByConsentKitFilter:filter]; + isDisabled = [[MParticle sharedInstance].kitContainer_PRIVATE isDisabledByConsentKitFilter:filter]; XCTAssertTrue(isDisabled); } @@ -2281,33 +2282,33 @@ - (void)testIsDisabledByConsentKitFilterCCPA { [MPPersistenceController setConsentState:state forMpid:[MPPersistenceController mpId]]; MParticle.sharedInstance.identity.currentUser.consentState = state; - BOOL isDisabled = [[MParticle sharedInstance].kitContainer isDisabledByConsentKitFilter:filter]; + BOOL isDisabled = [[MParticle sharedInstance].kitContainer_PRIVATE isDisabledByConsentKitFilter:filter]; XCTAssertFalse(isDisabled); filter.shouldIncludeOnMatch = NO; - isDisabled = [[MParticle sharedInstance].kitContainer isDisabledByConsentKitFilter:filter]; + isDisabled = [[MParticle sharedInstance].kitContainer_PRIVATE isDisabledByConsentKitFilter:filter]; XCTAssertTrue(isDisabled); } - (void)testInitializeKitsWhenNilSupportedKits { - MPKitContainer *kitContainer = [[MPKitContainer alloc] init]; - MPKitContainer *mockKitContainer = OCMPartialMock(kitContainer); + MPKitContainer_PRIVATE *kitContainer = [[MPKitContainer_PRIVATE alloc] init]; + MPKitContainer_PRIVATE *mockKitContainer = OCMPartialMock(kitContainer); [[[(id)mockKitContainer stub] andReturn:nil] supportedKits]; [mockKitContainer initializeKits]; XCTAssertTrue(mockKitContainer.kitsInitialized); } - (void)testInitializeKitsWhenEmptySupportedKits { - MPKitContainer *kitContainer = [[MPKitContainer alloc] init]; - MPKitContainer *mockKitContainer = OCMPartialMock(kitContainer); + MPKitContainer_PRIVATE *kitContainer = [[MPKitContainer_PRIVATE alloc] init]; + MPKitContainer_PRIVATE *mockKitContainer = OCMPartialMock(kitContainer); [[[(id)mockKitContainer stub] andReturn: @[] ] supportedKits]; [mockKitContainer initializeKits]; XCTAssertTrue(mockKitContainer.kitsInitialized); } - (void)testInitializeKitsWhenNonemptySupportedKits { - MPKitContainer *kitContainer = [[MPKitContainer alloc] init]; - MPKitContainer *mockKitContainer = OCMPartialMock(kitContainer); + MPKitContainer_PRIVATE *kitContainer = [[MPKitContainer_PRIVATE alloc] init]; + MPKitContainer_PRIVATE *mockKitContainer = OCMPartialMock(kitContainer); [[[(id)mockKitContainer stub] andReturn: @[@123] ] supportedKits]; [mockKitContainer initializeKits]; XCTAssertFalse(mockKitContainer.kitsInitialized); @@ -2317,7 +2318,7 @@ - (void)testInitializeKitsWhenNonemptySupportedKits { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" - (void)testAttemptToLogEventToKit { - MPKitContainer *localKitContainer = [[MPKitContainer alloc] init]; + MPKitContainer_PRIVATE *localKitContainer = [[MPKitContainer_PRIVATE alloc] init]; MPEvent *event = [[MPEvent alloc] initWithName:@"test_string" type:MPEventTypeOther]; event.customAttributes = @{@"plan":@"premium"}; @@ -2340,7 +2341,7 @@ - (void)testAttemptToLogEventToKit { #pragma clang diagnostic pop - (void)testAttemptToLogBaseEventToKit { - MPKitContainer *localKitContainer = [[MPKitContainer alloc] init]; + MPKitContainer_PRIVATE *localKitContainer = [[MPKitContainer_PRIVATE alloc] init]; MPEvent *event = [[MPEvent alloc] initWithName:@"test_string" type:MPEventTypeOther]; event.customAttributes = @{@"plan":@"premium"}; @@ -2359,7 +2360,7 @@ - (void)testAttemptToLogBaseEventToKit { } - (void)testAttemptToLogBaseEventMediaTypeToKit { - MPKitContainer *localKitContainer = [[MPKitContainer alloc] init]; + MPKitContainer_PRIVATE *localKitContainer = [[MPKitContainer_PRIVATE alloc] init]; MPEvent *event = [[MPEvent alloc] initWithName:@"test_string" type:MPEventTypeMedia]; event.customAttributes = @{@"plan":@"premium"}; @@ -2378,7 +2379,7 @@ - (void)testAttemptToLogBaseEventMediaTypeToKit { } - (void)testAttemptToSetOptOutToKitTrue { - MPKitContainer *localKitContainer = [[MPKitContainer alloc] init]; + MPKitContainer_PRIVATE *localKitContainer = [[MPKitContainer_PRIVATE alloc] init]; MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"AppsFlyer" className:@"MPKitAppsFlyerTest"]; id kitWrapperMock = OCMProtocolMock(@protocol(MPKitProtocol)); @@ -2397,7 +2398,7 @@ - (void)testAttemptToSetOptOutToKitTrue { } - (void)testAttemptToSetOptOutToKitFalse { - MPKitContainer *localKitContainer = [[MPKitContainer alloc] init]; + MPKitContainer_PRIVATE *localKitContainer = [[MPKitContainer_PRIVATE alloc] init]; MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"AppsFlyer" className:@"MPKitAppsFlyerTest"]; id kitWrapperMock = OCMProtocolMock(@protocol(MPKitProtocol)); @@ -2417,7 +2418,7 @@ - (void)testAttemptToSetOptOutToKitFalse { } - (void)testAttemptToLegacyOpenURLToKit { - MPKitContainer *localKitContainer = [[MPKitContainer alloc] init]; + MPKitContainer_PRIVATE *localKitContainer = [[MPKitContainer_PRIVATE alloc] init]; SEL selector = @selector(openURL:sourceApplication:annotation:); MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"AppsFlyer" className:@"MPKitAppsFlyerTest"]; @@ -2439,7 +2440,7 @@ - (void)testAttemptToLegacyOpenURLToKit { } - (void)testAttemptToOpenURLToKit { - MPKitContainer *localKitContainer = [[MPKitContainer alloc] init]; + MPKitContainer_PRIVATE *localKitContainer = [[MPKitContainer_PRIVATE alloc] init]; SEL selector = @selector(openURL:options:); MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"AppsFlyer" className:@"MPKitAppsFlyerTest"]; @@ -2465,7 +2466,7 @@ - (void)testAttemptToOpenURLToKit { } - (void)testAttemptToContinueUserActivityToKit { - MPKitContainer *localKitContainer = [[MPKitContainer alloc] init]; + MPKitContainer_PRIVATE *localKitContainer = [[MPKitContainer_PRIVATE alloc] init]; SEL selector = @selector(continueUserActivity:restorationHandler:); MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"AppsFlyer" className:@"MPKitAppsFlyerTest"]; @@ -2491,7 +2492,7 @@ - (void)testAttemptToContinueUserActivityToKit { } - (void)testAttemptToSurveyToKit { - MPKitContainer *localKitContainer = [[MPKitContainer alloc] init]; + MPKitContainer_PRIVATE *localKitContainer = [[MPKitContainer_PRIVATE alloc] init]; MPForwardQueueParameters *queueParameters = [[MPForwardQueueParameters alloc] init]; NSURL *url = [NSURL URLWithString:@"mparticle://baseurl?query"]; @@ -2512,7 +2513,7 @@ - (void)testAttemptToSurveyToKit { } - (void)testAttemptToShouldDelayEventToKit { - MPKitContainer *localKitContainer = [[MPKitContainer alloc] init]; + MPKitContainer_PRIVATE *localKitContainer = [[MPKitContainer_PRIVATE alloc] init]; MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"AppsFlyer" className:@"MPKitAppsFlyerTest"]; id kitWrapperMock = OCMProtocolMock(@protocol(MPKitProtocol)); @@ -2612,7 +2613,7 @@ - (void)testForwardEventToSideloadedKit { - (void)testAppInfoContainsSideloadKitsFlag { [[MPIUserDefaults standardUserDefaults] setSideloadedKitsCount:3]; - NSDictionary *dict = [[[MPApplication alloc] init] dictionaryRepresentation]; + NSDictionary *dict = [[[MPApplication_PRIVATE alloc] init] dictionaryRepresentation]; XCTAssertEqualObjects(dict[@"sideloaded_kits_count"], @3); } @@ -2630,7 +2631,7 @@ - (void)testFilterEventTypeForSideloadedKit { @"modality":@"sprinting"}; event.category = @"Olympic Games"; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 1000000000"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -2655,7 +2656,7 @@ - (void)testFilterMessageTypeForSideloadedKit { @"modality":@"sprinting"}; event.category = @"Olympic Games"; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 1000000000"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -2675,7 +2676,7 @@ - (void)testFilterEventTypeNavigationForSideloadedKitForSideloadedKit { MPEvent *event = [[MPEvent alloc] initWithName:@"Dinosaur Run" type:MPEventTypeNavigation]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 1000000000"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -2703,7 +2704,7 @@ - (void)testFilterEventNameForSideloadedKit { @"modality":@"sprinting"}; event.category = @"Olympic Games"; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 1000000000"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -2726,7 +2727,7 @@ - (void)testFilterEventNameAndAttributesForSideloadedKit { @"modality":@"sprinting"}; event.category = @"Olympic Games"; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 1000000000"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -2744,7 +2745,7 @@ - (void)testFilterForSelectorForSideloadedKit { kitContainer.sideloadedKits = @[sideloadedKit1]; [kitContainer initializeKits]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 1000000000"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -2759,7 +2760,7 @@ - (void)testFilterForUserAttributeForSideloadedKit { kitContainer.sideloadedKits = @[sideloadedKit1]; [kitContainer initializeKits]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 1000000000"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -2831,7 +2832,7 @@ - (void)testFilterForUserAttributesForSideloadedKit { @"growl":@"loud", @"teeth":@"sharp"}; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 1000000000"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -2862,7 +2863,7 @@ - (void)testFilterForUserIdentityForSideloadedKit { kitContainer.sideloadedKits = @[sideloadedKit1]; [kitContainer initializeKits]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 1000000000"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; @@ -2885,7 +2886,7 @@ - (void)testFilterCommerceEvent_EventTypeForSideloadedKit { kitContainer.sideloadedKits = @[sideloadedKit1]; [kitContainer initializeKits]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; id registeredKit = [registeredKits anyObject]; MPProduct *product = [[MPProduct alloc] initWithName:@"DeLorean" sku:@"OutATime" quantity:@1 price:@4.32]; @@ -2928,7 +2929,7 @@ - (void)testFilterCommerceEvent_EntityTypeForSideloadedKit { kitContainer.sideloadedKits = @[sideloadedKit1]; [kitContainer initializeKits]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; id registeredKit = [registeredKits anyObject]; MPProduct *product = [[MPProduct alloc] initWithName:@"DeLorean" sku:@"OutATime" quantity:@1 price:@4.32]; @@ -2980,7 +2981,7 @@ - (void)testFilterCommerceEvent_OtherForSideloadedKit { kitContainer.sideloadedKits = @[sideloadedKit1]; [kitContainer initializeKits]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; id registeredKit = [registeredKits anyObject]; MPProduct *product = [[MPProduct alloc] initWithName:@"DeLorean" sku:@"OutATime" quantity:@1 price:@4.32]; @@ -3033,7 +3034,7 @@ - (void)testFilterCommerceEvent_TransactionAttributesForSideloadedKit { kitContainer.sideloadedKits = @[sideloadedKit1]; [kitContainer initializeKits]; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == 1000000000"]; id registeredKit = [[registeredKits filteredSetUsingPredicate:predicate] anyObject]; diff --git a/UnitTests/MPMessageBuilderTests.m b/UnitTests/MPMessageBuilderTests.m index 8af32e2d9..fc8bfeb85 100644 --- a/UnitTests/MPMessageBuilderTests.m +++ b/UnitTests/MPMessageBuilderTests.m @@ -18,16 +18,17 @@ #import "mParticle.h" #import "MPBaseTestCase.h" #import "MPStateMachine.h" +#import "MParticleReachability.h" NSString *const kMPStateInformationKey = @"cs"; @interface MParticle () -@property (nonatomic, strong) MPStateMachine *stateMachine; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; @end -@interface MPStateMachine () +@interface MPStateMachine_PRIVATE () @property (nonatomic, strong) MParticleReachability *reachability; diff --git a/UnitTests/MPNetworkCommunication+Tests.h b/UnitTests/MPNetworkCommunication+Tests.h index c3c870db6..397703b33 100644 --- a/UnitTests/MPNetworkCommunication+Tests.h +++ b/UnitTests/MPNetworkCommunication+Tests.h @@ -5,7 +5,7 @@ extern NSString * _Nonnull const kMPURLHostEventSubdomain; extern NSString * _Nonnull const kMPURLHostIdentitySubdomain; -@interface MPNetworkCommunication(Tests) +@interface MPNetworkCommunication_PRIVATE(Tests) - (nonnull NSString *)defaultHostWithSubdomain:(nonnull NSString *)subdomain apiKey:(nonnull NSString *)apiKey enableDirectRouting:(BOOL)enableDirectRouting; - (nonnull NSString *)defaultEventHost; diff --git a/UnitTests/MPNetworkCommunicationTests.m b/UnitTests/MPNetworkCommunicationTests.m index ae528189f..531511218 100644 --- a/UnitTests/MPNetworkCommunicationTests.m +++ b/UnitTests/MPNetworkCommunicationTests.m @@ -14,17 +14,18 @@ #import "MPStateMachine.h" #import "MPDevice.h" #import "MParticleSwift.h" +#import "MPIConstants.h" @interface MParticle () -@property (nonatomic, strong) MPStateMachine *stateMachine; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; @property (nonatomic, strong) MPPersistenceController *persistenceController; @property (nonatomic, strong, readwrite) MPNetworkOptions *networkOptions; - (void)logKitBatch:(NSString *)batch; @end -@interface MPNetworkCommunication () +@interface MPNetworkCommunication_PRIVATE () - (NSNumber *)maxAgeForCache:(nonnull NSString *)cache; - (BOOL)performMessageUpload:(MPUpload *)upload; @@ -61,7 +62,7 @@ - (NSDictionary *)infoDictionary { - (void)testConfigURL { [self swizzleInstanceMethodForInstancesOfClass:[NSBundle class] selector:@selector(infoDictionary)]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSURL *configURL = [networkCommunication configURL].url; [self deswizzle]; @@ -75,7 +76,7 @@ - (void)testConfigURLWithOptions { MPNetworkOptions *options = [[MPNetworkOptions alloc] init]; options.configHost = @"config.mpproxy.example.com"; [MParticle sharedInstance].networkOptions = options; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSURL *configURL = [networkCommunication configURL].url; [self deswizzle]; @@ -90,7 +91,7 @@ - (void)testConfigURLWithOptionsAndOverride { options.configHost = @"config.mpproxy.example.com"; options.overridesConfigSubdirectory = true; [MParticle sharedInstance].networkOptions = options; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSURL *configURL = [networkCommunication configURL].url; [self deswizzle]; @@ -103,7 +104,7 @@ - (void)testConfigURLWithOptionsAndOverride { - (void)testModifyURL { [self swizzleInstanceMethodForInstancesOfClass:[NSBundle class] selector:@selector(infoDictionary)]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSURL *modifyURL = [networkCommunication modifyURL].url; [self deswizzle]; @@ -118,7 +119,7 @@ - (void)testModifyURLWithOptions { options.identityHost = @"identity.mpproxy.example.com"; [MParticle sharedInstance].networkOptions = options; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSURL *modifyURL = [networkCommunication modifyURL].url; [self deswizzle]; @@ -129,7 +130,7 @@ - (void)testModifyURLWithOptions { - (void)testModifyURLWithOptionsAndTrackingOverride { [self swizzleInstanceMethodForInstancesOfClass:[NSBundle class] selector:@selector(infoDictionary)]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; stateMachine.attAuthorizationStatus = @(MPATTAuthorizationStatusAuthorized); MPNetworkOptions *options = [[MPNetworkOptions alloc] init]; @@ -137,7 +138,7 @@ - (void)testModifyURLWithOptionsAndTrackingOverride { options.identityTrackingHost = @"identity-tracking.mpproxy.example.com"; [MParticle sharedInstance].networkOptions = options; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSURL *modifyURL = [networkCommunication modifyURL].url; [self deswizzle]; @@ -148,7 +149,7 @@ - (void)testModifyURLWithOptionsAndTrackingOverride { - (void)testEventURLWithOptionsAndOverrideAndEventsOnlyAndTrackingHost { [self swizzleInstanceMethodForInstancesOfClass:[NSBundle class] selector:@selector(infoDictionary)]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; stateMachine.attAuthorizationStatus = @(MPATTAuthorizationStatusAuthorized); MPNetworkOptions *options = [[MPNetworkOptions alloc] init]; @@ -157,7 +158,7 @@ - (void)testEventURLWithOptionsAndOverrideAndEventsOnlyAndTrackingHost { options.eventsOnly = true; [MParticle sharedInstance].networkOptions = options; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:nil uploadDictionary:@{} dataPlanId:nil dataPlanVersion:nil uploadSettings:[MPUploadSettings currentUploadSettings]]; NSURL *eventURL = [networkCommunication eventURLForUpload:upload].url; @@ -172,7 +173,7 @@ - (void)testEventURLWithOptionsAndOverrideAndEventsOnlyAndTrackingHost { - (void)testAliasURL { [self swizzleInstanceMethodForInstancesOfClass:[NSBundle class] selector:@selector(infoDictionary)]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:nil uploadDictionary:@{} dataPlanId:nil dataPlanVersion:nil uploadSettings:[MPUploadSettings currentUploadSettings]]; NSURL *aliasURL = [networkCommunication aliasURLForUpload:upload].url; @@ -188,7 +189,7 @@ - (void)testAliasURLWithOptions { options.eventsHost = @"events.mpproxy.example.com"; [MParticle sharedInstance].networkOptions = options; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:nil uploadDictionary:@{} dataPlanId:nil dataPlanVersion:nil uploadSettings:[MPUploadSettings currentUploadSettings]]; NSURL *aliasURL = [networkCommunication aliasURLForUpload:upload].url; @@ -205,7 +206,7 @@ - (void)testAliasURLWithOptionsAndOverride { options.overridesEventsSubdirectory = true; [MParticle sharedInstance].networkOptions = options; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:nil uploadDictionary:@{} dataPlanId:nil dataPlanVersion:nil uploadSettings:[MPUploadSettings currentUploadSettings]]; NSURL *aliasURL = [networkCommunication aliasURLForUpload:upload].url; @@ -224,7 +225,7 @@ - (void)testAliasURLWithEventsOnly { options.eventsOnly = true; [MParticle sharedInstance].networkOptions = options; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:nil uploadDictionary:@{} dataPlanId:nil dataPlanVersion:nil uploadSettings:[MPUploadSettings currentUploadSettings]]; NSURL *aliasURL = [networkCommunication aliasURLForUpload:upload].url; @@ -242,7 +243,7 @@ - (void)testAliasURLWithOptionsAndEventsOnly { options.eventsOnly = true; [MParticle sharedInstance].networkOptions = options; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:nil uploadDictionary:@{} dataPlanId:nil dataPlanVersion:nil uploadSettings:[MPUploadSettings currentUploadSettings]]; NSURL *aliasURL = [networkCommunication aliasURLForUpload:upload].url; @@ -261,7 +262,7 @@ - (void)testAliasURLWithOptionsAndOverrideAndEventsOnly { options.eventsOnly = true; [MParticle sharedInstance].networkOptions = options; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:nil uploadDictionary:@{} dataPlanId:nil dataPlanVersion:nil uploadSettings:[MPUploadSettings currentUploadSettings]]; NSURL *aliasURL = [networkCommunication aliasURLForUpload:upload].url; @@ -275,7 +276,7 @@ - (void)testAliasURLWithOptionsAndOverrideAndEventsOnly { - (void)testAliasURLWithOptionsAndOverrideAndEventsOnlyAndTrackingHost { [self swizzleInstanceMethodForInstancesOfClass:[NSBundle class] selector:@selector(infoDictionary)]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; stateMachine.attAuthorizationStatus = @(MPATTAuthorizationStatusAuthorized); MPNetworkOptions *options = [[MPNetworkOptions alloc] init]; @@ -287,7 +288,7 @@ - (void)testAliasURLWithOptionsAndOverrideAndEventsOnlyAndTrackingHost { options.eventsOnly = true; [MParticle sharedInstance].networkOptions = options; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:nil uploadDictionary:@{} dataPlanId:nil dataPlanVersion:nil uploadSettings:[MPUploadSettings currentUploadSettings]]; NSURL *aliasURL = [networkCommunication aliasURLForUpload:upload].url; @@ -300,7 +301,7 @@ - (void)testAliasURLWithOptionsAndOverrideAndEventsOnlyAndTrackingHost { } - (void)testEmptyUploadsArray { - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSArray *uploads = @[]; __block BOOL handlerCalled = NO; [networkCommunication upload:uploads completionHandler:^{ @@ -310,7 +311,7 @@ - (void)testEmptyUploadsArray { } - (void)testUploadsArrayZipFail { - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:@1 uploadDictionary:@{} dataPlanId:@"test" dataPlanVersion:@(1) uploadSettings:[MPUploadSettings currentUploadSettings]]; NSArray *uploads = @[upload]; id mockZip = OCMClassMock([MPZip_PRIVATE class]); @@ -325,7 +326,7 @@ - (void)testUploadsArrayZipFail { - (void)testUploadsArrayZipSucceedWithATTNotDetermined { [[MParticle sharedInstance] setATTStatus:MPATTAuthorizationStatusNotDetermined withATTStatusTimestampMillis:nil]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:@1 uploadDictionary:@{kMPDeviceInformationKey: @{}} dataPlanId:@"test" dataPlanVersion:@(1) uploadSettings:[MPUploadSettings currentUploadSettings]]; NSArray *uploads = @[upload]; id mockZip = OCMClassMock([MPZip_PRIVATE class]); @@ -342,7 +343,7 @@ - (void)testUploadsArrayZipSucceedWithATTNotDetermined { - (void)testUploadsArrayZipSucceedWithATTRestricted { [[MParticle sharedInstance] setATTStatus:MPATTAuthorizationStatusRestricted withATTStatusTimestampMillis:nil]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:@1 uploadDictionary:@{kMPDeviceInformationKey: @{}} dataPlanId:@"test" dataPlanVersion:@(1) uploadSettings:[MPUploadSettings currentUploadSettings]]; NSArray *uploads = @[upload]; id mockZip = OCMClassMock([MPZip_PRIVATE class]); @@ -359,7 +360,7 @@ - (void)testUploadsArrayZipSucceedWithATTRestricted { - (void)testUploadsArrayZipSucceedWithATTDenied { [[MParticle sharedInstance] setATTStatus:MPATTAuthorizationStatusDenied withATTStatusTimestampMillis:nil]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:@1 uploadDictionary:@{kMPDeviceInformationKey: @{}} dataPlanId:@"test" dataPlanVersion:@(1) uploadSettings:[MPUploadSettings currentUploadSettings]]; NSArray *uploads = @[upload]; id mockZip = OCMClassMock([MPZip_PRIVATE class]); @@ -376,7 +377,7 @@ - (void)testUploadsArrayZipSucceedWithATTDenied { - (void)testUploadsArrayZipSucceedWithATTAuthorized { [[MParticle sharedInstance] setATTStatus:MPATTAuthorizationStatusAuthorized withATTStatusTimestampMillis:nil]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:@1 uploadDictionary:@{kMPDeviceInformationKey: @{}} dataPlanId:@"test" dataPlanVersion:@(1) uploadSettings:[MPUploadSettings currentUploadSettings]]; NSArray *uploads = @[upload]; id mockZip = OCMClassMock([MPZip_PRIVATE class]); @@ -415,7 +416,7 @@ - (void)shouldStopEvents:(int)returnCode shouldStop:(BOOL)shouldStop { id mockConnector = OCMClassMock([MPConnector class]); [[[mockConnector stub] andReturn:response] responseFromPostRequestToURL:OCMOCK_ANY message:OCMOCK_ANY serializedParams:OCMOCK_ANY secret:OCMOCK_ANY]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; id mockNetworkCommunication = OCMPartialMock(networkCommunication); [[[mockNetworkCommunication stub] andReturn:mockConnector] makeConnector]; @@ -450,7 +451,7 @@ - (void)shouldStopAlias:(int)returnCode shouldStop:(BOOL)shouldStop { id mockConnector = OCMClassMock([MPConnector class]); [[[mockConnector stub] andReturn:response] responseFromPostRequestToURL:OCMOCK_ANY message:OCMOCK_ANY serializedParams:OCMOCK_ANY secret:OCMOCK_ANY]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; id mockNetworkCommunication = OCMPartialMock(networkCommunication); [[[mockNetworkCommunication stub] andReturn:mockConnector] makeConnector]; @@ -471,7 +472,7 @@ - (void)testOfflineUpload { id mockConnector = OCMClassMock([MPConnector class]); [[[mockConnector stub] andReturn:response] responseFromPostRequestToURL:OCMOCK_ANY message:OCMOCK_ANY serializedParams:OCMOCK_ANY secret:OCMOCK_ANY]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; id mockNetworkCommunication = OCMPartialMock(networkCommunication); [[[mockNetworkCommunication stub] andReturn:mockConnector] makeConnector]; @@ -503,7 +504,7 @@ - (void)testUploadSuccessDeletion { id mockConnector = OCMClassMock([MPConnector class]); [[[mockConnector stub] andReturn:response] responseFromPostRequestToURL:OCMOCK_ANY message:OCMOCK_ANY serializedParams:OCMOCK_ANY secret:OCMOCK_ANY]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; id mockNetworkCommunication = OCMPartialMock(networkCommunication); [[[mockNetworkCommunication stub] andReturn:mockConnector] makeConnector]; @@ -545,7 +546,7 @@ - (void)testUploadInvalidDeletion { id mockConnector = OCMClassMock([MPConnector class]); [[[mockConnector stub] andReturn:response] responseFromPostRequestToURL:OCMOCK_ANY message:OCMOCK_ANY serializedParams:OCMOCK_ANY secret:OCMOCK_ANY]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; id mockNetworkCommunication = OCMPartialMock(networkCommunication); [[[mockNetworkCommunication stub] andReturn:mockConnector] makeConnector]; @@ -581,7 +582,7 @@ - (void)testRequestConfigWithDefaultMaxAge { XCTAssertEqualObjects(configProvisioned, nil); XCTAssertEqualObjects(maxAge, nil); - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSURL *configURL = [networkCommunication configURL].url; MPConnector *connector = [[MPConnector alloc] init]; @@ -637,7 +638,7 @@ - (void)testRequestConfigWithManualMaxAge { MPIUserDefaults *userDefaults = [MPIUserDefaults standardUserDefaults]; userDefaults[kMPConfigProvisionedTimestampKey] = @5555; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSURL *configURL = [networkCommunication configURL].url; MPConnector *connector = [[MPConnector alloc] init]; @@ -689,7 +690,7 @@ - (void)testRequestConfigWithManualMaxAge { } - (void)testRequestConfigWithManualMaxAgeAndInitialAge { - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSURL *configURL = [networkCommunication configURL].url; MPConnector *connector = [[MPConnector alloc] init]; @@ -752,7 +753,7 @@ - (void)testRequestConfigWithManualMaxAgeOverMaxAllowed { MPIUserDefaults *userDefaults = [MPIUserDefaults standardUserDefaults]; userDefaults[kMPConfigProvisionedTimestampKey] = @5555; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSURL *configURL = [networkCommunication configURL].url; MPConnector *connector = [[MPConnector alloc] init]; @@ -809,7 +810,7 @@ - (void)testRequestConfigWithComplexCacheControlHeader { MPIUserDefaults *userDefaults = [MPIUserDefaults standardUserDefaults]; userDefaults[kMPConfigProvisionedTimestampKey] = @5555; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSURL *configURL = [networkCommunication configURL].url; MPConnector *connector = [[MPConnector alloc] init]; @@ -862,42 +863,42 @@ - (void)testRequestConfigWithComplexCacheControlHeader { } - (void)testMaxAgeForCacheEmptyString { - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSString *test1 = @""; XCTAssertEqualObjects([networkCommunication maxAgeForCache:test1], nil); } - (void)testMaxAgeForCacheSimple { - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSString *test2 = @"max-age=12"; XCTAssertEqualObjects([networkCommunication maxAgeForCache:test2], @12); } - (void)testMaxAgeForCacheMultiValue1 { - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSString *test3 = @"max-age=13, max-stale=7"; XCTAssertEqualObjects([networkCommunication maxAgeForCache:test3], @13); } - (void)testMaxAgeForCacheMultiValue2 { - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSString *test4 = @"max-stale=34, max-age=14"; XCTAssertEqualObjects([networkCommunication maxAgeForCache:test4], @14); } - (void)testMaxAgeForCacheMultiValue3 { - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSString *test4 = @"max-stale=33434344, max-age=15, min-fresh=3553553"; XCTAssertEqualObjects([networkCommunication maxAgeForCache:test4], @15); } - (void)testMaxAgeForCacheCapitalization { - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; NSString *test5 = @"max-stale=34, MAX-age=16, min-fresh=3553553"; XCTAssertEqualObjects([networkCommunication maxAgeForCache:test5], @16); @@ -914,8 +915,8 @@ - (void)testPodURLRoutingAndTrackingURL { @[@"st1-k77ivhkbbqf4ce0s3y12zpcthyn1ixfyu", @"nativesdks.st1.mparticle.com", @"identity.st1.mparticle.com", @"tracking-nativesdks.st1.mparticle.com", @"tracking-identity.st1.mparticle.com"], @[@"us3-w1y2y8yj8q58d5bx9u2dvtxzl4cpa7cuf", @"nativesdks.us3.mparticle.com", @"identity.us3.mparticle.com", @"tracking-nativesdks.us3.mparticle.com", @"tracking-identity.us3.mparticle.com"] ]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; NSString *oldEventHost = @"nativesdks.mparticle.com"; NSString *oldIdentityHost = @"identity.mparticle.com"; diff --git a/UnitTests/MPNotificationController+Tests.h b/UnitTests/MPNotificationController+Tests.h index a13197c7b..6ef0bc11c 100644 --- a/UnitTests/MPNotificationController+Tests.h +++ b/UnitTests/MPNotificationController+Tests.h @@ -1,6 +1,6 @@ #import "MPNotificationController.h" -@interface MPNotificationController(Tests) +@interface MPNotificationController_PRIVATE(Tests) - (void)handleApplicationDidFinishLaunching:(NSNotification *)notification; - (void)handleApplicationDidEnterBackground:(NSNotification *)notification; diff --git a/UnitTests/MPPersistenceControllerTests.mm b/UnitTests/MPPersistenceControllerTests.mm index 423fb0ccf..f8b9989a3 100644 --- a/UnitTests/MPPersistenceControllerTests.mm +++ b/UnitTests/MPPersistenceControllerTests.mm @@ -22,7 +22,7 @@ @interface MParticle () + (dispatch_queue_t)messageQueue; @property (nonatomic, strong) MPPersistenceController *persistenceController; -@property (nonatomic, strong) MPStateMachine *stateMachine; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; @property (nonatomic, strong, nullable) NSString *dataPlanId; @property (nonatomic, strong, nullable) NSNumber *dataPlanVersion; @@ -46,7 +46,7 @@ - (void)setUp { [super setUp]; [MParticle sharedInstance].persistenceController = [[MPPersistenceController alloc] init]; - MPStateMachine *stateMachine = [[MPStateMachine alloc] init]; + MPStateMachine_PRIVATE *stateMachine = [[MPStateMachine_PRIVATE alloc] init]; stateMachine.apiKey = @"test_key"; stateMachine.secret = @"test_secret"; [MParticle sharedInstance].stateMachine = stateMachine; diff --git a/UnitTests/MPResponseConfigTests.m b/UnitTests/MPResponseConfigTests.m index 90fafbb35..3c44032f1 100644 --- a/UnitTests/MPResponseConfigTests.m +++ b/UnitTests/MPResponseConfigTests.m @@ -1,16 +1,17 @@ #import -#import "MPResponseConfig.h" +#import "mParticle.h" +#import "MParticleSwift.h" #import "MPIConstants.h" #import "MPStateMachine.h" -#import "mParticle.h" #import "MPIUserDefaults.h" #import "MPBaseTestCase.h" @interface MParticle () + (dispatch_queue_t)messageQueue; -@property (nonatomic, strong) MPStateMachine *stateMachine; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; @property (nonatomic, strong, nonnull) MParticleOptions *options; +@property (nonatomic, strong, readonly) MPBackendController_PRIVATE *backendController; @end @@ -28,7 +29,8 @@ - (void)testInstance { kMPRemoteConfigExceptionHandlingModeKey:kMPRemoteConfigExceptionHandlingModeIgnore, kMPRemoteConfigSessionTimeoutKey:@112}; - MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration]; + MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration stateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController]; + XCTAssertNotNil(responseConfig, @"Should not have been nil."); } @@ -36,11 +38,7 @@ - (void)testInvalidConfigurations { XCTestExpectation *expectation = [self expectationWithDescription:@"Test instance"]; dispatch_async([MParticle messageQueue], ^{ NSDictionary *configuration = nil; - MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration]; - XCTAssertNil(responseConfig, @"Should have been nil."); - - configuration = (NSDictionary *)[NSNull null]; - responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration]; + MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration stateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController]; XCTAssertNil(responseConfig, @"Should have been nil."); [expectation fulfill]; }); @@ -54,7 +52,7 @@ - (void)testUpdateCustomModuleSettingsOnRestore { options:NSJSONReadingMutableContainers error:nil]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; stateMachine.customModules = nil; NSDictionary *configuration = @{kMPRemoteConfigKitsKey:[NSNull null], kMPRemoteConfigCustomModuleSettingsKey:cmsDict, @@ -64,7 +62,7 @@ - (void)testUpdateCustomModuleSettingsOnRestore { kMPRemoteConfigSessionTimeoutKey:@112}; XCTAssertNil(stateMachine.customModules); - MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration dataReceivedFromServer:NO]; + MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration stateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController]; XCTAssertNotNil(responseConfig); XCTAssertNotNil(stateMachine.customModules); XCTAssertEqual(1, [stateMachine.customModules count]); @@ -89,7 +87,7 @@ - (void)testSaveRestore { kMPRemoteConfigExceptionHandlingModeKey:kMPRemoteConfigExceptionHandlingModeForce, kMPRemoteConfigSessionTimeoutKey:@112}; - MPResponseConfig *restoredResponseConfig = [MPResponseConfig restore]; + MPResponseConfig *restoredResponseConfig = [MPIUserDefaults restore]; XCTAssertNotNil(restoredResponseConfig); XCTAssertEqualObjects(restoredResponseConfig.configuration, configuration); @@ -99,17 +97,6 @@ - (void)testSaveRestore { [self waitForExpectationsWithTimeout:DEFAULT_TIMEOUT handler:nil]; } -- (void)testResponseConfigEncoding { - NSDictionary *configuration = @{kMPRemoteConfigRampKey:@100, - kMPRemoteConfigExceptionHandlingModeKey:kMPRemoteConfigExceptionHandlingModeForce, - kMPRemoteConfigSessionTimeoutKey:@112}; - - MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration]; - - MPResponseConfig *persistedResponseConfig = [self attemptSecureEncodingwithClass:[MPResponseConfig class] Object:responseConfig]; - XCTAssertEqualObjects(responseConfig.configuration, persistedResponseConfig.configuration, @"Response Config should have been a match."); -} - - (void)testShouldDeleteDueToMaxConfigAgeWhenNil { MParticleOptions *options = [MParticleOptions optionsWithKey:@"test" secret:@"test"]; options.configMaxAgeSeconds = nil; @@ -124,10 +111,10 @@ - (void)testShouldDeleteDueToMaxConfigAgeWhenNil { NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; [[MPIUserDefaults standardUserDefaults] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:@"0" maxAge:nil]; - XCTAssertFalse([MPResponseConfig isOlderThanConfigMaxAgeSeconds]); + XCTAssertFalse([MPIUserDefaults isOlderThanConfigMaxAgeSeconds]); [[MPIUserDefaults standardUserDefaults] setConfiguration:configuration eTag:eTag requestTimestamp:(requestTimestamp - 10000.0) currentAge:@"0" maxAge:nil]; - XCTAssertFalse([MPResponseConfig isOlderThanConfigMaxAgeSeconds]); + XCTAssertFalse([MPIUserDefaults isOlderThanConfigMaxAgeSeconds]); [expectation fulfill]; }); @@ -149,10 +136,10 @@ - (void)testShouldDeleteDueToMaxConfigAge { NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; [[MPIUserDefaults standardUserDefaults] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:@"0" maxAge:nil]; - XCTAssertFalse([MPResponseConfig isOlderThanConfigMaxAgeSeconds]); + XCTAssertFalse([MPIUserDefaults isOlderThanConfigMaxAgeSeconds]); [[MPIUserDefaults standardUserDefaults] setConfiguration:configuration eTag:eTag requestTimestamp:(requestTimestamp - 100.0) currentAge:@"0" maxAge:nil]; - XCTAssertTrue([MPResponseConfig isOlderThanConfigMaxAgeSeconds]); + XCTAssertTrue([MPIUserDefaults isOlderThanConfigMaxAgeSeconds]); [expectation fulfill]; }); @@ -177,9 +164,9 @@ - (void)testDeleteDueToMaxConfigAge { [[MPIUserDefaults standardUserDefaults] setConfiguration:configuration eTag:eTag requestTimestamp:requestTimestamp currentAge:@"0" maxAge:nil]; XCTAssertNotNil([[MPIUserDefaults standardUserDefaults] getConfiguration]); - XCTAssertTrue([MPResponseConfig isOlderThanConfigMaxAgeSeconds]); - if ([MPResponseConfig isOlderThanConfigMaxAgeSeconds]) { - [MPResponseConfig deleteConfig]; + XCTAssertTrue([MPIUserDefaults isOlderThanConfigMaxAgeSeconds]); + if ([MPIUserDefaults isOlderThanConfigMaxAgeSeconds]) { + [MPIUserDefaults deleteConfig]; } XCTAssertNil([[MPIUserDefaults standardUserDefaults] getConfiguration]); diff --git a/UnitTests/MPResponseEventsTest.m b/UnitTests/MPResponseEventsTest.m index 297a11204..975fb7a3b 100644 --- a/UnitTests/MPResponseEventsTest.m +++ b/UnitTests/MPResponseEventsTest.m @@ -5,10 +5,11 @@ #import "MPBaseTestCase.h" #import "mParticle.h" #import "MPNetworkCommunication.h" +#import "MPIConstants.h" @interface MParticle () -@property (nonatomic, strong) MPStateMachine *stateMachine; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; @end @@ -19,7 +20,7 @@ @interface MPResponseEventsTest : MPBaseTestCase @implementation MPResponseEventsTest - (void)testParseConfiguration { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; NSNumber *originalMpId = @10; NSString *originalDas = @"aaaaaaaaa"; @@ -59,7 +60,7 @@ - (void)testParseConfiguration { kMPRemoteConfigUniqueIdentifierKey: newDas }}; - [MPNetworkCommunication parseConfiguration:response]; + [MPNetworkCommunication_PRIVATE parseConfiguration:response]; XCTAssertEqualObjects([MPPersistenceController mpId], originalMpId); XCTAssertEqualObjects(stateMachine.consumerInfo.uniqueIdentifier, originalDas); XCTAssertTrue(areEqual(stateMachine.consumerInfo.cookiesDictionaryRepresentation, originalCookies)); diff --git a/UnitTests/MPStateMachineTests.m b/UnitTests/MPStateMachineTests.m index fdf93b707..4240ffc70 100644 --- a/UnitTests/MPStateMachineTests.m +++ b/UnitTests/MPStateMachineTests.m @@ -9,9 +9,10 @@ #import "MPBaseTestCase.h" #import "MPStateMachine.h" #import "MPKitContainer.h" +#import "MPLaunchInfo.h" #pragma mark - MPStateMachine category -@interface MPStateMachine(Tests) +@interface MPStateMachine_PRIVATE(Tests) - (void)handleApplicationDidEnterBackground:(NSNotification *)notification; - (void)handleApplicationWillEnterForeground:(NSNotification *)notification; @@ -23,8 +24,8 @@ - (void)resetTriggers; @interface MParticle () -@property (nonatomic, strong) MPStateMachine *stateMachine; -@property (nonatomic, strong) MPKitContainer * kitContainer; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; +@property (nonatomic, strong) MPKitContainer_PRIVATE *kitContainer_PRIVATE; @end @@ -36,7 +37,7 @@ @interface MPStateMachineTests : MPBaseTestCase @implementation MPStateMachineTests - (void)testOptOut { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; stateMachine.optOut = YES; XCTAssertTrue(stateMachine.optOut, @"OptOut is not being set."); @@ -45,7 +46,7 @@ - (void)testOptOut { } - (void)testRamp { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; [stateMachine configureRampPercentage:@100]; XCTAssertFalse(stateMachine.dataRamped, @"Data ramp is not respecting 100 percent upper limit."); @@ -57,7 +58,7 @@ - (void)testRamp { } - (void)testConfigureTriggers { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; NSString *hashEvent1 = [MPIHasher hashTriggerEventName:@"Button Tapped" eventType:@"Transaction"]; NSString *hashEvent2 = [MPIHasher hashTriggerEventName:@"Post Liked" eventType:@"Social"]; @@ -82,7 +83,7 @@ - (void)testConfigureTriggers { } - (void)testNullConfigureTriggers { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; NSString *hashEvent1 = [MPIHasher hashTriggerEventName:@"Button Tapped" eventType:@"Transaction"]; NSString *hashEvent2 = [MPIHasher hashTriggerEventName:@"Post Liked" eventType:@"Social"]; @@ -128,29 +129,29 @@ - (void)testNullConfigureTriggers { - (void)testStateTransitions { XCTestExpectation *expectation = [self expectationWithDescription:@"State transitions"]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; MPLaunchInfo *launchInfo = [[MPLaunchInfo alloc] initWithURL:[NSURL URLWithString:@"http://mparticle.com"] options:@{@"Launching":@"WooHoo"}]; stateMachine.launchInfo = launchInfo; XCTAssertFalse(stateMachine.backgrounded, @"Should have been false."); XCTAssertNotNil(stateMachine.launchInfo, @"Should not have been nil."); - XCTAssertFalse([MPStateMachine runningInBackground], @"Should have been false."); + XCTAssertFalse([MPStateMachine_PRIVATE runningInBackground], @"Should have been false."); [stateMachine handleApplicationDidEnterBackground:nil]; dispatch_async(dispatch_get_main_queue(), ^{ - [MPStateMachine setRunningInBackground:YES]; + [MPStateMachine_PRIVATE setRunningInBackground:YES]; XCTAssertTrue(stateMachine.backgrounded, @"Should have been true."); XCTAssertNil(stateMachine.launchInfo, @"Should have been nil."); - XCTAssertTrue([MPStateMachine runningInBackground], @"Should have been true."); + XCTAssertTrue([MPStateMachine_PRIVATE runningInBackground], @"Should have been true."); [stateMachine handleApplicationWillEnterForeground:nil]; dispatch_async(dispatch_get_main_queue(), ^{ - [MPStateMachine setRunningInBackground:NO]; + [MPStateMachine_PRIVATE setRunningInBackground:NO]; XCTAssertFalse(stateMachine.backgrounded, @"Should have been false."); - XCTAssertFalse([MPStateMachine runningInBackground], @"Should have been false."); + XCTAssertFalse([MPStateMachine_PRIVATE runningInBackground], @"Should have been false."); [expectation fulfill]; }); }); @@ -161,7 +162,7 @@ - (void)testStateTransitions { } - (void)testRamping { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; [stateMachine configureRampPercentage:@0]; XCTAssertTrue(stateMachine.dataRamped, @"Should have been true."); @@ -172,7 +173,7 @@ - (void)testRamping { - (void)testEventAndMessageTriggers { NSDictionary *configuration = @{@"evts":@[@"events"], @"dts":@[@"messages"]}; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; [stateMachine configureTriggers:configuration]; XCTAssertNotNil(stateMachine.triggerEventTypes, @"Should not have been nil."); XCTAssertNotNil(stateMachine.triggerMessageTypes, @"Should not have been nil."); @@ -183,23 +184,23 @@ - (void)testEventAndMessageTriggers { } - (void)testEnvironment { - [MPStateMachine setEnvironment:MPEnvironmentAutoDetect]; - MPEnvironment environment = [MPStateMachine environment]; + [MPStateMachine_PRIVATE setEnvironment:MPEnvironmentAutoDetect]; + MPEnvironment environment = [MPStateMachine_PRIVATE environment]; XCTAssertEqual(environment, MPEnvironmentDevelopment, @"Should have been equal."); - [MPStateMachine setEnvironment:MPEnvironmentDevelopment]; - environment = [MPStateMachine environment]; + [MPStateMachine_PRIVATE setEnvironment:MPEnvironmentDevelopment]; + environment = [MPStateMachine_PRIVATE environment]; XCTAssertEqual(environment, MPEnvironmentDevelopment, @"Should have been equal."); } - (void)testSetLocation { #if TARGET_OS_IOS == 1 #ifndef MPARTICLE_LOCATION_DISABLE - id mockKitContainer = OCMClassMock([MPKitContainer class]); - [MParticle sharedInstance].kitContainer = mockKitContainer; + id mockKitContainer = OCMClassMock([MPKitContainer_PRIVATE class]); + [MParticle sharedInstance].kitContainer_PRIVATE = mockKitContainer; XCTestExpectation *expectation = [self expectationWithDescription:@"Set Location"]; - MPKitContainer *kitContainer = [MParticle sharedInstance].kitContainer; + MPKitContainer_PRIVATE *kitContainer = [MParticle sharedInstance].kitContainer_PRIVATE; [MParticle sharedInstance].location = [[CLLocation alloc] init]; @@ -226,7 +227,7 @@ - (void)testRequestAttribution { [expectation fulfill]; }; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; [stateMachine requestAttributionDetailsWithBlock:searchAdsCompletion requestsCompleted:0]; [self waitForExpectationsWithTimeout:DEFAULT_TIMEOUT handler:nil]; diff --git a/UnitTests/MPURLRequestBuilderTests.m b/UnitTests/MPURLRequestBuilderTests.m index 558d1e487..fe5db4a10 100644 --- a/UnitTests/MPURLRequestBuilderTests.m +++ b/UnitTests/MPURLRequestBuilderTests.m @@ -18,12 +18,13 @@ #import "MPExtensionProtocol.h" #import "MPURL.h" #import "MPUpload.h" +#import "mParticle.h" @interface MParticle () + (dispatch_queue_t)messageQueue; -@property (nonatomic, strong) MPStateMachine *stateMachine; -@property (nonatomic, strong) MPKitContainer *kitContainer; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; +@property (nonatomic, strong) MPKitContainer_PRIVATE *kitContainer_PRIVATE; @property (nonatomic, strong) MParticleWebView *webView; @end @@ -41,7 +42,7 @@ - (NSString *)signatureRelativePath:(NSString *)relativePath url:(NSURL *)url; @end #pragma mark - MPKitContainer category for unit tests -@interface MPKitContainer(Tests) +@interface MPKitContainer_PRIVATE(Tests) - (id)startKit:(NSNumber *)integrationId configuration:(MPKitConfiguration *)kitConfiguration; @@ -49,7 +50,7 @@ @interface MPKitContainer(Tests) #pragma mark - MPURLRequestBuilderTests @interface MPURLRequestBuilderTests : MPBaseTestCase { - MPKitContainer *kitContainer; + MPKitContainer_PRIVATE *kitContainer; } @end @@ -64,19 +65,19 @@ - (void)setUp { [MParticle sharedInstance].stateMachine.apiKey = @"unit_test_app_key"; [MParticle sharedInstance].stateMachine.secret = @"unit_test_secret"; - [MParticle sharedInstance].kitContainer = [[MPKitContainer alloc] init]; - kitContainer = [MParticle sharedInstance].kitContainer; + [MParticle sharedInstance].kitContainer_PRIVATE = [[MPKitContainer_PRIVATE alloc] init]; + kitContainer = [MParticle sharedInstance].kitContainer_PRIVATE; - NSSet> *registeredKits = [MPKitContainer registeredKits]; + NSSet> *registeredKits = [MPKitContainer_PRIVATE registeredKits]; if (!registeredKits) { MPKitRegister *kitRegister = [[MPKitRegister alloc] initWithName:@"KitTest" className:@"MPKitTestClassNoStartImmediately"]; - [MPKitContainer registerKit:kitRegister]; + [MPKitContainer_PRIVATE registerKit:kitRegister]; kitRegister = [[MPKitRegister alloc] initWithName:@"KitSecondTest" className:@"MPKitSecondTestClass"]; - [MPKitContainer registerKit:kitRegister]; + [MPKitContainer_PRIVATE registerKit:kitRegister]; kitRegister = [[MPKitRegister alloc] initWithName:@"AppsFlyer" className:@"MPKitAppsFlyerTest"]; - [MPKitContainer registerKit:kitRegister]; + [MPKitContainer_PRIVATE registerKit:kitRegister]; NSDictionary *configuration = @{ @"id":@42, @@ -102,7 +103,7 @@ - (void)testCustomUserAgent { XCTestExpectation *expectation = [self expectationWithDescription:@"User-Agent"]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPMessage *message = [[MPMessage alloc] initWithSession:nil messageType:@"e" messageInfo:@{@"key":@"value"} uploadStatus:MPUploadStatusBatch UUID:[[NSUUID UUID] UUIDString] timestamp:[[NSDate date] timeIntervalSince1970] userId:[MPPersistenceController mpId] dataPlanId:@"test" dataPlanVersion:@(1)]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:nil uploadDictionary:@{} dataPlanId:@"test" dataPlanVersion:@(1) uploadSettings:[MPUploadSettings currentUploadSettings]]; @@ -129,7 +130,7 @@ - (void)testDisableCollectUserAgent { XCTestExpectation *expectation = [self expectationWithDescription:@"User-Agent"]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPMessage *message = [[MPMessage alloc] initWithSession:nil messageType:@"e" messageInfo:@{@"key":@"value"} uploadStatus:MPUploadStatusBatch UUID:[[NSUUID UUID] UUIDString] timestamp:[[NSDate date] timeIntervalSince1970] userId:[MPPersistenceController mpId] dataPlanId:@"test" dataPlanVersion:@(1)]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:nil uploadDictionary:@{} dataPlanId:@"test" dataPlanVersion:@(1) uploadSettings:[MPUploadSettings currentUploadSettings]]; @@ -153,7 +154,7 @@ - (void)testDisableCollectUserAgent { - (void)testHMACSha256Encode { NSURL *baseURL = [NSURL URLWithString:@"http://mparticle.com"]; MPURLRequestBuilder *urlRequestBuilder = [MPURLRequestBuilder newBuilderWithURL:[[MPURL alloc] initWithURL:baseURL defaultURL:baseURL]]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; NSString *message = @"The Quick Brown Fox Jumps Over The Lazy Dog."; NSString *referenceEncodedMessage = @"ceefdfeab2fe404a7cbb75f6f6a01443286fab507eb85c213fce3d812e8b615c"; @@ -165,7 +166,7 @@ - (void)testHMACSha256Encode { - (void)testInvalidHMACSha256Encode { NSURL *baseURL = [NSURL URLWithString:@"http://mparticle.com"]; MPURLRequestBuilder *urlRequestBuilder = [MPURLRequestBuilder newBuilderWithURL:[[MPURL alloc] initWithURL:baseURL defaultURL:baseURL]]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; NSString *message = nil; NSString *encodedMessage = [urlRequestBuilder hmacSha256Encode:message key:stateMachine.apiKey]; @@ -181,7 +182,7 @@ - (void)testInvalidHMACSha256Encode { } - (void)testURLRequestComposition { - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPURLRequestBuilder *urlRequestBuilder = [MPURLRequestBuilder newBuilderWithURL:[networkCommunication configURL] message:nil httpMethod:@"GET"]; NSMutableURLRequest *asyncURLRequest = [urlRequestBuilder build]; @@ -249,7 +250,7 @@ - (void)testEtag { NSTimeInterval requestTimestamp = [[NSDate date] timeIntervalSince1970]; [[MPIUserDefaults standardUserDefaults] setConfiguration:responseConfiguration eTag:eTag requestTimestamp:requestTimestamp currentAge:@"0" maxAge:nil]; - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPURLRequestBuilder *urlRequestBuilder = [MPURLRequestBuilder newBuilderWithURL:[networkCommunication configURL] message:nil httpMethod:@"GET"]; NSMutableURLRequest *asyncURLRequest = [urlRequestBuilder build]; @@ -375,13 +376,13 @@ - (void)testEventRequest { id mockWebView = OCMPartialMock(webview); [[[mockWebView stub] andReturn:agent] userAgent]; - id mockKitContainer = OCMClassMock([MPKitContainer class]); + id mockKitContainer = OCMClassMock([MPKitContainer_PRIVATE class]); NSNumber *mockKitId = @42; [[[mockKitContainer stub] andReturn:@[mockKitId]] configuredKitsRegistry]; id mockMParticle = OCMPartialMock(sharedInstance); [[[mockMParticle stub] andReturn:mockWebView] webView]; - [[[mockMParticle stub] andReturn:mockKitContainer] kitContainer]; + [[[mockMParticle stub] andReturn:mockKitContainer] kitContainer_PRIVATE]; NSDictionary *configuration1 = @{ @"id":@42, @@ -391,12 +392,12 @@ - (void)testEventRequest { }; NSArray *kitConfigs = @[configuration1]; - [[MParticle sharedInstance].kitContainer configureKits:nil]; - [[MParticle sharedInstance].kitContainer configureKits:kitConfigs]; + [[MParticle sharedInstance].kitContainer_PRIVATE configureKits:nil]; + [[MParticle sharedInstance].kitContainer_PRIVATE configureKits:kitConfigs]; XCTAssertEqual([MPURLRequestBuilder requestTimeout], 10, @"Should have been equal."); - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPMessage *message = [[MPMessage alloc] initWithSession:nil messageType:@"e" messageInfo:@{@"key":@"value"} uploadStatus:MPUploadStatusBatch UUID:[[NSUUID UUID] UUIDString] timestamp:[[NSDate date] timeIntervalSince1970] userId:[MPPersistenceController mpId] dataPlanId:@"test" dataPlanVersion:@(1)]; MPUpload *upload = [[MPUpload alloc] initWithSessionId:nil uploadDictionary:@{} dataPlanId:@"test" dataPlanVersion:@(1) uploadSettings:[MPUploadSettings currentUploadSettings]]; @@ -434,7 +435,7 @@ - (void)testEventRequest { } - (void)testSignatureRelativePath { - MPNetworkCommunication *networkCommunication = [[MPNetworkCommunication alloc] init]; + MPNetworkCommunication_PRIVATE *networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; MPNetworkOptions *networkOptions = [[MPNetworkOptions alloc] init]; MParticle *sharedInstance = [MParticle sharedInstance]; id mockMParticle = OCMPartialMock(sharedInstance); diff --git a/UnitTests/MPUploadBuilderTests.m b/UnitTests/MPUploadBuilderTests.m index 534bb1c36..de2d28a22 100644 --- a/UnitTests/MPUploadBuilderTests.m +++ b/UnitTests/MPUploadBuilderTests.m @@ -15,7 +15,7 @@ @interface MParticle () @property (nonatomic, strong) MPPersistenceController *persistenceController; -@property (nonatomic, strong) MPStateMachine *stateMachine; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; @property (nonatomic, strong, nullable) NSString *dataPlanId; @property (nonatomic, strong, nullable) NSNumber *dataPlanVersion; @property (nonatomic, strong) MParticleOptions *options; diff --git a/UnitTests/MPUserIdentityChangeTests.m b/UnitTests/MPUserIdentityChangeTests.m index f67603b55..171eca910 100644 --- a/UnitTests/MPUserIdentityChangeTests.m +++ b/UnitTests/MPUserIdentityChangeTests.m @@ -9,7 +9,7 @@ #import "MPBaseTestCase.h" @interface MParticle () -@property (nonatomic, strong, nonnull) MPBackendController *backendController; +@property (nonatomic, strong, nonnull) MPBackendController_PRIVATE *backendController; @end @interface MPUserIdentityChangeTests : MPBaseTestCase @@ -20,7 +20,7 @@ @implementation MPUserIdentityChangeTests - (void)testUserIdentityRequest { MParticle *mParticle = [MParticle sharedInstance]; - mParticle.backendController = [[MPBackendController alloc] initWithDelegate:(id)mParticle]; + mParticle.backendController = [[MPBackendController_PRIVATE alloc] initWithDelegate:(id)mParticle]; MParticleUser *currentUser = [[MParticle sharedInstance].identity currentUser]; @@ -37,7 +37,7 @@ - (void)testUserIdentityRequest { - (void)testSelectedUserIdentityRequest { MParticle *mParticle = [MParticle sharedInstance]; - mParticle.backendController = [[MPBackendController alloc] initWithDelegate:(id)mParticle]; + mParticle.backendController = [[MPBackendController_PRIVATE alloc] initWithDelegate:(id)mParticle]; NSNumber *selectedUserID = [NSNumber numberWithInteger:58591]; diff --git a/UnitTests/MParticleTests.m b/UnitTests/MParticleTests.m index e273cb551..7b85ddf6f 100644 --- a/UnitTests/MParticleTests.m +++ b/UnitTests/MParticleTests.m @@ -17,13 +17,13 @@ #import "MPKitConfiguration.h" #import "MParticleSwift.h" #import +#import "MPIConstants.h" @interface MParticle () + (dispatch_queue_t)messageQueue; -@property (nonatomic, strong) MPStateMachine *stateMachine; -@property (nonatomic, strong) MPBackendController *backendController; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; +@property (nonatomic, strong) MPBackendController_PRIVATE *backendController; @property (nonatomic, strong) MParticleOptions *options; -@property (nonatomic, strong, readonly) MPKitContainer *kitContainer; - (BOOL)isValidBridgeName:(NSString *)bridgeName; - (void)handleWebviewCommand:(NSString *)command dictionary:(NSDictionary *)dictionary; @property (nonatomic, strong) MParticleWebView *webView; @@ -34,7 +34,7 @@ - (void)setIdentitySync:(NSString *)identityString identityType:(MPIdentity)iden - (void)setUserId:(NSNumber *)userId; @end -@interface MPKitContainer () +@interface MPKitContainer_PRIVATE () @property (nonatomic, strong) NSMutableDictionary *kitConfigurations; + (NSMutableSet > *)kitsRegistry; @end @@ -54,7 +54,7 @@ - (void)setUp { lastNotification = nil; // Ensure registeredKits is empty - [MPKitContainer.kitsRegistry removeAllObjects]; + [MPKitContainer_PRIVATE.kitsRegistry removeAllObjects]; } - (void)tearDown { @@ -93,7 +93,7 @@ - (void)testResetInstance { - (void)testOptOut { MParticle *instance = [MParticle sharedInstance]; - instance.stateMachine = [[MPStateMachine alloc] init]; + instance.stateMachine = [[MPStateMachine_PRIVATE alloc] init]; XCTAssertFalse(instance.optOut, "By Default Opt Out should be set to false"); @@ -106,7 +106,7 @@ - (void)testOptOut { - (void)testOptOutEndsSession { MParticle *instance = [MParticle sharedInstance]; - instance.stateMachine = [[MPStateMachine alloc] init]; + instance.stateMachine = [[MPStateMachine_PRIVATE alloc] init]; instance.optOut = YES; MParticleSession *session = instance.currentSession; @@ -412,7 +412,7 @@ - (void)testIsValidBridgeName { #if TARGET_OS_IOS == 1 - (void)testWebviewLogEvent { - id mockBackend = OCMClassMock([MPBackendController class]); + id mockBackend = OCMClassMock([MPBackendController_PRIVATE class]); MPEvent *testEvent = [[MPEvent alloc] initWithName:@"foo webview event 1" type:MPEventTypeNavigation]; testEvent.customAttributes = @{@"foo webview event attribute 1":@"foo webview event attribute value 1"}; @@ -441,7 +441,7 @@ - (void)testWebviewLogEvent { } - (void)testWebviewLogScreenEvent { - id mockBackend = OCMClassMock([MPBackendController class]); + id mockBackend = OCMClassMock([MPBackendController_PRIVATE class]); MPEvent *testEvent = [[MPEvent alloc] initWithName:@"foo Page View" type:MPEventTypeNavigation]; testEvent.customAttributes = @{@"foo webview event attribute 1":@"foo webview event attribute value 1"}; @@ -470,7 +470,7 @@ - (void)testWebviewLogScreenEvent { } - (void)testWebviewLogCommerceAttributes { - id mockBackend = OCMClassMock([MPBackendController class]); + id mockBackend = OCMClassMock([MPBackendController_PRIVATE class]); MPProduct *testProduct = [[MPProduct alloc] initWithName:@"foo product 1" sku:@"12345" quantity:@1 price:@19.95]; MPCommerceEvent *testEvent = [[MPCommerceEvent alloc] initWithAction:MPCommerceEventActionAddToCart product:testProduct]; @@ -516,7 +516,7 @@ - (void)testWebviewLogCommerceAttributes { } - (void)testWebviewLogCommerceInvalidArray { - id mockBackend = OCMClassMock([MPBackendController class]); + id mockBackend = OCMClassMock([MPBackendController_PRIVATE class]); [[mockBackend reject] logCommerceEvent:[OCMArg any] completionHandler:[OCMArg any]]; @@ -549,7 +549,7 @@ - (void)testWebviewLogCommerceInvalidArray { } - (void)testWebviewLogCommerceInvalidArrayValues { - id mockBackend = OCMClassMock([MPBackendController class]); + id mockBackend = OCMClassMock([MPBackendController_PRIVATE class]); [[mockBackend reject] logCommerceEvent:[OCMArg any] completionHandler:[OCMArg any]]; @@ -581,7 +581,7 @@ - (void)testWebviewLogCommerceInvalidArrayValues { } - (void)testWebviewLogCommerceNull { - id mockBackend = OCMClassMock([MPBackendController class]); + id mockBackend = OCMClassMock([MPBackendController_PRIVATE class]); [[[mockBackend expect] ignoringNonObjectArgs] logCommerceEvent:[OCMArg checkWithBlock:^BOOL(id value) { XCTAssert([value isKindOfClass:[MPCommerceEvent class]]); @@ -620,7 +620,7 @@ - (void)testWebviewLogCommerceNull { [mockBackend verifyWithDelay:5]; } - (void)testTrackNotificationsDefault { - id mockBackend = OCMClassMock([MPBackendController class]); + id mockBackend = OCMClassMock([MPBackendController_PRIVATE class]); MParticle *instance = [[MParticle alloc] init]; id mockInstance = OCMPartialMock(instance); @@ -633,7 +633,7 @@ - (void)testTrackNotificationsDefault { } - (void)testTrackNotificationsOff { - id mockBackend = OCMClassMock([MPBackendController class]); + id mockBackend = OCMClassMock([MPBackendController_PRIVATE class]); MParticle *instance = [[MParticle alloc] init]; id mockInstance = OCMPartialMock(instance); @@ -647,7 +647,7 @@ - (void)testTrackNotificationsOff { } - (void)testTrackNotificationsOn { - id mockBackend = OCMClassMock([MPBackendController class]); + id mockBackend = OCMClassMock([MPBackendController_PRIVATE class]); MParticle *instance = [[MParticle alloc] init]; id mockInstance = OCMPartialMock(instance); @@ -709,7 +709,7 @@ - (void)testLogNotificationWithUserInfo { [[[mockInstance stub] andReturnValue:OCMOCK_VALUE(NO)] trackNotifications]; [[[mockInstance stub] andReturn:mockInstance] sharedInstance]; - id mockBackendController = OCMClassMock([MPBackendController class]); + id mockBackendController = OCMClassMock([MPBackendController_PRIVATE class]); instance.backendController = mockBackendController; NSNotification *testNotification = [[NSNotification alloc] initWithName:@"tester" object:self userInfo:@{@"foo-notif-key-1":@"foo-notif-value-1"}]; @@ -727,7 +727,7 @@ - (void)testATTAuthorizationStatusNotDetermined { MParticleOptions *options = [MParticleOptions optionsWithKey:@"unit-test-key" secret:@"unit-test-secret"]; options.attStatus = @(MPATTAuthorizationStatusNotDetermined); [instance startWithOptions:options]; - MPStateMachine *stateMachine = instance.stateMachine; + MPStateMachine_PRIVATE *stateMachine = instance.stateMachine; XCTAssertEqual(stateMachine.attAuthorizationStatus.integerValue, MPATTAuthorizationStatusNotDetermined); XCTAssert(stateMachine.attAuthorizationTimestamp); } @@ -737,7 +737,7 @@ - (void)testATTAuthorizationStatusRestricted { MParticleOptions *options = [MParticleOptions optionsWithKey:@"unit-test-key" secret:@"unit-test-secret"]; options.attStatus = @(MPATTAuthorizationStatusRestricted); [instance startWithOptions:options]; - MPStateMachine *stateMachine = instance.stateMachine; + MPStateMachine_PRIVATE *stateMachine = instance.stateMachine; XCTAssertEqual(stateMachine.attAuthorizationStatus.integerValue, MPATTAuthorizationStatusRestricted); XCTAssert(stateMachine.attAuthorizationTimestamp); } @@ -747,7 +747,7 @@ - (void)testATTAuthorizationStatusDenied { MParticleOptions *options = [MParticleOptions optionsWithKey:@"unit-test-key" secret:@"unit-test-secret"]; options.attStatus = @(MPATTAuthorizationStatusDenied); [instance startWithOptions:options]; - MPStateMachine *stateMachine = instance.stateMachine; + MPStateMachine_PRIVATE *stateMachine = instance.stateMachine; XCTAssertEqual(stateMachine.attAuthorizationStatus.integerValue, MPATTAuthorizationStatusDenied); XCTAssert(stateMachine.attAuthorizationTimestamp); } @@ -757,7 +757,7 @@ - (void)testATTAuthorizationStatusAuthorized { MParticleOptions *options = [MParticleOptions optionsWithKey:@"unit-test-key" secret:@"unit-test-secret"]; options.attStatus = @(MPATTAuthorizationStatusAuthorized); [instance startWithOptions:options]; - MPStateMachine *stateMachine = instance.stateMachine; + MPStateMachine_PRIVATE *stateMachine = instance.stateMachine; XCTAssertEqual(stateMachine.attAuthorizationStatus.integerValue, MPATTAuthorizationStatusAuthorized); XCTAssert(stateMachine.attAuthorizationTimestamp); } @@ -769,7 +769,7 @@ - (void)testattAuthorizationStatusWithTimestamp { options.attStatus = @(MPATTAuthorizationStatusRestricted); options.attStatusTimestampMillis = testTimestamp; [instance startWithOptions:options]; - MPStateMachine *stateMachine = instance.stateMachine; + MPStateMachine_PRIVATE *stateMachine = instance.stateMachine; XCTAssertEqual(stateMachine.attAuthorizationStatus.integerValue, MPATTAuthorizationStatusRestricted); XCTAssertEqual(instance.stateMachine.attAuthorizationTimestamp.doubleValue, testTimestamp.doubleValue); } @@ -1018,14 +1018,14 @@ - (void)testUserAgentCustom { - (void)testUploadInterval { MParticle *instance = [MParticle sharedInstance]; - instance.backendController = [[MPBackendController alloc] init]; + instance.backendController = [[MPBackendController_PRIVATE alloc] init]; XCTAssertEqual(instance.uploadInterval, DEFAULT_DEBUG_UPLOAD_INTERVAL); } - (void)testSetUploadInterval { MParticle *instance = [MParticle sharedInstance]; - instance.backendController = [[MPBackendController alloc] init]; + instance.backendController = [[MPBackendController_PRIVATE alloc] init]; NSTimeInterval testInterval = 800.0; instance.uploadInterval = testInterval; @@ -1039,7 +1039,7 @@ - (void)testSetUploadInterval { #pragma mark Error, Exception, and Crash Handling Tests - (void)testLogCrash { - id mockBackend = OCMClassMock([MPBackendController class]); + id mockBackend = OCMClassMock([MPBackendController_PRIVATE class]); NSString *message = @"crash report"; NSString *stackTrace = @"stack track from crash report"; @@ -1057,7 +1057,7 @@ - (void)testLogCrash { } - (void)testLogCrashNilMessage { - id mockBackend = OCMClassMock([MPBackendController class]); + id mockBackend = OCMClassMock([MPBackendController_PRIVATE class]); NSString *message = nil; NSString *stackTrace = @"stack track from crash report"; @@ -1075,7 +1075,7 @@ - (void)testLogCrashNilMessage { } - (void)testLogCrashNilStackTrace { - id mockBackend = OCMClassMock([MPBackendController class]); + id mockBackend = OCMClassMock([MPBackendController_PRIVATE class]); NSString *message = @"crash report"; NSString *stackTrace = nil; @@ -1147,8 +1147,8 @@ - (void)testSwitchWorkspaceSideloadedKits { [[MParticle sharedInstance] startWithOptions:options1]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, WORKSPACE_SWITCHING_DELAY), dispatch_get_main_queue(), ^{ - XCTAssertEqual(MPKitContainer.registeredKits.count, 1); - XCTAssertEqualObjects(MPKitContainer.registeredKits.anyObject.wrapperInstance, kitTestSideloaded1); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 1); + XCTAssertEqualObjects(MPKitContainer_PRIVATE.registeredKits.anyObject.wrapperInstance, kitTestSideloaded1); // Switch workspace with a new sideloaded kit MParticleOptions *options2 = [MParticleOptions optionsWithKey:@"unit-test-key" secret:@"unit-test-secret"]; @@ -1158,15 +1158,15 @@ - (void)testSwitchWorkspaceSideloadedKits { [[MParticle sharedInstance] switchWorkspaceWithOptions:options2]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, WORKSPACE_SWITCHING_DELAY), dispatch_get_main_queue(), ^{ - XCTAssertEqual(MPKitContainer.registeredKits.count, 1); - XCTAssertEqualObjects(MPKitContainer.registeredKits.anyObject.wrapperInstance, kitTestSideloaded2); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 1); + XCTAssertEqualObjects(MPKitContainer_PRIVATE.registeredKits.anyObject.wrapperInstance, kitTestSideloaded2); // Switch workspace with no sideloaded kits MParticleOptions *options3 = [MParticleOptions optionsWithKey:@"unit-test-key" secret:@"unit-test-secret"]; [[MParticle sharedInstance] switchWorkspaceWithOptions:options3]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, WORKSPACE_SWITCHING_DELAY), dispatch_get_main_queue(), ^{ - XCTAssertEqual(MPKitContainer.registeredKits.count, 0); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 0); [expectation fulfill]; }); @@ -1180,20 +1180,20 @@ - (void)testSwitchWorkspaceSideloadedKits { - (void)testSwitchWorkspaceKitsNoConfigurations { XCTestExpectation *expectation = [self expectationWithDescription:@"async work"]; - XCTAssertEqual(MPKitContainer.registeredKits.count, 0); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 0); [MParticle registerExtension:[[MPKitRegister alloc] initWithName:@"TestKitNoStop" className:@"MPKitTestClassNoStartImmediately"]]; [MParticle registerExtension:[[MPKitRegister alloc] initWithName:@"TestKitWithStop" className:@"MPKitTestClassNoStartImmediatelyWithStop"]]; - XCTAssertEqual(MPKitContainer.registeredKits.count, 2); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 2); MParticleOptions *options = [MParticleOptions optionsWithKey:@"unit-test-key" secret:@"unit-test-secret"]; [[MParticle sharedInstance] startWithOptions:options]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, WORKSPACE_SWITCHING_DELAY), dispatch_get_main_queue(), ^{ - XCTAssertEqual(MPKitContainer.registeredKits.count, 2); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 2); [[MParticle sharedInstance] switchWorkspaceWithOptions:options]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, WORKSPACE_SWITCHING_DELAY), dispatch_get_main_queue(), ^{ - XCTAssertEqual(MPKitContainer.registeredKits.count, 2); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 2); [expectation fulfill]; }); }); @@ -1205,7 +1205,7 @@ - (void)testSwitchWorkspaceKitsNoConfigurations { - (void)testSwitchWorkspaceKitsWithoutStop { XCTestExpectation *expectation = [self expectationWithDescription:@"async work"]; - XCTAssertEqual(MPKitContainer.registeredKits.count, 0); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 0); MPKitRegister *registerNoStop = [[MPKitRegister alloc] initWithName:@"TestKitNoStop" className:@"MPKitTestClassNoStartImmediately"]; [MParticle registerExtension:registerNoStop]; @@ -1214,14 +1214,14 @@ - (void)testSwitchWorkspaceKitsWithoutStop { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, WORKSPACE_SWITCHING_DELAY), dispatch_get_main_queue(), ^{ registerNoStop.wrapperInstance = [[MPKitTestClassNoStartImmediately alloc] init]; - [MParticle sharedInstance].kitContainer.kitConfigurations[@42] = [[MPKitConfiguration alloc] init]; + [MParticle sharedInstance].kitContainer_PRIVATE.kitConfigurations[@42] = [[MPKitConfiguration alloc] init]; - XCTAssertEqual(MPKitContainer.registeredKits.count, 1); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 1); [[MParticle sharedInstance] switchWorkspaceWithOptions:options]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, WORKSPACE_SWITCHING_DELAY), dispatch_get_main_queue(), ^{ - XCTAssertEqual(MPKitContainer.registeredKits.count, 0); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 0); [expectation fulfill]; }); }); @@ -1233,7 +1233,7 @@ - (void)testSwitchWorkspaceKitsWithoutStop { - (void)testSwitchWorkspaceKitsWithStop { XCTestExpectation *expectation = [self expectationWithDescription:@"async work"]; - XCTAssertEqual(MPKitContainer.registeredKits.count, 0); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 0); MPKitRegister *registerWithStop = [[MPKitRegister alloc] initWithName:@"TestKitWithStop" className:@"MPKitTestClassNoStartImmediatelyWithStop"]; [MParticle registerExtension:registerWithStop]; @@ -1242,14 +1242,14 @@ - (void)testSwitchWorkspaceKitsWithStop { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, WORKSPACE_SWITCHING_DELAY), dispatch_get_main_queue(), ^{ registerWithStop.wrapperInstance = [[MPKitTestClassNoStartImmediatelyWithStop alloc] init]; - [MParticle sharedInstance].kitContainer.kitConfigurations[@43] = [[MPKitConfiguration alloc] init]; + [MParticle sharedInstance].kitContainer_PRIVATE.kitConfigurations[@43] = [[MPKitConfiguration alloc] init]; - XCTAssertEqual(MPKitContainer.registeredKits.count, 1); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 1); [[MParticle sharedInstance] switchWorkspaceWithOptions:options]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, WORKSPACE_SWITCHING_DELAY), dispatch_get_main_queue(), ^{ - XCTAssertEqual(MPKitContainer.registeredKits.count, 1); + XCTAssertEqual(MPKitContainer_PRIVATE.registeredKits.count, 1); [expectation fulfill]; }); }); diff --git a/UnitTests/MParticleWebViewTests.m b/UnitTests/MParticleWebViewTests.m index 838022526..177eb387c 100644 --- a/UnitTests/MParticleWebViewTests.m +++ b/UnitTests/MParticleWebViewTests.m @@ -5,7 +5,7 @@ #import "MPApplication.h" #import -@interface MPApplication () +@interface MPApplication_PRIVATE () + (void)setMockApplication:(id)mockApplication; @end @@ -117,7 +117,7 @@ - (void)testOriginalDefaultAgent { - (void)testBackgroundCollection { id mockApplication = OCMClassMock([UIApplication class]); OCMStub([mockApplication applicationState]).andReturn(UIApplicationStateBackground); - [MPApplication setMockApplication:mockApplication]; + [MPApplication_PRIVATE setMockApplication:mockApplication]; MParticleWebView *mockWebView = OCMPartialMock(_webView); #if TARGET_OS_IOS == 1 [[(id)mockWebView expect] evaluateAgent]; diff --git a/mParticle-Apple-SDK.xcodeproj/project.pbxproj b/mParticle-Apple-SDK.xcodeproj/project.pbxproj index d478fdf67..4d8cc6d65 100644 --- a/mParticle-Apple-SDK.xcodeproj/project.pbxproj +++ b/mParticle-Apple-SDK.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 53A79B6E29CDFB2000E7489F /* MPIdentityDTO.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AA029CDFB1E00E7489F /* MPIdentityDTO.h */; }; 53A79B6F29CDFB2000E7489F /* MPIdentityApi.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AA129CDFB1E00E7489F /* MPIdentityApi.m */; }; 53A79B7029CDFB2000E7489F /* MPIdentityApiManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AA229CDFB1E00E7489F /* MPIdentityApiManager.m */; }; - 53A79B7129CDFB2000E7489F /* MPBackendController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AA329CDFB1E00E7489F /* MPBackendController.h */; }; + 53A79B7129CDFB2000E7489F /* MPBackendController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AA329CDFB1E00E7489F /* MPBackendController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79B7429CDFB2000E7489F /* MPURLRequestBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AA829CDFB1E00E7489F /* MPURLRequestBuilder.h */; }; 53A79B7529CDFB2000E7489F /* MPNetworkCommunication.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AA929CDFB1E00E7489F /* MPNetworkCommunication.m */; }; 53A79B7629CDFB2000E7489F /* MPURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AAA29CDFB1E00E7489F /* MPURL.m */; }; @@ -113,7 +113,7 @@ 53A79B7A29CDFB2000E7489F /* MPConnector.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AAE29CDFB1E00E7489F /* MPConnector.m */; }; 53A79B7B29CDFB2000E7489F /* MPConnectorProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AAF29CDFB1E00E7489F /* MPConnectorProtocol.h */; }; 53A79B7C29CDFB2000E7489F /* MPConnectorFactoryProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AB029CDFB1E00E7489F /* MPConnectorFactoryProtocol.h */; }; - 53A79B7D29CDFB2000E7489F /* MPNetworkCommunication.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AB129CDFB1E00E7489F /* MPNetworkCommunication.h */; }; + 53A79B7D29CDFB2000E7489F /* MPNetworkCommunication.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AB129CDFB1E00E7489F /* MPNetworkCommunication.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79B7E29CDFB2000E7489F /* MPURLRequestBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AB229CDFB1E00E7489F /* MPURLRequestBuilder.m */; }; 53A79B7F29CDFB2000E7489F /* MPURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AB329CDFB1E00E7489F /* MPURL.h */; }; 53A79B8029CDFB2000E7489F /* MPNetworkPerformance.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AB429CDFB1E00E7489F /* MPNetworkPerformance.m */; }; @@ -154,9 +154,7 @@ 53A79BC729CDFB2000E7489F /* MPMessageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B0229CDFB1F00E7489F /* MPMessageBuilder.m */; }; 53A79BC829CDFB2000E7489F /* MPStateMachine.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B0329CDFB1F00E7489F /* MPStateMachine.m */; }; 53A79BC929CDFB2000E7489F /* MPIUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B0429CDFB1F00E7489F /* MPIUserDefaults.h */; }; - 53A79BCB29CDFB2000E7489F /* MPStateMachine.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B0629CDFB1F00E7489F /* MPStateMachine.h */; }; 53A79BCE29CDFB2000E7489F /* NSDictionary+MPCaseInsensitive.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B0929CDFB1F00E7489F /* NSDictionary+MPCaseInsensitive.m */; }; - 53A79BD129CDFB2000E7489F /* MPResponseConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B0C29CDFB1F00E7489F /* MPResponseConfig.h */; }; 53A79BD229CDFB2000E7489F /* MPApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B0D29CDFB1F00E7489F /* MPApplication.m */; }; 53A79BD729CDFB2000E7489F /* MPUploadBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B1229CDFB1F00E7489F /* MPUploadBuilder.m */; }; 53A79BDA29CDFB2000E7489F /* MPDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B1529CDFB1F00E7489F /* MPDevice.m */; }; @@ -166,9 +164,8 @@ 53A79BDF29CDFB2000E7489F /* MPMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B1A29CDFB1F00E7489F /* MPMessageBuilder.h */; }; 53A79BE229CDFB2000E7489F /* MPIUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B1D29CDFB1F00E7489F /* MPIUserDefaults.m */; }; 53A79BE329CDFB2000E7489F /* MPBracket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B1E29CDFB1F00E7489F /* MPBracket.cpp */; }; - 53A79BE529CDFB2000E7489F /* MPResponseConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B2029CDFB1F00E7489F /* MPResponseConfig.m */; }; 53A79BE829CDFB2000E7489F /* MPUploadBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B2329CDFB1F00E7489F /* MPUploadBuilder.h */; }; - 53A79BE929CDFB2000E7489F /* MPApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B2429CDFB1F00E7489F /* MPApplication.h */; }; + 53A79BE929CDFB2000E7489F /* MPApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B2429CDFB1F00E7489F /* MPApplication.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79BEB29CDFB2000E7489F /* NSNumber+MPFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B2629CDFB1F00E7489F /* NSNumber+MPFormatter.swift */; }; 53A79BEC29CDFB2000E7489F /* MPUserAttributeChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B2729CDFB1F00E7489F /* MPUserAttributeChange.m */; }; 53A79BEE29CDFB2000E7489F /* MPLaunchInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B2929CDFB1F00E7489F /* MPLaunchInfo.m */; }; @@ -179,7 +176,7 @@ 53A79BF429CDFB2000E7489F /* MPCustomModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B3029CDFB1F00E7489F /* MPCustomModule.h */; }; 53A79BF529CDFB2000E7489F /* MPCustomModulePreference.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B3129CDFB1F00E7489F /* MPCustomModulePreference.m */; }; 53A79BF629CDFB2000E7489F /* MPCustomModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B3229CDFB1F00E7489F /* MPCustomModule.m */; }; - 53A79BF729CDFB2000E7489F /* MPNotificationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B3429CDFB1F00E7489F /* MPNotificationController.h */; }; + 53A79BF729CDFB2000E7489F /* MPNotificationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B3429CDFB1F00E7489F /* MPNotificationController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79BF829CDFB2000E7489F /* MPNotificationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B3529CDFB1F00E7489F /* MPNotificationController.m */; }; 53A79BF929CDFB2100E7489F /* mParticle.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B3629CDFB1F00E7489F /* mParticle.m */; }; 53A79BFA29CDFB2100E7489F /* MPSurrogateAppDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B3829CDFB1F00E7489F /* MPSurrogateAppDelegate.h */; }; @@ -213,7 +210,7 @@ 53A79C1629CDFB2100E7489F /* MPEventProjection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B5829CDFB1F00E7489F /* MPEventProjection.mm */; }; 53A79C1729CDFB2100E7489F /* MPForwardQueueParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B5929CDFB1F00E7489F /* MPForwardQueueParameters.h */; }; 53A79C1829CDFB2100E7489F /* MPAttributeProjection.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B5A29CDFB1F00E7489F /* MPAttributeProjection.m */; }; - 53A79C1929CDFB2100E7489F /* MPKitContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B5B29CDFB1F00E7489F /* MPKitContainer.h */; }; + 53A79C1929CDFB2100E7489F /* MPKitContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B5B29CDFB1F00E7489F /* MPKitContainer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79C1A29CDFB2100E7489F /* MPKitAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B5C29CDFB1F00E7489F /* MPKitAPI.m */; }; 53A79C1B29CDFB2100E7489F /* MPForwardQueueItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B5D29CDFB1F00E7489F /* MPForwardQueueItem.m */; }; 53A79C1C29CDFB2100E7489F /* MPKitActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B5E29CDFB1F00E7489F /* MPKitActivity.h */; }; @@ -345,17 +342,17 @@ 53A79D2229CE23F700E7489F /* MPCommerceEventInstruction.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C2F29CDFB4800E7489F /* MPCommerceEventInstruction.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79D2329CE23F700E7489F /* MPTransactionAttributes+Dictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C4429CDFB4800E7489F /* MPTransactionAttributes+Dictionary.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79D2529CE23F700E7489F /* MPLaunchInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B1729CDFB1F00E7489F /* MPLaunchInfo.h */; }; - 53A79D2729CE23F700E7489F /* MPApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B2429CDFB1F00E7489F /* MPApplication.h */; }; + 53A79D2729CE23F700E7489F /* MPApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B2429CDFB1F00E7489F /* MPApplication.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79D2829CE23F700E7489F /* MPCustomModulePreference.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B2F29CDFB1F00E7489F /* MPCustomModulePreference.h */; }; 53A79D2929CE23F700E7489F /* MPDataModelProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AC229CDFB1E00E7489F /* MPDataModelProtocol.h */; }; 53A79D2A29CE23F700E7489F /* MPAppDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B3929CDFB1F00E7489F /* MPAppDelegateProxy.h */; }; 53A79D2B29CE23F700E7489F /* MParticleWebView.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B1629CDFB1F00E7489F /* MParticleWebView.h */; }; 53A79D2C29CE23F700E7489F /* MPIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79ACF29CDFB1F00E7489F /* MPIConstants.h */; }; - 53A79D2E29CE23F700E7489F /* MPBackendController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AA329CDFB1E00E7489F /* MPBackendController.h */; }; + 53A79D2E29CE23F700E7489F /* MPBackendController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AA329CDFB1E00E7489F /* MPBackendController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79D2F29CE23F700E7489F /* MPKitConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B5F29CDFB1F00E7489F /* MPKitConfiguration.h */; }; 53A79D3029CE23F700E7489F /* MPConnectorResponseProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AAD29CDFB1E00E7489F /* MPConnectorResponseProtocol.h */; }; 53A79D3229CE23F700E7489F /* MPConnectorFactoryProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AB029CDFB1E00E7489F /* MPConnectorFactoryProtocol.h */; }; - 53A79D3329CE23F700E7489F /* MPNetworkCommunication.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AB129CDFB1E00E7489F /* MPNetworkCommunication.h */; }; + 53A79D3329CE23F700E7489F /* MPNetworkCommunication.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AB129CDFB1E00E7489F /* MPNetworkCommunication.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79D3429CE23F700E7489F /* MPURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AB329CDFB1E00E7489F /* MPURL.h */; }; 53A79D3529CE23F700E7489F /* MPDataModelAbstract.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79ABE29CDFB1E00E7489F /* MPDataModelAbstract.h */; }; 53A79D3629CE23F700E7489F /* MPNetworkPerformance.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AAB29CDFB1E00E7489F /* MPNetworkPerformance.h */; }; @@ -366,7 +363,6 @@ 53A79D3B29CE23F700E7489F /* MPIUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B0429CDFB1F00E7489F /* MPIUserDefaults.h */; }; 53A79D3C29CE23F700E7489F /* MPEventProjection.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B5629CDFB1F00E7489F /* MPEventProjection.h */; }; 53A79D3D29CE23F700E7489F /* MPUpload.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AC029CDFB1E00E7489F /* MPUpload.h */; }; - 53A79D3E29CE23F700E7489F /* MPResponseConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B0C29CDFB1F00E7489F /* MPResponseConfig.h */; }; 53A79D3F29CE23F700E7489F /* MPConsumerInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79ACE29CDFB1F00E7489F /* MPConsumerInfo.h */; }; 53A79D4029CE23F700E7489F /* MPILogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B4629CDFB1F00E7489F /* MPILogger.h */; }; 53A79D4129CE23F700E7489F /* MPDatabaseMigrationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79ABA29CDFB1E00E7489F /* MPDatabaseMigrationController.h */; }; @@ -390,14 +386,14 @@ 53A79D5829CE23F700E7489F /* MPIdentityDTO.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AA029CDFB1E00E7489F /* MPIdentityDTO.h */; }; 53A79D5929CE23F700E7489F /* MPMessageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B1A29CDFB1F00E7489F /* MPMessageBuilder.h */; }; 53A79D5A29CE23F700E7489F /* MPURLRequestBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AA829CDFB1E00E7489F /* MPURLRequestBuilder.h */; }; - 53A79D5B29CE23F700E7489F /* MPKitContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B5B29CDFB1F00E7489F /* MPKitContainer.h */; }; + 53A79D5B29CE23F700E7489F /* MPKitContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B5B29CDFB1F00E7489F /* MPKitContainer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79D5C29CE23F700E7489F /* MPSurrogateAppDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B3829CDFB1F00E7489F /* MPSurrogateAppDelegate.h */; }; - 53A79D5D29CE23F700E7489F /* MPNotificationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B3429CDFB1F00E7489F /* MPNotificationController.h */; }; + 53A79D5D29CE23F700E7489F /* MPNotificationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B3429CDFB1F00E7489F /* MPNotificationController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79D5E29CE23F700E7489F /* MPURLConnectionAssociate.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AB629CDFB1E00E7489F /* MPURLConnectionAssociate.h */; }; 53A79D5F29CE23F700E7489F /* MPSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AC329CDFB1E00E7489F /* MPSession.h */; }; 53A79D6029CE23F700E7489F /* MPUploadBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B2329CDFB1F00E7489F /* MPUploadBuilder.h */; }; 53A79D6129CE23F700E7489F /* MPKitActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B5E29CDFB1F00E7489F /* MPKitActivity.h */; }; - 53A79D6229CE23F700E7489F /* MPStateMachine.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B0629CDFB1F00E7489F /* MPStateMachine.h */; }; + 53A79D6229CE23F700E7489F /* MPStateMachine.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B0629CDFB1F00E7489F /* MPStateMachine.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79D6329CE23F700E7489F /* MPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79ACB29CDFB1E00E7489F /* MPMessage.h */; }; 53A79D6529CE23F700E7489F /* MPConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AB529CDFB1E00E7489F /* MPConnector.h */; }; 53A79D6729CE23F700E7489F /* MPForwardQueueParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B5129CDFB1F00E7489F /* MPForwardQueueParameters.m */; }; @@ -444,7 +440,6 @@ 53A79D9B29CE23F700E7489F /* MPIntegrationAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79ACD29CDFB1E00E7489F /* MPIntegrationAttributes.m */; }; 53A79D9C29CE23F700E7489F /* MPAliasRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79A9C29CDFB1E00E7489F /* MPAliasRequest.m */; }; 53A79D9D29CE23F700E7489F /* MParticleUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79A9A29CDFB1E00E7489F /* MParticleUser.m */; }; - 53A79D9E29CE23F700E7489F /* MPResponseConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B2029CDFB1F00E7489F /* MPResponseConfig.m */; }; 53A79D9F29CE23F700E7489F /* MParticleReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AFF29CDFB1F00E7489F /* MParticleReachability.m */; }; 53A79DA029CE23F700E7489F /* MPKitExecStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B4D29CDFB1F00E7489F /* MPKitExecStatus.m */; }; 53A79DA129CE23F700E7489F /* MPMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79ABF29CDFB1E00E7489F /* MPMessage.m */; }; @@ -481,6 +476,9 @@ 53E20DC82CBFFCD200146A97 /* NSArray+MPCaseInsensitiveTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E20DC62CBFFCD200146A97 /* NSArray+MPCaseInsensitiveTests.swift */; }; 53FDD1BD2AE871AF003D5FA1 /* MPIHasher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53FDD1BC2AE871AF003D5FA1 /* MPIHasher.swift */; }; 53FDD1BE2AE871AF003D5FA1 /* MPIHasher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53FDD1BC2AE871AF003D5FA1 /* MPIHasher.swift */; }; + D30CD0CB2CFF5FB100F5148A /* MPStateMachine.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79B0629CDFB1F00E7489F /* MPStateMachine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D356E0242CFE08ED0020898D /* MPResponseConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = D356E0232CFE08ED0020898D /* MPResponseConfig.swift */; }; + 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, ); }; }; D3961CD62CB468DC003B3194 /* NSArray+MPCaseInsensitive.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3961CD52CB468DC003B3194 /* NSArray+MPCaseInsensitive.swift */; }; D3961CD72CB468DC003B3194 /* NSArray+MPCaseInsensitive.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3961CD52CB468DC003B3194 /* NSArray+MPCaseInsensitive.swift */; }; @@ -600,7 +598,6 @@ 53A79B0429CDFB1F00E7489F /* MPIUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPIUserDefaults.h; sourceTree = ""; }; 53A79B0629CDFB1F00E7489F /* MPStateMachine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPStateMachine.h; sourceTree = ""; }; 53A79B0929CDFB1F00E7489F /* NSDictionary+MPCaseInsensitive.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+MPCaseInsensitive.m"; sourceTree = ""; }; - 53A79B0C29CDFB1F00E7489F /* MPResponseConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPResponseConfig.h; sourceTree = ""; }; 53A79B0D29CDFB1F00E7489F /* MPApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPApplication.m; sourceTree = ""; }; 53A79B1229CDFB1F00E7489F /* MPUploadBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPUploadBuilder.m; sourceTree = ""; }; 53A79B1529CDFB1F00E7489F /* MPDevice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDevice.m; sourceTree = ""; }; @@ -610,7 +607,6 @@ 53A79B1A29CDFB1F00E7489F /* MPMessageBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMessageBuilder.h; sourceTree = ""; }; 53A79B1D29CDFB1F00E7489F /* MPIUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPIUserDefaults.m; sourceTree = ""; }; 53A79B1E29CDFB1F00E7489F /* MPBracket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MPBracket.cpp; sourceTree = ""; }; - 53A79B2029CDFB1F00E7489F /* MPResponseConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPResponseConfig.m; sourceTree = ""; }; 53A79B2329CDFB1F00E7489F /* MPUploadBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPUploadBuilder.h; sourceTree = ""; }; 53A79B2429CDFB1F00E7489F /* MPApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPApplication.h; sourceTree = ""; }; 53A79B2629CDFB1F00E7489F /* NSNumber+MPFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSNumber+MPFormatter.swift"; sourceTree = ""; }; @@ -777,6 +773,7 @@ 53B33E892A4606CD00CC8A19 /* MPSideloadedKit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPSideloadedKit.swift; sourceTree = ""; }; 53E20DC62CBFFCD200146A97 /* NSArray+MPCaseInsensitiveTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSArray+MPCaseInsensitiveTests.swift"; sourceTree = ""; }; 53FDD1BC2AE871AF003D5FA1 /* MPIHasher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPIHasher.swift; 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 = ""; }; D3961CD52CB468DC003B3194 /* NSArray+MPCaseInsensitive.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSArray+MPCaseInsensitive.swift"; sourceTree = ""; }; D3961CDD2CC0B7E4003B3194 /* NSString+MPPercentEscape.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSString+MPPercentEscape.swift"; sourceTree = ""; }; @@ -857,11 +854,11 @@ children = ( 53A79C2229CDFB4800E7489F /* Include */, 53A79B3629CDFB1F00E7489F /* mParticle.m */, - 53A79AA329CDFB1E00E7489F /* MPBackendController.h */, 53A79AF429CDFB1F00E7489F /* MPBackendController.m */, 53A79AD029CDFB1F00E7489F /* MPEnums.m */, 53A79ACF29CDFB1F00E7489F /* MPIConstants.h */, 53A79B6429CDFB1F00E7489F /* MPIConstants.m */, + 53A79B0329CDFB1F00E7489F /* MPStateMachine.m */, 530D24812CFF72D4000FE7E3 /* MPConstants.swift */, 534CD25D29CE2BF1008452B3 /* MParticleSwift.h */, 53A79B3729CDFB1F00E7489F /* AppNotifications */, @@ -924,7 +921,6 @@ 53A79AAE29CDFB1E00E7489F /* MPConnector.m */, 53A79AAF29CDFB1E00E7489F /* MPConnectorProtocol.h */, 53A79AB029CDFB1E00E7489F /* MPConnectorFactoryProtocol.h */, - 53A79AB129CDFB1E00E7489F /* MPNetworkCommunication.h */, 53A79AB229CDFB1E00E7489F /* MPURLRequestBuilder.m */, 53A79AB329CDFB1E00E7489F /* MPURL.h */, 53A79AB429CDFB1E00E7489F /* MPNetworkPerformance.m */, @@ -1009,12 +1005,10 @@ 5399DDB72CA727E1006526E1 /* MPZip.swift */, 53A79B0229CDFB1F00E7489F /* MPMessageBuilder.m */, D3961CD52CB468DC003B3194 /* NSArray+MPCaseInsensitive.swift */, - 53A79B0329CDFB1F00E7489F /* MPStateMachine.m */, 53A79B0429CDFB1F00E7489F /* MPIUserDefaults.h */, D3CEDACA2CB027E1001B32DF /* MPConvertJS.swift */, - 53A79B0629CDFB1F00E7489F /* MPStateMachine.h */, 53A79B0929CDFB1F00E7489F /* NSDictionary+MPCaseInsensitive.m */, - 53A79B0C29CDFB1F00E7489F /* MPResponseConfig.h */, + D356E0232CFE08ED0020898D /* MPResponseConfig.swift */, D3CEDAC22C9DAC25001B32DF /* MPDateFormatter.swift */, 53A79B0D29CDFB1F00E7489F /* MPApplication.m */, D3961CDD2CC0B7E4003B3194 /* NSString+MPPercentEscape.swift */, @@ -1026,9 +1020,7 @@ 53A79B1A29CDFB1F00E7489F /* MPMessageBuilder.h */, 53A79B1D29CDFB1F00E7489F /* MPIUserDefaults.m */, 53A79B1E29CDFB1F00E7489F /* MPBracket.cpp */, - 53A79B2029CDFB1F00E7489F /* MPResponseConfig.m */, 53A79B2329CDFB1F00E7489F /* MPUploadBuilder.h */, - 53A79B2429CDFB1F00E7489F /* MPApplication.h */, 53A79B2629CDFB1F00E7489F /* NSNumber+MPFormatter.swift */, 53A79B2729CDFB1F00E7489F /* MPUserAttributeChange.m */, 53A79B2929CDFB1F00E7489F /* MPLaunchInfo.m */, @@ -1054,7 +1046,6 @@ 53A79B3329CDFB1F00E7489F /* Notifications */ = { isa = PBXGroup; children = ( - 53A79B3429CDFB1F00E7489F /* MPNotificationController.h */, 53A79B3529CDFB1F00E7489F /* MPNotificationController.m */, ); path = Notifications; @@ -1123,7 +1114,6 @@ 53A79B5829CDFB1F00E7489F /* MPEventProjection.mm */, 53A79B5929CDFB1F00E7489F /* MPForwardQueueParameters.h */, 53A79B5A29CDFB1F00E7489F /* MPAttributeProjection.m */, - 53A79B5B29CDFB1F00E7489F /* MPKitContainer.h */, 53A79B5C29CDFB1F00E7489F /* MPKitAPI.m */, 53A79B5D29CDFB1F00E7489F /* MPForwardQueueItem.m */, 53A79B5E29CDFB1F00E7489F /* MPKitActivity.h */, @@ -1176,7 +1166,13 @@ 53A79C4129CDFB4800E7489F /* MPKitRegister.h */, 53A79C4229CDFB4800E7489F /* MPProduct+Dictionary.h */, 53A79C4329CDFB4800E7489F /* MPProduct.h */, + 53A79B0629CDFB1F00E7489F /* MPStateMachine.h */, 53A79C4429CDFB4800E7489F /* MPTransactionAttributes+Dictionary.h */, + 53A79B5B29CDFB1F00E7489F /* MPKitContainer.h */, + 53A79AB129CDFB1E00E7489F /* MPNetworkCommunication.h */, + 53A79B2429CDFB1F00E7489F /* MPApplication.h */, + 53A79B3429CDFB1F00E7489F /* MPNotificationController.h */, + 53A79AA329CDFB1E00E7489F /* MPBackendController.h */, ); path = Include; sourceTree = ""; @@ -1327,6 +1323,7 @@ 53A79C6629CDFB4800E7489F /* MPTransactionAttributes+Dictionary.h in Headers */, 53A79BDC29CDFB2000E7489F /* MPLaunchInfo.h in Headers */, 53A79BE929CDFB2000E7489F /* MPApplication.h in Headers */, + D30CD0CB2CFF5FB100F5148A /* MPStateMachine.h in Headers */, 53A79BF329CDFB2000E7489F /* MPCustomModulePreference.h in Headers */, 53A79B8C29CDFB2000E7489F /* MPDataModelProtocol.h in Headers */, 53A79BFB29CDFB2100E7489F /* MPAppDelegateProxy.h in Headers */, @@ -1348,7 +1345,6 @@ 53A79C1429CDFB2100E7489F /* MPEventProjection.h in Headers */, 534CD25E29CE2BF1008452B3 /* MParticleSwift.h in Headers */, 53A79B8A29CDFB2000E7489F /* MPUpload.h in Headers */, - 53A79BD129CDFB2000E7489F /* MPResponseConfig.h in Headers */, 53A79B9829CDFB2000E7489F /* MPConsumerInfo.h in Headers */, 53A79C0629CDFB2100E7489F /* MPILogger.h in Headers */, 53A79B8529CDFB2000E7489F /* MPDatabaseMigrationController.h in Headers */, @@ -1380,7 +1376,6 @@ 53A79B8D29CDFB2000E7489F /* MPSession.h in Headers */, 53A79BE829CDFB2000E7489F /* MPUploadBuilder.h in Headers */, 53A79C1C29CDFB2100E7489F /* MPKitActivity.h in Headers */, - 53A79BCB29CDFB2000E7489F /* MPStateMachine.h in Headers */, D3B3E2072AE029AE001AB58C /* mParticle_Apple_SDK.h in Headers */, 53A79B9529CDFB2000E7489F /* MPMessage.h in Headers */, 53A79B8129CDFB2000E7489F /* MPConnector.h in Headers */, @@ -1443,7 +1438,6 @@ 53A79D3C29CE23F700E7489F /* MPEventProjection.h in Headers */, 534CD25F29CE2BF1008452B3 /* MParticleSwift.h in Headers */, 53A79D3D29CE23F700E7489F /* MPUpload.h in Headers */, - 53A79D3E29CE23F700E7489F /* MPResponseConfig.h in Headers */, 53A79D3F29CE23F700E7489F /* MPConsumerInfo.h in Headers */, 53A79D4029CE23F700E7489F /* MPILogger.h in Headers */, 53A79D4129CE23F700E7489F /* MPDatabaseMigrationController.h in Headers */, @@ -1739,6 +1733,7 @@ 530D24832CFF72D9000FE7E3 /* MPConstants.swift in Sources */, 53A79BEE29CDFB2000E7489F /* MPLaunchInfo.m in Sources */, 53A79C0229CDFB2100E7489F /* MPPromotion.m in Sources */, + D356E0242CFE08ED0020898D /* MPResponseConfig.swift in Sources */, 53A79B6629CDFB2000E7489F /* MPIdentityApiRequest.m in Sources */, 53A79C0129CDFB2100E7489F /* MPCommerceEvent.mm in Sources */, 53A79BBF29CDFB2000E7489F /* MPConsentSerialization.m in Sources */, @@ -1768,7 +1763,6 @@ 53A79B6A29CDFB2000E7489F /* MPAliasRequest.m in Sources */, 53A79B6829CDFB2000E7489F /* MParticleUser.m in Sources */, 53B28FB22C938C26009072FC /* MPLocationManager.swift in Sources */, - 53A79BE529CDFB2000E7489F /* MPResponseConfig.m in Sources */, 53A79BC529CDFB2000E7489F /* MParticleReachability.m in Sources */, 53A79C0B29CDFB2100E7489F /* MPKitExecStatus.m in Sources */, 53A79B8929CDFB2000E7489F /* MPMessage.m in Sources */, @@ -1909,6 +1903,7 @@ 530D24822CFF72D9000FE7E3 /* MPConstants.swift in Sources */, 53A79D7D29CE23F700E7489F /* MPPromotion.m in Sources */, 534CD25C29CE2877008452B3 /* NSNumber+MPFormatter.swift in Sources */, + D356E0252CFE08ED0020898D /* MPResponseConfig.swift in Sources */, 53A79D8129CE23F700E7489F /* MPIdentityApiRequest.m in Sources */, 53A79D8229CE23F700E7489F /* MPCommerceEvent.mm in Sources */, 53A79D8329CE23F700E7489F /* MPConsentSerialization.m in Sources */, @@ -1939,7 +1934,6 @@ 53A79D9C29CE23F700E7489F /* MPAliasRequest.m in Sources */, 53A79D9D29CE23F700E7489F /* MParticleUser.m in Sources */, 53B28FB32C938C26009072FC /* MPLocationManager.swift in Sources */, - 53A79D9E29CE23F700E7489F /* MPResponseConfig.m in Sources */, 53A79D9F29CE23F700E7489F /* MParticleReachability.m in Sources */, 53A79DA029CE23F700E7489F /* MPKitExecStatus.m in Sources */, 53A79DA129CE23F700E7489F /* MPMessage.m in Sources */, diff --git a/mParticle-Apple-SDK/AppNotifications/MPAppDelegateProxy.h b/mParticle-Apple-SDK/AppNotifications/MPAppDelegateProxy.h index c8ea13baf..4f88fffc8 100644 --- a/mParticle-Apple-SDK/AppNotifications/MPAppDelegateProxy.h +++ b/mParticle-Apple-SDK/AppNotifications/MPAppDelegateProxy.h @@ -4,7 +4,7 @@ @class MPSurrogateAppDelegate; #if TARGET_OS_IOS == 1 -@class MPNotificationController; +@class MPNotificationController_PRIVATE; #endif @interface MPAppDelegateProxy : NSProxy diff --git a/mParticle-Apple-SDK/AppNotifications/MPAppNotificationHandler.m b/mParticle-Apple-SDK/AppNotifications/MPAppNotificationHandler.m index 1d5bec9a7..9e4b299a6 100644 --- a/mParticle-Apple-SDK/AppNotifications/MPAppNotificationHandler.m +++ b/mParticle-Apple-SDK/AppNotifications/MPAppNotificationHandler.m @@ -1,5 +1,4 @@ #import "MPAppNotificationHandler.h" -#import "MPStateMachine.h" #import "MPLaunchInfo.h" #import "MPForwardRecord.h" #import "MPPersistenceController.h" @@ -7,11 +6,10 @@ #import "MPKitContainer.h" #import "MPKitExecStatus.h" #import -#import "MPKitContainer.h" #import "MPForwardQueueParameters.h" #import "MPKitAPI.h" #import "MPApplication.h" -#import "MPBackendController.h" +#import "mParticle.h" #if TARGET_OS_IOS == 1 #import "MPNotificationController.h" @@ -23,10 +21,9 @@ @interface MParticle () -@property (nonatomic, strong, readonly) MPBackendController *backendController; +@property (nonatomic, strong, readonly) MPBackendController_PRIVATE *backendController; @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; -@property (nonatomic, strong, readonly) MPKitContainer *kitContainer; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; + (dispatch_queue_t)messageQueue; @end @@ -57,8 +54,8 @@ - (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { return; } - if (![MPStateMachine isAppExtension]) { - [MPNotificationController setDeviceToken:nil]; + if (![MPStateMachine_PRIVATE isAppExtension]) { + [MPNotificationController_PRIVATE setDeviceToken:nil]; } SEL failedRegistrationSelector = @selector(failedToRegisterForUserNotifications:); @@ -67,7 +64,7 @@ - (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { [queueParameters addParameter:error]; dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:failedRegistrationSelector + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:failedRegistrationSelector event:nil parameters:queueParameters messageType:MPMessageTypeUnknown @@ -91,8 +88,8 @@ - (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { return; } - if (![MPStateMachine isAppExtension]) { - [MPNotificationController setDeviceToken:deviceToken]; + if (![MPStateMachine_PRIVATE isAppExtension]) { + [MPNotificationController_PRIVATE setDeviceToken:deviceToken]; } SEL deviceTokenSelector = @selector(setDeviceToken:); @@ -101,7 +98,7 @@ - (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [queueParameters addParameter:deviceToken]; dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:deviceTokenSelector + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:deviceTokenSelector event:nil parameters:queueParameters messageType:MPMessageTypePushRegistration @@ -122,7 +119,7 @@ - (void)handleActionWithIdentifier:(NSString *)identifier forRemoteNotification: [queueParameters addParameter:userInfo]; dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:handleActionWithIdentifierSelector + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:handleActionWithIdentifierSelector event:nil parameters:queueParameters messageType:MPMessageTypeUnknown @@ -144,7 +141,7 @@ - (void)handleActionWithIdentifier:(NSString *)identifier forRemoteNotification: [queueParameters addParameter:responseInfo]; dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:handleActionWithIdentifierSelector + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:handleActionWithIdentifierSelector event:nil parameters:queueParameters messageType:MPMessageTypeUnknown @@ -160,7 +157,7 @@ - (void) didReceiveRemoteNotification:(NSDictionary *)userInfo { if ([MParticle sharedInstance].trackNotifications) { if ([self is9]) { - UIApplicationState state = [MPApplication sharedUIApplication].applicationState; + UIApplicationState state = [MPApplication_PRIVATE sharedUIApplication].applicationState; if (state != UIApplicationStateActive || ![self hasContentAvail:userInfo]) { [[MParticle sharedInstance] logNotificationOpenedWithUserInfo:userInfo andActionIdentifier:nil]; }else { @@ -179,7 +176,7 @@ - (void) didReceiveRemoteNotification:(NSDictionary *)userInfo { [queueParameters addParameter:userInfo]; dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:receivedNotificationSelector + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:receivedNotificationSelector event:nil parameters:queueParameters messageType:MPMessageTypePushNotification @@ -189,7 +186,7 @@ - (void) didReceiveRemoteNotification:(NSDictionary *)userInfo { } - (void)didUpdateUserActivity:(nonnull NSUserActivity *)userActivity { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; if (stateMachine.optOut) { return; } @@ -200,7 +197,7 @@ - (void)didUpdateUserActivity:(nonnull NSUserActivity *)userActivity { [queueParameters addParameter:userActivity]; dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:didUpdateUserActivitySelector + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:didUpdateUserActivitySelector event:nil parameters:queueParameters messageType:MPMessageTypeUnknown @@ -222,7 +219,7 @@ - (void)userNotificationCenter:(nonnull UNUserNotificationCenter *)center willPr dispatch_async(dispatch_get_main_queue(), ^{ SEL userNotificationCenterWillPresentNotification = @selector(userNotificationCenter:willPresentNotification:); - NSArray> *activeKitsRegistry = [[MParticle sharedInstance].kitContainer activeKitsRegistry]; + NSArray> *activeKitsRegistry = [[MParticle sharedInstance].kitContainer_PRIVATE activeKitsRegistry]; for (id kitRegister in activeKitsRegistry) { if ([kitRegister.wrapperInstance respondsToSelector:userNotificationCenterWillPresentNotification]) { @@ -257,7 +254,7 @@ - (void)userNotificationCenter:(nonnull UNUserNotificationCenter *)center didRec dispatch_async(dispatch_get_main_queue(), ^{ SEL userNotificationCenterDidReceiveNotificationResponse = @selector(userNotificationCenter:didReceiveNotificationResponse:); - NSArray> *activeKitsRegistry = [[MParticle sharedInstance].kitContainer activeKitsRegistry]; + NSArray> *activeKitsRegistry = [[MParticle sharedInstance].kitContainer_PRIVATE activeKitsRegistry]; for (id kitRegister in activeKitsRegistry) { if ([kitRegister.wrapperInstance respondsToSelector:userNotificationCenterDidReceiveNotificationResponse]) { @@ -279,7 +276,7 @@ - (void)userNotificationCenter:(nonnull UNUserNotificationCenter *)center didRec #endif - (BOOL)continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(void(^ _Nonnull)(NSArray> * __nullable restorableObjects))restorationHandler { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; if (stateMachine.optOut) { return NO; } @@ -293,7 +290,7 @@ - (BOOL)continueUserActivity:(nonnull NSUserActivity *)userActivity restorationH [queueParameters addParameter:restorationHandler]; dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:continueUserActivitySelector + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:continueUserActivitySelector event:nil parameters:queueParameters messageType:MPMessageTypeUnknown @@ -301,7 +298,7 @@ - (BOOL)continueUserActivity:(nonnull NSUserActivity *)userActivity restorationH ]; }); - NSSet> *registeredKitsRegistry = [MPKitContainer registeredKits]; + NSSet> *registeredKitsRegistry = [MPKitContainer_PRIVATE registeredKits]; BOOL handlingActivity = NO; for (id kitRegister in registeredKitsRegistry) { if ([kitRegister.wrapperInstance respondsToSelector:continueUserActivitySelector]) { @@ -314,7 +311,7 @@ - (BOOL)continueUserActivity:(nonnull NSUserActivity *)userActivity restorationH } - (void)openURL:(NSURL *)url options:(NSDictionary *)options { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; if (stateMachine.optOut) { return; } @@ -328,7 +325,7 @@ - (void)openURL:(NSURL *)url options:(NSDictionary *)options { [queueParameters addParameter:options]; dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:openURLOptionsSelector + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:openURLOptionsSelector event:nil parameters:queueParameters messageType:MPMessageTypeUnknown @@ -338,7 +335,7 @@ - (void)openURL:(NSURL *)url options:(NSDictionary *)options { } - (void)openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; if (stateMachine.optOut) { return; } @@ -355,7 +352,7 @@ - (void)openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication ann [queueParameters addParameter:annotation]; dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:openURLSourceAppAnnotationSelector + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:openURLSourceAppAnnotationSelector event:nil parameters:queueParameters messageType:MPMessageTypeUnknown diff --git a/mParticle-Apple-SDK/AppNotifications/MPSurrogateAppDelegate.m b/mParticle-Apple-SDK/AppNotifications/MPSurrogateAppDelegate.m index d0d4f3285..883d62927 100644 --- a/mParticle-Apple-SDK/AppNotifications/MPSurrogateAppDelegate.m +++ b/mParticle-Apple-SDK/AppNotifications/MPSurrogateAppDelegate.m @@ -2,12 +2,11 @@ #import "MPAppDelegateProxy.h" #import "MPNotificationController.h" #import "MPAppNotificationHandler.h" -#import "MPStateMachine.h" #import "mParticle.h" @interface MParticle () -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @property (nonatomic, strong, readonly) MPAppNotificationHandler *appNotificationHandler; @end diff --git a/mParticle-Apple-SDK/Data Model/MPIntegrationAttributes.m b/mParticle-Apple-SDK/Data Model/MPIntegrationAttributes.m index 45e045405..260b6ce28 100644 --- a/mParticle-Apple-SDK/Data Model/MPIntegrationAttributes.m +++ b/mParticle-Apple-SDK/Data Model/MPIntegrationAttributes.m @@ -1,7 +1,7 @@ #import "MPIntegrationAttributes.h" #import "MPILogger.h" #import "mParticle.h" -#import "MPStateMachine.h" +#import "MPIConstants.h" @implementation MPIntegrationAttributes diff --git a/mParticle-Apple-SDK/Data Model/MPUpload.m b/mParticle-Apple-SDK/Data Model/MPUpload.m index c628e2a2b..240b4c7ae 100644 --- a/mParticle-Apple-SDK/Data Model/MPUpload.m +++ b/mParticle-Apple-SDK/Data Model/MPUpload.m @@ -2,10 +2,9 @@ #import "MPSession.h" #import "MPIConstants.h" #import "mParticle.h" -#import "MPStateMachine.h" @interface MParticle() -@property (nonatomic, strong) MPStateMachine *stateMachine; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; @end @implementation MPUploadSettings diff --git a/mParticle-Apple-SDK/Event/MPBaseEvent.m b/mParticle-Apple-SDK/Event/MPBaseEvent.m index 972d073d9..a61c06f25 100644 --- a/mParticle-Apple-SDK/Event/MPBaseEvent.m +++ b/mParticle-Apple-SDK/Event/MPBaseEvent.m @@ -1,13 +1,12 @@ #import "MPBaseEvent.h" #import "MPIConstants.h" -#import "MPStateMachine.h" #import "MPSession.h" #import "mParticle.h" #import "MPILogger.h" @interface MParticle () -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @end diff --git a/mParticle-Apple-SDK/Event/MPEvent.m b/mParticle-Apple-SDK/Event/MPEvent.m index d8ad5e15b..7c56885cc 100644 --- a/mParticle-Apple-SDK/Event/MPEvent.m +++ b/mParticle-Apple-SDK/Event/MPEvent.m @@ -1,6 +1,5 @@ #import "MPEvent.h" #import "MPIConstants.h" -#import "MPStateMachine.h" #import "MPSession.h" #import "MPILogger.h" #import "MPProduct.h" @@ -9,7 +8,7 @@ @interface MParticle() -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @end diff --git a/mParticle-Apple-SDK/Identity/MPIdentityApi.m b/mParticle-Apple-SDK/Identity/MPIdentityApi.m index a608886db..36a41a00f 100644 --- a/mParticle-Apple-SDK/Identity/MPIdentityApi.m +++ b/mParticle-Apple-SDK/Identity/MPIdentityApi.m @@ -16,7 +16,6 @@ #import "MPKitContainer.h" #import "MPDevice.h" #import "MPUpload.h" -#import "MPStateMachine.h" typedef NS_ENUM(NSUInteger, MPIdentityRequestType) { MPIdentityRequestIdentify = 0, @@ -28,8 +27,7 @@ typedef NS_ENUM(NSUInteger, MPIdentityRequestType) { @interface MParticle () @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, readonly) MPKitContainer *kitContainer; -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @end @@ -43,13 +41,13 @@ @interface MPIdentityApi () @interface MParticle () + (dispatch_queue_t)messageQueue; -@property (nonatomic, strong, nonnull) MPBackendController *backendController; +@property (nonatomic, strong, nonnull) MPBackendController_PRIVATE *backendController; @property (nonatomic, strong, nullable) NSString *dataPlanId; @property (nonatomic, strong, nullable) NSNumber *dataPlanVersion; @end -@interface MPBackendController () +@interface MPBackendController_PRIVATE () - (NSMutableDictionary *)userAttributesForUserId:(NSNumber *)userId; @@ -62,7 +60,7 @@ - (void)setUserId:(NSNumber *)userId; - (void)setIsLoggedIn:(BOOL)isLoggedIn; @end -@interface MPKitContainer () +@interface MPKitContainer_PRIVATE () @property (nonatomic, strong) NSMutableDictionary *kitConfigurations; @@ -246,10 +244,10 @@ - (void)onMPIDChange:(MPIdentityApiRequest *)request httpResponse:(MPIdentityHTT }); } - NSArray *kitConfig = [[MParticle sharedInstance].kitContainer.originalConfig copy]; + NSArray *kitConfig = [[MParticle sharedInstance].kitContainer_PRIVATE.originalConfig copy]; if (kitConfig) { dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer configureKits:kitConfig]; + [[MParticle sharedInstance].kitContainer_PRIVATE configureKits:kitConfig]; }); } } @@ -258,7 +256,7 @@ - (void)forwardCallToKits:(MPIdentityApiRequest *)request identityRequestType:(M dispatch_async(dispatch_get_main_queue(), ^{ switch (identityRequestType) { case MPIdentityRequestIdentify: { - [[MParticle sharedInstance].kitContainer forwardIdentitySDKCall:@selector(onIdentifyComplete: request:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardIdentitySDKCall:@selector(onIdentifyComplete: request:) kitHandler:^(id kit, MPKitConfiguration *kitConfig) { FilteredMParticleUser *filteredUser = [[FilteredMParticleUser alloc] initWithMParticleUser:user kitConfiguration:kitConfig]; FilteredMPIdentityApiRequest *filteredRequest = [[FilteredMPIdentityApiRequest alloc] initWithIdentityRequest:request kitConfiguration:kitConfig]; @@ -267,7 +265,7 @@ - (void)forwardCallToKits:(MPIdentityApiRequest *)request identityRequestType:(M break; } case MPIdentityRequestLogin: { - [[MParticle sharedInstance].kitContainer forwardIdentitySDKCall:@selector(onLoginComplete: request:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardIdentitySDKCall:@selector(onLoginComplete: request:) kitHandler:^(id kit, MPKitConfiguration *kitConfig) { FilteredMParticleUser *filteredUser = [[FilteredMParticleUser alloc] initWithMParticleUser:user kitConfiguration:kitConfig]; FilteredMPIdentityApiRequest *filteredRequest = [[FilteredMPIdentityApiRequest alloc] initWithIdentityRequest:request kitConfiguration:kitConfig]; @@ -276,7 +274,7 @@ - (void)forwardCallToKits:(MPIdentityApiRequest *)request identityRequestType:(M break; } case MPIdentityRequestLogout: { - [[MParticle sharedInstance].kitContainer forwardIdentitySDKCall:@selector(onLogoutComplete: request:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardIdentitySDKCall:@selector(onLogoutComplete: request:) kitHandler:^(id kit, MPKitConfiguration *kitConfig) { FilteredMParticleUser *filteredUser = [[FilteredMParticleUser alloc] initWithMParticleUser:user kitConfiguration:kitConfig]; FilteredMPIdentityApiRequest *filteredRequest = [[FilteredMPIdentityApiRequest alloc] initWithIdentityRequest:request kitConfiguration:kitConfig]; @@ -285,7 +283,7 @@ - (void)forwardCallToKits:(MPIdentityApiRequest *)request identityRequestType:(M break; } case MPIdentityRequestModify: { - [[MParticle sharedInstance].kitContainer forwardIdentitySDKCall:@selector(onModifyComplete: request:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardIdentitySDKCall:@selector(onModifyComplete: request:) kitHandler:^(id kit, MPKitConfiguration *kitConfig) { FilteredMParticleUser *filteredUser = [[FilteredMParticleUser alloc] initWithMParticleUser:user kitConfiguration:kitConfig]; FilteredMPIdentityApiRequest *filteredRequest = [[FilteredMPIdentityApiRequest alloc] initWithIdentityRequest:request kitConfiguration:kitConfig]; diff --git a/mParticle-Apple-SDK/Identity/MPIdentityApiManager.m b/mParticle-Apple-SDK/Identity/MPIdentityApiManager.m index a588b1f4b..35ce38d5d 100644 --- a/mParticle-Apple-SDK/Identity/MPIdentityApiManager.m +++ b/mParticle-Apple-SDK/Identity/MPIdentityApiManager.m @@ -12,7 +12,7 @@ @interface MParticle () -@property (nonatomic, strong, nonnull) MPBackendController *backendController; +@property (nonatomic, strong, nonnull) MPBackendController_PRIVATE *backendController; @end diff --git a/mParticle-Apple-SDK/Identity/MPIdentityDTO.m b/mParticle-Apple-SDK/Identity/MPIdentityDTO.m index 4cb405b90..4a2f91d01 100644 --- a/mParticle-Apple-SDK/Identity/MPIdentityDTO.m +++ b/mParticle-Apple-SDK/Identity/MPIdentityDTO.m @@ -7,14 +7,13 @@ #import "MPDevice.h" #import "MPNotificationController.h" #import "MPPersistenceController.h" -#import "MPStateMachine.h" #import "MPConsumerInfo.h" #import "MPIUserDefaults.h" @interface MParticle () @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @end @@ -73,8 +72,8 @@ - (instancetype)initWithIdentityApiRequest:(MPIdentityApiRequest *)apiRequest { } #if TARGET_OS_IOS == 1 - if (![MPStateMachine isAppExtension]) { - NSData *deviceTokenData = [MPNotificationController deviceToken]; + if (![MPStateMachine_PRIVATE isAppExtension]) { + NSData *deviceTokenData = [MPNotificationController_PRIVATE deviceToken]; if (deviceTokenData) { NSString *deviceTokenString = [MPIUserDefaults stringFromDeviceToken:deviceTokenData]; if (deviceTokenString && [deviceTokenString length] > 0) { diff --git a/mParticle-Apple-SDK/Identity/MParticleUser.m b/mParticle-Apple-SDK/Identity/MParticleUser.m index 3e4f6d168..378a2ab65 100644 --- a/mParticle-Apple-SDK/Identity/MParticleUser.m +++ b/mParticle-Apple-SDK/Identity/MParticleUser.m @@ -3,33 +3,31 @@ // #import "MParticleUser.h" -#import "MPBackendController.h" -#import "MPStateMachine.h" -#import "MPKitContainer.h" #import "MPILogger.h" #import "mParticle.h" #import "MPPersistenceController.h" #import "MPIUserDefaults.h" #import "MPDataPlanFilter.h" +#import "MPIConstants.h" +#import "MPKitContainer.h" @interface MParticleUser () -@property (nonatomic, strong) MPBackendController *backendController; +@property (nonatomic, strong) MPBackendController_PRIVATE *backendController; @end @interface MParticle () + (dispatch_queue_t)messageQueue; -@property (nonatomic, strong) MPBackendController *backendController; +@property (nonatomic, strong) MPBackendController_PRIVATE *backendController; @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; -@property (nonatomic, strong, readonly) MPKitContainer *kitContainer; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @property (nonatomic, strong) MPDataPlanFilter *dataPlanFilter; @end -@interface MPKitContainer () +@interface MPKitContainer_PRIVATE () @property (nonatomic, strong) NSMutableDictionary *kitConfigurations; @@ -205,7 +203,7 @@ - (BOOL)forwardLegacyUserIdentityToKitContainer:(NSString *)identityString ident MPILogDebug(@"Set user identity: %@", identityString); if (MParticle.sharedInstance.dataPlanFilter == nil || ![MParticle.sharedInstance.dataPlanFilter isBlockedUserIdentityType:(MPIdentity)identityType]) { dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(setUserIdentity:identityType:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(setUserIdentity:identityType:) userIdentity:identityString identityType:identityType kitHandler:^(id kit, MPKitConfiguration *kitConfig) { @@ -222,7 +220,7 @@ - (nullable NSNumber *)incrementUserAttribute:(NSString *)key byValue:(NSNumber dispatch_async([MParticle messageQueue], ^{ [MPListenerController.sharedInstance onAPICalled:_cmd parameter1:key parameter2:value]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; if (stateMachine.optOut) { return; } @@ -232,7 +230,7 @@ - (nullable NSNumber *)incrementUserAttribute:(NSString *)key byValue:(NSNumber MPILogDebug(@"User attribute %@ incremented by %@. New value: %@", key, value, newValue); if (MParticle.sharedInstance.dataPlanFilter == nil || ![MParticle.sharedInstance.dataPlanFilter isBlockedUserAttributeKey:key]) { dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(incrementUserAttribute:byValue:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(incrementUserAttribute:byValue:) userAttributeKey:key value:value kitHandler:^(id kit, MPKitConfiguration *kitConfig) { @@ -246,7 +244,7 @@ - (nullable NSNumber *)incrementUserAttribute:(NSString *)key byValue:(NSNumber } }]; - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(setUserAttribute:value:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(setUserAttribute:value:) userAttributeKey:key value:newValue kitHandler:^(id kit, MPKitConfiguration *kitConfig) { @@ -298,7 +296,7 @@ - (void)setUserAttribute:(nonnull NSString *)key value:(nonnull id)value { if (MParticle.sharedInstance.dataPlanFilter == nil || ![MParticle.sharedInstance.dataPlanFilter isBlockedUserAttributeKey:key]) { dispatch_async(dispatch_get_main_queue(), ^{ // Forwarding calls to kits - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(setUserAttribute:value:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(setUserAttribute:value:) userAttributeKey:key value:value kitHandler:^(id kit, MPKitConfiguration *kitConfig) { @@ -349,7 +347,7 @@ - (void)setUserAttributeList:(nonnull NSString *)key values:(nonnull NSArray kit, MPKitConfiguration *kitConfig) { @@ -389,7 +387,7 @@ - (void)setUserTag:(nonnull NSString *)tag { if (MParticle.sharedInstance.dataPlanFilter == nil || ![MParticle.sharedInstance.dataPlanFilter isBlockedUserAttributeKey:tag]) { // Forwarding calls to kits dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(setUserTag:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(setUserTag:) userAttributeKey:tag value:nil kitHandler:^(id kit, MPKitConfiguration *kitConfig) { @@ -427,7 +425,7 @@ - (void)removeUserAttribute:(nonnull NSString *)key { if (MParticle.sharedInstance.dataPlanFilter == nil ||![MParticle.sharedInstance.dataPlanFilter isBlockedUserAttributeKey:key]) { // Forwarding calls to kits dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:_cmd + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:_cmd userAttributeKey:key value:nil kitHandler:^(id kit, MPKitConfiguration *kitConfig) { @@ -453,15 +451,15 @@ - (void)setConsentState:(MPConsentState *)state { [MPPersistenceController setConsentState:state forMpid:self.userId]; - NSArray *kitConfig = [[MParticle sharedInstance].kitContainer.originalConfig copy]; + NSArray *kitConfig = [[MParticle sharedInstance].kitContainer_PRIVATE.originalConfig copy]; if (kitConfig) { dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer configureKits:kitConfig]; + [[MParticle sharedInstance].kitContainer_PRIVATE configureKits:kitConfig]; }); } dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(setConsentState:) consentState:state kitHandler:^(id _Nonnull kit, MPConsentState * _Nullable filteredConsentState, MPKitConfiguration * _Nonnull kitConfiguration) { + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(setConsentState:) consentState:state kitHandler:^(id _Nonnull kit, MPConsentState * _Nullable filteredConsentState, MPKitConfiguration * _Nonnull kitConfiguration) { MPKitExecStatus *status = [kit setConsentState:filteredConsentState]; if (!status.success) { MPILogError(@"Failed to set consent state for kit=%@", status.integrationId); diff --git a/mParticle-Apple-SDK/Utils/MPApplication.h b/mParticle-Apple-SDK/Include/MPApplication.h similarity index 95% rename from mParticle-Apple-SDK/Utils/MPApplication.h rename to mParticle-Apple-SDK/Include/MPApplication.h index 6b0185a4c..19ee70075 100644 --- a/mParticle-Apple-SDK/Utils/MPApplication.h +++ b/mParticle-Apple-SDK/Include/MPApplication.h @@ -1,11 +1,10 @@ -#import "MPIConstants.h" #import "MPEnums.h" @class UIApplication; extern NSString * _Nonnull const kMPApplicationInformationKey; -@interface MPApplication : NSObject +@interface MPApplication_PRIVATE : NSObject @property (nonatomic, strong, nonnull) NSNumber *lastUseDate; @property (nonatomic, strong, nullable) NSNumber *launchCount; diff --git a/mParticle-Apple-SDK/MPBackendController.h b/mParticle-Apple-SDK/Include/MPBackendController.h similarity index 95% rename from mParticle-Apple-SDK/MPBackendController.h rename to mParticle-Apple-SDK/Include/MPBackendController.h index 8a2955293..afb2f5292 100644 --- a/mParticle-Apple-SDK/MPBackendController.h +++ b/mParticle-Apple-SDK/Include/MPBackendController.h @@ -1,8 +1,6 @@ #import "MPEnums.h" -#import "MPNetworkCommunication.h" #if TARGET_OS_IOS == 1 - #import "MPNotificationController.h" #ifndef MPARTICLE_LOCATION_DISABLE #import #endif @@ -13,7 +11,7 @@ @class MPSession; @class MPMessage; @class MPNetworkPerformance; -@class MPNotificationController; +@class MPNotificationController_PRIVATE; @class MPBaseEvent; @class MPEvent; @class MPCommerceEvent; @@ -21,6 +19,8 @@ @class MParticleSession; @class MPUploadSettings; @class MPNetworkOptions; +@class MPNetworkCommunication_PRIVATE; + @protocol MPBackendControllerDelegate; @@ -56,17 +56,17 @@ extern const NSInteger kInvalidDataType; extern const NSTimeInterval kMPMaximumKitWaitTimeSeconds; extern const NSInteger kInvalidKey; -@interface MPBackendController : NSObject +@interface MPBackendController_PRIVATE : NSObject #if TARGET_OS_IOS == 1 -@property (nonatomic, strong, nonnull) MPNotificationController *notificationController; +@property (nonatomic, strong, nonnull) MPNotificationController_PRIVATE *notificationController; #endif @property (nonatomic, weak, nullable) id delegate; @property (nonatomic, strong, nullable) NSMutableSet *eventSet; -@property (nonatomic, strong, nullable) MPNetworkCommunication *networkCommunication; +@property (nonatomic, strong, nullable) MPNetworkCommunication_PRIVATE *networkCommunication; @property (strong, nullable) MPSession *session; @property (nonatomic, readwrite) NSTimeInterval sessionTimeout; @property (nonatomic) NSTimeInterval uploadInterval; diff --git a/mParticle-Apple-SDK/Kits/MPKitContainer.h b/mParticle-Apple-SDK/Include/MPKitContainer.h similarity index 96% rename from mParticle-Apple-SDK/Kits/MPKitContainer.h rename to mParticle-Apple-SDK/Include/MPKitContainer.h index 63a91e71f..fad6223d3 100644 --- a/mParticle-Apple-SDK/Kits/MPKitContainer.h +++ b/mParticle-Apple-SDK/Include/MPKitContainer.h @@ -1,7 +1,6 @@ #import #import "MPExtensionProtocol.h" #import "MPKitProtocol.h" -#import "mParticle.h" @class MPKitFilter; @class MPKitExecStatus; @@ -9,8 +8,10 @@ @class MPBaseEvent; @class MPForwardQueueParameters; @class MPKitConfiguration; +@class MPAttributionResult; +@class MPSideloadedKit; -@interface MPKitContainer : NSObject +@interface MPKitContainer_PRIVATE : NSObject @property (nonatomic, copy) void (^ _Nonnull attributionCompletionHandler)(MPAttributionResult *_Nullable attributionResult, NSError * _Nullable error); @property (nonatomic, strong, nonnull) NSMutableDictionary *attributionInfo; diff --git a/mParticle-Apple-SDK/Network/MPNetworkCommunication.h b/mParticle-Apple-SDK/Include/MPNetworkCommunication.h similarity index 97% rename from mParticle-Apple-SDK/Network/MPNetworkCommunication.h rename to mParticle-Apple-SDK/Include/MPNetworkCommunication.h index 34f545429..a471af32a 100644 --- a/mParticle-Apple-SDK/Network/MPNetworkCommunication.h +++ b/mParticle-Apple-SDK/Include/MPNetworkCommunication.h @@ -24,7 +24,7 @@ typedef void (^MPIdentityApiManagerCallback)(MPIdentityHTTPBaseSuccessResponse * typedef void (^MPIdentityApiManagerModifyCallback)(MPIdentityHTTPModifySuccessResponse *_Nullable httpResponse, NSError *_Nullable error); typedef void(^ _Nonnull MPConfigCompletionHandler)(BOOL success); -@interface MPNetworkCommunication : NSObject +@interface MPNetworkCommunication_PRIVATE : NSObject @property (nonatomic, strong, readonly, nullable) MPURL *configURL; @property (nonatomic, strong, readonly, nullable) MPURL *identifyURL; diff --git a/mParticle-Apple-SDK/Notifications/MPNotificationController.h b/mParticle-Apple-SDK/Include/MPNotificationController.h similarity index 76% rename from mParticle-Apple-SDK/Notifications/MPNotificationController.h rename to mParticle-Apple-SDK/Include/MPNotificationController.h index 2c3d0c557..65ad20258 100644 --- a/mParticle-Apple-SDK/Notifications/MPNotificationController.h +++ b/mParticle-Apple-SDK/Include/MPNotificationController.h @@ -1,7 +1,7 @@ #import #import -@interface MPNotificationController : NSObject +@interface MPNotificationController_PRIVATE : NSObject #if TARGET_OS_IOS == 1 + (nullable NSData *)deviceToken; diff --git a/mParticle-Apple-SDK/Utils/MPStateMachine.h b/mParticle-Apple-SDK/Include/MPStateMachine.h similarity index 92% rename from mParticle-Apple-SDK/Utils/MPStateMachine.h rename to mParticle-Apple-SDK/Include/MPStateMachine.h index 1b73e4262..75c6f5ed5 100644 --- a/mParticle-Apple-SDK/Utils/MPStateMachine.h +++ b/mParticle-Apple-SDK/Include/MPStateMachine.h @@ -1,10 +1,7 @@ -#import "MPIConstants.h" #import "MPEnums.h" -#import "MPLaunchInfo.h" -#import "MParticleReachability.h" @class MPSession; -@class MPNotificationController; +@class MPNotificationController_PRIVATE; @class MPConsumerInfo; #if TARGET_OS_IOS == 1 #ifndef MPARTICLE_LOCATION_DISABLE @@ -14,8 +11,9 @@ #endif @class MPCustomModule; @class MPDataPlanOptions; +@class MPLaunchInfo; -@interface MPStateMachine : NSObject +@interface MPStateMachine_PRIVATE : NSObject @property (nonatomic, strong, nonnull) NSString *apiKey __attribute__((const)); @property (nonatomic, strong, nonnull) MPConsumerInfo *consumerInfo; @@ -43,8 +41,6 @@ @property (nonatomic, strong, readonly, nullable) NSArray *triggerMessageTypes; @property (nonatomic) MPILogLevel logLevel; @property (nonatomic) MPInstallationType installationType; -@property (nonatomic, readonly) MParticleNetworkStatus networkStatus; -@property (nonatomic) MPUploadStatus uploadStatus; @property (nonatomic, readonly) BOOL backgrounded; @property (nonatomic, readonly) BOOL dataRamped; @property (nonatomic) BOOL optOut; diff --git a/mParticle-Apple-SDK/Include/mParticle.h b/mParticle-Apple-SDK/Include/mParticle.h index d19b60f11..ac80c58fd 100644 --- a/mParticle-Apple-SDK/Include/mParticle.h +++ b/mParticle-Apple-SDK/Include/mParticle.h @@ -19,6 +19,12 @@ #import "MPListenerController.h" #import "MPForwardRecord.h" #import +#import "MPStateMachine.h" +#import "MPKitContainer.h" +#import "MPBackendController.h" +#import "MPApplication.h" +#import "MPNotificationController.h" +#import "MPNetworkCommunication.h" #if TARGET_OS_IOS == 1 #ifndef MPARTICLE_LOCATION_DISABLE @@ -636,6 +642,16 @@ Defaults to false. Prevents the eventsHost above from overwriting the alias endp */ @property (nonatomic, readonly, nullable) NSNumber *persistenceMaxAgeSeconds; +/** + The instance which manages all initialized kits. For internal use only + */ +@property (nonatomic, strong, readonly) MPKitContainer_PRIVATE *kitContainer_PRIVATE; + +/** + The Kit Configuration needed should the initialization of kits need to be deferred until identity or consent is resolve. For internal use only + */ +@property (nonatomic, strong, nullable) NSArray *deferredKitConfiguration_PRIVATE; + #pragma mark - Initialization /** diff --git a/mParticle-Apple-SDK/Kits/MPKitAPI.m b/mParticle-Apple-SDK/Kits/MPKitAPI.m index 9fbdf72a6..658a0f877 100644 --- a/mParticle-Apple-SDK/Kits/MPKitAPI.m +++ b/mParticle-Apple-SDK/Kits/MPKitAPI.m @@ -4,11 +4,11 @@ #import "MPKitContainer.h" #import "MPILogger.h" #import "FilteredMParticleUser.h" +#import "mParticle.h" @interface MParticle () @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, readonly) MPKitContainer *kitContainer; @end @@ -19,7 +19,7 @@ @interface MPAttributionResult () @end -@interface MPKitContainer () +@interface MPKitContainer_PRIVATE () @property (nonatomic, strong, readonly) NSMutableDictionary *kitConfigurations; @@ -35,7 +35,7 @@ @implementation MPKitAPI - (NSString *)kitName { __block NSString *component = nil; - NSSet> *kits = [MPKitContainer registeredKits]; + NSSet> *kits = [MPKitContainer_PRIVATE registeredKits]; NSNumber *kitCode = _kitCode; if (kits && kitCode) { @@ -97,7 +97,7 @@ - (id)initWithKitCode:(NSNumber *)kitCode { } - (NSDictionary *)integrationAttributes { - NSDictionary *dictionary = [[MParticle sharedInstance].kitContainer integrationAttributesForKit:_kitCode]; + NSDictionary *dictionary = [[MParticle sharedInstance].kitContainer_PRIVATE integrationAttributesForKit:_kitCode]; return dictionary; } @@ -122,20 +122,20 @@ - (void)onAttributionCompleteWithResult:(MPAttributionResult *)result error:(NSE userInfo[MPKitAPIErrorKey] = errorMessage; NSError *attributionError = [NSError errorWithDomain:MPKitAPIErrorDomain code:0 userInfo:userInfo]; - [MParticle sharedInstance].kitContainer.attributionCompletionHandler(nil, attributionError); + [MParticle sharedInstance].kitContainer_PRIVATE.attributionCompletionHandler(nil, attributionError); return; } result.kitCode = _kitCode; result.kitName = [self kitName]; - [MParticle sharedInstance].kitContainer.attributionCompletionHandler(result, nil); + [MParticle sharedInstance].kitContainer_PRIVATE.attributionCompletionHandler(result, nil); } #pragma mark Kit Identity methods - (FilteredMParticleUser *_Nonnull)getCurrentUserWithKit:(id _Nonnull)kit { - return [[FilteredMParticleUser alloc] initWithMParticleUser:[[[MParticle sharedInstance] identity] currentUser] kitConfiguration:[MParticle sharedInstance].kitContainer.kitConfigurations[[[kit class] kitCode]]]; + return [[FilteredMParticleUser alloc] initWithMParticleUser:[[[MParticle sharedInstance] identity] currentUser] kitConfiguration:[MParticle sharedInstance].kitContainer_PRIVATE.kitConfigurations[[[kit class] kitCode]]]; } - (nullable NSNumber *)incrementUserAttribute:(NSString *_Nonnull)key byValue:(NSNumber *_Nonnull)value forUser:(FilteredMParticleUser *_Nonnull)filteredUser { diff --git a/mParticle-Apple-SDK/Kits/MPKitActivity.m b/mParticle-Apple-SDK/Kits/MPKitActivity.m index 1693865c9..745b68620 100644 --- a/mParticle-Apple-SDK/Kits/MPKitActivity.m +++ b/mParticle-Apple-SDK/Kits/MPKitActivity.m @@ -4,12 +4,7 @@ #import "MPKitContainer.h" #import "MPKitProtocol.h" #import "MPKitRegister.h" - -@interface MParticle () - -@property (nonatomic, strong, readonly) MPKitContainer *kitContainer; - -@end +#import "mParticle.h" #pragma mark - MPKitActivityMapping @interface MPKitActivityMapping : NSObject @@ -70,7 +65,7 @@ - (instancetype)init { #pragma mark Private methods - (void)kitInstanceAndConfiguration:(NSNumber *)integrationId handler:(void(^)(id instance, NSDictionary *configuration))handler { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == %@", integrationId]; - id kitRegister = [[[[MParticle sharedInstance].kitContainer activeKitsRegistry] filteredArrayUsingPredicate:predicate] firstObject]; + id kitRegister = [[[[MParticle sharedInstance].kitContainer_PRIVATE activeKitsRegistry] filteredArrayUsingPredicate:predicate] firstObject]; id wrapperInstance = kitRegister.wrapperInstance; id kitInstance = [wrapperInstance respondsToSelector:@selector(providerKitInstance)] ? [wrapperInstance providerKitInstance] : nil; @@ -82,7 +77,7 @@ - (void)kitInstanceAndConfiguration:(NSNumber *)integrationId handler:(void(^)(i #pragma mark Public methods - (BOOL)isKitActive:(nonnull NSNumber *)integrationId { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"code == %@", integrationId]; - id kitRegister = [[[[MParticle sharedInstance].kitContainer activeKitsRegistry] filteredArrayUsingPredicate:predicate] firstObject]; + id kitRegister = [[[[MParticle sharedInstance].kitContainer_PRIVATE activeKitsRegistry] filteredArrayUsingPredicate:predicate] firstObject]; return kitRegister != nil; } diff --git a/mParticle-Apple-SDK/Kits/MPKitConfiguration.mm b/mParticle-Apple-SDK/Kits/MPKitConfiguration.mm index 292a101ce..a3050d972 100644 --- a/mParticle-Apple-SDK/Kits/MPKitConfiguration.mm +++ b/mParticle-Apple-SDK/Kits/MPKitConfiguration.mm @@ -1,7 +1,6 @@ #import "MPKitConfiguration.h" #import "MPIConstants.h" #import "MPEventProjection.h" -#import "MPStateMachine.h" #import "MPILogger.h" #import "MPConsentSerialization.h" #import "mParticle.h" diff --git a/mParticle-Apple-SDK/Kits/MPKitContainer.mm b/mParticle-Apple-SDK/Kits/MPKitContainer.mm index 37364fc87..af2ba6896 100644 --- a/mParticle-Apple-SDK/Kits/MPKitContainer.mm +++ b/mParticle-Apple-SDK/Kits/MPKitContainer.mm @@ -2,7 +2,6 @@ #import "MParticleSwift.h" #import "MPKitExecStatus.h" #import "MPEnums.h" -#import "MPStateMachine.h" #import "MPKitConfiguration.h" #import #import "MPForwardRecord.h" @@ -45,8 +44,7 @@ @interface MParticle () @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; -@property (nonatomic, strong, readonly) MPKitContainer *kitContainer; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; + (dispatch_queue_t)messageQueue; @property (nonatomic, strong, nonnull) MParticleOptions *options; @property (nonatomic, strong) MPDataPlanFilter *dataPlanFilter; @@ -70,7 +68,7 @@ - (nullable instancetype)initWithInstance:(nonnull NSObject *)ins static const NSInteger sideloadedKitCodeStartValue = 1000000000; -@interface MPKitContainer () { +@interface MPKitContainer_PRIVATE () { dispatch_semaphore_t kitsSemaphore; std::map> brackets; NSInteger sideloadedKitCodeNextValue; @@ -82,12 +80,12 @@ @interface MPKitContainer () { @end -@implementation MPKitContainer +@implementation MPKitContainer_PRIVATE @synthesize kitsInitialized = _kitsInitialized; + (void)initialize { - if (self == [MPKitContainer class]) { + if (self == [MPKitContainer_PRIVATE class]) { kitsRegistry = [[NSMutableSet alloc] initWithCapacity:DEFAULT_ALLOCATION_FOR_KITS]; } } @@ -145,7 +143,7 @@ - (void)handleApplicationDidBecomeActive:(NSNotification *)notification { - (void)handleApplicationDidFinishLaunching:(NSNotification *)notification { dispatch_async(dispatch_get_main_queue(), ^{ - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; stateMachine.launchOptions = [notification userInfo]; SEL launchOptionsSelector = @selector(setLaunchOptions:); SEL startSelector = @selector(start); @@ -1107,9 +1105,9 @@ - (void)project:(id)kitRegister commerceEvent:(MPCommerc return; } - __weak MPKitContainer *weakSelf = self; + __weak MPKitContainer_PRIVATE *weakSelf = self; - __strong MPKitContainer *strongSelf = weakSelf; + __strong MPKitContainer_PRIVATE *strongSelf = weakSelf; if (strongSelf) { dispatch_semaphore_wait(strongSelf->kitsSemaphore, DISPATCH_TIME_FOREVER); } @@ -1607,9 +1605,9 @@ - (void)project:(id)kitRegister event:(MPEvent *const)ev return; } - __weak MPKitContainer *weakSelf = self; + __weak MPKitContainer_PRIVATE *weakSelf = self; - __strong MPKitContainer *strongSelf = weakSelf; + __strong MPKitContainer_PRIVATE *strongSelf = weakSelf; if (strongSelf) { dispatch_semaphore_wait(strongSelf->kitsSemaphore, DISPATCH_TIME_FOREVER); } @@ -1964,7 +1962,7 @@ - (void)removeKitsFromRegistryInvalidForWorkspaceSwitch { } - (void)configureKits:(NSArray *)kitConfigurations { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; if (MPIsNull(kitConfigurations) || stateMachine.optOut) { [self flushSerializedKits]; diff --git a/mParticle-Apple-SDK/MPBackendController.m b/mParticle-Apple-SDK/MPBackendController.m index f2935898a..21202d79b 100644 --- a/mParticle-Apple-SDK/MPBackendController.m +++ b/mParticle-Apple-SDK/MPBackendController.m @@ -18,7 +18,6 @@ #import "MPUploadBuilder.h" #import "MPILogger.h" #import "MPConsumerInfo.h" -#import "MPResponseConfig.h" #import "MPCommerceEvent.h" #import "MPCommerceEvent+Dictionary.h" #import "MPKitContainer.h" @@ -29,6 +28,11 @@ #import "MPDevice.h" #import "MPIdentityCaching.h" #import "MParticleSwift.h" +#import "MPLaunchInfo.h" +#import "MPNetworkCommunication.h" +#if TARGET_OS_IOS == 1 + #import "MPNotificationController.h" +#endif const NSInteger kNilAttributeValue = 101; const NSInteger kExceededAttributeValueMaximumLength = 104; @@ -48,10 +52,9 @@ - (instancetype)initWithUUID:(NSString *)uuid; @interface MParticle () -@property (nonatomic, strong, nullable) NSArray *deferredKitConfiguration; @property (nonatomic, strong) MPPersistenceController *persistenceController; -@property (nonatomic, strong) MPStateMachine *stateMachine; -@property (nonatomic, strong) MPKitContainer *kitContainer; +@property (nonatomic, strong) MPStateMachine_PRIVATE *stateMachine; +@property (nonatomic, strong) MPKitContainer_PRIVATE *kitContainer_PRIVATE; @property (nonatomic, strong) MParticleWebView *webView; @property (nonatomic, strong, nullable) NSString *dataPlanId; @property (nonatomic, strong, nullable) NSNumber *dataPlanVersion; @@ -61,7 +64,7 @@ + (void)executeOnMain:(void(^)(void))block; @end -@interface MPBackendController() { +@interface MPBackendController_PRIVATE() { MPAppDelegateProxy *appDelegateProxy; NSTimeInterval nextCleanUpTime; dispatch_semaphore_t backendSemaphore; @@ -82,7 +85,7 @@ @interface MPBackendController() { @end -@implementation MPBackendController +@implementation MPBackendController_PRIVATE @synthesize session = _session; @synthesize uploadInterval = _uploadInterval; @@ -93,9 +96,9 @@ @implementation MPBackendController - (instancetype)initWithDelegate:(id)delegate { self = [super init]; if (self) { - _networkCommunication = [[MPNetworkCommunication alloc] init]; + _networkCommunication = [[MPNetworkCommunication_PRIVATE alloc] init]; #if TARGET_OS_IOS == 1 - _notificationController = [[MPNotificationController alloc] init]; + _notificationController = [[MPNotificationController_PRIVATE alloc] init]; #endif _sessionTimeout = DEFAULT_SESSION_TIMEOUT; nextCleanUpTime = [[NSDate date] timeIntervalSince1970]; @@ -359,7 +362,7 @@ - (void)setPreviousSessionSuccessfullyClosed:(NSNumber *)previousSessionSuccessf - (void)processDidFinishLaunching:(NSNotification *)notification { NSString *astType = kMPASTInitKey; NSMutableDictionary *messageInfo = [[NSMutableDictionary alloc] initWithCapacity:3]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; BOOL isInstallOrUpgrade = NO; if (stateMachine.installationType == MPInstallationTypeKnownInstall) { @@ -402,7 +405,7 @@ - (void)processDidFinishLaunching:(NSNotification *)notification { [self saveMessage:message updateSession:YES]; }); - [MPApplication updateStoredVersionAndBuildNumbers]; + [MPApplication_PRIVATE updateStoredVersionAndBuildNumbers]; self.didFinishLaunchingNotification = nil; @@ -440,7 +443,7 @@ - (void)proxyOriginalAppDelegate { } // Add our proxy object to hook calls to the app delegate - UIApplication *application = [MPApplication sharedUIApplication]; + UIApplication *application = [MPApplication_PRIVATE sharedUIApplication]; appDelegateProxy = [[MPAppDelegateProxy alloc] initWithOriginalAppDelegate:application.delegate]; application.delegate = appDelegateProxy; @@ -460,7 +463,7 @@ - (void)unproxyOriginalAppDelegate { return; } - UIApplication *application = [MPApplication sharedUIApplication]; + UIApplication *application = [MPApplication_PRIVATE sharedUIApplication]; if (application.delegate != appDelegateProxy) { MPILogWarning(@"Tried to unproxy the app delegate, but our proxy is no longer in place, application.delegate: %@", application.delegate); return; @@ -500,7 +503,7 @@ - (void)setUserAttributeChange:(MPUserAttributeChange *)userAttributeChange comp NSString *localKey = [userAttributes caseInsensitiveKey:userAttributeChange.key]; NSError *error = nil; - BOOL success = [MPBackendController checkAttribute:userAttributeChange.userAttributes + BOOL success = [MPBackendController_PRIVATE checkAttribute:userAttributeChange.userAttributes key:localKey value:userAttributeChange.value error:&error]; @@ -793,11 +796,11 @@ - (void)setSessionTimeout:(NSTimeInterval)sessionTimeout { - (NSTimeInterval)uploadInterval { if (_uploadInterval == 0.0) { - _uploadInterval = [MPStateMachine environment] == MPEnvironmentDevelopment ? DEFAULT_DEBUG_UPLOAD_INTERVAL : DEFAULT_UPLOAD_INTERVAL; + _uploadInterval = [MPStateMachine_PRIVATE environment] == MPEnvironmentDevelopment ? DEFAULT_DEBUG_UPLOAD_INTERVAL : DEFAULT_UPLOAD_INTERVAL; } // If running in an extension our processor time is extremely limited - if ([MPStateMachine isAppExtension]) { + if ([MPStateMachine_PRIVATE isAppExtension]) { _uploadInterval = 1.0; } return _uploadInterval; @@ -861,7 +864,7 @@ - (void)beginSessionWithIsManual:(BOOL)isManual date:(NSDate *)date { return; } - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; MPPersistenceController *persistence = [MParticle sharedInstance].persistenceController; NSNumber *mpId = [MPPersistenceController mpId]; @@ -874,7 +877,7 @@ - (void)beginSessionWithIsManual:(BOOL)isManual date:(NSDate *)date { // Set the app and device info dicts if they weren't already created if (!_session.appInfo) { - _session.appInfo = [[[MPApplication alloc] init] dictionaryRepresentation]; + _session.appInfo = [[[MPApplication_PRIVATE alloc] init] dictionaryRepresentation]; } if (!_session.deviceInfo) { _session.deviceInfo = [[[MPDevice alloc] init] dictionaryRepresentationWithMpid:mpId]; @@ -1193,7 +1196,7 @@ - (void)logError:(NSString *)message exception:(NSException *)exception topmostC messageInfo[kMPAttributesKey] = eventInfo; } - NSDictionary *appImageInfo = [MPApplication appImageInfo]; + NSDictionary *appImageInfo = [MPApplication_PRIVATE appImageInfo]; if (appImageInfo) { [messageInfo addEntriesFromDictionary:appImageInfo]; } @@ -1439,7 +1442,7 @@ - (MPExecStatus)setSessionAttribute:(MPSession *)session key:(NSString *)key val NSString *localKey = [session.attributesDictionary caseInsensitiveKey:key]; NSError *error = nil; - BOOL success = [MPBackendController checkAttribute:session.attributesDictionary + BOOL success = [MPBackendController_PRIVATE checkAttribute:session.attributesDictionary key:localKey value:value error:&error]; @@ -1457,7 +1460,7 @@ - (MPExecStatus)setSessionAttribute:(MPSession *)session key:(NSString *)key val - (void)startWithKey:(NSString *)apiKey secret:(NSString *)secret networkOptions:(nullable MPNetworkOptions *)networkOptions firstRun:(BOOL)firstRun installationType:(MPInstallationType)installationType proxyAppDelegate:(BOOL)proxyAppDelegate startKitsAsync:(BOOL)startKitsAsync consentState:(MPConsentState *)consentState completionHandler:(dispatch_block_t)completionHandler { [MPListenerController.sharedInstance onAPICalled:_cmd parameter1:apiKey parameter2:secret parameter3:@(firstRun) parameter4:consentState]; - if (![MPStateMachine isAppExtension]) { + if (![MPStateMachine_PRIVATE isAppExtension]) { if (proxyAppDelegate) { [self proxyOriginalAppDelegate]; } @@ -1470,15 +1473,15 @@ - (void)startWithKey:(NSString *)apiKey secret:(NSString *)secret networkOptions if (![MParticle sharedInstance].stateMachine.optOut) { dispatch_async([MParticle messageQueue], ^{ - [[MParticle sharedInstance].kitContainer initializeKits]; + [[MParticle sharedInstance].kitContainer_PRIVATE initializeKits]; }); } - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; stateMachine.apiKey = apiKey; stateMachine.secret = secret; stateMachine.installationType = installationType; - [MPStateMachine setRunningInBackground:NO]; + [MPStateMachine_PRIVATE setRunningInBackground:NO]; BOOL shouldBeginSession = !stateMachine.optOut && MParticle.sharedInstance.shouldBeginSession; NSDate *date = nil; @@ -1497,7 +1500,7 @@ - (void)startWithKey:(NSString *)apiKey secret:(NSString *)secret networkOptions [self prepareBatchesForUpload:lastUploadSettings]; // Delete the cached config - [MPResponseConfig deleteConfig]; + [MPIUserDefaults deleteConfig]; } // Cache the upload settings in case we switch workspaces on startup @@ -1505,7 +1508,7 @@ - (void)startWithKey:(NSString *)apiKey secret:(NSString *)secret networkOptions [[MPIUserDefaults standardUserDefaults] setLastUploadSettings:uploadSettings]; // Restore cached config if exists - [MPResponseConfig restore]; + [MPIUserDefaults restore]; if (shouldBeginSession) { [self beginSessionWithIsManual:!MParticle.sharedInstance.automaticSessionTracking date:date]; @@ -1550,7 +1553,7 @@ - (void)startWithKey:(NSString *)apiKey secret:(NSString *)secret networkOptions - (void)saveMessage:(MPMessage *)message updateSession:(BOOL)updateSession { NSTimeInterval lastEventTimestamp = message.timestamp ?: [[NSDate date] timeIntervalSince1970]; - if (MPStateMachine.runningInBackground) { + if (MPStateMachine_PRIVATE.runningInBackground) { self.timeOfLastEventInBackground = lastEventTimestamp; } @@ -1582,7 +1585,7 @@ - (void)saveMessage:(MPMessage *)message updateSession:(BOOL)updateSession { } } - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; BOOL shouldUpload = [stateMachine.triggerMessageTypes containsObject:message.messageType]; if (!shouldUpload && stateMachine.triggerEventTypes) { @@ -1628,7 +1631,7 @@ - (MPExecStatus)checkForKitsAndUploadWithCompletionHandler:(void (^ _Nullable)(B return; } - MPKitContainer *kitContainer = [MParticle sharedInstance].kitContainer; + MPKitContainer_PRIVATE *kitContainer = [MParticle sharedInstance].kitContainer_PRIVATE; BOOL shouldDelayUploadForKits = kitContainer && [kitContainer shouldDelayUpload:kMPMaximumKitWaitTimeSeconds]; BOOL shouldDelayUpload = shouldDelayUploadForKits || [MParticle.sharedInstance.webView shouldDelayUpload:kMPMaximumAgentWaitTimeSeconds]; if (shouldDelayUpload) { @@ -1860,7 +1863,7 @@ - (MPExecStatus)beginLocationTrackingWithAccuracy:(CLLocationAccuracy)accuracy d - (MPExecStatus)endLocationTracking { [MPListenerController.sharedInstance onAPICalled:_cmd]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; if ([stateMachine.locationTrackingMode isEqualToString:kMPRemoteConfigForceTrue]) { return MPExecStatusEnabledRemotely; } @@ -1872,11 +1875,11 @@ - (MPExecStatus)endLocationTracking { } #endif -- (MPNotificationController *)notificationController { +- (MPNotificationController_PRIVATE *)notificationController { return _notificationController; } -- (void)setNotificationController:(MPNotificationController *)notificationController { +- (void)setNotificationController:(MPNotificationController_PRIVATE *)notificationController { _notificationController = notificationController; } @@ -1932,7 +1935,7 @@ - (void)logUserNotification:(MParticleUserNotification *)userNotification { kMPPushMessageTypeKey:userNotification.type} mutableCopy]; - NSString *tokenString = [MPIUserDefaults stringFromDeviceToken:[MPNotificationController deviceToken]]; + NSString *tokenString = [MPIUserDefaults stringFromDeviceToken:[MPNotificationController_PRIVATE deviceToken]]; if (tokenString) { messageInfo[kMPDeviceTokenKey] = tokenString; } @@ -1970,13 +1973,13 @@ - (void)logUserNotification:(MParticleUserNotification *)userNotification { #pragma mark Background Task - (void)beginBackgroundTask { - if ([MPStateMachine isAppExtension]) { + if ([MPStateMachine_PRIVATE isAppExtension]) { return; } [MParticle executeOnMain:^{ if (self.backendBackgroundTaskIdentifier == UIBackgroundTaskInvalid) { - self.backendBackgroundTaskIdentifier = [[MPApplication sharedUIApplication] beginBackgroundTaskWithExpirationHandler:^{ + self.backendBackgroundTaskIdentifier = [[MPApplication_PRIVATE sharedUIApplication] beginBackgroundTaskWithExpirationHandler:^{ MPILogDebug(@"SDK has ended background activity together with the app."); [self endBackgroundTask]; }]; @@ -1985,13 +1988,13 @@ - (void)beginBackgroundTask { } - (void)endBackgroundTask { - if ([MPStateMachine isAppExtension]) { + if ([MPStateMachine_PRIVATE isAppExtension]) { return; } [MParticle executeOnMain:^{ if (self.backendBackgroundTaskIdentifier != UIBackgroundTaskInvalid) { - [[MPApplication sharedUIApplication] endBackgroundTask:self.backendBackgroundTaskIdentifier]; + [[MPApplication_PRIVATE sharedUIApplication] endBackgroundTask:self.backendBackgroundTaskIdentifier]; self.backendBackgroundTaskIdentifier = UIBackgroundTaskInvalid; } }]; @@ -2074,7 +2077,7 @@ - (void)handleApplicationDidEnterBackground:(NSNotification *)notification { MPILogVerbose(@"Application Did Enter Background"); NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970]; - [MPStateMachine setRunningInBackground:YES]; + [MPStateMachine_PRIVATE setRunningInBackground:YES]; [self beginBackgroundTask]; [MParticle executeOnMessage:^{ @@ -2110,7 +2113,7 @@ - (void)cancelBackgroundTimeCheckLoop { } - (void)beginBackgroundTimeCheckLoop { - if ([MPStateMachine isAppExtension]) { + if ([MPStateMachine_PRIVATE isAppExtension]) { return; } @@ -2124,12 +2127,12 @@ - (void)beginBackgroundTimeCheckLoop { UIApplicationState (^getApplicationState)(void) = ^UIApplicationState(void) { __block UIApplicationState appState; dispatch_sync(dispatch_get_main_queue(), ^{ - appState = [MPApplication sharedUIApplication].applicationState; + appState = [MPApplication_PRIVATE sharedUIApplication].applicationState; }); return appState; }; - UIApplication *sharedApplication = [MPApplication sharedUIApplication]; + UIApplication *sharedApplication = [MPApplication_PRIVATE sharedUIApplication]; UIApplicationState applicationState = getApplicationState(); // Loop to check the background state and time remaining to decide when to upload @@ -2167,7 +2170,7 @@ - (void)beginBackgroundTimeCheckLoop { } - (void)handleApplicationWillEnterForeground:(NSNotification *)notification { - [MPStateMachine setRunningInBackground:NO]; + [MPStateMachine_PRIVATE setRunningInBackground:NO]; [self cancelBackgroundTimeCheckLoop]; diff --git a/mParticle-Apple-SDK/MPConstants.swift b/mParticle-Apple-SDK/MPConstants.swift index 08b0aa281..142203d39 100644 --- a/mParticle-Apple-SDK/MPConstants.swift +++ b/mParticle-Apple-SDK/MPConstants.swift @@ -50,3 +50,115 @@ struct MessageKeys { static let kMPDataPlanIdKey = "id" static let kMPDataPlanVersionKey = "v" } + +struct RemoteConfig { + static let kMPRemoteConfigExceptionHandlingModeKey = "cue" + static let kMPRemoteConfigExceptionHandlingModeAppDefined = "appdefined" + static let kMPRemoteConfigExceptionHandlingModeForce = "forcecatch" + static let kMPRemoteConfigExceptionHandlingModeIgnore = "forceignore" + static let kMPRemoteConfigCrashMaxPLReportLength = "crml" + static let kMPRemoteConfigAppDefined = "appdefined" + static let kMPRemoteConfigForceTrue = "forcetrue" + static let kMPRemoteConfigForceFalse = "forcefalse" + static let kMPRemoteConfigKitsKey = "eks" + static let kMPRemoteConfigKitHashesKey = "hs" + static let kMPRemoteConfigConsumerInfoKey = "ci" + static let kMPRemoteConfigCookiesKey = "ck" + static let kMPRemoteConfigMPIDKey = "mpid" + static let kMPRemoteConfigCustomModuleSettingsKey = "cms" + static let kMPRemoteConfigCustomModuleIdKey = "id" + static let kMPRemoteConfigCustomModulePreferencesKey = "pr" + static let kMPRemoteConfigCustomModuleLocationKey = "f" + static let kMPRemoteConfigCustomModulePreferenceSettingsKey = "ps" + static let kMPRemoteConfigCustomModuleReadKey = "k" + static let kMPRemoteConfigCustomModuleDataTypeKey = "t" + static let kMPRemoteConfigCustomModuleWriteKey = "n" + static let kMPRemoteConfigCustomModuleDefaultKey = "d" + static let kMPRemoteConfigCustomSettingsKey = "cs" + static let kMPRemoteConfigSandboxModeKey = "dbg" + static let kMPRemoteConfigSessionTimeoutKey = "stl" + static let kMPRemoteConfigPushNotificationDictionaryKey = "pn" + static let kMPRemoteConfigPushNotificationModeKey = "pnm" + static let kMPRemoteConfigPushNotificationTypeKey = "rnt" + static let kMPRemoteConfigLocationKey = "lct" + static let kMPRemoteConfigLocationModeKey = "ltm" + static let kMPRemoteConfigLocationAccuracyKey = "acc" + static let kMPRemoteConfigLocationMinimumDistanceKey = "mdf" + static let kMPRemoteConfigRampKey = "rp" + static let kMPRemoteConfigTriggerKey = "tri" + static let kMPRemoteConfigTriggerEventsKey = "evts" + static let kMPRemoteConfigTriggerMessageTypesKey = "dts" + static let kMPRemoteConfigUniqueIdentifierKey = "das" + static let kMPRemoteConfigBracketKey = "bk" + static let kMPRemoteConfigRestrictIDFA = "rdlat" + static let kMPRemoteConfigAliasMaxWindow = "alias_max_window" + static let kMPRemoteConfigAllowASR = "iasr" + static let kMPRemoteConfigExcludeAnonymousUsersKey = "eau" + static let kMPRemoteConfigDirectURLRouting = "dur" + static let kMPRemoteConfigDataPlanningResults = "dpr" + static let kMPRemoteConfigDataPlanning = "dtpn" + static let kMPRemoteConfigDataPlanningBlock = "blok" + static let kMPRemoteConfigDataPlanningBlockUnplannedEvents = "ev" + static let kMPRemoteConfigDataPlanningBlockUnplannedEventAttributes = "ea" + static let kMPRemoteConfigDataPlanningBlockUnplannedUserAttributes = "ua" + static let kMPRemoteConfigDataPlanningBlockUnplannedIdentities = "id" + static let kMPRemoteConfigDataPlanningDataPlanId = "dpid" + static let kMPRemoteConfigDataPlanningDataPlanVersion = "dpvn" + static let kMPRemoteConfigDataPlanningDataPlanError = "error" + static let kMPRemoteConfigDataPlanningDataPlanVersionValue = "vers" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueDoc = "version_document" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueDataPoints = "data_points" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueMatch = "match" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueType = "type" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueValidator = "validator" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueDefinition = "definition" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueAdditionalProperties = "additionalProperties" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueUserAttributes = "user_attributes" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueCustomEvent = "custom_event" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueCustomEventType = "custom_event_type" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueEventName = "event_name" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueScreenView = "screen_view" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueScreenName = "screen_name" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueProductAction = "product_action" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueUnknown = "unknown" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueAddToCart = "add_to_cart" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueRemoveFromCart = "remove_from_cart" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueCheckout = "checkout" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueCheckoutOption = "checkout_option" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueClick = "click" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueViewDetail = "view_detail" + static let kMPRemoteConfigDataPlanningDataPlanVersionValuePurchase = "purchase" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueRefund = "refund" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueAddToWishlist = "add_to_wishlist" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueRemoveFromWishlist = "remove_from_wish_list" + static let kMPRemoteConfigDataPlanningDataPlanVersionValuePromotionAction = "promotion_action" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueProductImpressions = "product_impressions" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueCriteria = "criteria" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueAction = "action" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueImpressionUnknown = "unknown" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueImpressionView = "view" + static let kMPRemoteConfigDataPlanningDataPlanVersionValueImpressionClick = "click" +} + +struct ConsentFiltering { + static let kMPConsentKitFilter = "crvf" + static let kMPConsentKitFilterIncludeOnMatch = "i" + static let kMPConsentKitFilterItems = "v" + static let kMPConsentKitFilterItemConsented = "c" + static let kMPConsentKitFilterItemHash = "h" + static let kMPConsentRegulationFilters = "reg" + static let kMPConsentPurposeFilters = "pur" + static let kMPConsentGDPRRegulationType = "1" + static let kMPConsentCCPARegulationType = "2" + static let kMPConsentCCPAPurposeName = "data_sale_opt_out" +} + +struct Notifications { + static let kMPCrashReportOccurredNotification = Notification.Name("MPCrashReportOccurredNotification") + static let kMPConfigureExceptionHandlingNotification = Notification.Name("MPConfigureExceptionHandlingNotification") + static let kMPUserNotificationDictionaryKey = Notification.Name("MPUserNotificationDictionaryKey") + static let kMPUserNotificationActionKey = Notification.Name("MPUserNotificationActionKey") + static let kMPRemoteNotificationDeviceTokenNotification = Notification.Name("MPRemoteNotificationDeviceTokenNotification") + static let kMPRemoteNotificationDeviceTokenKey = Notification.Name("MPRemoteNotificationDeviceTokenKey") + static let kMPRemoteNotificationOldDeviceTokenKey = Notification.Name("MPRemoteNotificationOldDeviceTokenKey") +} diff --git a/mParticle-Apple-SDK/Utils/MPStateMachine.m b/mParticle-Apple-SDK/MPStateMachine.m similarity index 97% rename from mParticle-Apple-SDK/Utils/MPStateMachine.m rename to mParticle-Apple-SDK/MPStateMachine.m index e53e57b6a..ee20dceb9 100644 --- a/mParticle-Apple-SDK/Utils/MPStateMachine.m +++ b/mParticle-Apple-SDK/MPStateMachine.m @@ -14,6 +14,9 @@ #import "MPForwardQueueParameters.h" #import "MPDataPlanFilter.h" #import "MParticleSwift.h" +#import "MPLaunchInfo.h" +#import "MParticleReachability.h" +#import "MPIConstants.h" #if TARGET_OS_IOS == 1 #ifndef MPARTICLE_LOCATION_DISABLE @@ -33,8 +36,7 @@ @interface MParticle () + (dispatch_queue_t)messageQueue; @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; -@property (nonatomic, strong, readonly) MPKitContainer *kitContainer; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @property (nonatomic, readwrite) MPDataPlanOptions *dataPlanOptions; @property (nonatomic, readwrite) MPDataPlanFilter *dataPlanFilter; @@ -45,7 +47,7 @@ - (void)setIdentity:(NSString *)identityString identityType:(MPIdentity)identity @end -@interface MPStateMachine() { +@interface MPStateMachine_PRIVATE() { BOOL optOutSet; dispatch_queue_t messageQueue; } @@ -53,11 +55,12 @@ @interface MPStateMachine() { @property (nonatomic) MParticleNetworkStatus networkStatus; @property (nonatomic, strong) NSString *storedSDKVersion; @property (nonatomic, strong) MParticleReachability *reachability; +@property (nonatomic) MPUploadStatus uploadStatus; @end -@implementation MPStateMachine +@implementation MPStateMachine_PRIVATE @synthesize consumerInfo = _consumerInfo; @synthesize deviceTokenType = _deviceTokenType; @@ -128,8 +131,8 @@ - (instancetype)init { name:MParticleReachabilityChangedNotification object:nil]; - [MPApplication markInitialLaunchTime]; - [MPApplication updateLaunchCountsAndDates]; + [MPApplication_PRIVATE markInitialLaunchTime]; + [MPApplication_PRIVATE updateLaunchCountsAndDates]; }); } @@ -218,7 +221,7 @@ + (MPEnvironment)getEnvironment { if (isDebuggerRunning) { environment = MPEnvironmentDevelopment; } else { - NSString *provisioningProfileString = [MPStateMachine provisioningProfileString]; + NSString *provisioningProfileString = [MPStateMachine_PRIVATE provisioningProfileString]; environment = provisioningProfileString ? MPEnvironmentDevelopment : MPEnvironmentProduction; } #endif @@ -250,7 +253,7 @@ - (void)resetTriggers { #pragma mark Notification handlers - (void)handleApplicationDidEnterBackground:(NSNotification *)notification { - [MPApplication updateLastUseDate:_launchDate]; + [MPApplication_PRIVATE updateLastUseDate:_launchDate]; _backgrounded = YES; self.launchInfo = nil; } @@ -260,7 +263,7 @@ - (void)handleApplicationWillEnterForeground:(NSNotification *)notification { } - (void)handleApplicationWillTerminate:(NSNotification *)notification { - [MPApplication updateLastUseDate:_launchDate]; + [MPApplication_PRIVATE updateLastUseDate:_launchDate]; } - (void)handleReachabilityChanged:(NSNotification *)notification { @@ -274,7 +277,7 @@ + (MPEnvironment)environment { return runningEnvironment; } - runningEnvironment = [MPStateMachine getEnvironment]; + runningEnvironment = [MPStateMachine_PRIVATE getEnvironment]; return runningEnvironment; } @@ -359,7 +362,7 @@ - (NSString *)deviceTokenType { [self willChangeValueForKey:@"deviceTokenType"]; _deviceTokenType = @""; - NSString *provisioningProfileString = [MPStateMachine provisioningProfileString]; + NSString *provisioningProfileString = [MPStateMachine_PRIVATE provisioningProfileString]; if (provisioningProfileString) { NSRange range = [provisioningProfileString rangeOfString:@"aps-environmentproduction"]; @@ -390,7 +393,7 @@ - (MPInstallationType)installationType { [self willChangeValueForKey:@"installationType"]; - MPApplication *application = [[MPApplication alloc] init]; + MPApplication_PRIVATE *application = [[MPApplication_PRIVATE alloc] init]; if (application.storedVersion || application.storedBuild) { if (![application.version isEqualToString:application.storedVersion] || ![application.build isEqualToString:application.storedBuild]) { _installationType = MPInstallationTypeKnownUpgrade; diff --git a/mParticle-Apple-SDK/Network/MPNetworkCommunication.m b/mParticle-Apple-SDK/Network/MPNetworkCommunication.m index a00b76743..de97c85b5 100644 --- a/mParticle-Apple-SDK/Network/MPNetworkCommunication.m +++ b/mParticle-Apple-SDK/Network/MPNetworkCommunication.m @@ -3,7 +3,6 @@ #import "MPSession.h" #import #import "MPConnector.h" -#import "MPStateMachine.h" #import "MPUpload.h" #import "MPDevice.h" #import "MPApplication.h" @@ -21,11 +20,11 @@ #import "MPIdentityDTO.h" #import "MPIConstants.h" #import "MPAliasResponse.h" -#import "MPResponseConfig.h" #import "MPURL.h" #import "MPConnectorFactoryProtocol.h" #import "MPIdentityCaching.h" #import "MParticleSwift.h" +#import "MPNetworkCommunication.h" NSString *const urlFormat = @"%@://%@/%@/%@%@"; // Scheme, URL Host, API Version, API key, path NSString *const urlFormatOverride = @"%@://%@/%@%@"; // Scheme, URL Host, API key, path @@ -61,7 +60,9 @@ @interface MParticle () @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; +@property (nonatomic, strong, readonly) MPBackendController_PRIVATE *backendController; + - (void)logKitBatch:(NSString *)batch; @end @@ -80,14 +81,14 @@ - (instancetype)initWithCode:(MPIdentityErrorResponseCode) code message: (NSStri @end -@interface MPNetworkCommunication() +@interface MPNetworkCommunication_PRIVATE() @property (nonatomic, strong) NSString *context; @property (nonatomic) BOOL identifying; @end -@implementation MPNetworkCommunication +@implementation MPNetworkCommunication_PRIVATE @synthesize configURL = _configURL; @synthesize identifyURL = _identifyURL; @@ -123,7 +124,7 @@ - (NSString *)defaultHostWithSubdomain:(NSString *)subdomain apiKey:(NSString *) } - (NSString *)defaultEventHost { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; if (stateMachine.attAuthorizationStatus.integerValue == MPATTAuthorizationStatusAuthorized) { return [self defaultHostWithSubdomain:kMPURLHostEventTrackingSubdomain apiKey:stateMachine.apiKey enableDirectRouting:stateMachine.enableDirectRouting]; } else { @@ -132,7 +133,7 @@ - (NSString *)defaultEventHost { } - (NSString *)defaultIdentityHost { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; if (stateMachine.attAuthorizationStatus.integerValue == MPATTAuthorizationStatusAuthorized) { return [self defaultHostWithSubdomain:kMPURLHostIdentityTrackingSubdomain apiKey:stateMachine.apiKey enableDirectRouting:stateMachine.enableDirectRouting]; } else { @@ -145,8 +146,8 @@ - (MPURL *)configURL { return _configURL; } - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; - MPApplication *application = [[MPApplication alloc] init]; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; + MPApplication_PRIVATE *application = [[MPApplication_PRIVATE alloc] init]; NSString *configHost = [MParticle sharedInstance].networkOptions.configHost ?: kMPURLHostConfig; NSString *dataPlanConfigString; @@ -240,7 +241,7 @@ - (MPURL *)logoutURL { } - (MPURL *)identityURL:(NSString *)pathComponent { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; NSString *identityHost; if ([MParticle sharedInstance].networkOptions.identityTrackingHost && stateMachine.attAuthorizationStatus.integerValue == MPATTAuthorizationStatusAuthorized) { identityHost = [MParticle sharedInstance].networkOptions.identityTrackingHost; @@ -270,7 +271,7 @@ - (MPURL *)identityURL:(NSString *)pathComponent { - (MPURL *)modifyURL { NSString *pathComponent = @"modify"; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; NSString *identityHost; if ([MParticle sharedInstance].networkOptions.identityTrackingHost && stateMachine.attAuthorizationStatus.integerValue == MPATTAuthorizationStatusAuthorized) { identityHost = [MParticle sharedInstance].networkOptions.identityTrackingHost; @@ -407,8 +408,8 @@ - (NSNumber *)maxAgeForCache:(nonnull NSString *)cache { #pragma mark Public methods - (NSObject *_Nonnull)makeConnector { - if (MPNetworkCommunication.connectorFactory) { - return [MPNetworkCommunication.connectorFactory createConnector]; + if (MPNetworkCommunication_PRIVATE.connectorFactory) { + return [MPNetworkCommunication_PRIVATE.connectorFactory createConnector]; } return [[MPConnector alloc] init]; } @@ -427,10 +428,10 @@ - (void)requestConfig:(nullable NSObject *)connector withCo __block UIBackgroundTaskIdentifier backgroundTaskIdentifier = UIBackgroundTaskInvalid; - if (![MPStateMachine isAppExtension]) { - backgroundTaskIdentifier = [[MPApplication sharedUIApplication] beginBackgroundTaskWithExpirationHandler:^{ + if (![MPStateMachine_PRIVATE isAppExtension]) { + backgroundTaskIdentifier = [[MPApplication_PRIVATE sharedUIApplication] beginBackgroundTaskWithExpirationHandler:^{ if (backgroundTaskIdentifier != UIBackgroundTaskInvalid) { - [[MPApplication sharedUIApplication] endBackgroundTask:backgroundTaskIdentifier]; + [[MPApplication_PRIVATE sharedUIApplication] endBackgroundTask:backgroundTaskIdentifier]; backgroundTaskIdentifier = UIBackgroundTaskInvalid; } }]; @@ -447,9 +448,9 @@ - (void)requestConfig:(nullable NSObject *)connector withCo NSString *ageString = httpResponse.allHeaderFields[kMPHTTPAgeHeaderKey]; NSNumber *maxAge = [self maxAgeForCache:cacheControl]; - if (![MPStateMachine isAppExtension]) { + if (![MPStateMachine_PRIVATE isAppExtension]) { if (backgroundTaskIdentifier != UIBackgroundTaskInvalid) { - [[MPApplication sharedUIApplication] endBackgroundTask:backgroundTaskIdentifier]; + [[MPApplication_PRIVATE sharedUIApplication] endBackgroundTask:backgroundTaskIdentifier]; backgroundTaskIdentifier = UIBackgroundTaskInvalid; } } @@ -494,7 +495,7 @@ - (void)requestConfig:(nullable NSObject *)connector withCo NSDictionary *headersDictionary = [httpResponse allHeaderFields]; NSString *eTag = headersDictionary[kMPHTTPETagHeaderKey]; if (!MPIsNull(eTag)) { - MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configurationDictionary dataReceivedFromServer:YES]; + MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configurationDictionary dataReceivedFromServer:YES stateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController]; MPILogDebug(@"MPResponseConfig init: %@", responseConfig.description); MPIUserDefaults *userDefaults = [MPIUserDefaults standardUserDefaults]; @@ -597,7 +598,7 @@ - (BOOL)performMessageUpload:(MPUpload *)upload { if (responseDictionary && serializationError == nil && [responseDictionary[kMPMessageTypeKey] isEqualToString:kMPMessageTypeResponseHeader]) { - [MPNetworkCommunication parseConfiguration:responseDictionary]; + [MPNetworkCommunication_PRIVATE parseConfiguration:responseDictionary]; } MPILogVerbose(@"Upload complete: %@\n", uploadString); @@ -719,10 +720,10 @@ - (BOOL)performAliasUpload:(MPUpload *)upload { - (void)upload:(NSArray *)uploads completionHandler:(MPUploadsCompletionHandler)completionHandler { __block UIBackgroundTaskIdentifier backgroundTaskIdentifier = UIBackgroundTaskInvalid; - if (![MPStateMachine isAppExtension]) { - backgroundTaskIdentifier = [[MPApplication sharedUIApplication] beginBackgroundTaskWithExpirationHandler:^{ + if (![MPStateMachine_PRIVATE isAppExtension]) { + backgroundTaskIdentifier = [[MPApplication_PRIVATE sharedUIApplication] beginBackgroundTaskWithExpirationHandler:^{ if (backgroundTaskIdentifier != UIBackgroundTaskInvalid) { - [[MPApplication sharedUIApplication] endBackgroundTask:backgroundTaskIdentifier]; + [[MPApplication_PRIVATE sharedUIApplication] endBackgroundTask:backgroundTaskIdentifier]; backgroundTaskIdentifier = UIBackgroundTaskInvalid; } }]; @@ -743,9 +744,9 @@ - (void)upload:(NSArray *)uploads completionHandler:(MPUploadsComple } } - if (![MPStateMachine isAppExtension]) { + if (![MPStateMachine_PRIVATE isAppExtension]) { if (backgroundTaskIdentifier != UIBackgroundTaskInvalid) { - [[MPApplication sharedUIApplication] endBackgroundTask:backgroundTaskIdentifier]; + [[MPApplication_PRIVATE sharedUIApplication] endBackgroundTask:backgroundTaskIdentifier]; backgroundTaskIdentifier = UIBackgroundTaskInvalid; } } @@ -840,12 +841,12 @@ - (void)identityApiRequestWithURL:(NSURL*)url identityRequest:(MPIdentityHTTPBas if (!usedCachedResponse) { __block UIBackgroundTaskIdentifier backgroundTaskIdentifier = UIBackgroundTaskInvalid; - if (![MPStateMachine isAppExtension]) { - backgroundTaskIdentifier = [[MPApplication sharedUIApplication] beginBackgroundTaskWithExpirationHandler:^{ + if (![MPStateMachine_PRIVATE isAppExtension]) { + backgroundTaskIdentifier = [[MPApplication_PRIVATE sharedUIApplication] beginBackgroundTaskWithExpirationHandler:^{ if (backgroundTaskIdentifier != UIBackgroundTaskInvalid) { self.identifying = NO; - [[MPApplication sharedUIApplication] endBackgroundTask:backgroundTaskIdentifier]; + [[MPApplication_PRIVATE sharedUIApplication] endBackgroundTask:backgroundTaskIdentifier]; backgroundTaskIdentifier = UIBackgroundTaskInvalid; } }]; @@ -861,9 +862,9 @@ - (void)identityApiRequestWithURL:(NSURL*)url identityRequest:(MPIdentityHTTPBas error = response.error; NSHTTPURLResponse *httpResponse = response.httpResponse; - if (![MPStateMachine isAppExtension]) { + if (![MPStateMachine_PRIVATE isAppExtension]) { if (backgroundTaskIdentifier != UIBackgroundTaskInvalid) { - [[MPApplication sharedUIApplication] endBackgroundTask:backgroundTaskIdentifier]; + [[MPApplication_PRIVATE sharedUIApplication] endBackgroundTask:backgroundTaskIdentifier]; backgroundTaskIdentifier = UIBackgroundTaskInvalid; } } diff --git a/mParticle-Apple-SDK/Network/MPURLRequestBuilder.m b/mParticle-Apple-SDK/Network/MPURLRequestBuilder.m index b3c469c6f..9aa91924e 100644 --- a/mParticle-Apple-SDK/Network/MPURLRequestBuilder.m +++ b/mParticle-Apple-SDK/Network/MPURLRequestBuilder.m @@ -1,6 +1,5 @@ #import "MPURLRequestBuilder.h" #import -#import "MPStateMachine.h" #import "MPIConstants.h" #import #import "MPIUserDefaults.h" @@ -10,13 +9,13 @@ #import "MPApplication.h" #import "MParticleWebView.h" #import "MPURL.h" +#import "mParticle.h" static NSDateFormatter *RFC1123DateFormatter; @interface MParticle () -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; -@property (nonatomic, strong, readonly) MPKitContainer *kitContainer; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @property (nonatomic, strong, readonly) MParticleWebView *webView; @end @@ -153,7 +152,7 @@ - (NSMutableURLRequest *)build { if (_SDKURLRequest || isIdentityRequest) { NSString *deviceLocale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier]; - MPKitContainer *kitContainer = !isIdentityRequest ? [MParticle sharedInstance].kitContainer : nil; + MPKitContainer_PRIVATE *kitContainer = !isIdentityRequest ? [MParticle sharedInstance].kitContainer_PRIVATE : nil; NSArray *supportedKits = [kitContainer supportedKits]; NSString *contentType = nil; NSString *kits = nil; @@ -179,7 +178,7 @@ - (NSMutableURLRequest *)build { kits = nil; } - kits = [MParticle.sharedInstance.kitContainer.configuredKitsRegistry componentsJoinedByString:@","]; + kits = [MParticle.sharedInstance.kitContainer_PRIVATE.configuredKitsRegistry componentsJoinedByString:@","]; range = [_message rangeOfString:kMPMessageTypeNetworkPerformance]; if (range.location != NSNotFound) { @@ -196,7 +195,7 @@ - (NSMutableURLRequest *)build { kits = [supportedKits componentsJoinedByString:@","]; } - NSString *environment = [NSString stringWithFormat:@"%d", (int)[MPStateMachine environment]]; + NSString *environment = [NSString stringWithFormat:@"%d", (int)[MPStateMachine_PRIVATE environment]]; [urlRequest setValue:environment forHTTPHeaderField:@"x-mp-env"]; MPIUserDefaults *userDefaults = [MPIUserDefaults standardUserDefaults]; diff --git a/mParticle-Apple-SDK/Notifications/MPNotificationController.m b/mParticle-Apple-SDK/Notifications/MPNotificationController.m index 14b7e71f2..7f92e3834 100644 --- a/mParticle-Apple-SDK/Notifications/MPNotificationController.m +++ b/mParticle-Apple-SDK/Notifications/MPNotificationController.m @@ -3,11 +3,9 @@ #import "MPPersistenceController.h" #import "MPIUserDefaults.h" #import "mParticle.h" -#import "MPBackendController.h" -#import "MPApplication.h" -#import "MPStateMachine.h" +#import "MPNetworkCommunication.h" -@interface MPNotificationController() { +@interface MPNotificationController_PRIVATE() { } @end @@ -15,7 +13,7 @@ @interface MPNotificationController() { @interface MParticle () + (dispatch_queue_t)messageQueue; -@property (nonatomic, strong, nonnull) MPBackendController *backendController; +@property (nonatomic, strong, nonnull) MPBackendController_PRIVATE *backendController; @end @@ -23,7 +21,7 @@ + (dispatch_queue_t)messageQueue; static NSData *deviceToken = nil; #endif -@implementation MPNotificationController +@implementation MPNotificationController_PRIVATE #if TARGET_OS_IOS == 1 @@ -49,7 +47,7 @@ + (NSData *)deviceToken { } + (void)setDeviceToken:(NSData *)devToken { - if ([MPNotificationController deviceToken] && [[MPNotificationController deviceToken] isEqualToData:devToken]) { + if ([MPNotificationController_PRIVATE deviceToken] && [[MPNotificationController_PRIVATE deviceToken] isEqualToData:devToken]) { return; } diff --git a/mParticle-Apple-SDK/Persistence/MPDatabaseMigrationController.m b/mParticle-Apple-SDK/Persistence/MPDatabaseMigrationController.m index e0d624a5d..653a15e07 100644 --- a/mParticle-Apple-SDK/Persistence/MPDatabaseMigrationController.m +++ b/mParticle-Apple-SDK/Persistence/MPDatabaseMigrationController.m @@ -13,8 +13,8 @@ @interface MParticle () @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, nonnull) MPBackendController *backendController; -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; +@property (nonatomic, strong, nonnull) MPBackendController_PRIVATE *backendController; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @end diff --git a/mParticle-Apple-SDK/Persistence/MPPersistenceController.mm b/mParticle-Apple-SDK/Persistence/MPPersistenceController.mm index 28124970c..d0ad55a57 100644 --- a/mParticle-Apple-SDK/Persistence/MPPersistenceController.mm +++ b/mParticle-Apple-SDK/Persistence/MPPersistenceController.mm @@ -58,7 +58,7 @@ typedef NS_ENUM(NSInteger, MPDatabaseState) { @interface MParticle () @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @end diff --git a/mParticle-Apple-SDK/Utils/MPApplication.m b/mParticle-Apple-SDK/Utils/MPApplication.m index 5d42c4d74..f73c14840 100644 --- a/mParticle-Apple-SDK/Utils/MPApplication.m +++ b/mParticle-Apple-SDK/Utils/MPApplication.m @@ -8,6 +8,7 @@ #import "MPStateMachine.h" #import #import "mParticle.h" +#import "MPIConstants.h" NSString *const kMPApplicationInformationKey = @"ai"; NSString *const kMPApplicationNameKey = @"an"; @@ -65,11 +66,11 @@ @interface MParticle () -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @end -@interface MPApplication() { +@interface MPApplication_PRIVATE() { NSDictionary *appInfo; MPIUserDefaults *userDefaults; } @@ -77,7 +78,7 @@ @interface MPApplication() { @end -@implementation MPApplication +@implementation MPApplication_PRIVATE @synthesize architecture = _architecture; @synthesize buildUUID = _buildUUID; @@ -86,7 +87,7 @@ @implementation MPApplication @synthesize pirated = _pirated; + (void)initialize { - if (self == [MPApplication class]) { + if (self == [MPApplication_PRIVATE class]) { _dyld_register_func_for_add_image(addImageListCallback); } } @@ -172,7 +173,7 @@ - (NSString *)bundleIdentifier { } - (MPEnvironment)environment { - return [MPStateMachine environment]; + return [MPStateMachine_PRIVATE environment]; } - (NSNumber *)firstSeenInstallation { @@ -298,7 +299,7 @@ - (NSDictionary *)searchAdsAttribution { #pragma mark NSCopying - (instancetype)copyWithZone:(NSZone *)zone { - MPApplication *copyObject = [[[self class] alloc] init]; + MPApplication_PRIVATE *copyObject = [[[self class] alloc] init]; if (copyObject) { copyObject->_architecture = [_architecture copy]; @@ -339,12 +340,12 @@ + (void)markInitialLaunchTime { } + (void)updateLastUseDate:(NSDate *)date { - MPApplication *application = [[MPApplication alloc] init]; + MPApplication_PRIVATE *application = [[MPApplication_PRIVATE alloc] init]; application.lastUseDate = MPMilliseconds([date timeIntervalSince1970]); } + (void)updateLaunchCountsAndDates { - MPApplication *application = [[MPApplication alloc] init]; + MPApplication_PRIVATE *application = [[MPApplication_PRIVATE alloc] init]; application.launchCount = @([application.launchCount integerValue] + 1); @@ -357,7 +358,7 @@ + (void)updateLaunchCountsAndDates { } + (void)updateStoredVersionAndBuildNumbers { - MPApplication *application = [[MPApplication alloc] init]; + MPApplication_PRIVATE *application = [[MPApplication_PRIVATE alloc] init]; application.storedVersion = application.version; application.storedBuild = application.build; } @@ -468,8 +469,8 @@ + (NSDictionary *)appImageInfo { applicationInfo[kMPAppBuildNumberKey] = auxString; } - if ([MParticle sharedInstance].stateMachine.allowASR && [MPApplication appStoreReceipt]) { - applicationInfo[kMPAppStoreReceiptKey] = [MPApplication appStoreReceipt]; + if ([MParticle sharedInstance].stateMachine.allowASR && [MPApplication_PRIVATE appStoreReceipt]) { + applicationInfo[kMPAppStoreReceiptKey] = [MPApplication_PRIVATE appStoreReceipt]; } appInfo = (NSDictionary *)applicationInfo; diff --git a/mParticle-Apple-SDK/Utils/MPDevice.m b/mParticle-Apple-SDK/Utils/MPDevice.m index 10dee262b..63fb79bfe 100644 --- a/mParticle-Apple-SDK/Utils/MPDevice.m +++ b/mParticle-Apple-SDK/Utils/MPDevice.m @@ -57,7 +57,7 @@ @interface MParticle () -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @end @@ -74,7 +74,7 @@ @interface MPDevice() { @interface MParticle () -@property (nonatomic, strong, nonnull) MPBackendController *backendController; +@property (nonatomic, strong, nonnull) MPBackendController_PRIVATE *backendController; @end @@ -522,8 +522,8 @@ - (NSDictionary *)dictionaryRepresentation { } NSData *pushNotificationToken; - if (![MPStateMachine isAppExtension]) { - pushNotificationToken = [MPNotificationController deviceToken]; + if (![MPStateMachine_PRIVATE isAppExtension]) { + pushNotificationToken = [MPNotificationController_PRIVATE deviceToken]; if (pushNotificationToken) { NSString *tokenString = [MPIUserDefaults stringFromDeviceToken:pushNotificationToken]; if (tokenString) { diff --git a/mParticle-Apple-SDK/Utils/MPIUserDefaults.h b/mParticle-Apple-SDK/Utils/MPIUserDefaults.h index 87e74e161..e52822732 100644 --- a/mParticle-Apple-SDK/Utils/MPIUserDefaults.h +++ b/mParticle-Apple-SDK/Utils/MPIUserDefaults.h @@ -2,6 +2,7 @@ @class MPKitConfiguration; @class MPUploadSettings; +@class MPResponseConfig; @interface MPIUserDefaults : NSObject @@ -34,5 +35,8 @@ - (nullable MPUploadSettings *)lastUploadSettings; + (NSString *_Nullable)stringFromDeviceToken:(NSData *_Nonnull)deviceToken; ++ (nullable MPResponseConfig *)restore; ++ (void)deleteConfig; ++ (BOOL)isOlderThanConfigMaxAgeSeconds; @end diff --git a/mParticle-Apple-SDK/Utils/MPIUserDefaults.m b/mParticle-Apple-SDK/Utils/MPIUserDefaults.m index 3d23f4beb..ba66b876e 100644 --- a/mParticle-Apple-SDK/Utils/MPIUserDefaults.m +++ b/mParticle-Apple-SDK/Utils/MPIUserDefaults.m @@ -4,7 +4,6 @@ #import "MPILogger.h" #import "mParticle.h" #import "MPKitConfiguration.h" -#import "MPStateMachine.h" #import "MPKitContainer.h" #import "MParticleSwift.h" #import "MPUpload.h" @@ -12,8 +11,8 @@ @interface MParticle () @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; -@property (nonatomic, strong, readonly) MPKitContainer *kitContainer; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; +@property (nonatomic, strong, nonnull) MPBackendController_PRIVATE *backendController; @end @@ -403,7 +402,7 @@ - (NSString *)currentConfigurationParameters { [configString appendFormat:@"SDK Version: %@\n", MParticle.sharedInstance.version]; } - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; if (stateMachine.apiKey != nil) { [configString appendFormat:@"API Key: %@\n", stateMachine.apiKey]; @@ -412,7 +411,7 @@ - (NSString *)currentConfigurationParameters { NSMutableString *supportedKitsString = [NSMutableString string]; NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self" ascending: YES]; - NSArray *supportedKits = [[[MParticle sharedInstance].kitContainer supportedKits] sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]]; + NSArray *supportedKits = [[[MParticle sharedInstance].kitContainer_PRIVATE supportedKits] sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]]; if (supportedKits != nil) { for (NSNumber *kitID in supportedKits) { [supportedKitsString appendFormat:@"%@\n", kitID]; @@ -420,7 +419,7 @@ - (NSString *)currentConfigurationParameters { } [configString appendFormat:@"Supported Kits: \n%@\n", supportedKitsString]; - NSNumber *environment = [NSNumber numberWithInt:(int)[MPStateMachine environment]]; + NSNumber *environment = [NSNumber numberWithInt:(int)[MPStateMachine_PRIVATE environment]]; [configString appendFormat:@"Environment: %@\n", environment]; return [MPIHasher hashString:configString]; @@ -496,5 +495,37 @@ + (NSString *)stringFromDeviceToken:(NSData *)deviceToken { return [hexString copy]; } ++ (nullable MPResponseConfig *)restore { + NSDictionary *configuration = [[MPIUserDefaults standardUserDefaults] getConfiguration]; + MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration dataReceivedFromServer:NO stateMachine:MParticle.sharedInstance.stateMachine backendController:MParticle.sharedInstance.backendController]; + + return responseConfig; +} + ++ (void)deleteConfig { + [[MPIUserDefaults standardUserDefaults] deleteConfiguration]; +} + ++ (BOOL)isOlderThanConfigMaxAgeSeconds { + BOOL shouldConfigurationBeDeleted = NO; + + MPIUserDefaults *userDefaults = [MPIUserDefaults standardUserDefaults]; + NSNumber *configProvisioned = userDefaults[kMPConfigProvisionedTimestampKey]; + NSNumber *maxAgeSeconds = [[MParticle sharedInstance] configMaxAgeSeconds]; + + if (configProvisioned != nil && maxAgeSeconds != nil && [maxAgeSeconds doubleValue] > 0) { + NSTimeInterval intervalConfigProvisioned = [configProvisioned doubleValue]; + NSTimeInterval intervalNow = [[NSDate date] timeIntervalSince1970]; + NSTimeInterval delta = intervalNow - intervalConfigProvisioned; + shouldConfigurationBeDeleted = delta > [maxAgeSeconds doubleValue]; + } + + if (shouldConfigurationBeDeleted) { + [[MPIUserDefaults standardUserDefaults] deleteConfiguration]; + } + + return shouldConfigurationBeDeleted; +} + @end diff --git a/mParticle-Apple-SDK/Utils/MPMessageBuilder.m b/mParticle-Apple-SDK/Utils/MPMessageBuilder.m index 0955811c2..a00572d6d 100644 --- a/mParticle-Apple-SDK/Utils/MPMessageBuilder.m +++ b/mParticle-Apple-SDK/Utils/MPMessageBuilder.m @@ -13,6 +13,7 @@ #import "MPApplication.h" #import "mParticle.h" #import "MParticleSwift.h" +#import "MPLaunchInfo.h" NSString *const launchInfoStringFormat = @"%@%@%@=%@"; NSString *const kMPHorizontalAccuracyKey = @"acc"; @@ -30,7 +31,7 @@ NSString *const kMPUserIdentityOldValueKey = @"oi"; @interface MParticle () -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @property (nonatomic, strong, nullable) NSString *dataPlanId; @property (nonatomic, strong, nullable) NSNumber *dataPlanVersion; @end @@ -172,8 +173,8 @@ - (instancetype)initWithMessageType:(MPMessageType)messageType session:(MPSessio NSString *presentedViewControllerDescription = nil; NSNumber *mainThreadFlag; if ([NSThread isMainThread]) { - if (![MPStateMachine isAppExtension]) { - UIViewController *presentedViewController = [MPApplication sharedUIApplication].keyWindow.rootViewController.presentedViewController; + if (![MPStateMachine_PRIVATE isAppExtension]) { + UIViewController *presentedViewController = [MPApplication_PRIVATE sharedUIApplication].keyWindow.rootViewController.presentedViewController; presentedViewControllerDescription = presentedViewController ? [[presentedViewController class] description] : nil; } else { presentedViewControllerDescription = @"extension_message"; @@ -270,7 +271,7 @@ - (void)timestamp:(NSTimeInterval)timestamp { // NOTE: Here "sessionFinalized" is really referring to if we are starting a new session on launch, see Facebook event forwarder backend code - (void)stateTransition:(BOOL)sessionFinalized previousSession:(MPSession *)previousSession { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; if (stateMachine.launchInfo.sourceApplication) { _messageDictionary[kMPLaunchSourceKey] = stateMachine.launchInfo.sourceApplication; @@ -309,8 +310,8 @@ - (MPMessage *)build { #if TARGET_OS_IOS == 1 #ifndef MPARTICLE_LOCATION_DISABLE - (void)location:(CLLocation *)location { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; - if ([MPStateMachine runningInBackground] && !stateMachine.locationManager.backgroundLocationTracking) { + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; + if ([MPStateMachine_PRIVATE runningInBackground] && !stateMachine.locationManager.backgroundLocationTracking) { return; } diff --git a/mParticle-Apple-SDK/Utils/MPResponseConfig.h b/mParticle-Apple-SDK/Utils/MPResponseConfig.h deleted file mode 100644 index b6f24062f..000000000 --- a/mParticle-Apple-SDK/Utils/MPResponseConfig.h +++ /dev/null @@ -1,20 +0,0 @@ -#import -#import - -@interface MPResponseConfig : NSObject - -@property (nonatomic, copy, nonnull, readonly) NSDictionary *configuration; - -- (nonnull instancetype)initWithConfiguration:(nonnull NSDictionary *)configuration; -- (nonnull instancetype)initWithConfiguration:(nonnull NSDictionary *)configuration dataReceivedFromServer:(BOOL)dataReceivedFromServer; - -+ (nullable MPResponseConfig *)restore; -+ (void)deleteConfig; -+ (BOOL)isOlderThanConfigMaxAgeSeconds; - -#if TARGET_OS_IOS == 1 -- (void)configureLocationTracking:(nonnull NSDictionary *)locationDictionary; -- (void)configurePushNotifications:(nonnull NSDictionary *)pushNotificationDictionary; -#endif - -@end diff --git a/mParticle-Apple-SDK/Utils/MPResponseConfig.m b/mParticle-Apple-SDK/Utils/MPResponseConfig.m deleted file mode 100644 index fa50df48a..000000000 --- a/mParticle-Apple-SDK/Utils/MPResponseConfig.m +++ /dev/null @@ -1,228 +0,0 @@ -#import "MPResponseConfig.h" -#import "mParticle.h" -#import "MPIConstants.h" -#import "MPILogger.h" -#import "MPKitContainer.h" -#import "MPStateMachine.h" -#import "MPIUserDefaults.h" -#import "MPPersistenceController.h" -#import "MPApplication.h" -#import "MPBackendController.h" - -#if TARGET_OS_IOS == 1 -#ifndef MPARTICLE_LOCATION_DISABLE - #import -#endif -#endif - -@interface MParticle () - -@property (nonatomic, strong, nullable) NSArray *deferredKitConfiguration; -@property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; -@property (nonatomic, strong, readonly) MPKitContainer *kitContainer; -@property (nonatomic, strong, nonnull) MPBackendController *backendController; - -@end - -@implementation MPResponseConfig - -- (instancetype)initWithConfiguration:(NSDictionary *)configuration { - return [self initWithConfiguration:configuration dataReceivedFromServer:YES]; -} - -- (nonnull instancetype)initWithConfiguration:(nonnull NSDictionary *)configuration dataReceivedFromServer:(BOOL)dataReceivedFromServer { - self = [super init]; - if (!self || MPIsNull(configuration)) { - return nil; - } - - _configuration = [configuration copy]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; - - if (dataReceivedFromServer) { - BOOL hasConsentFilters = NO; - - if (!MPIsNull(self->_configuration[kMPRemoteConfigKitsKey])) { - for (NSDictionary *kitDictionary in self->_configuration[kMPRemoteConfigKitsKey]) { - - NSDictionary *consentKitFilter = kitDictionary[kMPConsentKitFilter]; - BOOL hasConsentKitFilter = MPIsNonEmptyDictionary(consentKitFilter); - - BOOL hasRegulationOrPurposeFilters = NO; - - NSDictionary *hashes = kitDictionary[kMPRemoteConfigKitHashesKey]; - - if (MPIsNonEmptyDictionary(hashes)) { - - NSDictionary *regulationFilters = hashes[kMPConsentRegulationFilters]; - NSDictionary *purposeFilters = hashes[kMPConsentPurposeFilters]; - - BOOL hasRegulationFilters = MPIsNonEmptyDictionary(regulationFilters); - BOOL hasPurposeFilters = MPIsNonEmptyDictionary(purposeFilters); - - if (hasRegulationFilters || hasPurposeFilters) { - hasRegulationOrPurposeFilters = YES; - } - - } - - if (hasConsentKitFilter || hasRegulationOrPurposeFilters) { - - hasConsentFilters = YES; - break; - - } - } - } - - - NSNumber *mpid = [MPPersistenceController mpId]; - BOOL hasInitialIdentity = mpid != nil && ![mpid isEqual:@0]; - - BOOL shouldDefer = hasConsentFilters && !hasInitialIdentity; - - if (!shouldDefer) { - dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer configureKits:self->_configuration[kMPRemoteConfigKitsKey]]; - }); - } else { - [MParticle sharedInstance].deferredKitConfiguration = [self->_configuration[kMPRemoteConfigKitsKey] copy]; - } - - } - - [stateMachine configureCustomModules:_configuration[kMPRemoteConfigCustomModuleSettingsKey]]; - [stateMachine configureRampPercentage:_configuration[kMPRemoteConfigRampKey]]; - [stateMachine configureTriggers:_configuration[kMPRemoteConfigTriggerKey]]; - [stateMachine configureAliasMaxWindow:_configuration[kMPRemoteConfigAliasMaxWindow]]; - [stateMachine configureDataBlocking:_configuration[kMPRemoteConfigDataPlanningResults]]; - - stateMachine.allowASR = [_configuration[kMPRemoteConfigAllowASR] boolValue]; - stateMachine.enableDirectRouting = [_configuration[kMPRemoteConfigDirectURLRouting] boolValue]; - - // Exception handling - NSString *auxString = !MPIsNull(_configuration[kMPRemoteConfigExceptionHandlingModeKey]) ? _configuration[kMPRemoteConfigExceptionHandlingModeKey] : nil; - if (auxString) { - stateMachine.exceptionHandlingMode = [auxString copy]; - - [[NSNotificationCenter defaultCenter] postNotificationName:kMPConfigureExceptionHandlingNotification - object:nil - userInfo:nil]; - } - - // Crash size limiting - NSNumber *auxNumber = !MPIsNull(_configuration[kMPRemoteConfigCrashMaxPLReportLength]) ? _configuration[kMPRemoteConfigCrashMaxPLReportLength] : nil; - if (auxNumber != nil) { - stateMachine.crashMaxPLReportLength = auxNumber; - } - - - // Session timeout - auxNumber = _configuration[kMPRemoteConfigSessionTimeoutKey]; - if (auxNumber != nil) { - [MParticle sharedInstance].backendController.sessionTimeout = [auxNumber doubleValue]; - } - -#if TARGET_OS_IOS == 1 - // Push notifications - NSDictionary *auxDictionary = !MPIsNull(_configuration[kMPRemoteConfigPushNotificationDictionaryKey]) ? _configuration[kMPRemoteConfigPushNotificationDictionaryKey] : nil; - if (auxDictionary) { - [self configurePushNotifications:auxDictionary]; - } - - // Location tracking - auxDictionary = !MPIsNull(_configuration[kMPRemoteConfigLocationKey]) ? _configuration[kMPRemoteConfigLocationKey] : nil; - if (auxDictionary) { - [self configureLocationTracking:auxDictionary]; - } -#endif - - return self; -} - -#pragma mark NSSecureCoding -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:_configuration forKey:@"configuration"]; -} - -- (id)initWithCoder:(NSCoder *)coder { - NSDictionary *configuration = [coder decodeObjectOfClass:[NSDictionary class] forKey:@"configuration"]; - self = [[MPResponseConfig alloc] initWithConfiguration:configuration dataReceivedFromServer:NO]; - - return self; -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -#pragma mark Private methods - -#pragma mark Public class methods -+ (nullable MPResponseConfig *)restore { - NSDictionary *configuration = [[MPIUserDefaults standardUserDefaults] getConfiguration]; - MPResponseConfig *responseConfig = [[MPResponseConfig alloc] initWithConfiguration:configuration dataReceivedFromServer:NO]; - - return responseConfig; -} - -+ (void)deleteConfig { - [[MPIUserDefaults standardUserDefaults] deleteConfiguration]; -} - -+ (BOOL)isOlderThanConfigMaxAgeSeconds { - BOOL shouldConfigurationBeDeleted = NO; - - MPIUserDefaults *userDefaults = [MPIUserDefaults standardUserDefaults]; - NSNumber *configProvisioned = userDefaults[kMPConfigProvisionedTimestampKey]; - NSNumber *maxAgeSeconds = [[MParticle sharedInstance] configMaxAgeSeconds]; - - if (configProvisioned != nil && maxAgeSeconds != nil && [maxAgeSeconds doubleValue] > 0) { - NSTimeInterval intervalConfigProvisioned = [configProvisioned doubleValue]; - NSTimeInterval intervalNow = [[NSDate date] timeIntervalSince1970]; - NSTimeInterval delta = intervalNow - intervalConfigProvisioned; - shouldConfigurationBeDeleted = delta > [maxAgeSeconds doubleValue]; - } - - if (shouldConfigurationBeDeleted) { - [[MPIUserDefaults standardUserDefaults] deleteConfiguration]; - } - - return shouldConfigurationBeDeleted; -} - -#pragma mark Public instance methods -#if TARGET_OS_IOS == 1 -- (void)configureLocationTracking:(NSDictionary *)locationDictionary { - NSString *locationMode = locationDictionary[kMPRemoteConfigLocationModeKey]; - [MParticle sharedInstance].stateMachine.locationTrackingMode = locationMode; - -#ifndef MPARTICLE_LOCATION_DISABLE - if ([locationMode isEqualToString:kMPRemoteConfigForceTrue]) { - NSNumber *accurary = locationDictionary[kMPRemoteConfigLocationAccuracyKey]; - NSNumber *minimumDistance = locationDictionary[kMPRemoteConfigLocationMinimumDistanceKey]; - - [[MParticle sharedInstance] beginLocationTracking:[accurary doubleValue] minDistance:[minimumDistance doubleValue] authorizationRequest:MPLocationAuthorizationRequestAlways]; - } else if ([locationMode isEqualToString:kMPRemoteConfigForceFalse]) { - [[MParticle sharedInstance] endLocationTracking]; - } -#endif -} - -- (void)configurePushNotifications:(NSDictionary *)pushNotificationDictionary { - NSString *pushNotificationMode = pushNotificationDictionary[kMPRemoteConfigPushNotificationModeKey]; - [MParticle sharedInstance].stateMachine.pushNotificationMode = pushNotificationMode; - if (![MPStateMachine isAppExtension]) { - UIApplication *app = [MPApplication sharedUIApplication]; - - if ([pushNotificationMode isEqualToString:kMPRemoteConfigForceTrue]) { - [app registerForRemoteNotifications]; - } else if ([pushNotificationMode isEqualToString:kMPRemoteConfigForceFalse]) { - [app unregisterForRemoteNotifications]; - } - } -} -#endif - -@end diff --git a/mParticle-Apple-SDK/Utils/MPResponseConfig.swift b/mParticle-Apple-SDK/Utils/MPResponseConfig.swift new file mode 100644 index 000000000..789fd2654 --- /dev/null +++ b/mParticle-Apple-SDK/Utils/MPResponseConfig.swift @@ -0,0 +1,144 @@ +// +// MPResponseConfig.swift +// mParticle-Apple-SDK +// +// Created by Brandon Stalnaker on 12/2/24. +// + +import Foundation + +@objc public class MPResponseConfig : NSObject { + @objc public private(set) var configuration: [AnyHashable : Any]? + private var stateMachine: MPStateMachine_PRIVATE + private var backendController: MPBackendController_PRIVATE + + @objc public convenience init?(configuration: [AnyHashable : Any], stateMachine: MPStateMachine_PRIVATE, backendController: MPBackendController_PRIVATE) { + self.init(configuration: configuration, dataReceivedFromServer: true, stateMachine: stateMachine, backendController: backendController) + } + + @objc public init?(configuration: [AnyHashable : Any], dataReceivedFromServer: Bool, stateMachine: MPStateMachine_PRIVATE, backendController: MPBackendController_PRIVATE) { + self.configuration = configuration + self.stateMachine = stateMachine + self.backendController = backendController + super.init() + + if self.configuration == nil || self.configuration?.count == 0 { + return nil + } + self.setUp(dataReceivedFromServer: dataReceivedFromServer) + } + + @objc private func setUp(dataReceivedFromServer: Bool) { + if let config = self.configuration { + if dataReceivedFromServer { + var hasConsentFilters = false + + if let configKitDictionary = config[RemoteConfig.kMPRemoteConfigKitsKey] as? [[String : Any]] { + for kitDictionary in configKitDictionary { + let consentKitFilter = kitDictionary[ConsentFiltering.kMPConsentKitFilter] as? [String : Any] + hasConsentFilters = consentKitFilter != nil && consentKitFilter!.count > 0 + var hasRegulationOrPurposeFilters = false + + if let hashes = kitDictionary[RemoteConfig.kMPRemoteConfigKitHashesKey] as? [String : Any], hashes.count > 0 { + if let regulationFilters = hashes[ConsentFiltering.kMPConsentRegulationFilters] as? [String : Any], regulationFilters.count > 0 { + hasRegulationOrPurposeFilters = true + } + if let purposeFilters = hashes[ConsentFiltering.kMPConsentPurposeFilters] as? [String : Any], purposeFilters.count > 0 { + hasRegulationOrPurposeFilters = true + } + } + + if hasConsentFilters || hasRegulationOrPurposeFilters { + hasConsentFilters = true + } + } + } + + var hasInitialIdentity = false + if let mpid = MParticle.sharedInstance().identity.currentUser?.userId, mpid != 0 { + hasInitialIdentity = true + } + + let shouldDefer = hasConsentFilters && !hasInitialIdentity + if !shouldDefer { + DispatchQueue.main.async { + MParticle.sharedInstance().kitContainer_PRIVATE.configureKits(config[RemoteConfig.kMPRemoteConfigKitsKey] as? [[AnyHashable : Any]]) + } + } else { + MParticle.sharedInstance().deferredKitConfiguration_PRIVATE = config[RemoteConfig.kMPRemoteConfigKitsKey] as? [[AnyHashable : Any]] + } + } + + stateMachine.configureCustomModules(config[RemoteConfig.kMPRemoteConfigCustomModuleSettingsKey] as? [[AnyHashable : Any]]) + stateMachine.configureRampPercentage(config[RemoteConfig.kMPRemoteConfigRampKey] as? NSNumber) + stateMachine.configureTriggers(config[RemoteConfig.kMPRemoteConfigTriggerKey] as? [AnyHashable : Any]) + stateMachine.configureAliasMaxWindow(config[RemoteConfig.kMPRemoteConfigAliasMaxWindow] as? NSNumber) + stateMachine.configureDataBlocking(config[RemoteConfig.kMPRemoteConfigDataPlanningResults] as? [AnyHashable : Any]) + + stateMachine.allowASR = config[RemoteConfig.kMPRemoteConfigAllowASR] as? Bool ?? false + stateMachine.enableDirectRouting = config[RemoteConfig.kMPRemoteConfigDirectURLRouting] as? Bool ?? false + + // Exception handling + if let auxString = config[RemoteConfig.kMPRemoteConfigExceptionHandlingModeKey] as? String { + stateMachine.exceptionHandlingMode = auxString + NotificationCenter.default.post(Notification(name: Notifications.kMPConfigureExceptionHandlingNotification)) + } + + // Crash size limiting + if let crashMaxReportLength = config[RemoteConfig.kMPRemoteConfigCrashMaxPLReportLength] as? NSNumber { + stateMachine.crashMaxPLReportLength = crashMaxReportLength + } + + // Session timeout + if let sessionTimeout = config[RemoteConfig.kMPRemoteConfigSessionTimeoutKey] as? NSNumber { + self.backendController.sessionTimeout = sessionTimeout.doubleValue + } + +#if os(iOS) + // Push notifications + if let pushNotificationDictionary = config["pn"] as? [AnyHashable : Any] { + self.configurePushNotifications(pushNotificationDictionary) + } + + // Location tracking + if let locationTrackingDictionary = config["lct"] as? [AnyHashable : Any] { + self.configureLocationTracking(locationTrackingDictionary) + } +#endif + } + } + +#if os(iOS) + @objc public func configureLocationTracking(_ locationDictionary: [AnyHashable : Any]) { + if let locationMode = locationDictionary[RemoteConfig.kMPRemoteConfigLocationModeKey] as? String { + stateMachine.locationTrackingMode = locationMode + +#if !MPARTICLE_LOCATION_DISABLE + if locationMode == RemoteConfig.kMPRemoteConfigForceTrue { + if let accuracy = locationDictionary[RemoteConfig.kMPRemoteConfigLocationAccuracyKey] as? NSNumber, let minimumDistance = locationDictionary[RemoteConfig.kMPRemoteConfigLocationMinimumDistanceKey] as? NSNumber { + MParticle.sharedInstance().beginLocationTracking(accuracy.doubleValue, minDistance: minimumDistance.doubleValue, authorizationRequest: MPLocationAuthorizationRequest.always) + } + } else if locationMode == RemoteConfig.kMPRemoteConfigForceFalse { + MParticle.sharedInstance().endLocationTracking() + } +#endif + } + } + + @objc public func configurePushNotifications(_ pushNotificationDictionary: [AnyHashable : Any]) { + if let pushNotificationMode = pushNotificationDictionary[RemoteConfig.kMPRemoteConfigPushNotificationModeKey] as? String { + stateMachine.pushNotificationMode = pushNotificationMode + if !MPStateMachine_PRIVATE.isAppExtension() { + let app = MPApplication_PRIVATE.sharedUIApplication() + + if pushNotificationMode == RemoteConfig.kMPRemoteConfigForceTrue { + app?.registerForRemoteNotifications() + } else if pushNotificationMode == RemoteConfig.kMPRemoteConfigForceFalse { + app?.unregisterForRemoteNotifications() + } + } + } + } +#endif +} + diff --git a/mParticle-Apple-SDK/Utils/MPUploadBuilder.m b/mParticle-Apple-SDK/Utils/MPUploadBuilder.m index 6a08d3c5d..9bcb1939c 100644 --- a/mParticle-Apple-SDK/Utils/MPUploadBuilder.m +++ b/mParticle-Apple-SDK/Utils/MPUploadBuilder.m @@ -20,7 +20,7 @@ @interface MParticle () @property (nonatomic, strong, readonly) MPPersistenceController *persistenceController; -@property (nonatomic, strong, readonly) MPStateMachine *stateMachine; +@property (nonatomic, strong, readonly) MPStateMachine_PRIVATE *stateMachine; @property (nonatomic, strong, nonnull) MParticleOptions *options; @end @@ -73,7 +73,7 @@ - (nonnull instancetype)initWithMpid:(nonnull NSNumber *)mpid sessionId:(nullabl ltv = @0; } - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; _uploadDictionary = [@{ kMPOptOutKey:@(stateMachine.optOut), @@ -133,7 +133,7 @@ - (NSString *)description { #pragma mark Public instance methods - (void)build:(void (^)(MPUpload *upload))completionHandler { - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; _uploadDictionary[kMPMessageTypeKey] = kMPMessageTypeRequestHeader; _uploadDictionary[kMPmParticleSDKVersionKey] = kMParticleSDKVersion; @@ -149,7 +149,7 @@ - (void)build:(void (^)(MPUpload *upload))completionHandler { } else { // If the info wasn't saved in the session, use the old behavior and grab it now // NOTE: This should only ever happen the first time after upgrading to the new schema if there are old sessions left - MPApplication *application = [[MPApplication alloc] init]; + MPApplication_PRIVATE *application = [[MPApplication_PRIVATE alloc] init]; _uploadDictionary[kMPApplicationInformationKey] = [application dictionaryRepresentation]; } diff --git a/mParticle-Apple-SDK/mParticle.m b/mParticle-Apple-SDK/mParticle.m index b9d8672d3..13aab4d06 100644 --- a/mParticle-Apple-SDK/mParticle.m +++ b/mParticle-Apple-SDK/mParticle.m @@ -1,6 +1,5 @@ #import "mParticle.h" #import "MPAppNotificationHandler.h" -#import "MPBackendController.h" #import "MPConsumerInfo.h" #import "MPDevice.h" #import "MPForwardQueueParameters.h" @@ -9,21 +8,17 @@ #import "MPILogger.h" #import "MPIntegrationAttributes.h" #import "MPKitActivity.h" -#import "MPKitContainer.h" #import "MPKitFilter.h" #import "MPNetworkPerformance.h" -#import "MPNotificationController.h" #import "MPPersistenceController.h" #import "MPSession.h" -#import "MPStateMachine.h" #import "MPIUserDefaults.h" #import "MPIdentityApi.h" -#import "MPApplication.h" #import "MParticleWebView.h" #import "MPDataPlanFilter.h" -#import "MPResponseConfig.h" #import "MParticleSwift.h" #import "MPUpload.h" +#import "MPKitContainer.h" static dispatch_queue_t messageQueue = nil; static void *messageQueueKey = "mparticle message queue key"; @@ -45,7 +40,7 @@ @interface MPIdentityApi () - (void)identifyNoDispatch:(MPIdentityApiRequest *)identifyRequest completion:(nullable MPIdentityApiResultCallback)completion; @end -@interface MPKitContainer () +@interface MPKitContainer_PRIVATE () - (BOOL)kitsInitialized; @end @@ -59,17 +54,16 @@ @interface MParticle() *deferredKitConfiguration; @property (nonatomic, strong) MParticleWebView *webView; @property (nonatomic, strong, nullable) NSString *dataPlanId; @property (nonatomic, strong, nullable) NSNumber *dataPlanVersion; @@ -267,7 +261,7 @@ - (void)setPersistenceMaxAgeSeconds:(NSNumber *)persistenceMaxAgeSeconds { @end -@interface MPBackendController () +@interface MPBackendController_PRIVATE () - (NSMutableArray *> *)userIdentitiesForUserId:(NSNumber *)userId; @@ -280,7 +274,7 @@ @implementation MParticle @synthesize optOut = _optOut; @synthesize persistenceController = _persistenceController; @synthesize stateMachine = _stateMachine; -@synthesize kitContainer = _kitContainer; +@synthesize kitContainer_PRIVATE = _kitContainer_PRIVATE; @synthesize appNotificationHandler = _appNotificationHandler; + (void)initialize { @@ -348,7 +342,7 @@ - (instancetype)init { _trackNotifications = YES; _automaticSessionTracking = YES; _appNotificationHandler = [[MPAppNotificationHandler alloc] init]; - _stateMachine = [[MPStateMachine alloc] init]; + _stateMachine = [[MPStateMachine_PRIVATE alloc] init]; _webView = [[MParticleWebView alloc] init]; return self; @@ -371,7 +365,7 @@ - (NSMutableDictionary *)configSettings { #pragma mark MPBackendControllerDelegate methods - (void)sessionDidBegin:(MPSession *)session { dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(beginSession) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(beginSession) event:nil parameters:nil messageType:MPMessageTypeSessionStart @@ -382,7 +376,7 @@ - (void)sessionDidBegin:(MPSession *)session { - (void)sessionDidEnd:(MPSession *)session { dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(endSession) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(endSession) event:nil parameters:nil messageType:MPMessageTypeSessionEnd @@ -394,7 +388,7 @@ - (void)sessionDidEnd:(MPSession *)session { #pragma mark MPBackendControllerDelegate methods - (void)forwardLogInstall { dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:_cmd + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:_cmd event:nil parameters:nil messageType:MPMessageTypeUnknown @@ -405,7 +399,7 @@ - (void)forwardLogInstall { - (void)forwardLogUpdate { dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:_cmd + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:_cmd event:nil parameters:nil messageType:MPMessageTypeUnknown @@ -425,7 +419,7 @@ - (MPIdentityApi *)identity { } - (MPEnvironment)environment { - return [MPStateMachine environment]; + return [MPStateMachine_PRIVATE environment]; } - (MPILogLevel)logLevel { @@ -452,7 +446,7 @@ - (void)setOptOut:(BOOL)optOut { MPForwardQueueParameters *optOutParameters = [[MPForwardQueueParameters alloc] init]; [optOutParameters addParameter:@(optOut)]; - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(setOptOut:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(setOptOut:) event:nil parameters:optOutParameters messageType:MPMessageTypeOptOut @@ -531,7 +525,7 @@ - (void)startWithOptions:(MParticleOptions *)options { [self.webView startWithCustomUserAgent:options.customUserAgent shouldCollect:options.collectUserAgent defaultAgentOverride:options.defaultAgent]; - _backendController = [[MPBackendController alloc] initWithDelegate:self]; + _backendController = [[MPBackendController_PRIVATE alloc] initWithDelegate:self]; if (options.networkOptions) { self.networkOptions = options.networkOptions; @@ -593,19 +587,19 @@ - (void)startWithOptions:(MParticleOptions *)options { MPILogWarning(@"SDK has been initialized in Production Mode."); } - [MPStateMachine setEnvironment:environment]; + [MPStateMachine_PRIVATE setEnvironment:environment]; [MParticle sharedInstance].stateMachine.automaticSessionTracking = options.automaticSessionTracking; if (options.attStatus != nil) { [self setATTStatus:(MPATTAuthorizationStatus)options.attStatus.integerValue withATTStatusTimestampMillis:options.attStatusTimestampMillis]; } - if ([MPResponseConfig isOlderThanConfigMaxAgeSeconds]) { - [MPResponseConfig deleteConfig]; + if ([MPIUserDefaults isOlderThanConfigMaxAgeSeconds]) { + [MPIUserDefaults deleteConfig]; } - _kitContainer = [[MPKitContainer alloc] init]; - _kitContainer.sideloadedKits = options.sideloadedKits ?: [NSArray array]; - NSUInteger sideLoadedKitsCount = _kitContainer.sideloadedKits.count; + _kitContainer_PRIVATE = [[MPKitContainer_PRIVATE alloc] init]; + _kitContainer_PRIVATE.sideloadedKits = options.sideloadedKits ?: [NSArray array]; + NSUInteger sideLoadedKitsCount = _kitContainer_PRIVATE.sideloadedKits.count; [userDefaults setSideloadedKitsCount:sideLoadedKitsCount]; [self.backendController startWithKey:apiKey @@ -637,13 +631,13 @@ - (void)startWithOptions:(MParticleOptions *)options { MPILogError(@"Identify request failed with error: %@", error); } - NSArray *deferredKitConfiguration = self.deferredKitConfiguration; + NSArray *deferredKitConfiguration = self.deferredKitConfiguration_PRIVATE; if (deferredKitConfiguration != nil && [deferredKitConfiguration isKindOfClass:[NSArray class]]) { dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer configureKits:deferredKitConfiguration]; - weakSelf.deferredKitConfiguration = nil; + [[MParticle sharedInstance].kitContainer_PRIVATE configureKits:deferredKitConfiguration]; + weakSelf.deferredKitConfiguration_PRIVATE = nil; }); } @@ -723,11 +717,11 @@ - (MParticleSession *)currentSession { - (void)resetForSwitchingWorkspaces:(void (^)(void))completion { [MParticle executeOnMessage:^{ // Remove any kits that can't be reconfigured - [self.kitContainer removeKitsFromRegistryInvalidForWorkspaceSwitch]; + [self.kitContainer_PRIVATE removeKitsFromRegistryInvalidForWorkspaceSwitch]; // Clean up kits - [self.kitContainer flushSerializedKits]; - [self.kitContainer removeAllSideloadedKits]; + [self.kitContainer_PRIVATE flushSerializedKits]; + [self.kitContainer_PRIVATE removeAllSideloadedKits]; // Clean up persistence [[MPIUserDefaults standardUserDefaults] resetDefaults]; @@ -774,16 +768,16 @@ - (void)switchWorkspaceWithOptions:(MParticleOptions *)options { #pragma mark Application notifications #if TARGET_OS_IOS == 1 - (NSData *)pushNotificationToken { - if (![MPStateMachine isAppExtension]) { - return [MPNotificationController deviceToken]; + if (![MPStateMachine_PRIVATE isAppExtension]) { + return [MPNotificationController_PRIVATE deviceToken]; } else { return nil; } } - (void)setPushNotificationToken:(NSData *)pushNotificationToken { - if (![MPStateMachine isAppExtension]) { - [MPNotificationController setDeviceToken:pushNotificationToken]; + if (![MPStateMachine_PRIVATE isAppExtension]) { + [MPNotificationController_PRIVATE setDeviceToken:pushNotificationToken]; } } @@ -792,7 +786,7 @@ - (void)didReceiveRemoteNotification:(NSDictionary *)userInfo { return; } - if (![MPStateMachine isAppExtension]) { + if (![MPStateMachine_PRIVATE isAppExtension]) { [[MParticle sharedInstance].appNotificationHandler didReceiveRemoteNotification:userInfo]; } } @@ -802,7 +796,7 @@ - (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { return; } - if (![MPStateMachine isAppExtension]) { + if (![MPStateMachine_PRIVATE isAppExtension]) { [[MParticle sharedInstance].appNotificationHandler didFailToRegisterForRemoteNotificationsWithError:error]; } } @@ -812,7 +806,7 @@ - (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { return; } - if (![MPStateMachine isAppExtension]) { + if (![MPStateMachine_PRIVATE isAppExtension]) { [[MParticle sharedInstance].appNotificationHandler didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; } } @@ -822,7 +816,7 @@ - (void)handleActionWithIdentifier:(NSString *)identifier forRemoteNotification: return; } - if (![MPStateMachine isAppExtension]) { + if (![MPStateMachine_PRIVATE isAppExtension]) { [[MParticle sharedInstance].appNotificationHandler handleActionWithIdentifier:identifier forRemoteNotification:userInfo]; } } @@ -832,7 +826,7 @@ - (void)handleActionWithIdentifier:(nullable NSString *)identifier forRemoteNoti return; } - if (![MPStateMachine isAppExtension]) { + if (![MPStateMachine_PRIVATE isAppExtension]) { [[MParticle sharedInstance].appNotificationHandler handleActionWithIdentifier:identifier forRemoteNotification:userInfo withResponseInfo:responseInfo]; } } @@ -864,8 +858,8 @@ - (BOOL)continueUserActivity:(nonnull NSUserActivity *)userActivity restorationH - (void)reset:(void (^)(void))completion { [MParticle executeOnMessage:^{ - [self.kitContainer flushSerializedKits]; - [self.kitContainer removeAllSideloadedKits]; + [self.kitContainer_PRIVATE flushSerializedKits]; + [self.kitContainer_PRIVATE removeAllSideloadedKits]; [[MPIUserDefaults standardUserDefaults] resetDefaults]; [self.persistenceController resetDatabase]; [MParticle executeOnMain:^{ @@ -905,7 +899,7 @@ - (void)beginTimedEvent:(MPEvent *)event { if (kitEvent) { // Forwarding calls to kits dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(beginTimedEvent:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(beginTimedEvent:) event:kitEvent parameters:nil messageType:MPMessageTypeEvent @@ -931,14 +925,14 @@ - (void)endTimedEvent:(MPEvent *)event { if (kitEvent) { dispatch_async(dispatch_get_main_queue(), ^{ // Forwarding calls to kits - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(endTimedEvent:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(endTimedEvent:) event:kitEvent parameters:nil messageType:MPMessageTypeEvent userInfo:nil ]; - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(logEvent:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(logEvent:) event:kitEvent parameters:nil messageType:MPMessageTypeEvent @@ -978,7 +972,7 @@ - (void)logEvent:(MPBaseEvent *)event { if (kitEvent) { // Forwarding calls to kits dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(logBaseEvent:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(logBaseEvent:) event:kitEvent parameters:nil messageType:kitEvent.messageType @@ -1010,7 +1004,7 @@ - (void)logCustomEvent:(MPEvent *)event { if (kitEvent) { // Forwarding calls to kits dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(logEvent:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(logEvent:) event:kitEvent parameters:nil messageType:MPMessageTypeEvent @@ -1033,13 +1027,13 @@ - (void)logKitBatch:(NSString *)batch { dispatch_async(messageQueue, ^{ dispatch_block_t block = ^{ if (batch) { - if ([MParticle.sharedInstance.kitContainer hasKitBatchingKits]) { + if ([MParticle.sharedInstance.kitContainer_PRIVATE hasKitBatchingKits]) { NSData *finalData = [[NSData alloc] initWithBytes:batch.UTF8String length:batch.length]; NSDictionary *kitBatch = [NSJSONSerialization JSONObjectWithData:finalData options:0 error:nil]; // Forwarding calls to kits dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(logBatch:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(logBatch:) batch:kitBatch kitHandler:^(id _Nonnull kit, NSDictionary * _Nonnull kitBatch, MPKitConfiguration * _Nonnull kitConfiguration) { NSArray *forwardRecords = [kit logBatch:kitBatch]; @@ -1056,7 +1050,7 @@ - (void)logKitBatch:(NSString *)batch { } }; - BOOL kitsInitialized = [MParticle sharedInstance].kitContainer.kitsInitialized; + BOOL kitsInitialized = [MParticle sharedInstance].kitContainer_PRIVATE.kitsInitialized; if (kitsInitialized) { block(); } else { @@ -1100,7 +1094,7 @@ - (void)logScreenEvent:(MPEvent *)event { if (kitEvent) { dispatch_async(dispatch_get_main_queue(), ^{ // Forwarding calls to kits - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(logScreen:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(logScreen:) event:kitEvent parameters:nil messageType:MPMessageTypeScreenView @@ -1150,7 +1144,7 @@ - (void)setATTStatus:(MPATTAuthorizationStatus)status withATTStatusTimestampMill NSNumber *parameter0 = @(status); NSObject *parameter1 = attStatusTimestampMillis ?: [NSNull null]; MPForwardQueueParameters *parameters = [[MPForwardQueueParameters alloc] initWithParameters:@[parameter0, parameter1]]; - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(setATTStatus:withATTStatusTimestampMillis:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(setATTStatus:withATTStatusTimestampMillis:) event:nil parameters:parameters messageType:MPMessageTypeUnknown @@ -1161,7 +1155,7 @@ - (void)setATTStatus:(MPATTAuthorizationStatus)status withATTStatusTimestampMill #pragma mark Attribution - (nullable NSDictionary *)attributionInfo { - return [[MParticle sharedInstance].kitContainer.attributionInfo copy]; + return [[MParticle sharedInstance].kitContainer_PRIVATE.attributionInfo copy]; } #pragma mark Error, Exception, and Crash Handling @@ -1197,7 +1191,7 @@ - (void)leaveBreadcrumb:(NSString *)breadcrumbName eventInfo:(NSDictionary *)e [queueParameters addParameter:message]; [queueParameters addParameter:eventInfo]; - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(logError:eventInfo:) event:nil parameters:queueParameters messageType:MPMessageTypeUnknown userInfo:nil]; + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(logError:eventInfo:) event:nil parameters:queueParameters messageType:MPMessageTypeUnknown userInfo:nil]; } }]; }); @@ -1264,7 +1258,7 @@ - (void)logException:(NSException *)exception topmostContext:(id)topmostContext MPForwardQueueParameters *queueParameters = [[MPForwardQueueParameters alloc] init]; [queueParameters addParameter:exception]; - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(logException:) event:nil parameters:queueParameters messageType:MPMessageTypeUnknown userInfo:nil]; + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(logException:) event:nil parameters:queueParameters messageType:MPMessageTypeUnknown userInfo:nil]; } }]; }); @@ -1316,7 +1310,7 @@ - (void)logCommerceEvent:(MPCommerceEvent *)commerceEvent { MPCommerceEvent *kitEvent = self.dataPlanFilter != nil ? [self.dataPlanFilter transformEventForCommerceEvent:commerceEvent] : commerceEvent; if (kitEvent) { // Forwarding calls to kits - [[MParticle sharedInstance].kitContainer forwardCommerceEventCall:kitEvent]; + [[MParticle sharedInstance].kitContainer_PRIVATE forwardCommerceEventCall:kitEvent]; } else { MPILogDebug(@"Blocked commerce event from kits: %@", commerceEvent); } @@ -1352,7 +1346,7 @@ - (void)logLTVIncrease:(double)increaseAmount eventName:(NSString *)eventName ev if (kitEvent) { dispatch_async(dispatch_get_main_queue(), ^{ // Forwarding calls to kits - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(logLTVIncrease:event:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(logLTVIncrease:event:) event:nil parameters:nil messageType:MPMessageTypeUnknown @@ -1374,7 +1368,7 @@ + (BOOL)registerExtension:(nonnull id)extension { BOOL registrationSuccessful = NO; if ([extension conformsToProtocol:@protocol(MPExtensionKitProtocol)]) { - registrationSuccessful = [MPKitContainer registerKit:(id)extension]; + registrationSuccessful = [MPKitContainer_PRIVATE registerKit:(id)extension]; } return registrationSuccessful; @@ -1419,7 +1413,7 @@ - (nullable NSDictionary *)integrationAttributesForKit:(nonnull NSNumber *)integ - (void)onKitsInitialized:(void(^)(void))block { [MPListenerController.sharedInstance onAPICalled:_cmd parameter1:block]; - BOOL kitsInitialized = [MParticle sharedInstance].kitContainer.kitsInitialized; + BOOL kitsInitialized = [MParticle sharedInstance].kitContainer_PRIVATE.kitsInitialized; if (kitsInitialized) { block(); } else { @@ -1504,7 +1498,7 @@ - (void)setLocation:(CLLocation *)location { MPForwardQueueParameters *queueParameters = [[MPForwardQueueParameters alloc] init]; [queueParameters addParameter:location]; - [[MParticle sharedInstance].kitContainer forwardSDKCall:_cmd + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:_cmd event:nil parameters:queueParameters messageType:MPMessageTypeEvent @@ -1521,7 +1515,7 @@ - (void)beginLocationTracking:(CLLocationAccuracy)accuracy minDistance:(CLLocati - (void)beginLocationTracking:(CLLocationAccuracy)accuracy minDistance:(CLLocationDistance)distanceFilter authorizationRequest:(MPLocationAuthorizationRequest)authorizationRequest { [MPListenerController.sharedInstance onAPICalled:_cmd parameter1:@(accuracy) parameter2:@(distanceFilter)]; - MPStateMachine *stateMachine = [MParticle sharedInstance].stateMachine; + MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; if (stateMachine.optOut) { return; } @@ -1530,7 +1524,7 @@ - (void)beginLocationTracking:(CLLocationAccuracy)accuracy minDistance:(CLLocati if (execStatus == MPExecStatusSuccess) { MPILogDebug(@"Began location tracking with accuracy: %0.0f and distance filter %0.0f", accuracy, distanceFilter); } else { - MPILogError(@"Could not begin location tracking: %@", [MPBackendController execStatusDescription:execStatus]); + MPILogError(@"Could not begin location tracking: %@", [MPBackendController_PRIVATE execStatusDescription:execStatus]); } } @@ -1541,7 +1535,7 @@ - (void)endLocationTracking { if (execStatus == MPExecStatusSuccess) { MPILogDebug(@"Ended location tracking"); } else { - MPILogError(@"Could not end location tracking: %@", [MPBackendController execStatusDescription:execStatus]); + MPILogError(@"Could not end location tracking: %@", [MPBackendController_PRIVATE execStatusDescription:execStatus]); } } #endif // MPARTICLE_LOCATION_DISABLE @@ -1594,7 +1588,7 @@ - (void)setSessionAttribute:(NSString *)key value:(id)value { if (execStatus == MPExecStatusSuccess) { MPILogDebug(@"Set session attribute - %@:%@", key, value); } else { - MPILogError(@"Could not set session attribute - %@:%@\n Reason: %@", key, value, [MPBackendController execStatusDescription:execStatus]); + MPILogError(@"Could not set session attribute - %@:%@\n Reason: %@", key, value, [MPBackendController_PRIVATE execStatusDescription:execStatus]); } }); } @@ -1632,7 +1626,7 @@ - (void)upload { if (execStatus == MPExecStatusSuccess) { MPILogDebug(@"Forcing Upload"); } else { - MPILogError(@"Could not upload data: %@", [MPBackendController execStatusDescription:execStatus]); + MPILogError(@"Could not upload data: %@", [MPBackendController_PRIVATE execStatusDescription:execStatus]); } }); } @@ -1664,7 +1658,7 @@ - (NSString *)surveyURL:(MPSurveyProvider)surveyProvider { __block NSString *surveyURL = nil; dispatch_async(dispatch_get_main_queue(), ^{ - [[MParticle sharedInstance].kitContainer forwardSDKCall:@selector(surveyURLWithUserAttributes:) + [[MParticle sharedInstance].kitContainer_PRIVATE forwardSDKCall:@selector(surveyURLWithUserAttributes:) userAttributes:userAttributes kitHandler:^(id kit, NSDictionary *forwardAttributes, MPKitConfiguration *kitConfig) { FilteredMParticleUser *filteredUser = [[FilteredMParticleUser alloc] initWithMParticleUser:[[[MParticle sharedInstance] identity] currentUser] kitConfiguration:kitConfig]; @@ -1982,7 +1976,7 @@ - (void)logNotificationOpenedWithUserInfo:(nonnull NSDictionary *)userInfo andAc - (void)logNotificationWithUserInfo:(nonnull NSDictionary *)userInfo behavior:(MPUserNotificationBehavior)behavior andActionIdentifier:(nullable NSString *)actionIdentifier { [MPListenerController.sharedInstance onAPICalled:_cmd parameter1:userInfo parameter2:@(behavior)]; - UIApplicationState state = [MPApplication sharedUIApplication].applicationState; + UIApplicationState state = [MPApplication_PRIVATE sharedUIApplication].applicationState; NSString *stateString = state == UIApplicationStateActive ? kMPPushNotificationStateForeground : kMPPushNotificationStateBackground;