anatoliyv / AssistantKit
- четверг, 16 июня 2016 г. в 03:12:25
Swift
Easy way to detect iOS device properties, OS versions and work with screen sizes. Powered by Swift.
Easy way to detect device environment:
Helps to:
AssistantKit is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "AssistantKit"
To get the current device type, use:
let device = Device.type
switch device {
case .Phone: print("iPhone")
case .Pad: print("iPad")
case .Pod: print("iPod")
case .Simulator: print("Simulator")
default: print("Unknown")
}
You can check the exact device version with next code. All possible values of version
can be
found in the Version
enum, located in the Version.swift
file.
let version = Device.version
switch version {
case .Phone4: print("iPhone 4")
case .Phone4S: print("iPhone 4S")
case .Phone5: print("iPhone 5")
case .Phone5C: print("iPhone 5C")
case .Phone5S: print("iPhone 5S")
case .Phone6: print("iPhone 6")
case .Phone6S: print("iPhone 6S")
case .Phone6Plus: print("iPhone 6 Plus")
case .Phone6SPlus: print("iPhone 6 S Plus")
case .Pad1: print("iPad 1")
case .Pad2: print("iPad 2")
case .Pad3: print("iPad 3")
case .Pad4: print("iPad 4")
case .PadAir: print("iPad Air")
case .PadAir2: print("iPad Air 2")
case .PadMini: print("iPad Mini")
case .PadMini2: print("iPad Mini 2")
case .PadMini3: print("iPad Mini 3")
case .PadMini4: print("iPad Mini 4")
case .PadPro: print("iPad Pro")
case .PodTouch1: print("iPod 1")
case .PodTouch2: print("iPod 2")
case .PodTouch3: print("iPod 3")
case .PodTouch4: print("iPod 4")
case .PodTouch5: print("iPod 5")
case .PodTouch6: print("iPod 6")
case .Simulator: print("Simulator")
default: print("Unknown device")
}
There are few properties that detect device type
Device.isPhone // true for iPhones even if it's Simulator
Device.isPad // true for iPads even if it's Simulator
Device.isPadPro // true for iPad Pros even if it's Simulator
Device.isPod // true for iPods
Device.isSimulator // true for Simulators
Detecting screen size can be detected with next code. All possible values could be
found in the Screen
enum, located in Screen.swift
.
let screen = Device.screen
switch screen {
case .Inches_3_5: print("3.5 inches")
case .Inches_4_0: print("4.0 inches")
case .Inches_4_7: print("4.7 inches")
case .Inches_5_5: print("5.5 inches")
case .Inches_7_9: print("7.9 inches")
case .Inches_9_7: print("9.7 inches")
case .Inches_12_9: print("12.9 inches")
default: print("Other display")
}
Often it is required to assign different parameters based on specific screen resolution.
There are 3 methods that will help you to detect what parameters to use. But
first of all let me introduce ScreenFamily
.
This is enum that breaks all possible screens into 3 groups:
.Small
: All iPhones/iPods without iPhone 6 Plus.Medium
: iPhone 6 Plus and iPad Mini.Big
: iPad and iPad ProYou can detect screen family by:
let family = Device.screen.family
And now back to methods:
To assign different values for iPhone and iPad devices you can use:
// Method definition
static public func size<T: AnyObject>(phone phone: T, pad: T) -> T
// Usage example
let size = Device.size(phone: 13, pad: 15)
let font = UIFont(name: "Arial", size: CGFloat(size))
On iPhones your font size will be 13.0, on iPads 15.0
Another method based on ScreenFamily
:
// Method definition
static public func size<T: AnyObject>(small small: T, medium: T, big: T) -> T
// Usage example
let otherSize = Device.size(small: 12, medium: 14, big: 15)
let otherFont = UIFont(name: "Arial", size: CGFloat(otherSize))
In this case for small screens your font will be 12.0, for medium 14.0 and for big 15.0 inches.
Important notice: By default if screen family can not be detected size
method will
assign small value.
Also you can return value for specific screen size. There is another size method you can use. Incoming parameter should be a screen size. If it is not defined nearest value will be used. Code example:
// Method definition
static public func size<T: AnyObject>(sizes sizes: [Screen : T]) -> T?
// Usage example
let sizes: [Screen: AnyObject] = [
.Inches_3_5: 12,
.Inches_4_0: 13,
.Inches_4_7: 14,
.Inches_9_7: 15
]
let exactSize = Device.size(sizes: sizes) as! Int
let _ = UIFont(name: "Arial", size: CGFloat(exactSize))
Important notice: This method can return nil
if you pass an empty array as a parameter. Be careful with implicit unwrapping.
After that your font will be:
let scale = Device.scale
switch scale {
case .X1: print("Not retina")
case .X2: print("Retina 2X")
case .X3: print("Retina 3X")
default: print("Unknown scale")
}
Also there is a property to detect if it's retina display:
Device.isRetina // true if device screen scale > 1.0
There are two properties that will help you to know current orientation:
Device.isLandscape // true if landscape
Device.isPortrait // true if portrait
You can detect iOS version in runtime. There are 5 different methods that will help you to detect it:
Device.osVersionString // Current version as a String i.e. "9.3"
Device.osVersion // Current version as a Float i.e. 9.3
Device.osVersionEqualTo("9.0") // true if iOS 9.0
Device.osVersionGreaterThan("9.0") // true if iOS > 9.0
Device.osVersionGreaterThanOrEqualTo("9.0") // true if iOS >= 9.0
Device.osVersionLessThan("9.0") // true if iOS < 9.0
Device.osVersionLessThanOrEqualTo("9.0") // true if iOS <= 9.0
There are few helper methods to make access to Documents and Caches directoies easier. Take a look at code examples:
Bundle.documentsDirectoryURL // URL to .DocumentDirectory
Bundle.documentsDirectoryPath // Path to .DocumentDirectory
Bundle.cachesDirectoryURL // URL to .CachesDirectory
Bundle.cachesDirectoryPath // Path to .CachesDirectory
let filePath = "directory/filename.txt"
Bundle.filePathInDocumentsDirectory(toFile: filePath) // Path to file in .DocumentDirectory
Bundle.filePathInCachesDirectory(toFile: filePath) // Path to file in .CachesDirectory
Write me or make a pull request if you have any ideas what else functionality can be useful in this repo.
AssistantKit is available under the MIT license. See the LICENSE file for more info.