From 2690c1a466639a69418635f9bfdbe6fcb0c3f942 Mon Sep 17 00:00:00 2001 From: Riley Date: Tue, 26 Aug 2025 11:47:02 -0600 Subject: [PATCH] Fixing main thread runtime warning issue --- .../Classes/Store/SFSDKEventStoreManager.m | 16 +++++++++++----- .../Classes/UserAccount/SFUserAccountManager.m | 16 ++++++++++++++-- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/libs/SalesforceAnalytics/SalesforceAnalytics/Classes/Store/SFSDKEventStoreManager.m b/libs/SalesforceAnalytics/SalesforceAnalytics/Classes/Store/SFSDKEventStoreManager.m index cbf0eaf853..7f6b171381 100644 --- a/libs/SalesforceAnalytics/SalesforceAnalytics/Classes/Store/SFSDKEventStoreManager.m +++ b/libs/SalesforceAnalytics/SalesforceAnalytics/Classes/Store/SFSDKEventStoreManager.m @@ -69,10 +69,12 @@ - (instancetype) initWithStoreDirectory:(NSString *) storeDirectory dataEncrypto // Gets current number of events stored. self.eventCountMutex = [[NSObject alloc] init]; - self.numStoredEvents = 0; - NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.storeDirectory error:nil]; - if (files) { - self.numStoredEvents = files.count; + @synchronized (self.eventCountMutex) { + self.numStoredEvents = 0; + NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.storeDirectory error:nil]; + if (files) { + self.numStoredEvents = files.count; + } } } return self; @@ -198,7 +200,11 @@ - (void) deleteAllEvents { } - (BOOL) shouldStoreEvent { - return (self.isLoggingEnabled && (self.numStoredEvents < self.maxEvents)); + BOOL result; + @synchronized (self.eventCountMutex) { + result = (self.isLoggingEnabled && (self.numStoredEvents < self.maxEvents)); + } + return result; } - (BOOL) isLoggingEnabled { diff --git a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/UserAccount/SFUserAccountManager.m b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/UserAccount/SFUserAccountManager.m index a83089665c..193bcecdec 100644 --- a/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/UserAccount/SFUserAccountManager.m +++ b/libs/SalesforceSDKCore/SalesforceSDKCore/Classes/UserAccount/SFUserAccountManager.m @@ -397,7 +397,15 @@ - (void)kickOffIDPInitiatedLoginFlowForSP:(SFSDKSPConfig *)config statusUpdate:( } - (BOOL)loginWithCompletion:(SFUserAccountManagerSuccessCallbackBlock)completionBlock failure:(SFUserAccountManagerFailureCallbackBlock)failureBlock { - BOOL result = NO; + __block BOOL result = NO; + if (![NSThread isMainThread]) { + dispatch_async(dispatch_get_main_queue(), ^{ + result = [self loginWithCompletion:completionBlock failure:failureBlock]; + }); + + return result; + } + for (UIScene *scene in [SFApplicationHelper sharedApplication].connectedScenes) { result |= [self loginWithCompletion:completionBlock failure:failureBlock scene:scene]; } @@ -1219,7 +1227,11 @@ - (BOOL)handleAdvancedAuthURL:(NSURL *)advancedAuthURL options:(NSDictionary *)o #pragma mark Account management - (NSArray *)allUserAccounts { - return [self.userAccountMap allValues]; + NSArray *accounts = nil; + [_accountsLock lock]; + accounts = [self.userAccountMap allValues]; + [_accountsLock unlock]; + return accounts; } - (NSArray *)allUserIdentities {