iosobjective-ciphoneiphone-xiphone-xs

How to programmatically detect iPhone XS or iPhone X?


One of my apps connects to a web app service that delivers device specific news to to the user. To adapt this to the latest iPhone versions I need to programmatically distinguish between the iPhone XS and iPhone X. How can this be done?

[[UIScreen mainScreen] bounds].size was always a good starting point to tell the different devices apart. However, iPhone XS and iPhone X have the same screen dimensions: 1125 x 2436. Thus using [[UIScreen mainScreen] bounds].size does not work in this case.

Is there any other method to detect the latest iPhone versions?

EDIT: This is NOT a duplicate of the question "How to detected iPhone X" since all answers/solutions discussed there use the screen dimensions to specify the device type. As described above iPhone X and iPhone XS have the exact same dimensions and thus the solutions cannot tell these two apart...


Solution

  • I use DeviceUtil to determine an iOS device's model.

    According to this DeviceUtil GitHub post, the returned UIDevice hardwareString values are:

    iPhone11,2 = iPhone XS
    iPhone11,4 = iPhone XS Max
    iPhone11,8 = iPhone XR
    

    Curiously, the Xcode 10 GM Simulator's [UIScreen mainScreen].bounds.size returns 375 x 812 for iPhone X, XS, XS Max, and R devices. I had expected 414 x 896 for the XS Max and XR.