56

I'm submitting ios game to app store.

xcode gives me error Improper advertising identifier [IDFA] usage. Your app contains the Advertising Identifier [IDFA] API but you have not indicated its usage on the Prepare for Upload page in iTunes Connect.

How to fix this? Any help appritiated.

sssss
  • 571
  • 1
  • 4
  • 5
  • 2
    Some answers suggest removing SDK's that use the IDFA however that is not an option if you are including an ad network that properly implements and uses the IDFA ... Apple's left hand does not know what it's right hand is doing!!! Hopefully they will get it figured out sooner rather than later. – jsherk Apr 10 '14 at 23:41

17 Answers17

43

Everything has come to its usual state now. Simply upload your binary as you've been doing this while, and broadly classify IDFA in two categories:

  1. publisher: You use third-party ad-networks library to display ad. Choose the 1st option in IDFA -> "Serve advertisements within the app". You're a publisher since you show ads, but do not perform advertising for your own app.

  2. Advertiser: You use third-party libraries to track conversions for your app, as well as track 'goals' in your app. You directly do not show ads in your app. Choose the 2nd & 3rd option in IDFA -> "Attribute this app installation to a previously served ad". AND "Attribute an action taken within this app to a previously served advertisement".

  3. Mixed: You track conversions for your app, as well as display ads in your app. Choose all three options.

rishabh
  • 1,155
  • 1
  • 10
  • 17
33

You can upload any application with the same bundleID. When you've done uploading, you can reject binary and next time you change status to Ready to Upload, don't forget check [IDFA].

Nhong Sua
  • 346
  • 2
  • 2
  • 2
    I came across the same issue. know you have to upload your binary and if you get an warning like "you are using the IDFA", your binary will automaticly rejected after a min. You can then select again "ready for upload binary" – zero3nna May 20 '14 at 11:30
22

You have to check "Yes" on the Prepare for Upload page: enter image description here But when you checked "No", you are stuck with this new version on iTunes Connect and cannot reenter the Prepare for Upload page or delete your new version.

At the moment it seems like your app is locked forever on the old version when this error occurs. Apple has to fix this!

Inder Kumar Rathore
  • 39,458
  • 17
  • 135
  • 184
Marko
  • 369
  • 1
  • 5
14
  1. Remove Google Analytics Library folder from your reference (google analytics uses [IDFA])
  2. Remove AdSupport Framework from your reference
  3. Remove iADSupport Framework from your reference
  4. try upload again

This worked for me right now.

by the way, enabling this option does not help us

Community
  • 1
  • 1
DeveloBär
  • 673
  • 8
  • 20
10

According to this article, which profiled a publisher who shared what Apple told them after receiving the same issue.

Apple advised the publisher to check code, including third-party libraries, to remove any incidences of the following:

class: ASIdentifierManager

selector: advertisingIdentifier

framework: AdSupport.framework

I had the same problem, and searched for the above instances... i found a method with them in the Playhaven api, and after i commented that section out i didn't get the error again.

An update of the Playhaven api may have fixed this as well, but i'm not sure... i just opted for the 'quick fix.'.

the swine
  • 10,713
  • 7
  • 58
  • 100
user3518300
  • 101
  • 2
  • For PlayHaven you can go with this temporary solution till they update their sdk: http://stackoverflow.com/a/23309587/860343 – XIII Apr 30 '14 at 05:37
7

You just need to upload any app with the same bundle id and no ad support then reject the binary and check the new ad options yes. Then you can submit your app without a problem.

XIII
  • 2,036
  • 16
  • 25
6

I was also facing this warning while validating app with iTunes connectenter image description here and I was using FacebookSDK.framework which was downloaded from Ref Link. In FBUtility.m I have commented below code and removed Adsupport.Frmaework

+ (NSString *)advertiserID {
NSString *advertiserID = nil;
Class ASIdentifierManagerClass = [FBDynamicFrameworkLoader loadClass:@"ASIdentifierManager" withFramework:@"AdSupport"];
if ([ASIdentifierManagerClass class]) {
    ASIdentifierManager *manager = [ASIdentifierManagerClass sharedManager];
    advertiserID = [[manager advertisingIdentifier] UUIDString];
}
return advertiserID;

} to

+ (NSString *)advertiserID {

return @"";

}

and changed another function in same class FBUtility.m

+ (FBAdvertisingTrackingStatus)advertisingTrackingStatus {

if ([FBSettings restrictedTreatment] == FBRestrictedTreatmentYES) {
    return AdvertisingTrackingDisallowed;
}
FBAdvertisingTrackingStatus status = AdvertisingTrackingUnspecified;
Class ASIdentifierManagerClass = [FBDynamicFrameworkLoader loadClass:@"ASIdentifierManager" withFramework:@"AdSupport"];
if ([ASIdentifierManagerClass class]) {
    ASIdentifierManager *manager = [ASIdentifierManagerClass sharedManager];
    if (manager) {
        status = [manager isAdvertisingTrackingEnabled] ? AdvertisingTrackingAllowed : AdvertisingTrackingDisallowed;
    }
}
return status;

}

to

+ (FBAdvertisingTrackingStatus)advertisingTrackingStatus {

FBAdvertisingTrackingStatus status =AdvertisingTrackingUnspecified;
return status;

}

