iOS 端末のモデル識別子を取得する
開発中のアプリで端末の機種を判定したかったのですが、
UIDevice.current.model は iPhone
や iPod touch
としか返さないため、もう少し詳細な情報を取得する方法を調べました。
今回のコードにより iPhone12,3
等の形式の識別子を取得することが出来ます。
実装コード
今回はUIDeviceのextensionとして実装してみます。
extension UIDevice { var modelIdentifier: String { 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 } }
検索すると、ここから更にモデル名(iPhone12,3
→iPhone 11 Pro
)にマッピングする記事を見かけますが、個人的にはこの状態で十分だったため止めておきます。
マッピング自体は以下が参考になるかと思います。
Models - The iPhone Wiki (Identifier列を参照)