Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.40 KB | None | 0 0
  1. //
  2. // Device.swift
  3. //
  4. // Created by Farhad Rismanchian on 19/1/17.
  5. // MIT licence
  6. //
  7.  
  8.  
  9. import Foundation
  10. import UIKit
  11.  
  12.  
  13. // MARK: - Device Structure
  14. struct Device {
  15.  
  16. // MARK: - Singletons
  17. static var TheCurrentDevice: UIDevice {
  18. struct Singleton {
  19. static let device = UIDevice.current
  20. }
  21. return Singleton.device
  22. }
  23.  
  24. static var TheCurrentDeviceVersion: Float {
  25. struct Singleton {
  26. static let version = (UIDevice.current.systemVersion as NSString).floatValue
  27. }
  28. return Singleton.version
  29. }
  30.  
  31. static var TheCurrentDeviceHeight: CGFloat {
  32. struct Singleton {
  33. static let height = UIScreen.main.bounds.size.height
  34. }
  35. return Singleton.height
  36. }
  37.  
  38. // MARK: - Device Idiom Checks
  39. static var PHONE_OR_PAD: String {
  40. if isPhone() {
  41. return "iPhone"
  42. } else if isPad() {
  43. return "iPad"
  44. }
  45. return "Not iPhone nor iPad"
  46. }
  47.  
  48. static var DEBUG_OR_RELEASE: String {
  49. #if DEBUG
  50. return "Debug"
  51. #else
  52. return "Release"
  53. #endif
  54. }
  55.  
  56. static var SIMULATOR_OR_DEVICE: String {
  57. #if (arch(i386) || arch(x86_64)) && os(iOS)
  58. return "Simulator"
  59. #else
  60. return "Device"
  61. #endif
  62. }
  63.  
  64. static func isPhone() -> Bool {
  65. return TheCurrentDevice.userInterfaceIdiom == .phone
  66. }
  67.  
  68. static func isPad() -> Bool {
  69. return TheCurrentDevice.userInterfaceIdiom == .pad
  70. }
  71.  
  72. static func isDebug() -> Bool {
  73. return DEBUG_OR_RELEASE == "Debug"
  74. }
  75.  
  76. static func isRelease() -> Bool {
  77. return DEBUG_OR_RELEASE == "Release"
  78. }
  79.  
  80. static func isSimulator() -> Bool {
  81. return SIMULATOR_OR_DEVICE == "Simulator"
  82. }
  83.  
  84. static func isDevice() -> Bool {
  85. return SIMULATOR_OR_DEVICE == "Device"
  86. }
  87.  
  88. // MARK: - Device Version Checks
  89. enum Versions: Float {
  90. case five = 5.0
  91. case six = 6.0
  92. case seven = 7.0
  93. case eight = 8.0
  94. case nine = 9.0
  95. case ten = 10.0
  96. }
  97.  
  98. static func isVersion(version: Versions) -> Bool {
  99. return TheCurrentDeviceVersion >= version.rawValue && TheCurrentDeviceVersion < (version.rawValue + 1.0)
  100. }
  101.  
  102. static func isVersionOrLater(version: Versions) -> Bool {
  103. return TheCurrentDeviceVersion >= version.rawValue
  104. }
  105.  
  106. static func isVersionOrEarlier(version: Versions) -> Bool {
  107. return TheCurrentDeviceVersion < (version.rawValue + 1.0)
  108. }
  109.  
  110. static var CURRENT_VERSION: String {
  111. return "\(TheCurrentDeviceVersion)"
  112. }
  113.  
  114. // MARK: iOS 5 Checks
  115. static func IS_OS_5() -> Bool {
  116. return isVersion(version: .five)
  117. }
  118.  
  119. static func IS_OS_5_OR_LATER() -> Bool {
  120. return isVersionOrLater(version: .five)
  121. }
  122.  
  123. static func IS_OS_5_OR_EARLIER() -> Bool {
  124. return isVersionOrEarlier(version: .five)
  125. }
  126.  
  127. // MARK: iOS 6 Checks
  128. static func IS_OS_6() -> Bool {
  129. return isVersion(version: .six)
  130. }
  131.  
  132. static func IS_OS_6_OR_LATER() -> Bool {
  133. return isVersionOrLater(version: .six)
  134. }
  135.  
  136. static func IS_OS_6_OR_EARLIER() -> Bool {
  137. return isVersionOrEarlier(version: .six)
  138. }
  139.  
  140. // MARK: iOS 7 Checks
  141. static func IS_OS_7() -> Bool {
  142. return isVersion(version: .seven)
  143. }
  144.  
  145. static func IS_OS_7_OR_LATER() -> Bool {
  146. return isVersionOrLater(version: .seven)
  147. }
  148.  
  149. static func IS_OS_7_OR_EARLIER() -> Bool {
  150. return isVersionOrEarlier(version: .seven)
  151. }
  152.  
  153. // MARK: iOS 8 Checks
  154. static func IS_OS_8() -> Bool {
  155. return isVersion(version: .eight)
  156. }
  157.  
  158. static func IS_OS_8_OR_LATER() -> Bool {
  159. return isVersionOrLater(version: .eight)
  160. }
  161.  
  162. static func IS_OS_8_OR_EARLIER() -> Bool {
  163. return isVersionOrEarlier(version: .eight)
  164. }
  165.  
  166. // MARK: iOS 9 Checks
  167. static func IS_OS_9() -> Bool {
  168. return isVersion(version: .nine)
  169. }
  170.  
  171. static func IS_OS_9_OR_LATER() -> Bool {
  172. return isVersionOrLater(version: .nine)
  173. }
  174.  
  175. static func IS_OS_9_OR_EARLIER() -> Bool {
  176. return isVersionOrEarlier(version: .nine)
  177. }
  178.  
  179. // MARK: iOS 10 Checks
  180. static func IS_OS_10() -> Bool {
  181. return isVersion(version: .ten)
  182. }
  183.  
  184. static func IS_OS_10_OR_LATER() -> Bool {
  185. return isVersionOrLater(version: .ten)
  186. }
  187.  
  188. static func IS_OS_10_OR_EARLIER() -> Bool {
  189. return isVersionOrEarlier(version: .ten)
  190. }
  191.  
  192. // MARK: - Device Size Checks
  193. enum Heights: CGFloat {
  194. case inches_3_5 = 480
  195. case inches_4 = 568
  196. case inches_4_7 = 667
  197. case inches_5_5 = 736
  198. }
  199.  
  200. static func isSize(height: Heights) -> Bool {
  201. return TheCurrentDeviceHeight == height.rawValue
  202. }
  203.  
  204. static func isSizeOrLarger(height: Heights) -> Bool {
  205. return TheCurrentDeviceHeight >= height.rawValue
  206. }
  207.  
  208. static func isSizeOrSmaller(height: Heights) -> Bool {
  209. return TheCurrentDeviceHeight <= height.rawValue
  210. }
  211.  
  212. static var CURRENT_SIZE: String {
  213. if IS_3_5_INCHES() {
  214. return "3.5 Inches"
  215. } else if IS_4_INCHES() {
  216. return "4 Inches"
  217. } else if IS_4_7_INCHES() {
  218. return "4.7 Inches"
  219. } else if IS_5_5_INCHES() {
  220. return "5.5 Inches"
  221. }
  222. return "\(TheCurrentDeviceHeight) Points"
  223. }
  224.  
  225. // MARK: Retina Check
  226. static func IS_RETINA() -> Bool {
  227. return UIScreen.main.responds(to: #selector(NSDecimalNumberBehaviors.scale))//UIScreen.mainScreen.respondsToSelector("scale")
  228. }
  229.  
  230. // MARK: 3.5 Inch Checks
  231. static func IS_3_5_INCHES() -> Bool {
  232. return isPhone() && isSize(height: .inches_3_5)
  233. }
  234.  
  235. static func IS_3_5_INCHES_OR_LARGER() -> Bool {
  236. return isPhone() && isSizeOrLarger(height: .inches_3_5)
  237. }
  238.  
  239. static func IS_3_5_INCHES_OR_SMALLER() -> Bool {
  240. return isPhone() && isSizeOrSmaller(height: .inches_3_5)
  241. }
  242.  
  243. // MARK: 4 Inch Checks
  244. static func IS_4_INCHES() -> Bool {
  245. return isPhone() && isSize(height: .inches_4)
  246. }
  247.  
  248. static func IS_4_INCHES_OR_LARGER() -> Bool {
  249. return isPhone() && isSizeOrLarger(height: .inches_4)
  250. }
  251.  
  252. static func IS_4_INCHES_OR_SMALLER() -> Bool {
  253. return isPhone() && isSizeOrSmaller(height: .inches_4)
  254. }
  255.  
  256. // MARK: 4.7 Inch Checks
  257. static func IS_4_7_INCHES() -> Bool {
  258. return isPhone() && isSize(height: .inches_4_7)
  259. }
  260.  
  261. static func IS_4_7_INCHES_OR_LARGER() -> Bool {
  262. return isPhone() && isSizeOrLarger(height: .inches_4_7)
  263. }
  264.  
  265. static func IS_4_7_INCHES_OR_SMALLER() -> Bool {
  266. return isPhone() && isSizeOrLarger(height: .inches_4_7)
  267. }
  268.  
  269. // MARK: 5.5 Inch Checks
  270. static func IS_5_5_INCHES() -> Bool {
  271. return isPhone() && isSize(height: .inches_5_5)
  272. }
  273.  
  274. static func IS_5_5_INCHES_OR_LARGER() -> Bool {
  275. return isPhone() && isSizeOrLarger(height: .inches_5_5)
  276. }
  277.  
  278. static func IS_5_5_INCHES_OR_SMALLER() -> Bool {
  279. return isPhone() && isSizeOrLarger(height: .inches_5_5)
  280. }
  281.  
  282. // MARK: - International Checks
  283. static var CURRENT_REGION: String {
  284. return NSLocale.current.localizedString(forCurrencyCode: NSLocale.Key.countryCode.rawValue)!
  285. }
  286. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement