如何使用Swift获取iOS系统构建版本字符串(非应用构建版本)?
获取iOS系统构建版本的Swift实现
嘿,刚好知道怎么解决这个问题!UIDevice.current.systemVersion确实只能拿到主版本号(比如"11.3"),要获取括号里的构建字符串(比如"15E216"),得借助底层的sysctlbyname函数来读取系统参数。
具体实现方法
你可以给UIDevice写个扩展,把获取构建版本的逻辑封装起来,这样调用起来更顺手:
import UIKit extension UIDevice { var systemBuildVersion: String { var bufferSize = 0 // 先查询需要的缓冲区大小 sysctlbyname("kern.osversion", nil, &bufferSize, nil, 0) var buffer = [CChar](repeating: 0, count: bufferSize) // 读取系统构建版本字符串 sysctlbyname("kern.osversion", &buffer, &bufferSize, nil, 0) return String(cString: buffer) } }
使用示例
现在你可以轻松拼接出你想要的完整系统版本格式了:
let mainVersion = UIDevice.current.systemVersion let buildVersion = UIDevice.current.systemBuildVersion print("iOS \(mainVersion) (\(buildVersion))") // 输出示例:iOS 11.3 (15E216)
补充说明
sysctlbyname是BSD体系的底层系统函数,专门用来查询内核参数,kern.osversion对应的就是iOS系统的构建版本标识。- 这个方法在全iOS版本中都能稳定工作,不需要额外做版本适配。
内容的提问来源于stack exchange,提问作者Leanghorn




