如何使用Swift检索Mac的序列号

Mac的序列号是一个唯一的标识符字符串, 与其他所有序列号不同, 该序列号用于请求保修服务, 报告等时。在mac上很容易找到序列号, 你只需单击屏幕顶部的Apple菜单图标, 然后选择”关于本机”, 有关Mac的信息将显示在屏幕上(处理器, Ram等)。

如果你正在开发的应用程序出于某种原因需要知道该序列号, 则可以使用一种非常简单的方法在Swift代码中获取序列号。可以将以下方法getMacSerialNumber添加到你的代码中以获得上述代码:

/**
    Retrieves the serial number of your mac device.

    - Returns: The string with the serial.
 */
func getMacSerialNumber() -> String {
    var serialNumber: String? {
        let platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice") )
        
        guard platformExpert > 0 else {
            return nil
        }
        
        guard let serialNumber = (IORegistryEntryCreateCFProperty(platformExpert, kIOPlatformSerialNumberKey as CFString, kCFAllocatorDefault, 0).takeUnretainedValue() as? String)?.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) else {
            return nil
        }
        
        IOObjectRelease(platformExpert)

        return serialNumber
    }
    
    return serialNumber ?? "Unknown"
}

在这种方法中, 如果无法确定序列号, 它将返回Unknown作为结果。

视图示例

以下代码将渲染一个空窗口, 中间带有一个标签, 显示你的Mac序列号:

import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Your serial number is: " + getMacSerialNumber())
            .frame(maxWidth: .infinity, maxHeight: .infinity)
    }
}

/**
    Retrieves the serial number of your mac device.

    - Returns: The string with the serial.
 */
func getMacSerialNumber() -> String {
    var serialNumber: String? {
        let platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice") )
        
        guard platformExpert > 0 else {
            return nil
        }
        
        guard let serialNumber = (IORegistryEntryCreateCFProperty(platformExpert, kIOPlatformSerialNumberKey as CFString, kCFAllocatorDefault, 0).takeUnretainedValue() as? String)?.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) else {
            return nil
        }
        
        IOObjectRelease(platformExpert)

        return serialNumber
    }
    
    return serialNumber ?? "Unknown"
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

编码愉快!

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?