
One singleton. 70+ read-only properties. Everything you can know about an iOS device.
SystemServices is a lightweight Objective-C library that gathers hardware,
network, battery, motion, disk, memory, processor, carrier, accessory,
localization and application information behind a single, well-documented API —
no boilerplate, no setup.
- Single facade —
[SystemServices sharedServices] exposes everything.
- Drop-in — install with CocoaPods, Swift Package Manager, or by copying
the
System Services folder.
- One snapshot —
allSystemInformation returns a dictionary of (almost)
everything in one call.
- Up to date — device identifiers are mapped through the latest iPhone,
iPad, iPod touch and Apple TV models.
|
|
| iOS |
15.0+ |
| Language |
Objective-C (ARC) |
| Xcode |
15+ |
Add to your Podfile:
pod 'SystemServices', '~> 3.0'
then run pod install.
In Xcode: File → Add Package Dependencies… and enter
https://github.com/Shmoopi/iOS-System-Services.git
or add it to your Package.swift:
dependencies: [
.package(url: "https://github.com/Shmoopi/iOS-System-Services.git", from: "3.0.0")
]
Drag the System Services folder into your project. The library uses
AVFoundation, CoreTelephony, CoreMotion, ExternalAccessory, Security,
UIKit and Foundation — all part of the iOS SDK.
// Import System Services
#import "SystemServices.h"
// Read a single value
NSLog(@"Device model: %@", [SystemServices sharedServices].deviceModel);
// Or grab everything at once
NSLog(@"All system information: %@", [SystemServices sharedServices].allSystemInformation);
Using it from a Swift target? Add #import "SystemServices.h" to your bridging
header (CocoaPods / manual) or import SystemServices (Swift Package Manager),
then call SystemServices.shared().
All properties are readonly on [SystemServices sharedServices].
| Property |
Type |
Description |
systemsUptime |
NSString * |
Uptime formatted as dd hh mm |
deviceModel |
NSString * |
e.g. iPhone |
deviceName |
NSString * |
User-assigned device name |
systemName |
NSString * |
e.g. iOS |
systemsVersion |
NSString * |
e.g. 18.0 |
systemDeviceTypeNotFormatted |
NSString * |
Raw identifier, e.g. iPhone17,1 |
systemDeviceTypeFormatted |
NSString * |
Friendly name, e.g. iPhone 16 Pro |
screenWidth / screenHeight |
NSInteger |
Screen size in points |
screenBrightness |
float |
0–100 |
multitaskingEnabled |
BOOL |
|
proximitySensorEnabled |
BOOL |
|
debuggerAttached |
BOOL |
|
pluggedIn |
BOOL |
|
stepCountingAvailable |
BOOL |
|
distanceAvailable |
BOOL |
|
floorCountingAvailable |
BOOL |
|
| Property |
Type |
Description |
jailbroken |
int |
Non-NOTJAIL when the device appears jailbroken |
| Property |
Type |
Description |
numberProcessors |
NSInteger |
|
numberActiveProcessors |
NSInteger |
|
processorsUsage |
NSArray * |
Per-core usage (0.0–1.0) |
| Property |
Type |
Description |
accessoriesAttached |
BOOL |
|
headphonesAttached |
BOOL |
|
numberAttachedAccessories |
NSInteger |
|
nameAttachedAccessories |
NSString * |
Comma-separated |
| Property |
Type |
Description |
carrierName |
NSString * |
|
carrierCountry |
NSString * |
|
carrierMobileCountryCode |
NSString * |
|
carrierISOCountryCode |
NSString * |
|
carrierMobileNetworkCode |
NSString * |
|
carrierAllowsVOIP |
BOOL |
|
⚠️ Apple deprecated CTCarrier and stopped returning real carrier data to
third-party apps in iOS 16; these properties now degrade to nil /
placeholder values on modern systems. See Notes & limitations.
| Property |
Type |
Description |
batteryLevel |
float |
0–100 (-1 if unavailable, e.g. on Simulator) |
charging |
BOOL |
|
fullyCharged |
BOOL |
|
| Property |
Type |
Description |
currentIPAddress |
NSString * |
Active interface IP |
externalIPAddress |
NSString * |
Public IP (synchronous network call) |
cellIPAddress / cellNetmaskAddress / cellBroadcastAddress |
NSString * |
Cellular interface |
wiFiIPAddress / wiFiNetmaskAddress / wiFiBroadcastAddress / wiFiRouterAddress |
NSString * |
Wi-Fi interface |
connectedToWiFi |
BOOL |
|
connectedToCellNetwork |
BOOL |
|
| Property |
Type |
Description |
processID |
int |
|
| Property |
Type |
Description |
diskSpace |
NSString * |
Total, human-readable |
freeDiskSpaceinRaw / freeDiskSpaceinPercent |
NSString * |
Free space |
usedDiskSpaceinRaw / usedDiskSpaceinPercent |
NSString * |
Used space |
longDiskSpace / longFreeDiskSpace |
long long |
Raw byte counts |
| Property |
Type |
Description |
totalMemory |
double |
Physical RAM (MB) |
freeMemoryinRaw / freeMemoryinPercent |
double |
|
usedMemoryinRaw / usedMemoryinPercent |
double |
|
activeMemoryinRaw / activeMemoryinPercent |
double |
|
inactiveMemoryinRaw / inactiveMemoryinPercent |
double |
|
wiredMemoryinRaw / wiredMemoryinPercent |
double |
|
purgableMemoryinRaw / purgableMemoryinPercent |
double |
|
| Property |
Type |
Description |
deviceOrientation |
UIInterfaceOrientation |
From the active window scene |
SSAccelerometerInfo also offers instance methods (startLoggingMotionData /
stopLoggingMotionData) for raw accelerometer, gyroscope and device-motion
streams.
| Property |
Type |
Description |
country |
NSString * |
Locale identifier |
language |
NSString * |
Preferred language |
timeZoneSS |
NSString * |
System time zone name |
currency |
NSString * |
Currency symbol |
| Property |
Type |
Description |
applicationVersion |
NSString * |
CFBundleShortVersionString |
clipboardContent |
NSString * |
General pasteboard text (see privacy note) |
applicationCPUUsage |
float |
This app's CPU usage |
| Property |
Type |
Description |
cfuuid |
NSString * |
A freshly generated CFUUID (random each call) |
| Property |
Type |
Description |
allSystemInformation |
NSDictionary * |
Snapshot of (almost) every value as strings |
Open SystemServicesDemo/SystemServicesDemo.xcodeproj and run. The app shows
the library output across four tabs — Hardware, Network, Memory and Disk — with
a live pie chart and gauge.
cd SystemServicesDemo
xcodebuild -project SystemServicesDemo.xcodeproj \
-scheme SystemServicesDemo \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 16' \
build CODE_SIGNING_ALLOWED=NO
- Carrier data —
CTCarrier and -subscriberCellularProvider were
deprecated by Apple in iOS 12 and return placeholder values for third-party
apps from iOS 16 onward. There is no replacement API; these properties return
nil where data is unavailable.
- Clipboard privacy —
clipboardContent reads the general pasteboard
(which triggers the system paste notification on modern iOS). It is
deliberately excluded from allSystemInformation so a bulk snapshot can't
silently capture pasteboard contents.
- Simulator — battery and some sensor APIs are unavailable on the Simulator
and return sentinel values. Device-model detection uses
SIMULATOR_MODEL_IDENTIFIER so the simulated model name is still reported
correctly.
- External IP —
externalIPAddress performs a synchronous HTTPS request;
call it from a background queue in production.
Issues and pull requests are welcome — see CONTRIBUTING.md.
A big thank you to the makers of the components used by the demo app:
Released under the MIT License. Copyright © 2012–2026 Shmoopi LLC
<shmoopillc@gmail.com>. See LICENSE for details.