Files
SideStore/AltServer/Extensions/ProcessInfo+Device.swift
Riley Testut 07b1750a9c [AltServer] Fetches anisette data without Mail plug-in
Works on all macOS versions supported by AltServer.
2024-12-26 21:15:29 +05:30

55 lines
1.5 KiB
Swift

//
// ProcessInfo+Device.swift
// AltServer
//
// Created by Riley Testut on 9/13/23.
// Copyright © 2023 Riley Testut. All rights reserved.
//
import Foundation
import RegexBuilder
extension ProcessInfo
{
var deviceModel: String? {
let service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice"))
defer {
IOObjectRelease(service)
}
guard
let modelData = IORegistryEntryCreateCFProperty(service, "model" as CFString, kCFAllocatorDefault, 0).takeRetainedValue() as? Data,
let cDeviceModel = String(data: modelData, encoding: .utf8)?.cString(using: .utf8) // Remove trailing NULL character
else { return nil }
let deviceModel = String(cString: cDeviceModel)
return deviceModel
}
var operatingSystemBuildVersion: String? {
let osVersionString = ProcessInfo.processInfo.operatingSystemVersionString
let buildVersion: String?
if #available(macOS 13, *), let match = osVersionString.firstMatch(of: Regex {
"(Build "
Capture {
OneOrMore(.anyNonNewline)
}
")"
})
{
buildVersion = String(match.1)
}
else if let build = osVersionString.split(separator: " ").last?.dropLast()
{
buildVersion = String(build)
}
else
{
buildVersion = nil
}
return buildVersion
}
}