diff --git a/Source/OptableSDK.swift b/Source/OptableSDK.swift index 549d1a9..cb5fb5c 100644 --- a/Source/OptableSDK.swift +++ b/Source/OptableSDK.swift @@ -440,9 +440,10 @@ extension OptableSDK { ATT.advertisingIdentifier != UUID(uuid: uuid_t(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) { let systemIDFA = ATT.advertisingIdentifier.uuidString - // Remove all matching systemIDFA (deduplicate) + // Remove all matching systemIDFA (deduplicate), compared as encoded so case and whitespace don't matter + let systemEID = OptableIdentifier.appleIDFA(systemIDFA).extendedIdentifier ids.removeAll { id in - if case let .appleIDFA(value) = id { return value == systemIDFA } + if case .appleIDFA = id { return id.extendedIdentifier == systemEID } return false } diff --git a/Tests/Unit/OptableSDKHelpersIdentifiersEnrichmentTests.swift b/Tests/Unit/OptableSDKHelpersIdentifiersEnrichmentTests.swift index ea53d53..1f35d67 100644 --- a/Tests/Unit/OptableSDKHelpersIdentifiersEnrichmentTests.swift +++ b/Tests/Unit/OptableSDKHelpersIdentifiersEnrichmentTests.swift @@ -93,6 +93,28 @@ class OptableSDKHelpersIdentifiersEnrichmentTests: XCTestCase { } } + func test_idfa_detection_enabled_enrich_system_idfa_same_as_lowercased_user_idfa_prepend() { + ATT.advertisingIdentifierAvailable_DebugOverride = true + ATT.advertisingIdentifier_DebugOverride = UUID(uuidString: systemIDFA) + + var identifiers = buildIdentifiers() + identifiers.append(.appleIDFA(" " + systemIDFA.lowercased())) + + let sdk = buildSDK() + sdk.config.skipAdvertisingIdDetection = false + sdk.enrichIfNeeded(ids: &identifiers) + + if case let .appleIDFA(value) = identifiers[0] { + XCTAssert(value == systemIDFA, "Prepended IDFA is not the same as system provided") + } else { + XCTFail("System IDFA is not prepended") + } + + if identifiers.count(where: { if case .appleIDFA = $0 { return true } else { return false } }) > 1 { + XCTFail("User IDFA persists. (duplicate)") + } + } + func test_idfa_detection_enabled_enrich_system_idfa_user_idfa_persist() { ATT.advertisingIdentifierAvailable_DebugOverride = true ATT.advertisingIdentifier_DebugOverride = UUID(uuidString: systemIDFA)