App rejected, but I don't use UDID
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?
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
.