We found that your app uses the iOS Advertising Identifier but does not include ad functionality.

Twice now I’ve had my binary rejected because of the title reason. From Apple:

**We found that your app uses the iOS Advertising Identifier but does not include ad functionality. This does not comply with the terms of the iOS Developer Program License Agreement, as required by the App Store Review Guidelines.

Specifically, section 3.3.12 of the iOS Developer Program License Agreement states:

“You and Your Applications (and any third party with whom you have contracted to serve advertising) may use the Advertising Identifier, and any information obtained through the use of the Advertising Identifier, only for the purpose of serving advertising. If a user resets the Advertising Identifier, then You agree not to combine, correlate, link or otherwise associate, either directly or indirectly, the prior Advertising Identifier and any derived information with the reset Advertising Identifier.”

Note: iAd does not use the AdSupport framework, ASIdentifierManager, or the Advertising Identifier. Therefore they are not required for iAd implementations and should not be included in your app for iAd support.

If your app is serving ads, please:

  • Ensure that you have tested your app on a device, not just the simulator, and that you have removed all previous versions of your app prior to testing

  • Provide us the steps to locate ads in your app

If your app does not serve ads, please check your code - including any third-party libraries - to remove any instances of:

class: ASIdentifierManager
selector: advertisingIdentifier
framework: AdSupport.framework**

This app does not use ads.

This app does not have any plug-ins.

When I searched in files it came up with “advertisingIdentifier”, although a hex dump didn’t find this string. When I used the Xcode nm utility to dump globals it appears maybe some ad-related stuff is being included ??:

000d0b40 T _CoronaEventAdsRequestName

000f5bcc T _CoronaPluginLuaLoad_CoronaProvider_ads
000f5c64 T _CoronaPluginLuaLoad_CoronaProvider_analytics
000f5ce0 T _CoronaPluginLuaLoad_CoronaProvider_gameNetwork
000f5d78 T _CoronaPluginLuaLoad_CoronaProvider_licensing
000f5bb0 T _CoronaPluginLuaLoad_ads

000f5c38 T __ZN6Corona3Lua4OpenIXadL_Z23CoronaPluginLuaLoad_adsEEEEiP9lua_State

000f5c28 T __ZN6Corona3Lua4OpenIXadL_Z38CoronaPluginLuaLoad_CoronaProvider_adsEEEEiP9lua_State

000f5be8 T _luaopen_ads

I don’t know what else I can do to resolve this. I’ve tried build 2015.2571 and same binary rejection.

PLEASE HELP!

Can you post your build.settings file here?

UPDATE 1: When I use the “strings” tool (lists the methods that the library calls) I get this entry from my binary:

iosAdvertisingIdentifier
 

I think whatever is creating that is the cause Apple is rejecting my binary.


My build.settings:

– Supported values for orientation:
– portrait, portraitUpsideDown, landscapeLeft, landscapeRight

settings = {
    orientation = {
            default = “portrait”,
            supported = { “portrait”, }
    },

    iphone = {
       plist = {
            UIViewControllerBasedStatusBarAppearance = false,
            UIStatusBarHidden = true,
            UIPrerenderedIcon = true, – set to false for “shine” overlay
            UIApplicationExitsOnSuspend = true,
            CFBundleIconFiles = {
                “Icon.png”,
                “Icon@2x.png”,
                “Icon-60.png”,
                “Icon-60@2x.png”,
                “Icon-60@3x.png”,
                “Icon-72.png”,
                “Icon-72@2x.png”,
                “Icon-76.png”,
                “Icon-76@2x.png”,
                “Icon-Small-50.png”,
                “Icon-Small-50@2x.png”,
                “Icon-Small-40.png”,
                “Icon-Small-40@2x.png”,
                “Icon-Small-40@3x.png”,
                “Icon-Small.png”,
                “Icon-Small@2x.png”,
                “Icon-Small@3x.png”
            },
            UILaunchImages = {
                {  --iPhone 4
                    [“UILaunchImageMinimumOSVersion”] = “7.0”,
                    [“UILaunchImageName”] = “Default”,
                    [“UILaunchImageOrientation”] = “Portrait”,
                    [“UILaunchImageSize”] = “{320, 480}”
                },
                {  --iPhone 5
                    [“UILaunchImageMinimumOSVersion”] = “7.0”,
                    [“UILaunchImageName”] = “Default-568h”,
                    [“UILaunchImageOrientation”] = “Portrait”,
                    [“UILaunchImageSize”] = “{320, 568}”
                },
                {  --iPad portrait
                    [“UILaunchImageMinimumOSVersion”] = “7.0”,
                    [“UILaunchImageName”] = “Default-Portrait”,
                    [“UILaunchImageOrientation”] = “Portrait”,
                    [“UILaunchImageSize”] = “{768, 1024}”
                },
                {  --iPhone 6
                    [“UILaunchImageMinimumOSVersion”] = “8.0”,
                    [“UILaunchImageName”] = “Default-667h”,
                    [“UILaunchImageOrientation”] = “Portrait”,
                    [“UILaunchImageSize”] = “{375, 667}”
                },
                {  --iPhone 6 Plus portrait
                    [“UILaunchImageMinimumOSVersion”] = “8.0”,
                    [“UILaunchImageName”] = “Default-736h”,
                    [“UILaunchImageOrientation”] = “Portrait”,
                    [“UILaunchImageSize”] = “{414, 736}”
                }
            },
        },
    },
}
 

