4

in XCode 4.6, iOS 6.1, we use CoreTelephony to obtain IMEI, the same way mentioned in get IMEI on iPhone with CoreTelephony? question, but after switching to iOS7 and XCode 5 it doesn't work anymore. My system considers IMEI as an unbreakable way to identify a cellphone and guarantee it is linked to a specific user, also other security issues depend on this identifier. With the new iOS the code is not working and we hadn't found a way to obtain it.

My central question is: What options do I have to obtain IMEI in iOS7 / XCode 5?

Variations are: - How else could I guarantee a cellphone belongs to a specific person? Identity is very important in my system and ownership of device is a requisite. - What other options do we have to keep secure the system without the need to rewrite too much?

Community
  • 1
  • 1
  • You state that the IMEI "guarantee it is linked to a specific user", which is wrong. Multiple users can use the same device. – Jasarien Sep 30 '13 at 08:41
  • 1
    Not this app, we are offering that this app is not going to work if the mobile is cloned. I might think that apple security policies help to protect the device from being copied and the identity of the owner used but I hadn't found specific information about this. Besides I already have a ticket for apple support going on. The point of the question was for having multiple lines of investigation. – Carlos Aguirre Tradeco Oct 07 '13 at 16:16
  • You completely misunderstood my comment. I'm not talking about hypothetically phone copying, or IMEI cloning - just the simple fact that I can sign into Facebook on my phone, and then pass it to a friend, who signs out and back in as himself - two users on the same device. Therefore the IMEI of a phone doesn't guarantee a link to a specific user. – Jasarien Oct 08 '13 at 09:15

5 Answers5

2

You should not be getting IMEI in first place as you're using private API and this is against Apple rules.

To get unique identifier for device you should use identifierForVendor method. This will always return the same id across all your apps running on the same phone. See apple docs for more detail.

qwiboo
  • 62
  • 2
  • 2
    I don't agree about I can't access a device firmware information, but that is not the point. Problem with identifierForVendor is it changes when app is removed (I only have one app). Firmware values are static. IdentifierForVendor cannot be used to guarantee a device is the same if the app was removed and installed again. – Carlos Aguirre Tradeco Sep 26 '13 at 16:12
  • @indiekiduk while that may be true, if you want the app to be in the app store without any risk of rejection, then you must follow the rules. – Jasarien Sep 30 '13 at 08:43
  • @CarlosAguirreTradeco It's not a question of technical possibility. It's about users privacy and Apple commitment to that privacy. Users don't want their device to be uniquely tracked by random app developers. An IMEI can identify a real person, full name, address and more if cross referenced with a cell service provider's database. This is a security risk and privacy issue that Apple is protecting the user from by not allowing developers to obtain this information. – Jasarien Sep 30 '13 at 08:45
  • That is the point, making sure that security works not only to protect users from apps developers, but also from other users. – Carlos Aguirre Tradeco Oct 07 '13 at 16:20
2

Use the identifierForVendor to get "an alphanumeric string that uniquely identifies a device to the app’s vendor. (read-only)".

The method is described in the UIDevice Class Reference.

Christian Seiler
  • 1,130
  • 1
  • 13
  • 29
2

Unless there is a private API solution found - our organization is moving forward with placing the IMEI and phone# into our Enterprise Applications as a guarded Application Settings.

With the new camera based barcode recognition of iOS7 - the IMEI can even be scanned from the phone box during initial kitting and deployment rather than entered by hand.

We also considered tracking the identifierForVendor UUID in a database etc. linking to IMEI/Phone# but since it can change and since our historical data is all IMEI based - didn't make sense to add that layer of tracking complexity to a semi-useless identifier that doesn't trace back to a universal meaningful tracking mechanism like Phone/IMEI.

  • Thanks for your answer, I liked it. This is going to be an enterprise app, but we want to offer it for public use. Of course it is focused in a specific sector: people who don't share their devices. We decided to track a list of available data, in particular identifierForVendor and cloudId, also we will ask for a passcode in specific situations. For now we are trusting that a cloned device will not have the same identifierForVendor as the original one, and that APNs can distinguish that also, but we are checking out. – Carlos Aguirre Tradeco Oct 07 '13 at 16:28
1

I am not very sure about IMEI number. in iOS7 Apple changed the way they provide the Unique Identifier. They have also stopped providing MAC address of the wifi card. Now they provide a Unique Identifier for Each Device and App Vender. Please see iOS 7 release notes. You may want to use that Unique Identifier.

Ram G.
  • 3,045
  • 2
  • 25
  • 31
0

You could use advertisingIdentifier which is unique to each device. See: Apple documentation.

As far as I can tell, advertisingIdentifier and identifierForVendor are the only 2 unique identifiers you could use.

Lukasz Czerwinski
  • 13,499
  • 10
  • 55
  • 65