iOS get serial number of device (iPad) on iOS7 - ios

I need to get the serial number of my device. It has to be the serial number and not an uuid or something else.
I'm supervising over 100 iPads with an enterprise app. So i need the serial number for organization reasons. In case my app is not in the app store. I heard that i can use iokit, but i didn't find anything helpful for ios 7 about it.
Is there any good tutorial for iOS7 - IOKit or is there another way to get the serial number?
Thanks in advance!

Here is a working solution from 0xced (thanks to him!):
UIDevice+serialNumber category
Just tried it and it works like a charm, but as he pointed (and you said it's OK), won't be accepted by AppStore.

Related

Get device UDID (40 digit id) programmatically [duplicate]

This question already has answers here:
UIDevice uniqueIdentifier deprecated - What to do now?
(32 answers)
Closed 5 years ago.
In my app, I am trying to get all information of the device and to be displayed in app screen.
I got some of the informations, but not getting code to obtain UDID, Serial number and model identifier of a device, what we can able to see in iTunes.
I can able to get UUID, but my request is to get UDID of the device. I got some apps in which they are getting device info like this.
I will be very helpful if I get any solution in this.
Thanks in advance.
You can't as of iOS 6.
Link #1
Money quote:
As reported by 9to5Mac (and confirmed by Macworld), Apple alerted
developers of a cut-off date for new apps or app updates that access
an iOS device’s UDID (Universal Device ID), an area of security and
privacy concern.
Link #2
Extended money quote:
With iOS 6 Apple has also completely eliminated its controversial
Universal Device IDs (UDID) and replaced it with a more
privacy-friendly way for application vendors and advertisers to
identify specific devices, Hall said,
Apple’s UDIDs are basically a set of alphanumeric characters that are
used to uniquely identify an iPhone or iPad. The numbers are designed
to let application developers track how many users have downloaded
their application and to gather other information for data analytics.
From the same article, the way to go now is:
With the new iOS 6 the company has gone one step further by
eliminating UDIDs completely and replace with a set of three new devie
identifiers. One is a vendor specific identifier that can be used by
application vendors to recognize specific devices, another is designed
for use by online advertisers and the third is an application-specific
ID. Unlike UDID’s, the new identifiers are not persistent and can be
cleared, though the device has to be completely reset to get rid of
the advertiser identities, Hall said.
In conclusion, the correct way is to either (a) use UUID or (b) ask your user for the device's UDID.
You can use this (Swift 3):
UIDevice.current.identifierForVendor!.uuidString

Detect which app is in foreground on iOS9 without jailbreak

I'm trying to log users individual app usage on iOS9.
I'd rather prefer that it wouldn't use jailbreak limited solutions, self explanatory. Doing the variation of this app on a jailbroken phone shouldn't be hard.
This will certainly not be released on the App Store as Apple wouldn't allow it.
I'm looking for any private API that can do this, any hidden iOS API's that can be used to do this. ANYTHING.
What I've already looked through:
how to determine which apps are background and which app is foreground on iOS by application id
How to know about app launched and details jailbreak iOS 7
Is there a private API to be able to detect what is current foreground app on iOS?
How to monitoring App running in the foreground in iOS8?use the PrivateFrameworks SpringBoardServices
which proved to be relatively helpful - we now can assume that there is some sort of additional access requirement, probably an entitlement, but we don't really know how it should look like
Can you find individual app usage duration using SpringBoard services framework or other private framework?
Find out active application or if on Springboard
Programmatically detect which iOS application is visible to user
However all of these proved to be unhelpful because Apple fixed this security flaw with iOS8 and the method to copy/access the currently front most app bundle identifier no longer works.
Question is: Is there someone who knows a workaround using different tools/exploits that do not require jailbreak?
Ideas:
inspecting the processes running on the device and devising an algorithm that would be able to recognize spikes that mean an app has been launched, which potentially could work, but it probably would be a major pain in the ass. Questions mentioning this solution:
Detect which app is currently running on iOS using sysctl,
Return a list of running background apps/processes in iOS
How to get Names of Background Running Apps
Find Background running apps in iphone
inspecting the phones traffic somehow?
not sure if there is some kernel stuff that I could do
Here is my Reddit version of this question if anyone wants to check it out. Also if it's of any value, here are the runtime headers for iOS9 and list of Apple's private API's.
Unfortunately, I was looking for a similar solution and have come to the conclusion that, at least at this point in time, there are no known methods that will allow you to determine app usage on iOS. Even the MDM providers such as Good, Airwatch, MobileIron, etc. don't seem to be able to do this. If anyone is able to come up with a solution, I'd love to see it.
For now, however, I think we would have seen a solution if someone had one that worked on the latest iOS.
sysctl is still open but they block certain combinations of selectors. I did this on iOS 7 and gave Apple Product Security the code. They won't patch iOS 7 but rely on App Review. iPhone 4 is wide open.

Uniquely Identify iOS device over multiple users

I have done a lot of research on this so please read the question before marking this as similar to some other question.
Our app needs to uniquely determine an iPhone such that even when user completely wipes a phone, when he runs our app we can be sure that it is the same device. The most important thing is we also need to determine devices over multiple Apple ID users so suggestions containing Keychain access and uniqueVendorID might not work as those change when another user starts using that phone. And as I have read using MAC addresses and old UDID for devices is not longer available as of iOS 6.0. I went through [UIDevice identifierForVendor] but this NSUUID changes when all the app by the same vendor has been uninstalled Reference.
I have looked through these resources:
UIDevice uniqueIdentifier Deprecated - What To Do Now?
and
What is a long-term method I can use to uniquely identify an iOS device?
I can not disclose the nature of work that my app performs due to non-disclosure, but to clarify what I require:
Multiple users might use our app on same phones, I need a way to know that the device user A used before and has reported to have handed over to user B is the same device on which our app was run. Is there any way to achieve this?
There's no way to achieve this.
If it's really the case that different users might use your app on the same device after a factory reset of the device, then what you want is not possible. Apple deprecated UIDevice uniqueIdentifier which would have been the way to do this.
as long as they dont restore/wipe the device identifierForVendor is ok

Reading iPhone Information (VB.NET)

Has anyone found out a way to read the device which is plugged in and return a serial number for that device?
For example, I am wanting to read my iPhone Serial Number which is plugged into a USB Port, I am wanting my application to tell me my serial number for that device.
Is there a way to do this??
Thank You
J Mahone
Doubt you could get it via USB. You CAN write a small iOS App (like add one line of code to an Xcode App created with New Project) to get it and NSLog it, using:
[[UIDevice currentDevice] uniqueIdentifier];
As per the docs, this is deprecated and may not be supported in future. Also, if you try to submit ANY app that uses this to the App store, it will be rejected during review. This doesn't apply to Enterprise Apps, only Apps submitted to the store. And nothing stopping you from writing one for your own use.
The 'Approved' device ID now is Advertising ID.
Also... now that I think about it, if you search around in the iOS App store for UUID you will find a bunch of FREE Apps that will display that information on the screen for your device.

Access private APIs on NON-jailbroken devices for Business use ONLY

This question follows the answer provided by Nate on this link:
How do I change my iOS applications' entitlements?
It seems the described procedure is to be applied on Jailbroken devices.
I'm interested in being able to turn off the screen via my iOS application.
Previous answers point to doing this:
void (*BKSDisplayServicesSetScreenBlanked)(BOOL blanked) = (void (*)(BOOL blanked))dlsym(RTLD_DEFAULT, "BKSDisplayServicesSetScreenBlanked");
Then
BKSDisplayServicesSetScreenBlanked(1); // 1 to dim, 0 to undim
I read that the app also needs com.apple.backboard.client entitlement.
This is where my knowledge stops.
How can I use this in my app if the app is ONLY to be used in a business context controlled via Apple's MDM platform ?
I do not want to jailbreak the device.
First of all, very interesting question. Unfortunately, I don't have the answer, but have some info to share:
I am not aware of any method to add entitlements to 3rd party apps on NON jailbroken phone. You can check my question here: Does anybody know a way to add entitlement to iOS application for non jailbroken device? A lot of upvotes, no anwer thought :(
Generally speaking, entitlement area was reverse engineered to death and there is quite small chance of finding some holes around it. So, I would say, you will have to dump BKSDisplayServices method and search for something else to turn off screen.
I tried to find a way to turn off display on non-jailbroken device too, even posted a bounty on it: Turn off display in iPhone OS (iOS)
There were several answers, but none of them worked well enough.

Resources