🍁

Swift: MacのプロセッサがApple SiliconかIntelかを判断する

2021/06/23に公開

Macのプロセッサによって処理を書き分けないといけない時のために。

プロセッサがどちらか判別する

import Foundation

enum ProcessorType: String {
    case arm64 = "arm64"
    case x86_64 = "x86_64"
    case unknown = "unknown"
}

class ProcessorUtil {
    
    static func getType() -> ProcessorType {
        var sysInfo = utsname()
        guard uname(&sysInfo) == EXIT_SUCCESS else { return .unknown }
        let data = Data(bytes: &sysInfo.machine, count: Int(_SYS_NAMELEN))
        guard let identifier = String(data: data, encoding: .ascii) else { return .unknown }
        let processor = identifier.trimmingCharacters(in: .controlCharacters)
        guard let type = ProcessorType(rawValue: processor) else { return .unknown }
        return type
    }
    
}
let type = ProcessorUtil.getType()
switch type {
case .arm64: // Apple Silicon のときの処理
case .x86_64: // Intel のときの処理
case .unknown: // わからんときの処理
    break
}

プリプロセッサで判別してあらかじめ処理を分岐する

#if arch(x86_64)
Swift.print("x86_64")  // Intel のときの処理
#elseif arch(arm64)
Swift.print("arm64") // Apple Silicon のときの処理
#endif

参考

Discussion