[IMPORTANT FIX] Snowplow iOS Tracker 1.7.0 released

We announce Snowplow iOS Tracker 1.7.0

This release fixes an issue causing app rejection due to the fingerprinting caused by the OpenIDFA feature.
To avoid any issue we have completely removed the OpenIDFA identifier and related code.
Also, we changed the policy for enabling the Apple IDFA. On the new version 1.7.0, the IDFA identifier will be enabled only if the developer adds the AdSupport library to the app project and enables the compiler flag SNOWPLOW_IDFA_ENABLED in the build settings.
More details here: IDFA tracking

Note: The previous versions of the tracker (before v.1.7.0) used a different flag SNOWPLOW_NO_IFA needed to disable IDFA feature. Instead, since the version 1.7.0 the IDFA will be enabled only if the SNOWPLOW_IDFA_ENABLED is set.

CHANGELOG

Bug fixes:

  • Fix issue of OpenIDFA causing App Rejection (#575)

1.7.0 is available on Cocoapods.

The project’s source code can be found here.

4 Likes

@Alex_Benini @PaulBoocock How can we capture this requirement the react-native sdk?
Will we have to update/change anything there to get the apps accepted to the appstore?

Hi @Yazan
We’re looking at doing this very shortly. I’ll post an update here when the new release is available.

It’s now available @Yazan

Thanks a lot @PaulBoocock !

1 Like

My IDFA is still missing despite setting up as instructed. Not sure if maybe I misconfigured something?

Hi @teffi , thanks for raising this.

This is weird, I’ve done a few tests but I haven’t been able to replicate the issue.
I see you use Cocoapods so probably you can provide some more information on what is going wrong there.

I think on Cocoapods you should be able to add a couple of breakpoints in SPUtilities.m inside your SnowplowTracker pod source code.
A first one here:

and another one here:

If you hit directly the second breakpoint it means that the preprocessor macros don’t work correctly.

Instead, if you hit the first breakpoint we can exclude the problem of the macros.
If the debugger stops there, we can narrow down the problem even more advancing step by step.
There are some conditions to pass in order to get the IDFA code, in theory you shouldn’t have any issue, but apparently something goes wrong in that block of code.

If you are able to test this that would be very helpful to spot the problem and plan some improvements or fixes in the tracker.
Let me know for any further help or doubt!

1 Like

@Alex_Benini Thanks for the reply. After following your suggestion it seems like macro is working as expected and what causing the problem is isAdvertisingTrackingEnabled that always returns false on my end. I tried commenting out this block of code and now I’m getting the IDFA.

Not sure if the cause is iOS or Xcode version since its working on your end.
I’m running on iOS 14.5.1 Xcode 12.5
https://developer.apple.com/forums/thread/652459

In case this helps, here’s what I quickly put together to resolve the issue at hand.

 if (@available(iOS 14.0, *)) {
        Class trackingManagerClass = NSClassFromString(@"ATTrackingManager");
        if (!trackingManagerClass) return nil;
        
        SEL trackingStatusSelector = NSSelectorFromString(@"trackingAuthorizationStatus");
        if (![trackingManagerClass respondsToSelector:trackingStatusSelector]) return nil;

        //notDetermined = 0, restricted = 1, denied = 2, authorized = 3
        NSInteger authorizationStatus = ((NSInteger (*)(id, SEL))[trackingManagerClass methodForSelector:trackingStatusSelector])(trackingManagerClass, trackingStatusSelector);

        if (authorizationStatus != 3)  return nil;
    }
1 Like

Thanks @teffi , for taking the time to dig on this, your help has been invaluable!
We will proceed to fix the issue in the next version with your suggestions.

1 Like

Hi @teffi , this message just to inform you that we fixed the issue in both releases 2.0.2 and 1.7.1.
Thanks again for reporting and helping us to fix the issue!

1 Like