My application was simply rejected to use the ad support framework. Which library is responsible?

This is just an update that has not changed anything, due to the cause of the failure. Here is the answer from the permission center:

Reasons License Agreement for PLA 3.3.12

We found that your application uses the iOS Advertising ID, but does not include the functionality of the ads. This does not comply with the terms of the iOS Developer Program License Agreement as required by the App Store Review Guide.

In particular, Section 3.3.12 of the iOS Developer Program License Agreement states:

"You and your applications (and any third parties with whom you have signed an advertising contract) may use the advertising identifier and any information obtained using the advertising identifier only for advertising. The user resets the advertising identifier, then you agree not to combine, "Do not correlate, link, or otherwise link, directly or indirectly, the previous advertising identifier and any information received with reset advertising identifier."

Please check your code - including any third-party libraries - to remove all instances:

class: ASIdentifierManager
selector: ad id
framework: AdSupport.framework

If you plan to include ads in a future version, remove the advertising identifier from your application until you enable the ads features.

To find the ad ID, use the "nm" tool. For information on the nm tool, open a terminal window and enter man nm.

If you don’t have access to the source of the libraries, you can search the compiled binary using the β€œline” or β€œotool” command line tools. The Strings tool lists the methods that the library calls, and otool -ov lists the structures of the Objective-C classes and their specific methods. These methods will help you narrow down the location of the problem code.

The third-party libraries that I use are the latest version of parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight . Does anyone know which library the problem is? Thanks

+79
ios flurry testflight appstore-approval
Jan 31 '14 at 20:07
source share
9 answers

In terminal:

  • Go to the root folder of your project.
  • Type: grep -r advertisingIdentifier . (the point at the end is critical)

This will recursively check each file and indicate the name of the attacker.

(in my case it was Flurry)

+109
Feb 04 '14 at 11:24
source share

Update

Google has released the Google Analytics Services iOS SDK v3.03c, which by default disables the AdSupport.framework dependency.

Full text of the changes for version 3.0.03c (February 19, 2014): https://developers.google.com/analytics/devguides/collection/ios/changelog

Old tent

My problem was in Google Analytics and TestFlight.

For TestFlight, I just upgrade the library to version 2.2.1 ( https://www.testflightapp.com/sdk/ios/release_notes/2.2.1/ ).

But to update Google Analytics, I had to remove the -ObjC flag. But since I use Cocoapods to manage some of the third libraries, I could not just delete it. So I did the following:

1 - the update of libGoogleAnalytics.a to version 3.03a (February 5, 2014) began

2 - then also removed AdSupport.framework

3 - added "-force_load \" $ {PROJECT_DIR} /Source/Library/GoogleAnalyticsServicesiOS_3.03a "in the section" Purpose β†’ Assembly Settings β†’ Other Linker Flags "(Please note that in my GoogleAnalytics project it is inside / Source / Library / folder and you need to set up your own)

But since I cannot remove the ObjC flag, I was looking for how to use the -force_load flag with Cocoapods, then I found two useful links:

1 - https://github.com/CocoaPods/CocoaPods/issues/712

2 - http://www.deanmao.com/2012/12/31/linker-error-using-cocoapods/

To summarize, I changed the -ObjC flag to "-force_load $ (TARGET_BUILD_DIR) /libPods.a" also under "Target β†’ Build Settings β†’ Other Linker Flags"

But then again, when I tried to publish my application, I received an error message telling me that the compiler did not find libPods.a, so I went to "Target β†’ Build Settings β†’ Other Linker Flags β†’ Release" and change this line $ ( TARGET_BUILD_DIR) for $ {BUILT_PRODUCTS_DIR}.

So, my other Linker flags have become similar to the image below. Other Linker Flags

Hope to help someone.

Sorry for my English. =]

+17
Feb 07 '14 at 20:35
source share

For me there were problems with Flurry Analytics and TestFlight.

For TestFlight, it is as simple as updating. Version 2.2.1 will not cause any problems (I checked the use of strings, as Apple suggests)