I have removed that FacebookSDK.framework and downloaded Facebook framework from Ref Link . I have resolve this warning by using this way and I have uploaded app successfully.

And also see this stack question Link to avoid rejection, find and remove unwanted framework.

Community
  • 1
  • 1
ASHISHT
  • 305
  • 1
  • 14
  • The link to the fixed framework isn't available. Can you please provide a new one? I still couldn't have this working. Thanks – Lucas Pereira Dec 05 '14 at 13:45
6

The iTunesConnect site changed the workflow for when you handle this warning. You will need to upload your app with this warning (at least with XCode 5.1.1).

In iTunesConnect, you now select your build after uploading from XCode. After selecting the build, then clicking "Submit for Review", you will get the prompts you previously set when preparing for upload (specifically - "Advertising Identifier").

iDurocher
  • 875
  • 9
  • 11
  • The issue still remaining with the apps which were marked as "Waiting for Upload" before switching to this new interface, you wouldn't get the "Submit for Review" option even if you uploaded your binary. I'm contacting apple and will see what would they suggest. – XIII Sep 05 '14 at 06:52
5

If you select "Yes" for the IDFA in the iTC upload page, be sure to have your AdBlocker switched off in Safari preferences, else you will get the error "You must select how your App uses the IDFA", when you click "Continue", but giving you no option to select that usage.

If your adblocker is switched off and everything works as it should, the HTML page rolls out to show options to select, at the bottom.

RickJansen
  • 1,615
  • 18
  • 24
2

i have the same problem.

Our app just use googleAnalytics/googleMaps libraries and TestFlight library. I'm stuck with a new version on itunes connect with NO flag on IDFA.

We cant remove this libraries because the app will not compile anymore right.

What's the solution? Just create an empty app with the same bundle id and version id, upload to itunes connect and then stop the publishing? Really?

Thanks :)

Matte
  • 139
  • 3
  • 14
  • 1
    Yes the only way you're going to be able to change that IDFA setting is by uploading a binary and rejecting it. Like you said, you can just create an empty project with the same bundle ID and upload that one. – aronspring Apr 29 '14 at 12:10
1

If the issue is only related to google analytics SDK for iOS, you can upgrade it: the new version remove dependencies from AdSupport Framework, and hence from IDFA.

PiXy
  • 621
  • 5
  • 4
1

As a complete detailed answer to what @iDurocher said:
1. Make sure you have at least one active prerelease build after uploading your binary(choose prerelease then make sure that there is one clickable build, note that it takes time for processing maybe half an hour).
2. Get back to the Versions screen and select Build to add the uploaded build.
3. Press Submit for review now then you will be asked about the IDFA.

Alaa Eldin
  • 2,178
  • 4
  • 21
  • 24
  • I had my application, on Prepare for Upload, before the latest update on iTunes was made. Will the prompt, for IDFA still be present, when I select the build for upload ? – Hitesh Sep 15 '14 at 03:58
  • @Hitesh: Yes and they might send you an email as well, everything will be fine when you select the build then choose Submit for review, then you'll find the IDFA option. – Alaa Eldin Sep 15 '14 at 07:13
  • 1
    Thank you very much. Yes, it worked, and the application is well on the App Store. – Hitesh Sep 23 '14 at 06:04
0

Facebook iOS SDK also uses IDFA. As I understand, one should use IDFA only for advertising purposes, according to info in iTunes Connect. I removed it, and it's ok now.

Denis Kutlubaev
  • 15,320
  • 6
  • 84
  • 70
0

I had the same problem and I resolved uploading the app, despite the IDFA warning. Then, the IPA is rejected and you can start over, with "Prepare for Upload" page enabled. Make sure to check "Yes" in the section "Advertising Identifier" section of the page "Prepare for Upload".

0

I had the same problem with Admob (GoogleMobileAds) SDK while validating the app with Xcode.

My solution was:

  1. Distribute the app with Xcode to iTunes Connect

  2. Turn off Adblock in Safari for the iTunes Connect page

  3. The App was declared as invalid because of improper IDFA usage in iTunes Connect

  4. I've got the "Prepare for Upload" Page again

  5. I enabled the Advertising Identifier Usage on this page, et voila

seinfeld
  • 1,686
  • 1
  • 17
  • 18
0

-Reject the binary.

-Upload binary again.

-Check the option “Does this app uses the advertising identifier(IDFA)”

and you are done.

A_Thorne
  • 141
  • 1
  • 12
0

You need to modify the code on MixPanel.m If you are using it.

 - (NSString *)defaultDistinctId
{
    NSString *distinctId = nil;
    if (NSClassFromString(@"ASIdentifierManager")) {
        distinctId = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
    }
    if (!distinctId) {
        NSLog(@"%@ error getting ifa: falling back to uuid", self);
        distinctId = [[NSUUID UUID] UUIDString];
    }
    if (!distinctId) {
        NSLog(@"%@ error getting uuid: no default distinct id could be generated", self);
    }
    return distinctId;

}

to

- (NSString *)defaultDistinctId
{
       return @"";

}

and Comment below lines on collectAutomaticProperties ,collectAutomaticProperties function

//    if (NSClassFromString(@"ASIdentifierManager")) {
//        [p setValue:[[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString] forKey:@"$ios_ifa"];
//    }
Dhanas Manian
  • 504
  • 4
  • 6