🍁
Swift: MacのプロセッサがApple SiliconかIntelかを判断する
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
参考
- Higher08/TorrServeMacこれはGitHubで調べてみてもよくある手法みたい。
Discussion