# iPhone Duo Detection

**URL:** <https://forum.xojo.com/t/iphone-duo-detection/88967>\
**Category:** iOS\
**Created:** [October 5, 2026, 7:43pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967 "2026-10-05T19:43:07Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![Frederick\_Harrison](https://forum.xojo.com/letter_avatar_proxy/v4/letter/f/9dc877/32.png) [@Frederick\_Harrison](https://forum.xojo.com/u/Frederick_Harrison)\
**Post date:** [October 5, 2026, 7:43pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/1 "2026-10-05T19:43:07Z")

</div>

I have several iPhone Apps that I need to update for the new iPhone Duo. I have been using GetScreenSize() funtion to determine the iPhone Model. The problem is that GetScreenSize() returns W:375 , H: 667 for both the iPhone Duo and the iPhone SE.

Jade supplied several functions to get device size but none has worked with iOS 26 or 27 and Using the latest Xojo 2026 R3 Beta did not did help so far.

**Jade supplied:**

**Var CurrentH As Integer = GetHSizeClass(Traits)  
Var CurrentV As Integer = GetVSizeClass(Traits)**

**returns 375, 667. (same as GetScreenSize)**

**Var B As CGRect = BoundsProp(ViewPtr)**

**returns 375, 667**

I need a way to determine if a device is the iPhone Duo so that I can optimize my apps to take advantage to the iPad Like mode.

Help Me Please!!

---

<div class="post-metadata">

**Author:** ![Emile\_Schwarz](https://forum.xojo.com/letter_avatar_proxy/v4/letter/e/90ced4/32.png) [@Emile\_Schwarz](https://forum.xojo.com/u/Emile_Schwarz)\
**Post date:** [October 5, 2026, 9:12pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/2 "2026-10-05T21:12:27Z")

</div>

Goodle’s Gemini says:

 ![image](https://forum.xojo.com/uploads/default/original/3X/0/2/022ae426640f095bac734f8d781e470e9f6ce37f.png)

Try to query Apple Developer site with a better string I used above…

---

<div class="post-metadata">

**Author:** ![Thom\_McGrath](https://forum.xojo.com/user_avatar/forum.xojo.com/thom_mcgrath/32/192_2.png) [@Thom\_McGrath](https://forum.xojo.com/u/Thom_McGrath)\
**Post date:** [October 5, 2026, 10:21pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/3 "2026-10-05T22:21:06Z")

</div>

Why would you even bother posting this? You’re basically just submitting a reply that says “I don’t know.”

---

<div class="post-metadata">

**Author:** ![Jeremie\_L](https://forum.xojo.com/user_avatar/forum.xojo.com/jeremie_l/32/150_2.png) [@Jeremie\_L](https://forum.xojo.com/u/Jeremie_L)\
**Post date:** [October 5, 2026, 11:34pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/4 "2026-10-05T23:34:47Z")

</div>

None of the solutions you found will work for the moment, but they will in the future.

Your Xojo app needs to be built against the latest version of the iOS SDK to be able to detect iPhone duo. Xojo currently builds linked to the iOS 26 SDK which will display your apps in a windowed mode on the iPhone duo. It was the same when the iPhone X was released.

---

<div class="post-metadata">

**Author:** ![Frederick\_Harrison](https://forum.xojo.com/letter_avatar_proxy/v4/letter/f/9dc877/32.png) [@Frederick\_Harrison](https://forum.xojo.com/u/Frederick_Harrison)\
**Post date:** [October 5, 2026, 11:57pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/5 "2026-10-05T23:57:30Z")

</div>

I was hoping that Xojo would link with 27. Guess not.

---

<div class="post-metadata">

**Author:** ![Christian\_Schmitz](https://forum.xojo.com/user_avatar/forum.xojo.com/christian_schmitz/32/158_2.png) [@Christian\_Schmitz](https://forum.xojo.com/u/Christian_Schmitz)\
**Post date:** [October 6, 2026, 1:25am UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/6 "2026-10-06T01:25:04Z")

</div>

I would assume that only happens when Xcode 27.1 gets released.  
Xojo can’t build Xojo based on a Xcode beta versions.

And check UIDevice’s model name property via declare or plugin.

---

<div class="post-metadata">

**Author:** ![Horst\_Jehle](https://forum.xojo.com/user_avatar/forum.xojo.com/horst_jehle/32/5432_2.png) [@Horst\_Jehle](https://forum.xojo.com/u/Horst_Jehle)\
**Post date:** [October 6, 2026, 1:27pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/7 "2026-10-06T13:27:01Z")

</div>

> [@Frederick\_Harrison](#):
>
> need a way to determine if a device is the i

> Detecting all iOS devices goes with this method.

> Public Function GetHardwareModel() As String  
> // Last Update 06.10.2026  
> //  
> // [https://stackoverflow.com/questions/26028918/how-to-determine-the-current-iphone-device-model#26962452](https://stackoverflow.com/questions/26028918/how-to-determine-the-current-iphone-device-model#26962452)  
> // Model Reference  
> // [https://www.theiphonewiki.com/wiki/Models](https://www.theiphonewiki.com/wiki/Models)
> 
> Declare Function sysctlbyname Lib “UIKit” (name As CString, value As Ptr, ByRef size As UInt32, newp As Ptr, newlen As UInt32) As Integer
> 
> // First call to determine size  
> Var size As UInt32  
> Call sysctlbyname(“hw.machine”, Nil, size, Nil, 0)
> 
> // Reserve memory  
> Var p As New MemoryBlock(size)
> 
> // Second call: Retrieve value  
> If sysctlbyname(“hw.machine”, p, size, Nil, 0) = 0 Then
> 
> ```auto
> var hw_machine As String = p.CString(0) // Device identifier: iPhone15,3
> 
> select case hw_machine
>   
> // #######################
> // iPhone
> // #######################
> //
> case "iPhone1,1"
> return "iPhone"
>   
> case "iPhone1,2"
> return "iPhone 3G"
>   
> case "iPhone2,1"
> return "iPhone 3GS"
>   
> case "iPhone3,1", "iPhone3,2"
> return "iPhone 4 (GSM)"
>   
> case "iPhone3,3"
> return "iPhone 4 (GSM)"
>   
> case "iPhone4,1"
> return "iPhone 4s"
>   
> case "iPhone5,1"
> return "iPhone 5 (GSM)"
>   
> case "iPhone5,2"
> return "iPhone 5 China"
>   
> case "iPhone5,3", "iPhone5,4"
> return "iPhone 5c"
>   
> case "iPhone6,1"
> return "iPhone 5s"
>   
> case "iPhone7,2"
> return "iPhone 6"
>   
> case "iPhone7,1"
> return "iPhone 6 Plus"
>   
> case "iPhone8,1"
> return "iPhone 6s"
>   
> case "iPhone8,2"
> return "iPhone 6s Plus"
>   
> case "iPhone8,4"
> return "iPhone SE"
>   
> case "iPhone9,1", "iPhone9,3"
> return "iPhone 7"
>   
> case "iPhone9,2", "iPhone9,4"
> return "iPhone 7 Plus"
>   
> case "iPhone10,1", "iPhone10,4"
> return "iPhone 8"
>   
> case "iPhone10,2", "iPhone10,5"
> return "iPhone 8 Plus"
>   
> case "iPhone10,3", "iPhone10,6"
> return "iPhone X"
>   
> case "iPhone11,2"
> return "iPhone XS"
>   
> case "iPhone11,6"
> return "iPhone XS Max"
>   
> case "iPhone11,3"
> return "iPhone XR"
>   
> case "iPhone12,1"
> return "iPhone 11"
>   
> case "iPhone12,3"
> return "iPhone 11 Pro"
>   
> case "iPhone12,5"
> return "iPhone 11 Pro Max"
>   
> case "iPhone12,8"
> return "iPhone SE 2nd Generation"
>   
> case "iPhone13,1"
> return "iPhone 12 Mini"
>   
> case "iPhone13,2"
> return "iPhone 12"
>   
> case "iPhone13,3"
> return "iPhone 12 Pro"
>   
> case "iPhone13,4"
> return "iPhone 12 Pro Max"
>   
> case "iPhone14,2"
> return "iPhone 13 Pro"
>   
> case "iPhone14,3"
> return "iPhone 13 Pro Max"
>   
> case "iPhone14,4"
> return "iPhone 13 Mini"
>   
> case "iPhone14,5"
> return "iPhone 13"
>   
> case "iPhone14,6"
> return "iPhone SE 3rd Generation"
>   
> case "iPhone14,7"
> return "iPhone 14"
>   
> case "iPhone15,2"
> return "iPhone 14 Pro"
>   
> case "iPhone15,3"
> return "iPhone 14 Pro Max"
>   
> case "iPhone14,8"
> return "iPhone 14 Plus"
>   
> case "iPhone15,4"
> return "iPhone 15"
>   
> case "iPhone15,5"
> return "iPhone 15 Plus"
>   
> case "iPhone16,1"
> return "iPhone 15 Pro"
>   
> case "iPhone16,2"
> return "iPhone 15 Pro Max"
>   
> case "iPhone17,3"
> return "iPhone 16"
>   
> case "iPhone17,4"
> return "iPhone 16 Plus"
>   
> case "iPhone17,5"
> return "iPhone 16e"
>   
> case "iPhone18,3"
> return "iPhone 17"
>   
> case "iPhone18,1"
> return "iPhone 17 Pro"
>   
> case "iPhone18,2"
> return "iPhone 17 Pro Max"
>   
> case "iPhone18,4"
> return "iPhone 17 Air"
>   
> case "iPhone18,5"
> return "iPhone 17e"
>   
> case "iPhone19,2"
> return "iPhone 18 Pro"
>   
> case "iPhone19,3", "iPhone19,7"
> return "iPhone 18 Pro Max"
>   
> case "iPhone19,4"
> return "iPhone Duo"
>   
> // #######################
> // iPod
> // #######################
> //
> case "iPod1,1"
> return "iPod Touch"
>   
> case "iPod2,1"
> return "iPod Touch 2nd Generation"
>   
> case "iPod3,1"
> return "iPod Touch 3rd Generation"
>   
> case "iPod4,1"
> return "iPod Touch 4th Generation"
>   
> case "iPod5,1"
> return "iPod Touch 5th Generation"
>   
> case "iPod7,1"
> return "iPod Touch 6th Generation"
>   
> case "iPod9,1"
> return "iPod Touch 7th Generation"
>   
> // #######################
> // iPad Mini
> // #######################
> //
> case "iPad2,5", "iPad2,6", "iPad2,7"
> return "iPad Mini"
>   
> case "iPad4,4", "iPad4,5", "iPad4,6"
> return "iPad Mini 2nd Generation"
>   
> case "iPad4,7", "iPad4,8", "iPad4,9"
> return "iPad Mini 3rd Generation"
>   
> case "iPad5,1", "iPad5,2"
> return "iPad Mini 4th Generation"
>   
> case "iPad11,1", "iPad11,2"
> return "iPad Mini 5th Generation"
>   
> case "iPad14,1", "iPad14,2"
> return "iPad Mini (6th Generation)"
>   
> case "iPad16,1", "iPad16,2"
> return "iPad mini (A17 Pro)"
>   
>   
>   
> // #######################
> // iPad
> // #######################
> //
> case "iPad1,1"
> return "iPad"
>   
> case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4"
> return "iPad 2"
>   
> case "iPad3,1", "iPad3,2", "iPad3,3"
> return "iPad 3rd Generation"
>   
> case "iPad3,4", "iPad3,5", "iPad3,6"
> return "iPad 4th Generation"
>   
> case "iPad6,11", "iPad6,12"
> return "iPad 5th Generation"
>   
> case "iPad7,5", "iPad7,6"
> return "iPad 6th Generation"
>   
> case "iPad7,11", "iPad7,12"
> return "iPad 7th Generation"
>   
> case "iPad11,6", "iPad11,7"
> return "iPad 8th Generation"
>   
> case "iPad12,1", "iPad12,2"
> return "iPad (9th Generation)"
>   
> case "iPad13,18", "iPad13,19"
> return "iPad (10th generation)"
>   
> case "iPad15,7", "iPad15,8"
> return "iPad (A16)"
>   
> case "iPad16,5", "iPad16,6"
> return "iPad Pro (13-inch) (M4)"
>   
> case "iPad17,3", "iPad17,4"
> return "iPad Pro (13-inch) (M5)"
>   
> // #######################
> // iPad Air
> // #######################
> //
> case "iPad4,1", "iPad4,2", "iPad4,3"
> return "iPad Air"
>   
> case "iPad5,3", "iPad5,4"
> return "iPad Air 2"
>   
> case "iPad11,3", "iPad11,4"
> return "iPad Air 3nd Generation"
>   
> case "iPad13,1", "iPad13,2"
> return "iPad Air 4th Generation"
>   
> case "iPad13,16", "iPad13,17"
> return "iPad Air 5th generation"
>   
> case "iPad14,8", "iPad14,9"
> return "iPad Air 11-inch (M2)"
>   
> case "iPad14,10", "iPad14,11"
> return "iPad Air 13-inch (M2)"
>   
> case "iPad15,3", "iPad15,4"
> return "iPad Air 11-inch (M3)"
>   
> case "iPad15,5", "iPad15,6"
> Return "iPad Air 13-inch (M3)"
>   
> case "iPad16,8", "iPad16,9"
> Return "iPad Air 11-inch (M4)"
>   
> case "iPad16,10", "iPad16,11"
> Return "iPad Air 13-inch (M4)"
>   
>   
> // #######################
> // iPad Pro
> // #######################
> //
> case "iPad6,3", "iPad6,4"
> return "iPad Pro 9.7"""
>   
> case "iPad7,3", "iPad7,4"
> return "iPad Pro 10.5"""
>   
> case "iPad8,1", "iPad8,2", "iPad8,3", "iPad8,4"
> return "iPad Pro 11"""
>   
> case "iPad8,9", "iPad8,10"
> return "iPad Pro 11"" 2nd Generation"
>   
> case "iPad13,4", "iPad13,5", "iPad13,6", "iPad13,7"
> return "iPad Pro 11"" 3rd Generation"
>   
> case "iPad6,7", "iPad6,8"
> return "iPad Pro 12.9"""
>   
> case "iPad7,1", "iPad7,2"
> return "iPad Pro 12.9"" 2nd Generation"
>   
> case "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8"
> return "iPad Pro 12.9"" 3nd Generation"
>   
> case "iPad8,11", "iPad8,12"
> return "iPad Pro 12.9"" 4th Generation"
>   
> case "iPad13,8", "iPad13,9", "iPad13,10", "iPad13,11"
> return "iPad Pro 12.9"" 5th generation"
>   
> case "iPad14,3", "iPad14,4"
> return "iPad Pro 11-inch 4th generation"
>   
> case "iPad14,5", "iPad14,6"
> return "iPad Pro 12.9-inch 6th generation"
>   
> case "iPad16,3", "iPad16,4"
> return "iPad Pro 11-inch (M4)"
>   
> case "iPad16,5", "iPad16,6"
> return "iPad Pro 13-inch (M4)"
>   
> case "iPad17,1", "iPad17,2"
> return "iPad Pro 11-inch (M5)"
>   
> case "iPad17,3", "iPad17,4"
> return "iPad Pro 13-inch (M5)"
>   
>   
>   
> // #######################
> // Xcode Simulator
> // #######################
> //
> case "x86_64", "arm64"
> return "Xcode Simulator"
>   
> End Select
> 
> ```

> Else  
> Return “Unknown”  
> End If  
> End Function

---

<div class="post-metadata">

**Author:** ![Frederick\_Harrison](https://forum.xojo.com/letter_avatar_proxy/v4/letter/f/9dc877/32.png) [@Frederick\_Harrison](https://forum.xojo.com/u/Frederick_Harrison)\
**Post date:** [October 6, 2026, 4:31pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/8 "2026-10-06T16:31:04Z")

</div>

Compile errors: UIKit does not exist.

 ![GetHardwareModel_Errors](https://forum.xojo.com/uploads/default/original/3X/0/c/0cb6cdc57f9aeef03e71d3b35fe66f166e5dd402.png)

This is what I copied and pasted to test.

Declare Function sysctlbyname Lib “UIKit” (name As CString, value As Ptr, ByRef size As UInt32, newp As Ptr, newlen As UInt32) As Integer

// First call to determine size  
Var size As UInt32  
Call sysctlbyname(“hw.machine”, Nil, size, Nil, 0)

// Reserve memory  
Var p As New MemoryBlock(size)

If sysctlbyname(“hw.machine”, p, size, Nil, 0) = 0 Then

Var hw\_machine As String = p.CString(0) // Device identifier: iPhone15,3

Return hw\_machine  
Else  
Return “Unknown”

End

---

<div class="post-metadata">

**Author:** ![Frederick\_Harrison](https://forum.xojo.com/letter_avatar_proxy/v4/letter/f/9dc877/32.png) [@Frederick\_Harrison](https://forum.xojo.com/u/Frederick_Harrison)\
**Post date:** [October 6, 2026, 4:54pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/9 "2026-10-06T16:54:11Z")

</div>

Got the compile errors fixed by manually typing the Declares instead of pasting.

However, dose nothing to help detecting the iPhone model in debug mode as always returns

Xcode Simulator

No matter which iPhone I run the app on.

Mike

---

<div class="post-metadata">

**Author:** ![Horst\_Jehle](https://forum.xojo.com/user_avatar/forum.xojo.com/horst_jehle/32/5432_2.png) [@Horst\_Jehle](https://forum.xojo.com/u/Horst_Jehle)\
**Post date:** [October 6, 2026, 6:08pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/10 "2026-10-06T18:08:52Z")

</div>

To use the method “GetHardwareModel” you need this extension:

[UIKit for iOS](https://github.com/kingj5/iOSKit).

---

<div class="post-metadata">

**Author:** ![Frederick\_Harrison](https://forum.xojo.com/letter_avatar_proxy/v4/letter/f/9dc877/32.png) [@Frederick\_Harrison](https://forum.xojo.com/u/Frederick_Harrison)\
**Post date:** [October 6, 2026, 8:45pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/11 "2026-10-06T20:45:57Z")

</div>

GetHardwareModel() works fine when running debug on actual hardware device. Returns “iPhone17,2” for my iPhone 16 Pro Max. Does not work on the Xcode Simulator, always returns ARM64.

GetHardwareModel did not have a test for “iPhone 17.2” so I added it.

Guess I will have to wait for some future Xojo that has support for iOS 27 and iPhone Duo with Simulator support.

At that Time I will have pay a fortune for Xojo again as my Xojo Pro expires today​😟

Mike

Mike

---

<div class="post-metadata">

**Author:** ![Thom\_McGrath](https://forum.xojo.com/user_avatar/forum.xojo.com/thom_mcgrath/32/192_2.png) [@Thom\_McGrath](https://forum.xojo.com/u/Thom_McGrath)\
**Post date:** [October 6, 2026, 9:41pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/12 "2026-10-06T21:41:28Z")

</div>

Xojo typically runs a 30% off sale for Black Friday.

---

<div class="post-metadata">

**Author:** ![Frederick\_Harrison](https://forum.xojo.com/letter_avatar_proxy/v4/letter/f/9dc877/32.png) [@Frederick\_Harrison](https://forum.xojo.com/u/Frederick_Harrison)\
**Post date:** [October 6, 2026, 9:59pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/13 "2026-10-06T21:59:35Z")

</div>

Yes, but they just charged my Credit Card $799 even though I had taken my account off of auto renew.

Not happy about!

---

<div class="post-metadata">

**Author:** ![brian\_franco](https://forum.xojo.com/user_avatar/forum.xojo.com/brian_franco/32/156_2.png) [@brian\_franco](https://forum.xojo.com/u/brian_franco)\
**Post date:** [October 6, 2026, 10:31pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/14 "2026-10-06T22:31:30Z")

</div>

@Frederick_Harrison  
[hello@xojo.com](mailto:hello@xojo.com)  
90 day return policy

---

<div class="post-metadata">

**Author:** ![Thom\_McGrath](https://forum.xojo.com/user_avatar/forum.xojo.com/thom_mcgrath/32/192_2.png) [@Thom\_McGrath](https://forum.xojo.com/u/Thom_McGrath)\
**Post date:** [October 6, 2026, 10:32pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/15 "2026-10-06T22:32:04Z")

</div>

Yeah, I would be too. They have a 30 day guarantee, so you could take advantage of that. But you’d only save $100 in the end, and that’s assuming they actually do the sale this year. Xojo is a US company and our economy sucks right now, so they might not, or might do a worse version.

I’m planning to renew if they do the 30% off sale.

---

<div class="post-metadata">

**Author:** ![brian\_franco](https://forum.xojo.com/user_avatar/forum.xojo.com/brian_franco/32/156_2.png) [@brian\_franco](https://forum.xojo.com/u/brian_franco)\
**Post date:** [October 6, 2026, 10:33pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/16 "2026-10-06T22:33:38Z")

</div>

@Thom_McGrath  
is it 30 day return now? used to be 90 days

---

<div class="post-metadata">

**Author:** ![Thom\_McGrath](https://forum.xojo.com/user_avatar/forum.xojo.com/thom_mcgrath/32/192_2.png) [@Thom\_McGrath](https://forum.xojo.com/u/Thom_McGrath)\
**Post date:** [October 6, 2026, 11:11pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/17 "2026-10-06T23:11:48Z")

</div>

No it looks like I am wrong, it is 90 days. That’s surprisingly generous.

---

<div class="post-metadata">

**Author:** ![Jerry\_Fritschle](https://forum.xojo.com/user_avatar/forum.xojo.com/jerry_fritschle/32/223_2.png) [@Jerry\_Fritschle](https://forum.xojo.com/u/Jerry_Fritschle)\
**Post date:** [October 6, 2026, 11:13pm UTC](https://forum.xojo.com/t/iphone-duo-detection/88967/18 "2026-10-06T23:13:40Z")

</div>

> [@Frederick\_Harrison](#):
>
> Yes, but they just charged my Credit Card $799 even though I had taken my account off of auto renew.
> 
> Not happy about!

When I’ve dealt with them in person, I’ve found them to be quite reasonable.