I’m stumped.

Maybe Apple have started to implement some new procedures that triggers false positives regarding their AdSupport framework.

One interesting thing to note is that I took one of my paid apps (that was approved in January), and ran it though “strings”, and it also found references to iosAdvertisingIdentifier and iosIdentifierForVendor. I know for a fact that the AdSupport framework isn’t linked as it’s an Enterprise project and I have full access to the Xcode project. I double-checked the project and the AdSupport framework isn’t there.

Nevertheless the strings are there in the binary, and maybe Apple has recently started to pick up on those strings.

I checked with another non-Corona paid app (a Swift project approved in December), and ran the binary though “strings” and found no references to the iosAdvertisingIdentifier. 

It seems as if Corona compiled projects get these strings in their binaries for some reason, and Apple has started to pick these false positives up.

Thanks for verify this ingemar. If this is a new policy of Apple then Corona is worthless for non-ad apps for iOS as long as these identifiers are injected into the code even when not used.

How about this Corona Staff?

I’d also appreciate a response from Corona staff. I don’t have ads in my app, and the reports above are concerning.

This is the first we have heard of this and it’s been reported to engineering.  Apple does change their processing from time to time and maybe they’ve decided to trigger on other things.  Give us a little time to investigate this.

Rob

Have you questioned Apple on this? We’ve observed that Apple periodically breaks their filters, resulting in false positives being flagged.

In particular:

  1. We do not reference advertisingIdentifier (not to be confused with iosAdvertisingIdentifier as explained below), nor call a selector by that name.

  2. We do not link to AdSupport.framework

  3. We do not use ASIdentifierManager

And just FYI, we took care of this exact issue over 1 year ago when Apple made clear they were going to enforce those rules. 

Also, one clarification: 

Apple is flagging “advertisingIdentifier”, and NOT “iosAdvertisingIdentifier”. The latter is a string in our code for a Lua API (system.getInfo), which is there for backward compat purposes. It’s currently a no-op.

Thanks Rob and Walter. My app is currently before their review board. If they reject it again I will resubmit with your comments and hope that helps. Ugh - hope I don’t have to do another 2 week wait. :frowning:

When they reject you, you get a link to have a conversation with the folks who rejected it.  I think after you resubmit, you loose that link.  But as Walter said, this sounds like something they need to fix.

Rob

Thanks, Walter and Rob. I also found iosAdvertisingIdentifier referenced in the executable inside the .app directory of a Corona-built app and was wondering why it was there.

Hope that everyone finds out what’s happening!

Was this rejected right after you uploaded your App to iTunesConnect using the AppLoader or after you submitted it for review? What build were you using?

As a test, I just upload our DeviceInfo sample app built with our recent daily build (2575) and it uploaded without any warnings and I haven’t seen any automatic warning email from Apple after the upload.

It uploaded with the AppLoader fine. It was after the loooong wait time that it went from “Waiting for review” to “In review” - then rejected. This was not an automated rejection.

As mentioned above, I’ve tried build 2015.2571 and same binary rejection.

The only think I can think of is they scan for any ad-related identifiers and “AdvertisingIdentifier” comes up even though the name in my (and others) app is “iosAdvertisingIdentifier”.

Seems like it would be really safe if none of the ad-related names were used in whole or part in the final binary.

It could be that Apple have recently decided to turn off case-sensitivity and now get any results even with partial matches.

