【Swift】iPhone・iPod touchなど実行中デバイスの種類(機種)を判別する方法
iOSアプリ開発でデバイスの種類を判別する理由
iOSアプリを開発していると、アプリがインストールされている端末の種類を特定し、デバイスごとに機能を出し分けたいケースがあります。たとえば「iPhone Xでは提供したいけれど、iPhone 7では使えないようにしたい」といった要件です。本記事では、Swiftを使って実行中のiOSデバイスを判別する方法をわかりやすく解説します。
前提知識:覚えておきたい3つの用語
デバイス情報を取得するために、まず以下の基本的な用語を確認しておきましょう。
- utsname ― iOSのDarwinモジュールに定義された構造体で、システムに関する情報を保持します。
- uname ― utsname構造体を引数に取り、Int32型を返す関数です。呼び出しによって構造体内にシステム情報が書き込まれます。
- Mirror ― あらゆる型のインスタンスの内部構造や表示形式を表現できる、Swift標準のリフレクション機構です。
シンプルな取得方法とその限界
iOS SDKで利用中のデバイス情報を取得すること自体は簡単なタスクです。モデル名や端末名が分かれば十分な場合は、次のようなコードで文字列として取得できます。
UIDevice.current.model // 例: "iPhone" UIDevice.current.name // 例: 端末に設定された名前
ただし、この方法で得られるのは「iPhoneを使用している」という大まかな情報だけです。「iPhone 7なのか、それともiPhone Xなのか」という具体的な機種まで特定するには、さらに踏み込んだ処理が必要になります。
機種を特定するための実装コード
Swiftでは、前述のutsname・uname・Mirrorを組み合わせることで、デバイス固有の識別子を文字列として取得できます。以下がその実装例です。
func getDevice() -> 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
}
この関数が返すのは「iPhone9,2」のような機種コードであり、そのまま製品名になるわけではありません。取得したidentifier変数を複数の候補値と照合し、必要に応じてモデル名へマッピングして使用します。
参考までに、iOS 12.0が稼働するiPhone 7 Plusのシミュレーター上でこのコードを実行すると、次のように識別子が表示されます。

Appleデバイスの機種コード対応表
代表的なApple製デバイスの機種コードと、それぞれに対応する製品名は以下の通りです。
| iPod4,1 | iPod touch(第4世代) |
| iPod5,1 | iPod touch(第5世代) |
| iPod7,1 | iPod touch(第6世代) |
| iPhone3,1 / iPhone3,2 / iPhone3,3 | iPhone 4 |
| iPhone4,1 | iPhone 4s |
| iPhone5,1 / iPhone5,2 | iPhone 5 |
| iPhone5,3 / iPhone5,4 | iPhone 5c |
| iPhone6,1 / iPhone6,2 | iPhone 5s |
| iPhone7,2 | iPhone 6 |
| iPhone7,1 | iPhone 6 Plus |
| iPhone8,1 | iPhone 6s |
| iPhone8,2 | iPhone 6s Plus |
| iPhone8,4 | iPhone SE(第1世代) |
| iPhone9,1 / iPhone9,3 | iPhone 7 |
| iPhone9,2 / iPhone9,4 | iPhone 7 Plus |
| iPad2,1〜iPad2,4 | iPad 2 |
| iPad3,1〜iPad3,3 | iPad(第3世代) |
| iPad3,4〜iPad3,6 | iPad(第4世代) |
| iPad4,1〜iPad4,3 | iPad Air |
| iPad5,3 / iPad5,4 | iPad Air 2 |
| iPad2,5〜iPad2,7 | iPad mini |
| iPad4,4〜iPad4,6 | iPad mini 2 |
| iPad4,7〜iPad4,9 | iPad mini 3 |
| iPad5,1 / iPad5,2 | iPad mini 4 |
| iPad6,3 / iPad6,4 | iPad Pro(9.7インチ) |
| iPad6,7 / iPad6,8 | iPad Pro(12.9インチ) |
※上記は代表的な機種の一例です。それ以降に登場した新しいデバイスについても、同じ仕組みで識別子を取得し、対応表に追加していくことで同様に判別できます。
-
iPodからiPhone 12/iPhone 11へ音楽を転送する3つの方法【iTunes・PCなしでもOK】
iPodは優れた音楽プレーヤーですが、進化し続けるiPhoneによって徐々にその役割を担われるようになりました。iPhoneは機能が豊富でストレージ容量も大きいため、iPodとiPhoneの両方を持ち歩く必要性は低くなっています。音楽再生デバイスとして十分な性能を持ちながら、他のさまざまなニーズにも応えてくれるのがiPhoneだからです。新しいiPhone 12を手に入れて、iPodに保存している音楽を新しいiPhoneに移行したいとお考えの方も多いのではないでしょうか。実は、iPodからiPhoneに音楽を転送する方法は主に3つあります。パソコンが手元にあるなら、iTunesまたはサードパー
-
iPhoneを脱獄する方法|リスク・種類・Electraでの具体的な手順を徹底解説
Appleによる細かい制限にうんざりしていませんか?自分のデバイスなのに「できること」「できないこと」をすべてAppleに決められていると感じるなら、iPhoneやiPadの「脱獄(ジャイルブレイク)」という選択肢があります。脱獄とは、Androidにおける「root化」やPCにおける「管理者権限の取得」に似た概念で、通常は変更できないシステム設定を書き換えたり、App Store以外で配布されているソフトウェアをインストールしたりすることを可能にする特権状態のことです。Appleが設けたロックを回避できる一方で、それ相応のリスクも伴います。脱獄にはどんなリスクがあるのか?メーカーの管理から解