DeviceKit alternatives and similar libraries
Based on the "Device" category.
Alternatively, view DeviceKit alternatives based on common mentions on social networks and blogs.
-
UIDeviceComplete
UIDevice extensions that fill in the missing pieces. -
Luminous
Luminous provides you a lot of information about the system and a lot of handy methods to quickly get useful data on the iOS platform.
Appwrite - The open-source backend cloud platform
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of DeviceKit or a related project?
README
Branch | Versions |
---|---|
master | โฅ 2.0 |
Swift 4 - 4.2 | โฅ 1.3 < 1.13 |
Swift 3 | โฅ 1.0 < 1.3 |
Swift 2.3 | < 1.0 |
DeviceKit
is a value-type replacement of UIDevice
.
Current version 4.7.
See our detailed [changelog](CHANGELOG.md) for the latest features, improvements and bug fixes.
Features
- [x] Equatable
- [x] Device identification
- [x] Device family detection
- [x] Device group detection
- [x] Simulator detection
- [x] Battery state
- [x] Battery level
- [x] Various device metrics (e.g. screen size, screen ratio, PPI)
- [x] Low Power Mode detection
- [x] Guided Access Session detection
- [x] Screen brightness
- [x] Display Zoom detection
- [x] Detect available sensors (Touch ID, Face ID)
- [x] Detect available disk space
- [x] Apple Pencil support detection
Requirements
- iOS 9.0+ (linking against iOS 9.3 required)
- tvOS 9.0+ (linking against tvOS 9.2 required)
- watchOS 2.0+
Installation
DeviceKit can be installed in various ways.
CocoaPods
Swift 5
pod 'DeviceKit', '~> 4.0'
iOS 8.0 support
pod 'DeviceKit', '3.2'
Swift 4.0 - Swift 4.2
pod 'DeviceKit', '~> 1.3'
Swift 3
pod 'DeviceKit', '~> 1.2.3'
Swift 2.3 (Unsupported)
pod 'DeviceKit', :git => 'https://github.com/devicekit/DeviceKit.git', :branch => 'swift-2.3-unsupported'
Swift Package Manager
Swift 5
dependencies: [
.package(url: "https://github.com/devicekit/DeviceKit.git", from: "4.0.0"),
/// ...
]
iOS 8.0 support
dependencies: [
.package(url: "https://github.com/devicekit/DeviceKit.git", from: "3.2.0"),
/// ...
]
Carthage
Swift 5
github "devicekit/DeviceKit" ~> 4.0
iOS 8.0 support
github "devicekit/DeviceKit" ~> 3.2
Swift 4.0 - Swift 4.2
github "devicekit/DeviceKit" ~> 1.3
Swift 3
github "devicekit/DeviceKit" ~> 1.2.3
Swift 2.3 (Unsupported)
github "devicekit/DeviceKit" "swift-2.3-unsupported"
Manually
To install it manually, drag the DeviceKit
project into your app project in Xcode. Or add it as a git submodule by running:
$ git submodule add https://github.com/devicekit/DeviceKit.git
Usage
First make sure to import the framework:
import DeviceKit
Here are some usage examples. All devices are also available as simulators:
.iPhone6 => .simulator(.iPhone6)
.iPhone6s => .simulator(.iPhone6s)
You can try these examples in Playground.
Note:
To try DeviceKit in the playground, open the
DeviceKit.xcworkspace
and build DeviceKit.framework for any simulator first by selecting "DeviceKit" as your current scheme.
Get the Device You're Running On
let device = Device.current
print(device) // prints, for example, "iPhone 6 Plus"
if device == .iPhone6Plus {
// Do something
} else {
// Do something else
}
Get the Device Family
let device = Device.current
if device.isPod {
// iPods (real or simulator)
} else if device.isPhone {
// iPhone (real or simulator)
} else if device.isPad {
// iPad (real or simulator)
}
Check If Running on Simulator
let device = Device.current
if device.isSimulator {
// Running on one of the simulators(iPod/iPhone/iPad)
// Skip doing something irrelevant for Simulator
}
Get the Simulator Device
let device = Device.current
switch device {
case .simulator(.iPhone6s): break // You're running on the iPhone 6s simulator
case .simulator(.iPadAir2): break // You're running on the iPad Air 2 simulator
default: break
}
Make Sure the Device Is Contained in a Preconfigured Group
let groupOfAllowedDevices: [Device] = [.iPhone6, .iPhone6Plus, .iPhone6s, .iPhone6sPlus, .simulator(.iPhone6), .simulator(.iPhone6Plus),.simulator(.iPhone6s),.simulator(.iPhone6sPlus).simulator(.iPhone8),.simulator(.iPhone8Plus),.simulator(.iPhoneX),.simulator(.iPhoneXS),.simulator(.iPhoneXSMax),.simulator(.iPhoneXR)]
let device = Device.current
if device.isOneOf(groupOfAllowedDevices) {
// Do your action
}
Get the Current Battery State
Note:
To get the current battery state we need to set
UIDevice.current.isBatteryMonitoringEnabled
totrue
. To avoid any issues with your code, we read the current setting and reset it to what it was before when we're done.
if device.batteryState == .full || device.batteryState >= .charging(75) {
print("Your battery is happy! ๐")
}
Get the Current Battery Level
if device.batteryLevel >= 50 {
install_iOS()
} else {
showError()
}
Get Low Power mode status
if device.batteryState.lowPowerMode {
print("Low Power mode is enabled! ๐")
} else {
print("Low Power mode is disabled! ๐")
}
Check if a Guided Access session is currently active
if device.isGuidedAccessSessionActive {
print("Guided Access session is currently active")
} else {
print("No Guided Access session is currently active")
}
Get Screen Brightness
if device.screenBrightness > 50 {
print("Take care of your eyes!")
}
Get Available Disk Space
if Device.volumeAvailableCapacityForOpportunisticUsage ?? 0 > Int64(1_000_000) {
// download that nice-to-have huge file
}
if Device.volumeAvailableCapacityForImportantUsage ?? 0 > Int64(1_000) {
// download that file you really need
}
Source of Information
All model identifiers are taken from the following website: https://www.theiphonewiki.com/wiki/Models or extracted from the simulator app bundled with Xcode.
Contributing
If you have the need for a specific feature that you want implemented or if you experienced a bug, please open an issue. If you extended the functionality of DeviceKit yourself and want others to use it too, please submit a pull request.
Contributors
The complete list of people who contributed to this project is available here. DeviceKit wouldn't be what it is without you! Thank you very much! ๐
*Note that all licence references and agreements mentioned in the DeviceKit README section above
are relevant to that project's source code only.