There is currently no fix for Flurry other than uninstalling Flurry, and contrary to Lou Wade’s suggestion, even if AdSupport.framework is unlinked, your application will be rejected.

Here is the Flurry support answer:

"Thank you for contacting Flurry. We recently found out that Apple has rejected some applications that it considers to use an advertising identifier (IDFA), not including the functionality of ads. Please note that Flurry does not collect IDFA if the application includes AdSupport .framework for advertising features. We are seeking clarification from Apple and we will update our affected customers as we learn more over the next few days. "

Flurry has just released version 4.3.2 of its SDK, which specifically solves this problem.

+13
Feb 07 '14 at 9:59
source share

Turns off Testflight v2.2.0 there was a conflict. Since then, they fixed it according to their change: Consolidate both SDK versions into one which removes all access to ASIdentifierManager

+4
Feb 04 '14 at 22:13
source share

Crashlytics was a problem. Because of this, we had several applications. But I already spoke with Crashlytics, and today they released a new update (version 2.1.6) that fix this problem.

Several libraries have AdSupport.framework, but they do not use them unless they are specifically called. Crashlytics called the framework because it had to check if the application supported ads. And this change was implemented in version 2.1.5

So, if you use crashlytics, this is the most likely reason. To fix this, simply re-archive the application, so crashlytics can use the new version with this fix.

Crashlytics team response: β€œWe just pushed an update for this: can you re-create and run the application with the Mac application open so that it can update your SDK? After that, you will all go well! Keep me posted after resubmitting :)”

PS: This is starting to happen because Apple seems to have changed its ADSupport usage policy.

+4
Feb 06 '14 at 23:07
source share

Earlier, I wrote in the comments, directing people to the commands of the terminal "line" or "otool". However, I really like the suggested answer using grep. So you can try first. My suggestion is to add "git" to this command because it is much faster:

 git grep advertisingIdentifier 

If this does not work, try (as published previously):

 grep -r advertisingIdentifier . 

The following is what I wrote earlier in the comment above, as a guide for terminal commands:

You can search for project files in Xcode or try deleting the AdSupport structure to see what happens with the creation / launch error.

To use a terminal, click Spotlight and enter Terminal. Wait for it to appear as an application in the search results.

In the terminal, type "cd", then a space, and then drag the Xcode build folder from Finder to Terminal. This should automatically enter the name of this folder. Press Enter and it will change the directories (cd) to this folder.

From there, enter strings , then space, then the file name for your library or otool , space and the file name for the library. You should be able to remove TAB to automatically fill in file names.

+3
Sep 18 '14 at 17:11
source share

My application was also rejected with the same error! I detected the appearance of an Identifier advertisement in the latest Facebook SDK (3.12). Perhaps you can check your library for availability using the method below:

I opened FacebookSDK.framework as a library in the terminal and typed the following command

otool -v -s __TEXT __objc_methname FacebookSDK | grep advertisingIdentifier

But I do not know what to do. Was my application rejected due to this link? If so, what if I want to use facebook features in my application?

+1
Feb 04 '14 at 15:05
source share

This is a little more complicated than it seems at first glance. After some experimentation, I found that the AdSupport Framework is even related to direct access to the classes referenced in the AdSupport Framework. Ironically, the [AsIdentifierManager class] , which many third-party libraries use to check whether the AdSupport Framework was bound, will actually lead to the binding of the AdSupport Framework. Obfuscating a class using NSClassFromString(@"AsIdentfierManager") will not automatically snap the AdSupport frame. Of course, most of the time this code will be in third-party libraries, so you will not have much control over it, however, this is what happens.

I built a sample project on GitHub that illustrates this behavior using the Segment.io framework. https://github.com/distefam/AdSupportDemo

+1
Aug 6 '14 at 16:48
source share

Flurry Analytics also uses this API.
Terminal output:

 Binary file ./Lib/Flurry/libFlurry_4.3.0.a matches 

Flurry says the selector is not called if the AdSupport structure is not connected.
So I deleted the framework and tried to send it again.

0
Feb 06 '14 at 21:11
source share



All Articles