Skip to content

Instantly share code, notes, and snippets.

@KentarouKanno
Last active April 28, 2018 00:09
Show Gist options
  • Save KentarouKanno/a081f13b6a2f12b666391405075a837d to your computer and use it in GitHub Desktop.
Save KentarouKanno/a081f13b6a2f12b666391405075a837d to your computer and use it in GitHub Desktop.
iOSModelType

iOSModelName

  • iOSの端末情報を取得するクラス
import UIKit
/* http://www.enterpriseios.com/wiki/iOS_Devices */

enum iOSModelType: String {
    
    case iPodTouch5
    case iPodTouch6
    case iPhone3
    case iPhone4
    case iPhone4s
    case iPhone5
    case iPhone5c
    case iPhone5s
    case iPhone6
    case iPhone6Plus
    case iPhone6s
    case iPhone6sPlus
    case iPhoneSE
    case iPhone7
    case iPhone7Plus
    case iPhone8
    case iPhone8Plus
    case iPhoneX
    case iPad /* iPad5, iPad Pro, iPad Pro2 */
    case iPad2
    case iPad3
    case iPad4
    case iPadAir
    case iPadAir2
    case iPadMini
    case iPadMini2
    case iPadMini3
    case iPadMini4
    case iPadPro97
    case iPadPro129
    case simulator
    case unknowniPod
    case unknowniPhone
    case unknowniPad
    case unknown
}

class Device: NSObject {
    
    // ====================================
    //public properties
    var size = UIScreen.main.bounds.size
    var frame = UIScreen.main.bounds
    var width = UIScreen.main.bounds.size.width
    var height = UIScreen.main.bounds.size.height
    var orientation = UIDevice().orientation
    var statusBarHeight = UIApplication.shared.statusBarFrame.height
    var modelType: iOSModelType!
    var is_iPod   = false
    var is_iPhone = false
    var is_iPad   = false
    
    // ====================================
    //init
    override init() {
        super.init()
        modelType = getModelType()
        setUpModelDeviceType()
    }
    
    // ====================================
    //private methods
    private func getModelType() -> iOSModelType {
        var systemInfo = utsname()
        uname(&systemInfo)
        
        let mirror = Mirror(reflecting: systemInfo.machine)
        var identifier = ""
        
        for child in mirror.children {
            if let value = child.value as? Int8 {
                if value != 0{
                    identifier += String(UnicodeScalar(UInt8(value)))
                }
            }
        }
        
        print(identifier)
        
        if let myDevice = DeviceList[identifier] {
            return myDevice
        } else {
            if identifier.contains("iPod") {
                return .unknowniPod
            } else if identifier.contains("iPhone") {
                return .unknowniPhone
            } else if identifier.contains("iPad") {
                return .unknowniPad
            } else{
                return .unknown
            }
        }
    }
    
    private func setUpModelDeviceType() {
        if modelType.rawValue.contains("iPhone") {
            is_iPhone = true
        } else if modelType.rawValue.contains("iPad") {
            is_iPad = true
        } else if modelType.rawValue.contains("iPod") {
            is_iPod = true
        }
    }
    
    // ====================================
    //Data
    private let DeviceList:[String: iOSModelType] = [
        "iPod5,1"   : .iPodTouch5,
        "iPod7,1"   : .iPodTouch6,
        "iPhone3,1" : .iPhone4,
        "iPhone3,2" : .iPhone4,
        "iPhone3,3" : .iPhone4,
        "iPhone4,1" : .iPhone4s,
        "iPhone5,1" : .iPhone5,
        "iPhone5,2" : .iPhone5,
        "iPhone5,3" : .iPhone5c,
        "iPhone5,4" : .iPhone5c,
        "iPhone6,1" : .iPhone5s,
        "iPhone6,2" : .iPhone5s,
        "iPhone7,2" : .iPhone6,
        "iPhone7,1" : .iPhone6Plus,
        "iPhone8,1" : .iPhone6s,
        "iPhone8,2" : .iPhone6sPlus,
        "iPhone8,4" : .iPhoneSE,
        "iPhone9,1" : .iPhone7,
        "iPhone9,2" : .iPhone7Plus,
        "iPhone10,4": .iPhone8,
        "iPhone10,5": .iPhone8Plus,
        "iPhone10,6": .iPhoneX,
        "iPad2,1"   : .iPad2,
        "iPad2,2"   : .iPad2,
        "iPad2,3"   : .iPad2,
        "iPad2,4"   : .iPad2,
        "iPad2,5"   : .iPadMini,
        "iPad2,6"   : .iPadMini,
        "iPad2,7"   : .iPadMini,
        "iPad3,1"   : .iPad3,
        "iPad3,2"   : .iPad3,
        "iPad3,3"   : .iPad3,
        "iPad3,4"   : .iPad4,
        "iPad3,5"   : .iPad4,
        "iPad3,6"   : .iPad4,
        "iPad4,1"   : .iPadAir,
        "iPad4,2"   : .iPadAir,
        "iPad4,3"   : .iPadAir,
        "iPad4,4"   : .iPadMini2,
        "iPad4,5"   : .iPadMini2,
        "iPad4,6"   : .iPadMini2,
        "iPad4,7"   : .iPadMini3,
        "iPad4,8"   : .iPadMini3,
        "iPad4,9"   : .iPadMini3,
        "iPad5,1"   : .iPadMini4,
        "iPad5,2"   : .iPadMini4,
        "iPad5,3"   : .iPadAir2,
        "iPad5,4"   : .iPadAir2,
        "iPad6,3"   : .iPadPro97,
        "iPad6,4"   : .iPadPro97,
        "iPad6,7"   : .iPadPro129,
        "iPad6,8"   : .iPadPro129,
        "iPad"      : .iPad,
        "x86_64"    : .simulator,
        "i386"      : .simulator
    ]
}
  • Usage
let device = "iPhone Model:" + Device().modelType.rawValue
//=> iPhone Model:iPhone7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment