1.0.0
This commit is contained in:
97
ios/Classes/Hardware.swift
Normal file
97
ios/Classes/Hardware.swift
Normal file
@@ -0,0 +1,97 @@
|
||||
import UIKit
|
||||
import HardwareC
|
||||
|
||||
// Known corner radius values for iOS devices (used on simulator)
|
||||
private let deviceCornerRadii: [String: Double] = [
|
||||
// 39.0 - iPhone X, Xs, Xs Max, 11 Pro, 11 Pro Max
|
||||
"iPhone10,3": 39.0, "iPhone10,6": 39.0, // iPhone X
|
||||
"iPhone11,2": 39.0, // iPhone Xs
|
||||
"iPhone11,4": 39.0, "iPhone11,6": 39.0, // iPhone Xs Max
|
||||
"iPhone12,3": 39.0, // iPhone 11 Pro
|
||||
"iPhone12,5": 39.0, // iPhone 11 Pro Max
|
||||
|
||||
// 41.5 - iPhone Xr, 11
|
||||
"iPhone11,8": 41.5, // iPhone Xr
|
||||
"iPhone12,1": 41.5, // iPhone 11
|
||||
|
||||
// 44.0 - iPhone 12 mini, 13 mini
|
||||
"iPhone13,1": 44.0, // iPhone 12 mini
|
||||
"iPhone14,4": 44.0, // iPhone 13 mini
|
||||
|
||||
// 47.33 - iPhone 12, 12 Pro, 13, 13 Pro, 14, 16e
|
||||
"iPhone13,2": 47.33, // iPhone 12
|
||||
"iPhone13,3": 47.33, // iPhone 12 Pro
|
||||
"iPhone14,5": 47.33, // iPhone 13
|
||||
"iPhone14,2": 47.33, // iPhone 13 Pro
|
||||
"iPhone14,7": 47.33, // iPhone 14
|
||||
"iPhone17,5": 47.33, // iPhone 16e
|
||||
|
||||
// 53.33 - iPhone 12 Pro Max, 13 Pro Max, 14 Plus
|
||||
"iPhone13,4": 53.33, // iPhone 12 Pro Max
|
||||
"iPhone14,3": 53.33, // iPhone 13 Pro Max
|
||||
"iPhone14,8": 53.33, // iPhone 14 Plus
|
||||
|
||||
// 55.0 - iPhone 14 Pro, 14 Pro Max, 15, 15 Plus, 15 Pro, 15 Pro Max, 16, 16 Plus
|
||||
"iPhone15,2": 55.0, // iPhone 14 Pro
|
||||
"iPhone15,3": 55.0, // iPhone 14 Pro Max
|
||||
"iPhone15,4": 55.0, // iPhone 15
|
||||
"iPhone15,5": 55.0, // iPhone 15 Plus
|
||||
"iPhone16,1": 55.0, // iPhone 15 Pro
|
||||
"iPhone16,2": 55.0, // iPhone 15 Pro Max
|
||||
"iPhone17,1": 55.0, // iPhone 16
|
||||
"iPhone17,2": 55.0, // iPhone 16 Plus
|
||||
|
||||
// 62.0 - iPhone 16 Pro, 16 Pro Max, 17, 17 Pro, 17 Pro Max, Air
|
||||
"iPhone17,3": 62.0, // iPhone 16 Pro
|
||||
"iPhone17,4": 62.0, // iPhone 16 Pro Max
|
||||
"iPhone18,1": 62.0, // iPhone 17
|
||||
"iPhone18,2": 62.0, // iPhone 17 Pro
|
||||
"iPhone18,3": 62.0, // iPhone 17 Pro Max
|
||||
"iPhone18,4": 62.0, // iPhone Air
|
||||
|
||||
// 18.0 - iPad Air / iPad Pro 11-inch / 12.9-inch
|
||||
"iPad8,1": 18.0, "iPad8,2": 18.0, "iPad8,3": 18.0, "iPad8,4": 18.0, // iPad Pro 11-inch 1st gen
|
||||
"iPad8,5": 18.0, "iPad8,6": 18.0, "iPad8,7": 18.0, "iPad8,8": 18.0, // iPad Pro 12.9-inch 3rd gen
|
||||
"iPad8,9": 18.0, "iPad8,10": 18.0, // iPad Pro 11-inch 2nd gen
|
||||
"iPad8,11": 18.0, "iPad8,12": 18.0, // iPad Pro 12.9-inch 4th gen
|
||||
"iPad13,4": 18.0, "iPad13,5": 18.0, "iPad13,6": 18.0, "iPad13,7": 18.0, // iPad Pro 11-inch 3rd gen
|
||||
"iPad13,8": 18.0, "iPad13,9": 18.0, "iPad13,10": 18.0, "iPad13,11": 18.0, // iPad Pro 12.9-inch 5th gen
|
||||
"iPad13,16": 18.0, "iPad13,17": 18.0, // iPad Air 5th gen
|
||||
"iPad14,3": 18.0, "iPad14,4": 18.0, // iPad Pro 11-inch 4th gen
|
||||
"iPad14,5": 18.0, "iPad14,6": 18.0, // iPad Pro 12.9-inch 6th gen
|
||||
]
|
||||
|
||||
private func getDeviceIdentifier() -> String {
|
||||
#if targetEnvironment(simulator)
|
||||
// On simulator, use the SIMULATOR_MODEL_IDENTIFIER environment variable
|
||||
// uname() returns host architecture (e.g., "arm64") instead of device model
|
||||
return ProcessInfo.processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] ?? ""
|
||||
#else
|
||||
var systemInfo = utsname()
|
||||
uname(&systemInfo)
|
||||
let machineMirror = Mirror(reflecting: systemInfo.machine)
|
||||
let identifier = machineMirror.children.reduce("") { identifier, element in
|
||||
guard let value = element.value as? Int8, value != 0 else { return identifier }
|
||||
return identifier + String(UnicodeScalar(UInt8(value)))
|
||||
}
|
||||
return identifier
|
||||
#endif
|
||||
}
|
||||
|
||||
@_cdecl("get_screen_border_radius")
|
||||
public func getScreenBorderRadius() -> DoubleOption {
|
||||
var result = DoubleOption()
|
||||
|
||||
// Use device identifier lookup for both simulator and real devices
|
||||
// There is no public API for displayCornerRadius on UIScreen
|
||||
let identifier = getDeviceIdentifier()
|
||||
if let radius = deviceCornerRadii[identifier] {
|
||||
result.value = radius
|
||||
result.hasValue = 1
|
||||
} else {
|
||||
result.value = 0
|
||||
result.hasValue = 0
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user