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 }