diff --git a/UnitTests/MPMessageBuilderTests.m b/UnitTests/MPMessageBuilderTests.m index 6c7caf20a..e3256d8ee 100644 --- a/UnitTests/MPMessageBuilderTests.m +++ b/UnitTests/MPMessageBuilderTests.m @@ -13,7 +13,6 @@ #import "MPTransactionAttributes+Dictionary.h" #import "MPCommerceEvent.h" #import "MPCommerceEvent+Dictionary.h" -#import "NSDictionary+MPCaseInsensitive.h" #import "MParticleSwift.h" #import "MPPersistenceController.h" #import "MPBaseTestCase.h" diff --git a/mParticle-Apple-SDK.xcodeproj/project.pbxproj b/mParticle-Apple-SDK.xcodeproj/project.pbxproj index 75043e4ec..230c20277 100644 --- a/mParticle-Apple-SDK.xcodeproj/project.pbxproj +++ b/mParticle-Apple-SDK.xcodeproj/project.pbxproj @@ -158,7 +158,6 @@ 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 */; }; - 53A79BCE29CDFB2000E7489F /* NSDictionary+MPCaseInsensitive.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B0929CDFB1F00E7489F /* NSDictionary+MPCaseInsensitive.m */; }; 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 */; }; @@ -233,7 +232,6 @@ 53A79C5129CDFB4800E7489F /* MPCommerceEventInstruction.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C2F29CDFB4800E7489F /* MPCommerceEventInstruction.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79C5229CDFB4800E7489F /* MPListenerController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C3029CDFB4800E7489F /* MPListenerController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79C5329CDFB4800E7489F /* MPIdentityApi.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C3129CDFB4800E7489F /* MPIdentityApi.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 53A79C5529CDFB4800E7489F /* NSDictionary+MPCaseInsensitive.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C3329CDFB4800E7489F /* NSDictionary+MPCaseInsensitive.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79C5629CDFB4800E7489F /* MParticleUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C3429CDFB4800E7489F /* MParticleUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79C5829CDFB4800E7489F /* MPCommerceEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C3629CDFB4800E7489F /* MPCommerceEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79C5929CDFB4800E7489F /* MPAliasResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C3729CDFB4800E7489F /* MPAliasResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -338,7 +336,6 @@ 53A79D1E29CE23F700E7489F /* MPAliasResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C3729CDFB4800E7489F /* MPAliasResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79D1F29CE23F700E7489F /* MPConsentState.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C4029CDFB4800E7489F /* MPConsentState.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53A79D2029CE23F700E7489F /* MParticleUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C3429CDFB4800E7489F /* MParticleUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 53A79D2129CE23F700E7489F /* NSDictionary+MPCaseInsensitive.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79C3329CDFB4800E7489F /* NSDictionary+MPCaseInsensitive.h */; settings = {ATTRIBUTES = (Public, ); }; }; 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 */; }; @@ -396,7 +393,6 @@ 53A79D6529CE23F700E7489F /* MPConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A79AB529CDFB1E00E7489F /* MPConnector.h */; }; 53A79D6729CE23F700E7489F /* MPForwardQueueParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B5129CDFB1F00E7489F /* MPForwardQueueParameters.m */; }; 53A79D6829CE23F700E7489F /* MPDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B1529CDFB1F00E7489F /* MPDevice.m */; }; - 53A79D6929CE23F700E7489F /* NSDictionary+MPCaseInsensitive.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B0929CDFB1F00E7489F /* NSDictionary+MPCaseInsensitive.m */; }; 53A79D6C29CE23F700E7489F /* MPURLRequestBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79AB229CDFB1E00E7489F /* MPURLRequestBuilder.m */; }; 53A79D6D29CE23F700E7489F /* MPCustomModulePreference.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79B3129CDFB1F00E7489F /* MPCustomModulePreference.m */; }; 53A79D6E29CE23F700E7489F /* FilteredMPIdentityApiRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A79A9B29CDFB1E00E7489F /* FilteredMPIdentityApiRequest.m */; }; @@ -499,6 +495,8 @@ D3CEDAC92CA2F214001B32DF /* MPLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3CEDAC72CA2F214001B32DF /* MPLogger.swift */; }; D3CEDACB2CB027E1001B32DF /* MPConvertJS.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3CEDACA2CB027E1001B32DF /* MPConvertJS.swift */; }; D3CEDACC2CB027E1001B32DF /* MPConvertJS.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3CEDACA2CB027E1001B32DF /* MPConvertJS.swift */; }; + D3DE31682D4A772100CC537F /* NSDictionary+MPCaseInsensitive.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3DE31672D4A76FE00CC537F /* NSDictionary+MPCaseInsensitive.swift */; }; + D3DE31692D4A772100CC537F /* NSDictionary+MPCaseInsensitive.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3DE31672D4A76FE00CC537F /* NSDictionary+MPCaseInsensitive.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -595,7 +593,6 @@ 53A79B0329CDFB1F00E7489F /* MPStateMachine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStateMachine.m; sourceTree = ""; }; 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 = ""; }; 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 = ""; }; @@ -670,7 +667,6 @@ 53A79C2F29CDFB4800E7489F /* MPCommerceEventInstruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCommerceEventInstruction.h; sourceTree = ""; }; 53A79C3029CDFB4800E7489F /* MPListenerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPListenerController.h; sourceTree = ""; }; 53A79C3129CDFB4800E7489F /* MPIdentityApi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPIdentityApi.h; sourceTree = ""; }; - 53A79C3329CDFB4800E7489F /* NSDictionary+MPCaseInsensitive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+MPCaseInsensitive.h"; sourceTree = ""; }; 53A79C3429CDFB4800E7489F /* MParticleUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MParticleUser.h; sourceTree = ""; }; 53A79C3629CDFB4800E7489F /* MPCommerceEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCommerceEvent.h; sourceTree = ""; }; 53A79C3729CDFB4800E7489F /* MPAliasResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAliasResponse.h; sourceTree = ""; }; @@ -779,6 +775,7 @@ D3CEDAC22C9DAC25001B32DF /* MPDateFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPDateFormatter.swift; sourceTree = ""; }; D3CEDAC72CA2F214001B32DF /* MPLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPLogger.swift; sourceTree = ""; }; D3CEDACA2CB027E1001B32DF /* MPConvertJS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPConvertJS.swift; sourceTree = ""; }; + D3DE31672D4A76FE00CC537F /* NSDictionary+MPCaseInsensitive.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSDictionary+MPCaseInsensitive.swift"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1000,9 +997,9 @@ 5399DDB72CA727E1006526E1 /* MPZip.swift */, 53A79B0229CDFB1F00E7489F /* MPMessageBuilder.m */, D3961CD52CB468DC003B3194 /* NSArray+MPCaseInsensitive.swift */, + D3DE31672D4A76FE00CC537F /* NSDictionary+MPCaseInsensitive.swift */, 53A79B0429CDFB1F00E7489F /* MPIUserDefaults.h */, D3CEDACA2CB027E1001B32DF /* MPConvertJS.swift */, - 53A79B0929CDFB1F00E7489F /* NSDictionary+MPCaseInsensitive.m */, D356E0232CFE08ED0020898D /* MPResponseConfig.swift */, D3CEDAC22C9DAC25001B32DF /* MPDateFormatter.swift */, 53A79B0D29CDFB1F00E7489F /* MPApplication.m */, @@ -1144,7 +1141,6 @@ 53A79C2F29CDFB4800E7489F /* MPCommerceEventInstruction.h */, 53A79C3029CDFB4800E7489F /* MPListenerController.h */, 53A79C3129CDFB4800E7489F /* MPIdentityApi.h */, - 53A79C3329CDFB4800E7489F /* NSDictionary+MPCaseInsensitive.h */, 53A79C3429CDFB4800E7489F /* MParticleUser.h */, 53A79C3629CDFB4800E7489F /* MPCommerceEvent.h */, 53A79C3729CDFB4800E7489F /* MPAliasResponse.h */, @@ -1310,7 +1306,6 @@ 53A79C5929CDFB4800E7489F /* MPAliasResponse.h in Headers */, 53A79C6229CDFB4800E7489F /* MPConsentState.h in Headers */, 53A79C5629CDFB4800E7489F /* MParticleUser.h in Headers */, - 53A79C5529CDFB4800E7489F /* NSDictionary+MPCaseInsensitive.h in Headers */, 53A79C5129CDFB4800E7489F /* MPCommerceEventInstruction.h in Headers */, 53A79C6629CDFB4800E7489F /* MPTransactionAttributes+Dictionary.h in Headers */, 53A79BDC29CDFB2000E7489F /* MPLaunchInfo.h in Headers */, @@ -1402,7 +1397,6 @@ 53A79D1E29CE23F700E7489F /* MPAliasResponse.h in Headers */, 53A79D1F29CE23F700E7489F /* MPConsentState.h in Headers */, 53A79D2029CE23F700E7489F /* MParticleUser.h in Headers */, - 53A79D2129CE23F700E7489F /* NSDictionary+MPCaseInsensitive.h in Headers */, 53A79D2229CE23F700E7489F /* MPCommerceEventInstruction.h in Headers */, 53A79D2329CE23F700E7489F /* MPTransactionAttributes+Dictionary.h in Headers */, 53A79D2529CE23F700E7489F /* MPLaunchInfo.h in Headers */, @@ -1694,7 +1688,6 @@ files = ( 53A79C0F29CDFB2100E7489F /* MPForwardQueueParameters.m in Sources */, 53A79BDA29CDFB2000E7489F /* MPDevice.m in Sources */, - 53A79BCE29CDFB2000E7489F /* NSDictionary+MPCaseInsensitive.m in Sources */, 53A79B7E29CDFB2000E7489F /* MPURLRequestBuilder.m in Sources */, 53A79BF529CDFB2000E7489F /* MPCustomModulePreference.m in Sources */, 530D24852CFF78EB000FE7E3 /* MPUserIdentityChange.swift in Sources */, @@ -1741,6 +1734,7 @@ 53A79B8B29CDFB2000E7489F /* MPBreadcrumb.m in Sources */, D3961CDE2CC0B7E4003B3194 /* NSString+MPPercentEscape.swift in Sources */, D3CEDABE2C9C5B5B001B32DF /* MPGDPRConsent.swift in Sources */, + D3DE31682D4A772100CC537F /* NSDictionary+MPCaseInsensitive.swift in Sources */, 53A79B9A29CDFB2000E7489F /* MPEnums.m in Sources */, 53A79B8029CDFB2000E7489F /* MPNetworkPerformance.m in Sources */, 53A79C0929CDFB2100E7489F /* MPDataPlanFilter.m in Sources */, @@ -1864,7 +1858,6 @@ files = ( 53A79D6729CE23F700E7489F /* MPForwardQueueParameters.m in Sources */, 53A79D6829CE23F700E7489F /* MPDevice.m in Sources */, - 53A79D6929CE23F700E7489F /* NSDictionary+MPCaseInsensitive.m in Sources */, 53A79D6C29CE23F700E7489F /* MPURLRequestBuilder.m in Sources */, 53A79D6D29CE23F700E7489F /* MPCustomModulePreference.m in Sources */, 530D24862CFF78EB000FE7E3 /* MPUserIdentityChange.swift in Sources */, @@ -1911,6 +1904,7 @@ 53A79D9429CE23F700E7489F /* MPConnector.m in Sources */, D3961CDF2CC0B7E4003B3194 /* NSString+MPPercentEscape.swift in Sources */, 53A79D9529CE23F700E7489F /* MPBreadcrumb.m in Sources */, + D3DE31692D4A772100CC537F /* NSDictionary+MPCaseInsensitive.swift in Sources */, D3CEDABF2C9C5B5B001B32DF /* MPGDPRConsent.swift in Sources */, 53A79D9629CE23F700E7489F /* MPEnums.m in Sources */, 53A79D9729CE23F700E7489F /* MPNetworkPerformance.m in Sources */, diff --git a/mParticle-Apple-SDK/Ecommerce/MPCommerceEvent.mm b/mParticle-Apple-SDK/Ecommerce/MPCommerceEvent.mm index f8723f742..ff7de384a 100644 --- a/mParticle-Apple-SDK/Ecommerce/MPCommerceEvent.mm +++ b/mParticle-Apple-SDK/Ecommerce/MPCommerceEvent.mm @@ -10,9 +10,9 @@ #import "MPEnums.h" #import "MPEvent.h" #import "MPCommerceEventInstruction.h" -#import "NSDictionary+MPCaseInsensitive.h" #import "mParticle.h" #import "MPILogger.h" +#import "MParticleSwift.h" #import // Internal keys diff --git a/mParticle-Apple-SDK/Ecommerce/MPProduct.m b/mParticle-Apple-SDK/Ecommerce/MPProduct.m index b0ee06c10..02853cbab 100644 --- a/mParticle-Apple-SDK/Ecommerce/MPProduct.m +++ b/mParticle-Apple-SDK/Ecommerce/MPProduct.m @@ -1,7 +1,6 @@ #import "MPProduct.h" #import "MParticleSwift.h" #import "MPIConstants.h" -#import "NSDictionary+MPCaseInsensitive.h" #import "MPILogger.h" #import "mParticle.h" diff --git a/mParticle-Apple-SDK/Ecommerce/MPPromotion.m b/mParticle-Apple-SDK/Ecommerce/MPPromotion.m index 667017735..928e3f19d 100644 --- a/mParticle-Apple-SDK/Ecommerce/MPPromotion.m +++ b/mParticle-Apple-SDK/Ecommerce/MPPromotion.m @@ -1,6 +1,5 @@ #import "MPPromotion.h" #import "MPIConstants.h" -#import "NSDictionary+MPCaseInsensitive.h" #import "MParticleSwift.h" // Internal keys diff --git a/mParticle-Apple-SDK/Ecommerce/MPTransactionAttributes.m b/mParticle-Apple-SDK/Ecommerce/MPTransactionAttributes.m index 0c3dcbf14..6b3b35a9a 100644 --- a/mParticle-Apple-SDK/Ecommerce/MPTransactionAttributes.m +++ b/mParticle-Apple-SDK/Ecommerce/MPTransactionAttributes.m @@ -1,6 +1,5 @@ #import "MPTransactionAttributes.h" #import "MParticleSwift.h" -#import "NSDictionary+MPCaseInsensitive.h" #import "MPILogger.h" #import "mParticle.h" diff --git a/mParticle-Apple-SDK/Include/NSDictionary+MPCaseInsensitive.h b/mParticle-Apple-SDK/Include/NSDictionary+MPCaseInsensitive.h deleted file mode 100644 index d9ed06d13..000000000 --- a/mParticle-Apple-SDK/Include/NSDictionary+MPCaseInsensitive.h +++ /dev/null @@ -1,9 +0,0 @@ -#import - -@interface NSDictionary(MPCaseInsensitive) - -- (nullable NSString *)caseInsensitiveKey:(nonnull NSString *)key; -- (nullable id)valueForCaseInsensitiveKey:(nonnull NSString *)key; -- (nonnull NSDictionary *)transformValuesToString; - -@end diff --git a/mParticle-Apple-SDK/Include/mParticle.h b/mParticle-Apple-SDK/Include/mParticle.h index 5fda36b83..b78d76012 100644 --- a/mParticle-Apple-SDK/Include/mParticle.h +++ b/mParticle-Apple-SDK/Include/mParticle.h @@ -12,7 +12,6 @@ #import "MPPromotion.h" #import "MPTransactionAttributes.h" #import "MPTransactionAttributes+Dictionary.h" -#import "NSDictionary+MPCaseInsensitive.h" #import "MPIdentityApi.h" #import "MPKitAPI.h" #import "MPConsentState.h" diff --git a/mParticle-Apple-SDK/Kits/MPKitContainer.mm b/mParticle-Apple-SDK/Kits/MPKitContainer.mm index af2ba6896..ee6aaa36b 100644 --- a/mParticle-Apple-SDK/Kits/MPKitContainer.mm +++ b/mParticle-Apple-SDK/Kits/MPKitContainer.mm @@ -17,7 +17,6 @@ #import "MPPromotion+Dictionary.h" #import "MPProduct.h" #import "MPProduct+Dictionary.h" -#import "NSDictionary+MPCaseInsensitive.h" #import "MPIUserDefaults.h" #import "MPConsumerInfo.h" #import "MPForwardQueueItem.h" diff --git a/mParticle-Apple-SDK/MPBackendController.m b/mParticle-Apple-SDK/MPBackendController.m index f3910b443..9403382a3 100644 --- a/mParticle-Apple-SDK/MPBackendController.m +++ b/mParticle-Apple-SDK/MPBackendController.m @@ -14,7 +14,6 @@ #import "MPMessageBuilder.h" #import "MPEvent.h" #import "MParticleUserNotification.h" -#import "NSDictionary+MPCaseInsensitive.h" #import "MPUploadBuilder.h" #import "MPILogger.h" #import "MPConsumerInfo.h" diff --git a/mParticle-Apple-SDK/Utils/MPMessageBuilder.m b/mParticle-Apple-SDK/Utils/MPMessageBuilder.m index eec2c2625..cff22f89d 100644 --- a/mParticle-Apple-SDK/Utils/MPMessageBuilder.m +++ b/mParticle-Apple-SDK/Utils/MPMessageBuilder.m @@ -7,7 +7,6 @@ #import "MPCommerceEvent.h" #import "MPCommerceEvent+Dictionary.h" #import "MPILogger.h" -#import "NSDictionary+MPCaseInsensitive.h" #import "MPPersistenceController.h" #import "MPApplication.h" #import "mParticle.h" diff --git a/mParticle-Apple-SDK/Utils/NSDictionary+MPCaseInsensitive.m b/mParticle-Apple-SDK/Utils/NSDictionary+MPCaseInsensitive.m deleted file mode 100644 index 1ebd9bdcf..000000000 --- a/mParticle-Apple-SDK/Utils/NSDictionary+MPCaseInsensitive.m +++ /dev/null @@ -1,93 +0,0 @@ -#import "NSDictionary+MPCaseInsensitive.h" -#import "MParticleSwift.h" -#import "MPILogger.h" -#import "mParticle.h" - -@implementation NSDictionary(MPCaseInsensitive) - -- (NSString *)caseInsensitiveKey:(NSString *)key { - __block NSString *localKey = nil; - - @try { - NSString *lowerCaseKey = [key lowercaseString]; - NSArray *keys = [self allKeys]; - [keys enumerateObjectsWithOptions:NSEnumerationConcurrent - usingBlock:^(NSString *aKey, NSUInteger idx, BOOL *stop) { - if ([lowerCaseKey isEqualToString:[aKey lowercaseString]]) { - localKey = aKey; - *stop = YES; - } - }]; - } @catch (NSException *exception) { - MPILogError(@"Exception retrieving case insentitive key: %@", [exception reason]); - } - - if (!localKey) { - localKey = key; - } - - return localKey; -} - -- (id)valueForCaseInsensitiveKey:(NSString *)key { - __block id value = nil; - - @try { - NSString *lowerCaseKey = [key lowercaseString]; - NSArray *keys = [self allKeys]; - [keys enumerateObjectsWithOptions:NSEnumerationConcurrent - usingBlock:^(NSString *aKey, NSUInteger idx, BOOL *stop) { - if ([lowerCaseKey isEqualToString:[aKey lowercaseString]]) { - value = self[aKey]; - *stop = YES; - } - }]; - } @catch (NSException *exception) { - MPILogError(@"Exception retrieving case insentitive value: %@", [exception reason]); - } - - return value; -} - -- (NSDictionary *)transformValuesToString { - NSDictionary *originalDictionary = self; - __block NSMutableDictionary *transformedDictionary = [[NSMutableDictionary alloc] initWithCapacity:originalDictionary.count]; - Class NSStringClass = [NSString class]; - Class NSNumberClass = [NSNumber class]; - - [originalDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - if ([obj isKindOfClass:NSStringClass]) { - transformedDictionary[key] = obj; - } else if ([obj isKindOfClass:NSNumberClass]) { - NSNumber *numberAttribute = (NSNumber *)obj; - - if (numberAttribute == (void *)kCFBooleanFalse || numberAttribute == (void *)kCFBooleanTrue) { - transformedDictionary[key] = [numberAttribute boolValue] ? @"true" : @"false"; - } else { - transformedDictionary[key] = [numberAttribute stringValue]; - } - } else if ([obj isKindOfClass:[NSDate class]]) { - transformedDictionary[key] = [MPDateFormatter stringFromDateRFC3339:obj]; - } else if ([obj isKindOfClass:[NSData class]] && [(NSData *)obj length] > 0) { - transformedDictionary[key] = [[NSString alloc] initWithData:obj encoding:NSUTF8StringEncoding]; - } else if ([obj isKindOfClass:[NSDictionary class]]) { - transformedDictionary[key] = [obj description]; - } else if ([obj isKindOfClass:[NSMutableDictionary class]]) { - transformedDictionary[key] = [obj description]; - } else if ([obj isKindOfClass:[NSArray class]]) { - transformedDictionary[key] = [obj description]; - } else if ([obj isKindOfClass:[NSMutableArray class]]) { - transformedDictionary[key] = [obj description]; - } else if ([obj isKindOfClass:[NSNull class]]) { - transformedDictionary[key] = [NSNull null]; - } else { - MPILogError(@"Data type is not supported as an attribute value: %@ - %@", obj, [[obj class] description]); - NSAssert([obj isKindOfClass:[NSString class]], @"Data type is not supported as an attribute value"); - return; - } - }]; - - return (NSDictionary *)transformedDictionary; -} - -@end diff --git a/mParticle-Apple-SDK/Utils/NSDictionary+MPCaseInsensitive.swift b/mParticle-Apple-SDK/Utils/NSDictionary+MPCaseInsensitive.swift new file mode 100644 index 000000000..ae8a8abbb --- /dev/null +++ b/mParticle-Apple-SDK/Utils/NSDictionary+MPCaseInsensitive.swift @@ -0,0 +1,141 @@ +// +// NSDictionary+MPCaseInsensitive.swift +// mParticle-Apple-SDK +// +// Created by Brandon Stalnaker on 1/29/25. +// + +import Foundation +public extension NSDictionary { + + @objc func caseInsensitiveKey(_ key: String) -> String? { + var localKey = key + + self.allKeys.forEach { keyValue in + if let stringKey = keyValue as? String, stringKey.caseInsensitiveCompare(key) == .orderedSame { + localKey = stringKey + } + } + return localKey + } + + @objc func value(forCaseInsensitiveKey key: String) -> Any? { + var value : Any? + + self.allKeys.forEach { keyValue in + if let stringKey = keyValue as? String, stringKey.caseInsensitiveCompare(key) == .orderedSame { + value = self[stringKey] + } + } + + return value + } + + @objc func transformValuesToString() -> [String : Any] { + let transformedDictionary: [String : Any] = self.reduce(into: [:]) { result, element in + let key = element.key as! String + if let stringValue = element.value as? String { + result[key] = stringValue + } else if let stringValue = element.value as? NSString { + result[key] = stringValue + } else if let numberValue = element.value as? NSNumber { + result[key] = numberValue.stringValue + } else if let boolValue = element.value as? Bool { + result[key] = boolValue ? "true" : "false" + } else if let dateValue = element.value as? Date { + result[key] = MPDateFormatter.string(fromDateRFC1123: dateValue) + } else if let dateValue = element.value as? NSDate { + result[key] = MPDateFormatter.string(fromDateRFC1123: dateValue as Date) + } else if let dataValue = element.value as? Data, dataValue.count > 0 { + result[key] = String.init(data: dataValue, encoding: .utf8) + } else if let dataValue = element.value as? NSData, dataValue.length > 0 { + result[key] = String.init(data: dataValue as Data, encoding: .utf8) + } else if let dictValue = element.value as? [String : Any] { + result[key] = dictValue.description + } else if let dictValue = element.value as? NSDictionary { + result[key] = dictValue.description + } else if let dictValue = element.value as? NSMutableDictionary { + result[key] = dictValue.description + } else if let arrayValue = element.value as? [Any] { + result[key] = arrayValue.description + } else if let arrayValue = element.value as? NSArray { + result[key] = arrayValue.description + } else if let arrayValue = element.value as? NSMutableArray { + result[key] = arrayValue.description + } else if element.value is NSNull { + result[key] = "null" + } else { + MPLog.warning("Data type is not supported as an attribute value: \(type(of: element.value)) for key \(key)") + } + } + + return transformedDictionary + } +} + +extension Dictionary { + + public func caseInsensitiveKey(_ key: String) -> String? { + var localKey = key + + self.keys.forEach { keyValue in + if let stringKey = keyValue as? String, stringKey.caseInsensitiveCompare(key) == .orderedSame { + localKey = stringKey + } + } + return localKey + } + + public func value(forCaseInsensitiveKey key: String) -> Any? { + var value : Any? + + self.keys.forEach { keyValue in + if let stringKey = keyValue as? String, stringKey.caseInsensitiveCompare(key) == .orderedSame { + value = self[keyValue] + } + } + + return value + } + + public func transformValuesToString() -> [String : Any] { + let transformedDictionary: [String : Any] = self.reduce(into: [:]) { result, element in + let key = element.key as! String + if let stringValue = element.value as? String { + result[key] = stringValue + } else if let stringValue = element.value as? NSString { + result[key] = stringValue + } else if let numberValue = element.value as? NSNumber { + result[key] = numberValue.stringValue + } else if let boolValue = element.value as? Bool { + result[key] = boolValue ? "true" : "false" + } else if let dateValue = element.value as? Date { + result[key] = MPDateFormatter.string(fromDateRFC1123: dateValue) + } else if let dateValue = element.value as? NSDate { + result[key] = MPDateFormatter.string(fromDateRFC1123: dateValue as Date) + } else if let dataValue = element.value as? Data, dataValue.count > 0 { + result[key] = String.init(data: dataValue, encoding: .utf8) + } else if let dataValue = element.value as? NSData, dataValue.length > 0 { + result[key] = String.init(data: dataValue as Data, encoding: .utf8) + } else if let dictValue = element.value as? [String : Any] { + result[key] = dictValue.description + } else if let dictValue = element.value as? NSDictionary { + result[key] = dictValue.description + } else if let dictValue = element.value as? NSMutableDictionary { + result[key] = dictValue.description + } else if let arrayValue = element.value as? [Any] { + result[key] = arrayValue.description + } else if let arrayValue = element.value as? NSArray { + result[key] = arrayValue.description + } else if let arrayValue = element.value as? NSMutableArray { + result[key] = arrayValue.description + } else if element.value is NSNull { + result[key] = "null" + } else { + MPLog.warning("Data type is not supported as an attribute value: \(type(of: element.value)) for key \(key)") + } + } + + return transformedDictionary + } +}