iOS
 Computer >> コンピューター >  >> プログラミング >> iOS

【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のシミュレーター上でこのコードを実行すると、次のように識別子が表示されます。

【Swift】iPhone・iPod touchなど実行中デバイスの種類(機種)を判別する方法

Appleデバイスの機種コード対応表

代表的なApple製デバイスの機種コードと、それぞれに対応する製品名は以下の通りです。

iPod4,1iPod touch(第4世代)
iPod5,1iPod touch(第5世代)
iPod7,1iPod touch(第6世代)
iPhone3,1 / iPhone3,2 / iPhone3,3iPhone 4
iPhone4,1iPhone 4s
iPhone5,1 / iPhone5,2iPhone 5
iPhone5,3 / iPhone5,4iPhone 5c
iPhone6,1 / iPhone6,2iPhone 5s
iPhone7,2iPhone 6
iPhone7,1iPhone 6 Plus
iPhone8,1iPhone 6s
iPhone8,2iPhone 6s Plus
iPhone8,4iPhone SE(第1世代)
iPhone9,1 / iPhone9,3iPhone 7
iPhone9,2 / iPhone9,4iPhone 7 Plus
iPad2,1〜iPad2,4iPad 2
iPad3,1〜iPad3,3iPad(第3世代)
iPad3,4〜iPad3,6iPad(第4世代)
iPad4,1〜iPad4,3iPad Air
iPad5,3 / iPad5,4iPad Air 2
iPad2,5〜iPad2,7iPad mini
iPad4,4〜iPad4,6iPad mini 2
iPad4,7〜iPad4,9iPad mini 3
iPad5,1 / iPad5,2iPad mini 4
iPad6,3 / iPad6,4iPad Pro(9.7インチ)
iPad6,7 / iPad6,8iPad Pro(12.9インチ)

※上記は代表的な機種の一例です。それ以降に登場した新しいデバイスについても、同じ仕組みで識別子を取得し、対応表に追加していくことで同様に判別できます。


  1. iPodからiPhone 12/iPhone 11へ音楽を転送する3つの方法【iTunes・PCなしでもOK】

    iPodは優れた音楽プレーヤーですが、進化し続けるiPhoneによって徐々にその役割を担われるようになりました。iPhoneは機能が豊富でストレージ容量も大きいため、iPodとiPhoneの両方を持ち歩く必要性は低くなっています。音楽再生デバイスとして十分な性能を持ちながら、他のさまざまなニーズにも応えてくれるのがiPhoneだからです。新しいiPhone 12を手に入れて、iPodに保存している音楽を新しいiPhoneに移行したいとお考えの方も多いのではないでしょうか。実は、iPodからiPhoneに音楽を転送する方法は主に3つあります。パソコンが手元にあるなら、iTunesまたはサードパー

  2. iPhoneを脱獄する方法|リスク・種類・Electraでの具体的な手順を徹底解説

    Appleによる細かい制限にうんざりしていませんか?自分のデバイスなのに「できること」「できないこと」をすべてAppleに決められていると感じるなら、iPhoneやiPadの「脱獄(ジャイルブレイク)」という選択肢があります。脱獄とは、Androidにおける「root化」やPCにおける「管理者権限の取得」に似た概念で、通常は変更できないシステム設定を書き換えたり、App Store以外で配布されているソフトウェアをインストールしたりすることを可能にする特権状態のことです。Appleが設けたロックを回避できる一方で、それ相応のリスクも伴います。脱獄にはどんなリスクがあるのか?メーカーの管理から解