Overcoming issues with iOS App Store submissions

February 11, 2014 in Technology

Recently, we have received a number of reports indicating that Apple have tightened their review process, and have started rejecting apps that use iOS Advertising Identifier but do not show advertisements. This blog post will help you determine whether your app might be affected, and provide advice on how to overcome any issues you might face.

  1. Q: My application uses the Advertising Identifier API and it displays advertisements in a prominent place. Will it be accepted to the App Store?
    A: You should be fine.
  2. Q: My application uses the Advertising Identifier API, and it displays advertisements, but not continuously. Will it be accepted to the App Store?
    A: Ensure that advertisements are served during the Apple review. You might also need to pass on extra instructions to the reviewer providing information as to how to reach the part of your application that displays advertisements.
  3. Q: My application does not displays ads. What should I do?
    A: We are working on a fix to be released with the next release of Unity. If you are in a hurry, follow these instructions to remove the Advertising Identifier API from your Unity application:
    a) Locate DeviceSettings.mm file in your Xcode project (you should find it under Classes/Unity/) and open it for editing;
    b) Remove the following functions from the file:

        static id QueryASIdentifierManager()
        {
            //...
        }
        static void QueryAdID()
        {
            //...
        }
        static void QueryAdTracking()
        {
            //...
        }

    c) Remove the following declarations of variables:

        static NSString*    _ADID               = nil;
        static bool         _AdTrackingEnabled  = false;

    d) Modify implementations of the following the functions (replace with those provided below):

        extern "C" const char*  UnityAdvertisingIdentifier()
        {
        return NULL;
        }
    
        extern "C" bool         UnityAdvertisingTrackingEnabled()
        {
        return false;
        }
    
        static void QueryDeviceID()
        {
            if(_DeviceID == nil)
            {
            #if UNITY_PRE_IOS7_TARGET
                if(!_ios70orNewer)
                    _InitDeviceIDPreIOS7();
            #endif
    
                // first check vendor id
                if(_DeviceID == nil)
                {
                    QueryVendorID();
                    _DeviceID = _VendorID;
                }
            }
        }

    These modifications only affect the current build of your Xcode project. If you rebuild an Xcode project from Unity and choose to replace it or build it to a new location, you need to reapply these changes. If you do not intend to show any advertisements anywhere in your project, consider updating the master template of this file located at: /Applications/Unity/Unity.app/Contents/PlaybackEngines/iPhonePlayer/iPhone-Trampoline/Classes/Unity

  4. Q: I applied the suggested changes to my application and still got rejected from the App Store. Why might this be?
    A: Many 3rd party plugins, including social and analytics plugins, use the Advertising Identifier API directly. In such cases, you should contact the provider of your plugins for further instructions as to how to resolve this issue.

Comments (13)

Subscribe to comments
  1. App Store Download

    April 21, 2014 at 1:35 am / 

    A code that I recently purchased had the same problem. Apple rejected it due to the Ad identifier issue. I wasn’t aware that the guy who wrote the code was using shady techniques. Got duped for five hundred bucks. Never again.

    P.S: I’m myself a Freelance App Developer – Check out my apps on App Store Download

  2. Must see badoink mobile porn app

    April 3, 2014 at 10:12 am / 

    Ӏ’m a reader of this unique blog for awhile now and it is always worth a reaԀ.
    I hope to read more posts in the ѕtyle of yoսr previous one.

    Visit my homepɑge; Must see badoink mobile porn app

  3. Mantas Puida

    March 19, 2014 at 10:37 pm / 

    @BT, we are not aware about such issues, please bug report it! You can find our bug reporter in Unity Editor Help menu.
    Thanks!

  4. BT

    March 19, 2014 at 7:34 pm / 

    I am facing a serious issue in all my Unity generated games. If I launch the app with WiFi and then turn the WiFi off, then every time, I try loading a new scene, the app crashes. Is this issue discussed elsewhere?

  5. Ronald

    March 10, 2014 at 3:37 pm / 

    Will this also work on jailbroken iOS? Or it needs to be genuine version?

    Thanks in advance and for sharing!

    Regards,
    Ronald

  6. Danny

    March 7, 2014 at 11:20 am / 

    When is it expected to be fixed? I mean, I have a game that fits the #3 situation – no ads, and I hate messing with the xcode files, since I sometimes need to do a fresh build, and redo all the changes (assuming I remember them) – a big waste of time.

  7. Andrew

    February 22, 2014 at 4:54 am / 

    Note.. you’ll get REJECTED also if you use iAd and don’t remove the advertising identifier as per above

    Here’s the note we got:

    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.

  8. Colter Haycock

    February 19, 2014 at 6:53 pm / 

    We contacted Fiksu, Chartboost and Tapjoy regarding this issue and I wrote about what they said here: http://forum.unity3d.com/threads/226187-iOS-Advertising-Identifier-rejection-FAQ/page2

  9. Lior Tal

    February 16, 2014 at 2:36 pm / 

    @Andry you can build a custom PostBuildProcessor that will patch those files for you with the required changes. That might work.

  10. Mantas Puida

    February 12, 2014 at 9:13 am / 

    @DLEIGHT, I posted answer on UnityAnswers

  11. Mantas Puida

    February 12, 2014 at 9:04 am / 

    @Andy, yes, you can do it for any Unity iOS .mm file. But be careful with, if you break something, it will affect all the project.

  12. dleight

    February 12, 2014 at 3:25 am / 

    Thanks for posting this. My app was rejected due to “crash on launch” which I cannot recreate on any of several devices including what Apple tested on (iPad Air). According to the crash logs, the crash is being caused by verifyiphonesplashscreen.cpp which seems to be a file that Unity is producing. I have a major deadline and am desperate for any help. Here is the what I posted to answers: http://answers.unity3d.com/questions/636918/verifyiphonesplashscreen-causing-crash-on-launch-o.html?sort=oldest Causing Crash on Launch on iOS?

  13. Andy Martin

    February 12, 2014 at 2:50 am / 

    The part that interests me the most is how to change the template that is generated from Unity. Is this possible to do for any Unity ios .mm file?

Comments are closed.