From 0382d63370dcb40d8acfb6b261031ca9050ffda3 Mon Sep 17 00:00:00 2001 From: Robert Ing Date: Tue, 31 Mar 2026 14:56:32 -0400 Subject: [PATCH 1/2] feat: Remove BrazeKitCompat from Braze 14 kit, migrate to pure BrazeKit Port the BrazeKitCompat removal from mparticle-apple-integration-appboy (v8.15.0) to the monorepo Braze 14 kit. - Remove BrazeKitCompat imports from source and tests - Add local config key constants replacing ABK* symbols - Use BRZSDKFlavorMparticle instead of hardcoded MPARTICLE enum - Remove #pragma clang diagnostic suppressions - Remove BrazeKitCompat from Package.swift and podspec dependencies Co-Authored-By: Claude Opus 4.6 (1M context) --- Kits/braze/braze-14/Package.swift | 3 +- .../Sources/mParticle-Braze/MPKitBraze.m | 57 +++++++++---------- .../mParticle_BrazeTests.m | 25 ++++---- .../braze/braze-14/mParticle-Braze-14.podspec | 1 - 4 files changed, 41 insertions(+), 45 deletions(-) diff --git a/Kits/braze/braze-14/Package.swift b/Kits/braze/braze-14/Package.swift index 637b6b9b7..14d32fd71 100644 --- a/Kits/braze/braze-14/Package.swift +++ b/Kits/braze/braze-14/Package.swift @@ -32,8 +32,7 @@ let package = Package( dependencies: [ .product(name: "mParticle-Apple-SDK", package: "mParticle-Apple-SDK"), .product(name: "BrazeUI", package: "braze-swift-sdk", condition: .when(platforms: [.iOS])), - .product(name: "BrazeKit", package: "braze-swift-sdk"), - .product(name: "BrazeKitCompat", package: "braze-swift-sdk") + .product(name: "BrazeKit", package: "braze-swift-sdk") ], resources: [.process("PrivacyInfo.xcprivacy")] ), diff --git a/Kits/braze/braze-14/Sources/mParticle-Braze/MPKitBraze.m b/Kits/braze/braze-14/Sources/mParticle-Braze/MPKitBraze.m index 0355d9554..1eb81f3d9 100644 --- a/Kits/braze/braze-14/Sources/mParticle-Braze/MPKitBraze.m +++ b/Kits/braze/braze-14/Sources/mParticle-Braze/MPKitBraze.m @@ -2,11 +2,9 @@ #if TARGET_OS_IOS @import BrazeKit; - @import BrazeKitCompat; @import BrazeUI; #else @import BrazeKit; - @import BrazeKitCompat; #endif static NSString *const eabAPIKey = @"apiKey"; @@ -60,6 +58,14 @@ static NSString *const BGoogleAdUserDataKey = @"$google_ad_user_data"; static NSString *const BGoogleAdPersonalizationKey = @"$google_ad_personalization"; +// Braze configuration option keys used internally by the options dictionary +static NSString *const kMPBrazeConfigEndpoint = @"endpoint"; +static NSString *const kMPBrazeConfigRequestPolicy = @"requestPolicy"; +static NSString *const kMPBrazeConfigFlushInterval = @"flushInterval"; +static NSString *const kMPBrazeConfigSessionTimeout = @"sessionTimeout"; +static NSString *const kMPBrazeConfigTriggerMinimumTimeInterval = @"triggerMinimumTimeInterval"; +static NSString *const kMPBrazeConfigAutomaticLocationCollection = @"automaticLocationCollection"; + #if TARGET_OS_IOS static id inAppMessageControllerDelegate = nil; static BOOL shouldDisableNotificationHandling = NO; @@ -371,20 +377,20 @@ - (id const)providerKitInstance { - (void)start { if (!self->brazeInstanceLocal) { NSDictionary *optionsDict = [self optionsDictionary]; - BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:self.configuration[eabAPIKey] endpoint:optionsDict[ABKEndpointKey]]; - + BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:self.configuration[eabAPIKey] endpoint:optionsDict[kMPBrazeConfigEndpoint]]; + [configuration.api addSDKMetadata:@[BRZSDKMetadata.mparticle]]; - configuration.api.sdkFlavor = ((NSNumber *)optionsDict[ABKSDKFlavorKey]).intValue; - configuration.api.requestPolicy = ((NSNumber *)optionsDict[ABKRequestProcessingPolicyOptionKey]).intValue; - NSNumber *flushIntervalOption = (NSNumber *)optionsDict[ABKFlushIntervalOptionKey] ?: @10; // If not set, use the default 10 seconds specified in Braze SDK header + configuration.api.sdkFlavor = BRZSDKFlavorMparticle; + configuration.api.requestPolicy = ((NSNumber *)optionsDict[kMPBrazeConfigRequestPolicy]).intValue; + NSNumber *flushIntervalOption = (NSNumber *)optionsDict[kMPBrazeConfigFlushInterval] ?: @10; // If not set, use the default 10 seconds specified in Braze SDK header configuration.api.flushInterval = flushIntervalOption.doubleValue < 1.0 ? 1.0 : flushIntervalOption.doubleValue; // Ensure value is above the minimum of 1.0 per run time warning from Braze SDK configuration.api.trackingPropertyAllowList = brazeTrackingPropertyAllowList; - - configuration.sessionTimeout = ((NSNumber *)optionsDict[ABKSessionTimeoutKey]).doubleValue; - - configuration.triggerMinimumTimeInterval = ((NSNumber *)optionsDict[ABKMinimumTriggerTimeIntervalKey]).doubleValue; - - NSNumber *automaticLocationTrackingOption = (NSNumber *)optionsDict[ABKEnableAutomaticLocationCollectionKey]; + + configuration.sessionTimeout = ((NSNumber *)optionsDict[kMPBrazeConfigSessionTimeout]).doubleValue; + + configuration.triggerMinimumTimeInterval = ((NSNumber *)optionsDict[kMPBrazeConfigTriggerMinimumTimeInterval]).doubleValue; + + NSNumber *automaticLocationTrackingOption = (NSNumber *)optionsDict[kMPBrazeConfigAutomaticLocationCollection]; if (automaticLocationTrackingOption != nil && automaticLocationTrackingOption.boolValue && brazeLocationProvider) { configuration.location.automaticLocationCollection = YES; configuration.location.brazeLocationProvider = brazeLocationProvider; @@ -445,7 +451,7 @@ - (void)stop { - (NSMutableDictionary *)optionsDictionary { NSArray *serverKeys = @[@"ABKRequestProcessingPolicyOptionKey", @"ABKFlushIntervalOptionKey", @"ABKSessionTimeoutKey", @"ABKMinimumTriggerTimeIntervalKey"]; - NSArray *brazeKeys = @[ABKRequestProcessingPolicyOptionKey, ABKFlushIntervalOptionKey, ABKSessionTimeoutKey, ABKMinimumTriggerTimeIntervalKey]; + NSArray *configKeys = @[kMPBrazeConfigRequestPolicy, kMPBrazeConfigFlushInterval, kMPBrazeConfigSessionTimeout, kMPBrazeConfigTriggerMinimumTimeInterval]; NSMutableDictionary *optionsDictionary = [[NSMutableDictionary alloc] initWithCapacity:serverKeys.count]; NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; numberFormatter.numberStyle = NSNumberFormatterNoStyle; @@ -454,7 +460,6 @@ - (void)stop { NSString *optionValue = self.configuration[serverKey]; if (optionValue != nil && (NSNull *)optionValue != [NSNull null]) { - NSString *brazeKey = brazeKeys[idx]; NSNumber *numberValue = nil; @try { numberValue = [numberFormatter numberFromString:optionValue]; @@ -462,34 +467,24 @@ - (void)stop { numberValue = nil; } if (numberValue != nil) { - optionsDictionary[brazeKey] = numberValue; + optionsDictionary[configKeys[idx]] = numberValue; } } }]; if (self.host.length) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wincompatible-pointer-types" - optionsDictionary[ABKEndpointKey] = self.host; -#pragma clang diagnostic pop + optionsDictionary[kMPBrazeConfigEndpoint] = self.host; } - + if (optionsDictionary.count == 0) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wincompatible-pointer-types" optionsDictionary = [[NSMutableDictionary alloc] initWithCapacity:serverKeys.count]; } - optionsDictionary[ABKSDKFlavorKey] = @(MPARTICLE); -#pragma clang diagnostic pop - + #if TARGET_OS_IOS - optionsDictionary[ABKEnableAutomaticLocationCollectionKey] = @(YES); + optionsDictionary[kMPBrazeConfigAutomaticLocationCollection] = @(YES); if (self.configuration[@"ABKDisableAutomaticLocationCollectionKey"]) { if ([self.configuration[@"ABKDisableAutomaticLocationCollectionKey"] caseInsensitiveCompare:@"true"] == NSOrderedSame) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wincompatible-pointer-types" - optionsDictionary[ABKEnableAutomaticLocationCollectionKey] = @(NO); -#pragma clang diagnostic pop + optionsDictionary[kMPBrazeConfigAutomaticLocationCollection] = @(NO); } } #endif diff --git a/Kits/braze/braze-14/Tests/mParticle-BrazeTests/mParticle_BrazeTests.m b/Kits/braze/braze-14/Tests/mParticle-BrazeTests/mParticle_BrazeTests.m index 9701d4332..ae045b626 100644 --- a/Kits/braze/braze-14/Tests/mParticle-BrazeTests/mParticle_BrazeTests.m +++ b/Kits/braze/braze-14/Tests/mParticle-BrazeTests/mParticle_BrazeTests.m @@ -3,10 +3,7 @@ @import XCTest; @import OCMock; #if TARGET_OS_IOS - @import BrazeKitCompat; @import BrazeUI; -#else - @import BrazeKitCompat; #endif @interface MPKitBraze () @@ -23,6 +20,14 @@ - (MPKitExecStatus *)setUserAttribute:(NSString *)key value:(NSString *)value; @end +// Keys matching MPKitBraze optionsDictionary +static NSString *const kMPBrazeConfigEndpoint = @"endpoint"; +static NSString *const kMPBrazeConfigRequestPolicy = @"requestPolicy"; +static NSString *const kMPBrazeConfigFlushInterval = @"flushInterval"; +static NSString *const kMPBrazeConfigSessionTimeout = @"sessionTimeout"; +static NSString *const kMPBrazeConfigTriggerMinimumTimeInterval = @"triggerMinimumTimeInterval"; +static NSString *const kMPBrazeConfigAutomaticLocationCollection = @"automaticLocationCollection"; + @interface mParticle_BrazeTests : XCTestCase @end @@ -59,8 +64,7 @@ - (void)testStartwithSimpleConfig { [braze didFinishLaunchingWithConfiguration:kitConfiguration]; - NSDictionary *testOptionsDictionary = @{ABKEnableAutomaticLocationCollectionKey:@(YES), - ABKSDKFlavorKey:@7 + NSDictionary *testOptionsDictionary = @{kMPBrazeConfigAutomaticLocationCollection:@(YES) }; NSDictionary *optionsDictionary = [braze optionsDictionary]; @@ -82,12 +86,11 @@ - (void)testStartwithAdvancedConfig { [braze didFinishLaunchingWithConfiguration:kitConfiguration]; - NSDictionary *testOptionsDictionary = @{ABKEnableAutomaticLocationCollectionKey:@(YES), - ABKSDKFlavorKey:@7, - ABKRequestProcessingPolicyOptionKey: @(1), - ABKFlushIntervalOptionKey: @(2), - ABKSessionTimeoutKey: @(3), - ABKMinimumTriggerTimeIntervalKey: @(4) + NSDictionary *testOptionsDictionary = @{kMPBrazeConfigAutomaticLocationCollection:@(YES), + kMPBrazeConfigRequestPolicy: @(1), + kMPBrazeConfigFlushInterval: @(2), + kMPBrazeConfigSessionTimeout: @(3), + kMPBrazeConfigTriggerMinimumTimeInterval: @(4) }; NSDictionary *optionsDictionary = [braze optionsDictionary]; diff --git a/Kits/braze/braze-14/mParticle-Braze-14.podspec b/Kits/braze/braze-14/mParticle-Braze-14.podspec index af80adb31..04997cfad 100644 --- a/Kits/braze/braze-14/mParticle-Braze-14.podspec +++ b/Kits/braze/braze-14/mParticle-Braze-14.podspec @@ -18,6 +18,5 @@ Pod::Spec.new do |s| s.resource_bundles = { 'mParticle-Braze-14-Privacy' => ['Sources/mParticle-Braze/PrivacyInfo.xcprivacy'] } s.dependency 'mParticle-Apple-SDK', '~> 9.0' s.dependency 'BrazeKit', '~> 14.0' - s.dependency 'BrazeKitCompat', '~> 14.0' s.ios.dependency 'BrazeUI', '~> 14.0' end From 31f0236baea5ec99446397931ab42ca55c9761bf Mon Sep 17 00:00:00 2001 From: Robert Ing Date: Tue, 31 Mar 2026 15:03:28 -0400 Subject: [PATCH 2/2] Add comment explaining ABK to kMPBrazeConfig key mapping Co-Authored-By: Claude Opus 4.6 (1M context) --- Kits/braze/braze-14/Sources/mParticle-Braze/MPKitBraze.m | 1 + 1 file changed, 1 insertion(+) diff --git a/Kits/braze/braze-14/Sources/mParticle-Braze/MPKitBraze.m b/Kits/braze/braze-14/Sources/mParticle-Braze/MPKitBraze.m index 1eb81f3d9..867997fac 100644 --- a/Kits/braze/braze-14/Sources/mParticle-Braze/MPKitBraze.m +++ b/Kits/braze/braze-14/Sources/mParticle-Braze/MPKitBraze.m @@ -449,6 +449,7 @@ - (void)stop { _configuration = nil; } +// This maps the mParticle keys (prefixed with ABK) to the Braze Swift SDK configuration keys (prefixed with kMPBrazeConfig). - (NSMutableDictionary *)optionsDictionary { NSArray *serverKeys = @[@"ABKRequestProcessingPolicyOptionKey", @"ABKFlushIntervalOptionKey", @"ABKSessionTimeoutKey", @"ABKMinimumTriggerTimeIntervalKey"]; NSArray *configKeys = @[kMPBrazeConfigRequestPolicy, kMPBrazeConfigFlushInterval, kMPBrazeConfigSessionTimeout, kMPBrazeConfigTriggerMinimumTimeInterval];