App rejected, but I don't use UDID

23,890

Solution 1

In My case it was ibGoogleAnalytics_debug.a library.

To find which library is using uniqueidentifier method, go to your project folder and type in:

$ find . | grep -v .svn  | grep "\.a" | grep -v "\.app" | xargs grep uniqueIdentifier

I got this: Binary file ./My_Project/libGoogleAnalytics_debug.a matches

Solution 2

Solved it: The problem is that your project still refer to the old SDK and it compiles the code with your old sdk methods including the UDID which apple rejects.

Fix it in your build properties of SEARCH PATH Framework Search Paths Library Search Paths

remove unnecessary values such as old sdk path and put there your current sdk path

clean all project's files: Window->Organizer->Project - delete your project Product->Clean

Now rebuild it and resubmit it to apple.

Enjoy :)

Solution 3

Check the binary you generated with the strings command, and look for uniqueIdentifier:

$ strings YOUR_BINARY | grep uniqueIdentifier

It is likely you're going to find it in there.

I found that OpenSSL has a string uniqueIdentifier declared in their headers, so it's probable your application (or any static library you're providing with your app) has included it.

In my case the culprit was libspotify.

Solution 4

I filed a bug with Facebook, but here is a workaround:

https://developers.facebook.com/bugs/193119420841692

In the sdk, edit facebook-ios-sdk/src/FBSession.m

Comment out the

- (BOOL)isMultitaskingSupported {
/*
UIDevice *device = [UIDevice currentDevice];
return [device respondsToSelector:@selector(isMultitaskingSupported)] &&
[device isMultitaskingSupported];*/
return TRUE;
}

Its not needed since IOS 4.0 anyhow.

that removes the reference, and re-build the .a

Solution 5

In my case for this problem was responsible BugSense SDK (I used obsolete version). After upgrading to the newest version (3.1.3) everything is ok.

Share:
23,890

Related videos on Youtube

Tiago
Author by

Tiago

Updated on July 12, 2022

Comments

  • Tiago
    Tiago almost 2 years

    Today we received a feedback about our submission and we do not understand the reported problem: "Apps are not permitted to access the UDID and must not use the uniqueIdentifier method of UIDevice. Please update your apps and servers to associate users with the Vendor or Advertising identifiers introduced in iOS 6.".

    We know about the rejections about udid, but our App do not use this! After read this, our team reevaluated the App and we do not found occurrences from "UIDevice uniqueIdentifier". We also revised all used libraries and really we do not find any call from UDID.

    Someone have ideas?

    After research, I executed "greap" command and I am suspecting about FacebookSDK:

    my-app-directory $ grep -Rnis 'uniqueIdentifier' *
    Binary file MyApp/FacebookSDK.framework/FacebookSDK matches
    Binary file MyApp/FacebookSDK.framework/Versions/A/FacebookSDK matches
    Binary file MyApp/FacebookSDK.framework/Versions/Current/FacebookSDK matches
    Binary file MyApp/MyApp.xcodeproj/project.xcworkspace/xcuserdata/myuser.xcuserdatad/UserInterfaceState.xcuserstate matches
    

    FacebookSDK uses uniqueIdentifier?? Whats the resolution?

    • sangony
      sangony almost 11 years
      Are you using third party libraries or classes that could contain UDIDs?
    • GoZoner
      GoZoner almost 11 years
      Are you passing anything, maybe something you are constructing, from your App to your servers that identifies the iPhone?
    • Undo
      Undo almost 11 years
      Maybe some analytics libraries?
    • Mike Weller
      Mike Weller almost 11 years
      Do you have any other methods in your app called uniqueIdentifier? Sometimes Apple will incorrectly flag private/deprecated selector use even when the selector is not on an Apple-class.
    • JohnK
      JohnK over 10 years
      This answer may help you: stackoverflow.com/a/14448057/1431728.
  • Igor
    Igor almost 11 years
    Are you by any chance using libspotify? I found it being the culprit on my submission today.
  • ant_one
    ant_one almost 11 years
    Upgrading the AdMob SDK solved the problem for me. I think you may have an other thrid part library using uniqueIdentifier.
  • PanosJee
    PanosJee almost 11 years
    Thanks Tomasz for the clarification. Actually the latest version of the plugin is 3.3.1 You can download it and read the release notes here bugsense.com/releases/ios/3.3.1
  • Mangesh
    Mangesh almost 11 years
    How can I use String command ? I have a xyz.app then ?? I am using $ strings xyz.app | grep uniqueIdentifier and getting can't map file: xyz.app (Invalid argument). Thanks
  • MobileVet
    MobileVet almost 11 years
    This should be the accepted answer, it cuts through and nails the offending code dead on.
  • Igor
    Igor almost 11 years
    Search for a file with the same name of your app inside the ".app" directory. Assuming my app is called "Foo.app" run "find Foo.app -type f -name Foo", and then run strings against it.
  • Grav
    Grav almost 11 years
    @Igor - I seem to have the same problem with libspotify. It's not in plaintext anywhere in my source code, so it seems to be inside the libspotify binary. Did you find a solution?
  • Igor
    Igor almost 11 years
    @Grav - Send an email to Apple stating you aren't using uniqueIdentifier but libspotify links to OpenSSL which has the string defined.
  • Mangesh
    Mangesh almost 11 years
    +1 Thanks Igor, But I am still unable to run. I have xyz.app file on desktop and it is not working :(
  • Emanuel
    Emanuel almost 11 years
    is there any room for false positives? Millennial SDK (v5.0.1) is being thrown, even when they claim it's no longer used.
  • hectr
    hectr almost 11 years
    I submitted today the same binary that was rejected some days ago and it has not been rejected. I guess the problem was in the itunes connect side and not in the admob lib.
  • Suyuan Chang
    Suyuan Chang almost 11 years
    I submitted a new version with same AdMob SDK and iTunes connect didn't complain that. I think the problem was in iTunes connect and they already fixed it as others said.
  • mskw
    mskw almost 11 years
    The uniqueIdentifier within openSSL is a preprocessor similar to #define _name "uniqueIdentifier", so it doesn't get compiled into the symbol table for apple to grep after compiling the binary.
  • Krish Allamraju
    Krish Allamraju almost 11 years
    Thank You very much. It helped me a lot.
  • CornPuff
    CornPuff almost 11 years
    Some 3rd party libraries don't use a ".a" extension, and instead use no extension. This command will find API usage in those files as well: grep -lr "uniqueIdentifier" * | grep -v .svn | grep -v .md
  • SONIC3D
    SONIC3D almost 11 years
    Perfect!Must keep it as a sample.
  • vav
    vav over 9 years
    Hi! this is not an answer, convert it to comment, please.