Coder Social home page Coder Social logo

devicedetector's Introduction

DeviceDetector

DeviceDetector detects apple's devices(iPhone and iPad) model by using identifier code. I referred to this wiki. It does not support old models that can't install iOS 13

public final class DeviceDetector {
    public static let current = DeviceDetector()
    public let device: DeviceOptionSet
    public let deviceName: String
    public let isiPad: Bool
    public let isiPhone: Bool
    public let hasSafeArea: Bool
    private let deviceDict: NSDictionary
    private init(identifier: String? = nil) {
        if let appleDevices = Bundle.module.path(forResource: "Device", ofType: "plist"),
           let dict = NSDictionary(contentsOfFile: appleDevices) {
            deviceDict = dict
        }
        else {
            deviceDict = [:]
        }
        deviceName = UIDevice.current.deviceName(id: identifier, dict: deviceDict) ?? ""
        device = UIDevice.current.device(name: deviceName)
        isiPad = device.isSubset(of: .iPadSet)
        isiPhone = device.isSubset(of: .iPhoneSet)
        if isiPhone, device.isSubset(of: .iPhoneSafeAreaSet) {
            hasSafeArea = true
        }
        else {
            hasSafeArea = false
        }
    }
    
    public convenience init?(id identifier: String) {
        self.init(identifier: identifier)
    }
}

Sample

test3 test4 test1 test2
import UIKit
import DeviceDetector
class ViewController: UIViewController {
    @IBOutlet weak var label: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let detector = DeviceDetector.current
        let deviceName = detector.deviceName
        let device = detector.device
        
        let information = """
        Model: \(deviceName)
        iPhone?: \(detector.isiPhone)
        iPad?: \(detector.isiPad)
        Notch?: \(detector.hasSafeArea)
        
        4inch?: \(device.isSubset(of: .iPhone4inchSet))
        4.7inch?: \(device.isSubset(of: .iPhone4_7inchSet))
        iPhoneSE?: \(device.isSubset(of: .iPhoneSESet))
        iPhonePlus?: \(device.isSubset(of: .iPhonePlusSet))
        iPadPro?: \(device.isSubset(of: .iPadProSet))
        """
        label.text = information
    }
}

Features

You can check the device model not only physical device but also simulator.

  1. Check the current device
import DeviceDetector
DeviceDetector.current.device //DeviceOptionSet.iPhone11
  1. Check the current device name (String)
import DeviceDetector
DeviceDetector.current.deviceName //iPhone11
  1. Check whether iPhone or iPad
import DeviceDetector
DeviceDetector.current.isiPhone //true or false
DeviceDetector.current.isiPad //true or false
  1. Device Groups It uses OptionSet. You can check Is your model subset of the device groups.
  • iPhoneSESet (iPhoneSE1, iPhoneSE2, iPhoneSE3)
import DeviceDetector
if DeviceDetector.current.device.isSubset(of: .iPhoneSESet) {
  print("This is iPhoneSE")
}
  • iPhonePlusSet (iPhone6Plus, iPhone7Plus, iPhone8Plus)
import DeviceDetector
if DeviceDetector.current.device.isSubset(of: .iPhonePlusSet) {
  print("This is iPhonePlus")
}
  • iPhone4_7inchSet (iPhoneSE2, iPhoneSE3, iPhone6, iPhone7, iPhone8)
import DeviceDetector
if DeviceDetector.current.device.isSubset(of: .iPhone4_7inchSet) {
  print("This is 4.7inch")
}
  • iPhone4inchSet (iPhoneSE1)
import DeviceDetector
if DeviceDetector.current.device.isSubset(of: .iPhone4inchSet) {
  print("This is 4inch")
}
  • iPhoneSafeAreaSet
import DeviceDetector
//Option 1. Use DeviceSet.iPhoneSafeAreaSet
if DeviceDetector.current.device.isSubset(of: .iPhoneSafeAreaSet) {
  print("This iPhone has safeArea")
}

//Option 2. DeviceDetector.shared.hasSafeArea
DeviceDetector.current.hasSafeArea //true or false
  • iPadProSet (iPadPro9_7inch, iPadPro10_5inch, iPadPro11inch, iPadPro12_9inch)
import DeviceDetector
if DeviceDetector.current.device.isSubset(of: .iPadProSet) {
  print("This is iPad Pro")
}

Environment

Above iOS 13

How to install, SPM

Use Swift Package Manager

UnitTest (23 tests)

tests

TODO

Support Mac and Apple Watch

devicedetector's People

Contributors

shawnbaek avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.