After a whole day search, i'm unable to find a good solution
Apple does't allow to check IMEI number of iDevice
Apple does't allow to check UDID (Its deprecated)
there is an option of "identifierForVendor" , but i found it may change if user uninstall and reinstall the app.
My Problem at this time is this
for single "Specific USER NAME" any one can install my app on upto 5 iDevices, after that user must change the "USER NAME"
my app just ask this on first Launch and never again. at this stage i want a check or Counter Like anything that counts the iDevices for that "USER NAME" to check if it is 1st, second …. ……… or fifth. ….
need your ideas or help on this matter / issue
What i have got from your question is that you need a unique identifier to identify total devices . Please take a look at my answer here at this post i may help you understand many things ( How to generate unique identifier which should work in all iOS versions? )
you may try to use the token given by apple for APN (Apple Push Notification), it's unique for device+app… there may be the problem that app will ask user permission for push notification, but you can make that mandatory for your app, and let it works just in casa user accepts it..
Related
I know that Apple wants a new app to have a unique name if it is to be registered on the App Store (Source: https://apple.stackexchange.com/questions/153572/can-two-different-app-with-the-same-name-exist-in-app-store). I have a questions what if an attacker can install an app with the same name as that of a legitimate app. I am assuming an attacker has taken control over the iPhone by some sort of attack such as TrustJacking. I tried searching over the internet but couldn't find anything relevant to answer my question.
Thanks in advance!
If you are talking about the display name which shows under the icon, then the answer is yes, that does not have to be unique.
Not unless the iPhone is already compromised (jailbroken). In a normal usage scenario apps are digitally signed with private certificates and so even if an attacker created a new app with the same bundle Id & name, the app wouldn't be launched by iOS; the attacker would also have to somehow find a way to inject the app on your device, which in theory should also be locked. Safe to say that unless proven otherwise, its impossible.
My project have a case: one account user can only log on to one device ( if user log on to app in device A, user can't log on to app in device B). My Idea is: when user login, I'll get the imei Iphone (like android) and send it with request login to server. But I can't get imei. I try with UUID, but UUID will change when re install app. Keychain does not solve the problem. Please help me.
You have to use Keychain to store Unique Id , this will not change even if user delete app
You can use any wrapper Source code to do this
here is an example
https://github.com/Joe0708/KeychainUUID
At the beginning I'd like to mention that I do not know any method that directly answers your question, especially that Apple does not allow you to read IMEI and other similar stuff due to privacy concerns. This has been answered here.
The workaround might be as follows
Take a look at the UIDevice class, especially at the identifierForVendorProperty which provides you (according to documentation ) with a device specific value.
The value of this property is the same for apps that come from the same vendor running on the same device. A different value is returned for apps on the same device that come from different vendors, and for apps on different devices regardless of vendor.
As far as i know some financial apps are secured this way to permit only one device to access the account. This however requires registering a device each time application is reinstalled.
Alternatively you can use UUID you generate within your app (first run) and then you assign it for the user online. It might take the form similar to two step verification process. Be aware however that with such restrictions user will have to be online all the time to use your app.
A few days ago when I uploaded a new version of my app to the App Store using Xcode, I received the following e-mail from iTunes Connect:
Subject: iTunes Connect: Your app AppName has one or more issues
Dear developer,
We have discovered one or more issues with your recent delivery for
"AppName".
The following are for your information only and do not require any
action:
We have detected that this build requires the use of standard location
services when running in the background. Apps requiring location
services will now display the following text disclaimer on the App
Store. 'This app may use your location even when it isn’t open, which
can decrease device battery life'.
Regards,
The App Store team
And the build that I uploaded cannot be selected for review submission on the iTunes Connect website.
How should I deal with this problem? Thanks.
I run into this issue long time ago, this is because, if your app is still use location service in the background, it maybe consume the battery.
1) If you want to always use the location service, you should set this, can let you pass the itunes verify:
you should in your Info.plist add NSLocationAlwaysUsageDescription permission, and set the value, why you want to always use the location service.
2) If you just need when user using app this duration to use location service. You should NSLocationWhenInUseUsageDescription instead of NSLocationAlwaysUsageDescription permission, and you should also set the description why you want to use the permission.
Apple guidelines *
If your app requires location usage even in the background mode, In bottom of the app description and iTunesConnect application page you have to put this text
"This app may use your location even when it isn’t open, which can decrease device battery life"
It is important to put this disclaimer so that if user downloads your application he should be aware that location services will be active for the app even when the application is not in the use.
You don't have to put another build, just update the description with this disclaimer and submit for review again. It will get re-reviewed and, if all terms and conditions are valid, it will be approved.
Since Apple services for new application upload is not active from 23rd Dec to 27th Dec due to yearly Christmas holiday, so you should try to submit for review after it.
Let me know if you have any issues.
While going through the same issue, I found that
Capabilities -> Background Modes -> Location updates
were enabled for my app.
Please deselect this, if your app does not require location updates in background.
This is not a big problem actually. Apple reviewer already said you "do not require any action" he / she only suggest you it is more appropriate show a warning text (it is appear when you request to use location service within UIAlertView) like this message 'This app may use your location even when it isn’t open, which can decrease device battery life'.
You can add descriptive string in .plist file.
Probably you forgot to add NSLocationWhenInUseUsageDescription or NSLocationAlwaysUsageDescription in plist or you didn't add background mode in capabilities of the project.
The problem is with your string message you are displaying. i was also once stucked in this kind of issue i was using app name like "Burn you phone". So by changing the message string on location authorization will do the trick.
I had the same problem and contacted iTunes Connect about it. Below are excerpts from their responses so far:
I do understand your concerns about continuing to receive notices with
every update or build. I can confirm this is working as expected.
...
There are some emails that are system-generated by iTunes Connect and
there is not a way to disable them at this time. If you provide us
feedback we will be more than glad to provide it to the appropriate
team for future improvements.
...
You can definitely try adding the app description and see if this will
resolve the email notifications.
However, we can not assure you that this will cancel the email
notifications.
Just wanted to demonstrate their stellar customer support and exemplary knowledge of their own product...
However, I haven't yet confirmed whether putting the text in the description field will silence the email.
The other responses here mention the privacy usage descriptions in Info.plist, but this email is not directly related to this issue. Anyways, if you neglect to include those, your app will just crash when you try to access location services (unless permission had already been given in a pre-iOS 10 version of your app).
I am trying to test the iCloud sync functionality of my app between a (real) device and the simulator, however I can't seem to log into iCloud. When I go to Settings->iCloud and enter my account details, it just gets stuck on 'Verifying'. However if I enter incorrect details, it brings up the invalid password prompt as expected.
Has anyone got a fix for this?
TL;TR Log into http://www.icloud.com and agree to the terms.
It works. But there are some additional steps needed:
At work I tried with my new apple id: at work XYZ#mywork.com. At first It didn't work even though I was able to access iOS dev center. I realised that it is required to access to http://www.icloud.com with such Apple ID and agree to the terms. After a few seconds I received a 'Welcome to iCloud' email to my work address and then I went back to the simulator and I successfully logged in.
BTW, for a personal account XYZ#mac.com I have for ages and use regularly it worked from the beginning probably because I have agreed to the terms a long time ago.
So not only #icloud.com of #me.com or #mac.com accounts work. All accounts work.
Create an Apple ID from appleid.apple.com. You need an email address and a phone number to authenticate.
Login to icloud.com and accept terms and conditions.
Open Simulator, log in with your new Apple ID.
Done.
I had the same problem today as I was trying to use iCloud + Core Data in the simulator (iOS 8.0, Mavericks). What I found out is that you should use, in the simulator, your #icloud.com e-mail. If you do that, you are able to login and use some iCloud functionality.
This is Perfect Solution, it's 100% working
Create an Apple ID from appleid.apple.com. You need an email address and a phone number to authenticate.
Login to icloud.com and accept terms and conditions.
Open Simulator, log in with your new Apple ID.
Done.
I read a few threads and it seems like the UDID is deprecated. I also checked out CFUUIDCreate() but that's not really what I'm looking for.
I'm planning to do give aways in my app, so the only information I need from the user is the email address and a unique identifier of the device. I don't want the user to be able to simply reinstall the app and re-register for the give away. The easiest way would be to send some kind of device identifier together with the email address.
Any suggestions?
EDIT: Can I use the MAC address for this purpose? Any other ideas?
EDIT2: Nevermind, that's deprecated aswell...
EDIT3: I think I found something: How to generate unique identifier which should work in all iOS versions?
EDIT4: I'm using the solution in the link above, it works great!
Apple no longer allowes access to UDID from public APIs.
Perhaps you can use a web service to tell the device by it's IP, etc. Although there may be a way to mislead it, it will be better than using nothing.
Another solution would be using iCloud, only a few users would actually make the effort to make a new account.
Whatever you do, remember to make sure you don't break Apple's AppStore guidelines:
https://developer.apple.com/appstore/resources/approval/guidelines.html
(see "20. Contests, sweepstakes, lotteries, raffles, and gambling")
See a list of possible identifications below. Only the CFUUID provides you an unique identifier, but when you reinstall the app the ID is regenerated.
You may save the mail address of the user who received a giveaway in a separate online db.
UDID
unique and permanent device identification
(deprecated)
CFUUID / NSUUID
Random-ID, which is not bound to the device
is for each installed app different
only persistent till you delete the app
Advertising Identifier
for all apps identically
can be changed by the user
can be globally turned off
Identifier for Vendor (IDFV)
identically for all apps of one developer
MAC adress
cannot be used
no identification of a device, because the API returns the same MAC address for all devices