This is something that Apple would need to fix on their end. If you get rejected again, don’t delete the binary, or try to upload a new one. As Rob said above, you should be able to see a link in your iTunes Connect account on the rejected app’s page and have a conversation with the review team. If that fails you can also submit a more formal appeal to Apple.

UPDATE: I again sent a message via Apple’s review board with a copy/paste of Walter’s message. I got a reply (maybe from my first review submission?). There was no explanation but my app (Ukodus) is now available for sale.

I want to thank everyone that responded and the staff too. I hope this will not affect anyone in the future - maybe a simple refactoring of that name?

Thanks again!

@lessmsios

Great! Congrats.

Can you post your build.settings file here?

UPDATE 1: When I use the “strings” tool (lists the methods that the library calls) I get this entry from my binary:

iosAdvertisingIdentifier
 

I think whatever is creating that is the cause Apple is rejecting my binary.


My build.settings:

– Supported values for orientation:
– portrait, portraitUpsideDown, landscapeLeft, landscapeRight

settings = {
    orientation = {
            default = “portrait”,
            supported = { “portrait”, }
    },

    iphone = {
       plist = {
            UIViewControllerBasedStatusBarAppearance = false,
            UIStatusBarHidden = true,
            UIPrerenderedIcon = true, – set to false for “shine” overlay
            UIApplicationExitsOnSuspend = true,
            CFBundleIconFiles = {
                “Icon.png”,
                “Icon@2x.png”,
                “Icon-60.png”,
                “Icon-60@2x.png”,
                “Icon-60@3x.png”,
                “Icon-72.png”,
                “Icon-72@2x.png”,
                “Icon-76.png”,
                “Icon-76@2x.png”,
                “Icon-Small-50.png”,
                “Icon-Small-50@2x.png”,
                “Icon-Small-40.png”,
                “Icon-Small-40@2x.png”,
                “Icon-Small-40@3x.png”,
                “Icon-Small.png”,
                “Icon-Small@2x.png”,
                “Icon-Small@3x.png”
            },
            UILaunchImages = {
                {  --iPhone 4
                    [“UILaunchImageMinimumOSVersion”] = “7.0”,
                    [“UILaunchImageName”] = “Default”,
                    [“UILaunchImageOrientation”] = “Portrait”,
                    [“UILaunchImageSize”] = “{320, 480}”
                },
                {  --iPhone 5
                    [“UILaunchImageMinimumOSVersion”] = “7.0”,
                    [“UILaunchImageName”] = “Default-568h”,
                    [“UILaunchImageOrientation”] = “Portrait”,
                    [“UILaunchImageSize”] = “{320, 568}”
                },
                {  --iPad portrait
                    [“UILaunchImageMinimumOSVersion”] = “7.0”,
                    [“UILaunchImageName”] = “Default-Portrait”,
                    [“UILaunchImageOrientation”] = “Portrait”,
                    [“UILaunchImageSize”] = “{768, 1024}”
                },
                {  --iPhone 6
                    [“UILaunchImageMinimumOSVersion”] = “8.0”,
                    [“UILaunchImageName”] = “Default-667h”,
                    [“UILaunchImageOrientation”] = “Portrait”,
                    [“UILaunchImageSize”] = “{375, 667}”
                },
                {  --iPhone 6 Plus portrait
                    [“UILaunchImageMinimumOSVersion”] = “8.0”,
                    [“UILaunchImageName”] = “Default-736h”,
                    [“UILaunchImageOrientation”] = “Portrait”,
                    [“UILaunchImageSize”] = “{414, 736}”
                }
            },
        },
    },
}
 

I’m stumped.

Maybe Apple have started to implement some new procedures that triggers false positives regarding their AdSupport framework.

One interesting thing to note is that I took one of my paid apps (that was approved in January), and ran it though “strings”, and it also found references to iosAdvertisingIdentifier and iosIdentifierForVendor. I know for a fact that the AdSupport framework isn’t linked as it’s an Enterprise project and I have full access to the Xcode project. I double-checked the project and the AdSupport framework isn’t there.

Nevertheless the strings are there in the binary, and maybe Apple has recently started to pick up on those strings.

I checked with another non-Corona paid app (a Swift project approved in December), and ran the binary though “strings” and found no references to the iosAdvertisingIdentifier. 

It seems as if Corona compiled projects get these strings in their binaries for some reason, and Apple has started to pick these false positives up.

Thanks for verify this ingemar. If this is a new policy of Apple then Corona is worthless for non-ad apps for iOS as long as these identifiers are injected into the code even when not used.

How about this Corona Staff?