ttlog

日々の開発で得た知見の技術メモ。モバイルアプリネタが多いです。

iOS 端末のモデル識別子を取得する

開発中のアプリで端末の機種を判定したかったのですが、 UIDevice.current.modeliPhoneiPod 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,3iPhone 11 Pro)にマッピングする記事を見かけますが、個人的にはこの状態で十分だったため止めておきます。

マッピング自体は以下が参考になるかと思います。

Models - The iPhone Wiki (Identifier列を参照)