From d01287d70c02b79b918215d7e065de452b0f9d9f Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Tue, 10 Mar 2026 12:57:31 -0400 Subject: [PATCH 1/2] fix: Remove duplication --- mParticle-Apple-SDK/MPBackendController.m | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/mParticle-Apple-SDK/MPBackendController.m b/mParticle-Apple-SDK/MPBackendController.m index 02e3cef04..ad25b11d9 100644 --- a/mParticle-Apple-SDK/MPBackendController.m +++ b/mParticle-Apple-SDK/MPBackendController.m @@ -821,17 +821,18 @@ - (void)endSession { } - (void)beginSessionWithIsManual:(BOOL)isManual date:(NSDate *)date { - if (!isManual && !MParticle.sharedInstance.automaticSessionTracking) { + MParticle* mparticle = MParticle.sharedInstance; + if (!isManual && !mparticle.automaticSessionTracking) { return; } @synchronized (self) { - if (_session != nil || [MParticle sharedInstance].stateMachine.optOut) { + MPStateMachine_PRIVATE *stateMachine = mparticle.stateMachine; + if (_session != nil || stateMachine.optOut) { return; } - MPStateMachine_PRIVATE *stateMachine = [MParticle sharedInstance].stateMachine; - MPPersistenceController_PRIVATE *persistence = [MParticle sharedInstance].persistenceController; + MPPersistenceController_PRIVATE *persistence = mparticle.persistenceController; NSNumber *mpId = [MPPersistenceController_PRIVATE mpId]; date = date ?: [NSDate date]; @@ -846,7 +847,12 @@ - (void)beginSessionWithIsManual:(BOOL)isManual date:(NSDate *)date { _session.appInfo = [[[MPApplication_PRIVATE alloc] init] dictionaryRepresentation]; } if (!_session.deviceInfo) { - MPDevice *device = [[MPDevice alloc] initWithStateMachine:[MParticle sharedInstance].stateMachine userDefaults:[MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity] identity:[MParticle sharedInstance].identity]; + MPUserDefaults* userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:stateMachine + backendController:mparticle.backendController + identity:mparticle.identity]; + MPDevice *device = [[MPDevice alloc] initWithStateMachine:stateMachine + userDefaults:userDefaults + identity:mparticle.identity]; _session.deviceInfo = [device dictionaryRepresentationWithMpid:mpId]; } @@ -864,7 +870,9 @@ - (void)beginSessionWithIsManual:(BOOL)isManual date:(NSDate *)date { messageInfo[kMPPreviousSessionLengthKey] = @(previousSessionLength); - MPMessageBuilder *messageBuilder = [[MPMessageBuilder alloc] initWithMessageType:MPMessageTypeSessionStart session:_session messageInfo:messageInfo]; + MPMessageBuilder *messageBuilder = [[MPMessageBuilder alloc] initWithMessageType:MPMessageTypeSessionStart + session:_session + messageInfo:messageInfo]; #if TARGET_OS_IOS == 1 #ifndef MPARTICLE_LOCATION_DISABLE [messageBuilder location:stateMachine.location]; From 70790e1b4bcefbd689d9fb7ee3a838ee2f94611f Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Tue, 10 Mar 2026 13:24:11 -0400 Subject: [PATCH 2/2] Make properties atomic where possilbe Remove call to MPListenerController because it deprecated --- mParticle-Apple-SDK/Data Model/MPSession.h | 22 +++++++++---------- .../Persistence/MPPersistenceController.mm | 2 -- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/mParticle-Apple-SDK/Data Model/MPSession.h b/mParticle-Apple-SDK/Data Model/MPSession.h index bba327482..4d7d9d332 100644 --- a/mParticle-Apple-SDK/Data Model/MPSession.h +++ b/mParticle-Apple-SDK/Data Model/MPSession.h @@ -2,21 +2,21 @@ @interface MPSession : MPDataModelAbstract -@property (nonatomic, strong, nonnull) NSMutableDictionary *attributesDictionary; -@property (nonatomic) NSTimeInterval backgroundTime; -@property (nonatomic, readonly) NSTimeInterval foregroundTime; +@property (atomic, strong, nonnull) NSMutableDictionary *attributesDictionary; +@property (atomic) NSTimeInterval backgroundTime; +@property (atomic, readonly) NSTimeInterval foregroundTime; @property (nonatomic) NSTimeInterval startTime; @property (nonatomic) NSTimeInterval endTime; @property (nonatomic) NSTimeInterval length; -@property (nonatomic, readonly) NSTimeInterval suspendTime; -@property (nonatomic, readonly) uint eventCounter; -@property (nonatomic, readonly) uint numberOfInterruptions; +@property (atomic, readonly) NSTimeInterval suspendTime; +@property (atomic, readonly) uint eventCounter; +@property (atomic, readonly) uint numberOfInterruptions; @property (nonatomic) int64_t sessionId; -@property (nonatomic, readonly) BOOL persisted; -@property (nonatomic, strong, readwrite, nonnull) NSNumber *userId; -@property (nonatomic, strong, readwrite, nonnull) NSString *sessionUserIds; -@property (nonatomic, strong, readwrite, nullable) NSDictionary *appInfo; -@property (nonatomic, strong, readwrite, nullable) NSDictionary *deviceInfo; +@property (atomic, readonly) BOOL persisted; +@property (atomic, strong, readwrite, nonnull) NSNumber *userId; +@property (atomic, strong, readwrite, nonnull) NSString *sessionUserIds; +@property (atomic, strong, readwrite, nullable) NSDictionary *appInfo; +@property (atomic, strong, readwrite, nullable) NSDictionary *deviceInfo; - (nonnull instancetype)initWithStartTime:(NSTimeInterval)timestamp userId:(nonnull NSNumber *)userId; diff --git a/mParticle-Apple-SDK/Persistence/MPPersistenceController.mm b/mParticle-Apple-SDK/Persistence/MPPersistenceController.mm index 8b544f47d..8770940fa 100644 --- a/mParticle-Apple-SDK/Persistence/MPPersistenceController.mm +++ b/mParticle-Apple-SDK/Persistence/MPPersistenceController.mm @@ -1659,8 +1659,6 @@ - (void)saveSession:(MPSession *)session { } session.sessionId = sqlite3_last_insert_rowid(mParticleDB); - - [MPListenerController.sharedInstance onEntityStored:MPDatabaseTableSessions primaryKey:@(session.sessionId) message:session.description]; sqlite3_clear_bindings(preparedStatement); } else {