Non-public API usage:
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.
If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed.
Kindly help me how to i avoid his problem.
Regards
John
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
Theres your answer.
"Starting May 1, the App Store will no longer accept new apps or app updates that access UDIDs. Please update your apps and servers to associate users with the Vendor or Advertising identifiers introduced in iOS 6"
Source
Apple now block any App which accesses the uniqueIdentifier property of UIDevice. Replace any occurrence with the Vendor or Advertising identifiers or use OpenUDID.
NSUUID *uuid = [[UIDevice currentDevice] identifierForVendor];
NSString *uuidString = [uuid UUIDString];
A few StackOverflow questions which may be of help:
Advertising Identifier for devices lower than iOS 6.0
iOS6 UDID - What advantages does identifierForVendor have over identifierForAdvertising?
The advertisingIdentifier and identifierForVendor return "00000000-0000-0000-0000-000000000000"
If you haven't used uniqueIdentifier yourself, then it will be an SDK Library calling it. Normally from an ad network such as Mobclix, AdMob or Smaato. All the popular ad networks have updated SDK's which remove uniqueIdentifier. Check their websites for the latest SDK.
Update
Just seen in the comments you're using PhoneGap, guessing you haven't updated to the latest version.
Apple have started rejecting UDID access now (PhoneGap)
Re: [PhoneGap] Uuids in ios 5 (PhoneGap)
Make sure your using the latest version (2.7.0) from http://phonegap.com/download/ (Released 30 Apr 2013)
I got the same issue and Apple gave me some tips to find out the Places that use "uniqueIdentifier" API call. Even in a binary lib.
"While you may have removed access and usage of UDIDs from your app,
the invalid binary message indicates that your app uses or accesses
UDIDs. Please check your source code for any occurrence of the
"uniqueIdentifier" method; this is the method that returns a device's
UDID.
Additionally, if you are linking an external framework, such as an
advertising library, these third party libraries may be accessing and
using UDIDs. We encourage you to update your libraries to the most
recent versions and use the "nm" tool to determine if the libraries
are calling this method.
For more information on the "nm" tool, please see the manual page for
the "nm" tool in Xcode Tools:
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/nm.1.html
Additionally, if you do not have access to the libraries's source, you
may be able to search the compiled binary using "strings" or "otool"
command line tools. The "strings" tool can output a list of the
methods that the library calls and "otool -ov" will output the
Objective-C class structures and their defined methods. These
techniques can help you narrow down where the problematic code
resides."
Hope it helps
I am using this method to create a Unique Identifier.
Is this now not allowed. It was a month ago when release a previous version of my app.
- (NSString *)uuid
{
CFUUIDRef uuidRef = CFUUIDCreate(NULL);
CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef);
CFRelease(uuidRef);
return [(NSString *)uuidStringRef autorelease];
}
What else can I use to create a unique identifier.
Cheers
Shane
Related
The Error I am getting on email from Apple App Store while I am publishing my app to Apple App Store Testflight from my mac , although I am unable to see my build on testflight forum.And the email from Apple App Store is as under.
Dear Developer,
We identified one or more issues with a recent delivery for your app, "IDTAG Nearby Interaction" 1.0 (1.0). Please correct the following issues, then upload again.
ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSNearbyInteractionAllowOnceUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
I have already the below strings into my Info.plist
<key>Privacy - Nearby Interaction Allow Once Usage Description</key>
<string>Nearby Interaction app uses our u1 chip for better experience to show other peers location.</string>
<key>Privacy - Nearby Interaction Usage Description</key>
<string>Nearby Interaction app uses our u1 chip for better experience to show other peers location.</string>
According to Apple Documentation
( Nearby Interaction Allow Once Usage Description ) will be deprecated in iOS 15. That's why I have already added ( Privacy - Nearby Interaction Usage Description ) in my project but still I am having the above mentioned issue in my project by Apple store.
Will you please help me to fix this below mentioned issue getting from Apps store
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. If method names in your source code match the
private Apple APIs listed above, altering your method names will help
prevent this app from being flagged in future submissions. In
addition, note that one or more of the above APIs may be located in a
static library that was included with your app. If so, they must be
removed.
If you think this message was sent in error and that you have only
used Apple-published APIs in accordance with the guidelines, send the
app's nine-digit Apple ID, along with detailed information about why
you believe the above APIs were incorrectly flagged, to
appreview#apple.com. For further information, visit the Technical
Support Information page.
Once these issues have been corrected, go to the Version Details page
and click "Ready to Upload Binary." Continue through the submission
process until the app status is "Waiting for Upload." You can then
deliver the corrected binary.
Find the class that use the UDID by
(by terminal in the project directory)
find . | grep -v .svn | grep "\.a" | grep -v "\.app" | xargs grep uniqueIdentifier
you find the classes that use UDID then replace it and use UUID or replace it by new class if you are using external classes
Use of the device's uniqueidentifier property in apps was deprecated in iOS 5.0 and forbidden in iOS 6 apps as of 1 May 2013. Instead, you can use the identifierForVendor property available in iOS 6.0. Apple changed the API to address privacy concerns.
My problem with this was due to the adMob library. It was fixed in adMob SDK 6.4.2. From Google:
The AdMob SDK for iOS utilizes Apple's advertising identifier (IDFA).
The SDK uses IDFA under the guidelines laid out in the iOS developer
program license agreement. Developers must ensure they are in
compliance with the iOS developer program license agreement policies
governing the use of this identifier.
I'm having this issue too. My project was being built using Unity 3.5.4 and using 3 different plugins.
I created an empty iOS project using unity 3.5.4, built xCode project, attempt validation: fail. Then I built the xCode project using 3.5.7 and validation was successful.
That empty project had no plugins in it so it's not any plugins fault.
One of my plugins only worked with Uniyt 3.5.4 so now I'm trying to get an updated version of that plugin that works with 3.5.7 in order to submit the app.
Admob and ShareKit + Facebook were both the culprit for me.
I just got the same email after submitting our Tinyview app to the Apple App Store. We don't use UDID directly but it's possible that it's being accessed by a library we include, e.g. Google Analytics.
Admob 6.4.2 seems to work just had the same problem and now is solved... try to get it from here: http://dl.google.com/googleadmobadssdk/googleadmobadssdkios.zip
If you're using HockeyApp, remember to either remove the code that checks if the app needs to be updated, it uses the default UDID.
Even better wrap it in some preprocessor directives so that it is included in your ad hoc builds, but not your production builds.
I have created a phoneGap app for iphone and successfully deployed it device.
Now i am trying to upload the app to app store using xcode 4.5
Successfully validated.
Successfully Distributed.
itunes connect app status-- app received
after 3sec app status-- invalid binary
I am using phone gap 1.2.0, xcode 4.5, target ios version 6.0, Distribution provisional profile.
I have received email followup from apple
Non-public API usage:
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.
If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed.
If you think this message was sent in error and that you have only used Apple-published APIs in accordance with the guidelines, send the app's nine-digit Apple ID, along with detailed information about why you believe the above APIs were incorrectly flagged, toappreview#apple.com. For further information, visit the Technical Support Information page.
Somebody please help.
Apple Changed their policy on using the UDID. Which was included by default in earlier version of Phonegap API on IOS. If you upgrade to the newer versions you will find the code no longer uses the UDID and will pass App store.
Looks like from version 1.8 onwards is the change.
Latest version of phonegap is 2.7 so it would be good to update anyways,
This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
Unique identifier for an iPhone app
Our server database recognize user based on Device UDID, but now UDID is depreciated in IOS 5.. i m not able to use it... Can anyone please help me to find out "How can we Identify the device?".
Thanks in advance.
you can use OpenUDID
OpenUDID is a drop-in replacement for the deprecated uniqueIdentifier
property of the UIDevice class on iOS (a.k.a. UDID) and otherwise is
an industry-friendly equivalent for iOS and Android, and most recently
Windows C# and Silverlight (see links above).
The agenda for this community driven project is to:
Provide a reliable proxy and replacement for a universal unique device
identifier. That is, persistent and sufficiently unique, on a per
device basis. NOT use an obvious other sensitive unique identifier
(like the MAC address) to avoid further deprecation and to protect
device-level privacy concerns Enable the same OpenUDID to be accessed
by any app on the same device Supply open-source code to generate and
access the OpenUDID, for iOS and Android Incorporate, from the
beginning, a system that will enable user opt-out to match Apple’s
initial intent
I personally use `Unique Device Identifier'
Works fine, and Apps got approved from Apple as well. =)
U can use BPXLUUIDHandler as an option to UDID which is depreciated in IOS 5
Use This....the easiest and most appropriate way to obtain a unique identifier is to use the mechanisms Apple explicitly provides for obtaining one[[UIDevice currentDevice] uniqueIdentifier].
I have heard some rumours that Apple is rejecting apps for using the iOS5 deprecated method [UIDevice uniqueIdentifier]. Can anyone confirm that they have had their App rejected for this reason? I know of the alternatives to using this deprecated method, but one of our customers is requesting we use a 3rd party library that we know uses this method.
I would be surprised if this is the case as the API method has been deprecated and not made private.
Apple is not rejecting apps because of this. I collect device UDIDs along with tokens within my apps that support push notifications and they have all been approved. UDIDs are simply deprecated, meaning that Apple will eventually not allow you to access them. Everything still works and will be approved.
I heard that Apple deprecated access to UDIDs to prevent developers and third party analysts from being able to identify specific people. If it truly was because of issues with iCloud, Apple would clearly have fixed this instead of inconveniencing everyone else.
Edit: It looks like Apple is rejecting some apps for accessing the device's UDID. Just to be safe, I would use CFUUID to create a random unique identifier. You can use NSUserDefaults or the keychain to save it. The advantage to the keychain is that if the user deletes your app, the keychain items are not deleted so you can still access the UDID if the user reinstalls your app. It will only get deleted if the user restores their device.
Using Identifiers in Your Apps
Starting May 1, the App Store will no longer accept new apps or app updates that access UDIDs. Please update your apps and servers to associate users with the Vendor or Advertising identifiers introduced in iOS 6. You can find more details in the UIDevice Class Reference.
Source: https://developer.apple.com/news/
It appears that App Review is enforcing this rule on apps that transmit the UDID without getting the user's permission -- as suggested by this post -- rather than ones that simply invoke the deprecated API.
We had an update in review for an app that would send the device UDID to our server, on which we would use it to index the user's account. We decided not to take any chances and change our code to generate an app-specific unique identifier, as proposed by documentation on the deprecation of the UDID
now 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
NSUUID *uuid = [[UIDevice currentDevice] identifierForVendor];
NSString *uuidString = [uuid UUIDString];
and must to add ADSupport framework
Since May 1, Apple is rejecting all apps which access to the UDID.
But it seems the only thing that they can do is to check if the string "uniqueIdentifier" is in the binary or not.
So even if you don't acces anymore to the uniqueIdentifier of the phone, but you give to one variable the same name, they will find it in the binary and they will reject it cause they can't do the difference.
If you want to know if you binary contain it, you can change the extension of the .ipa (export for ad-hoc deployment) to .zip, unzip it, and do fgrep -R uniqueIdentifier . in the terminal at the payload/ folder.
You can also do this command in your project folder to find the files which contain the string.
This worked for me.