Unity×iOS

【Unity×iOS】ユーザーのiOSバージョンを取得する方法|機能制限やサポート範囲の判断に便利!

アプリを開発するうえで「ユーザーのiOSバージョンが何か?」を知ることは、非常に重要です。
特定の機能が iOS○○以上でしか使えない 場合、OSバージョンによって動作や表示を変える処理が求められます。
この記事では、UnityからiOSのOSバージョン(例:16.4)を取得する方法を、コピペOKのスクリプト付きで分かりやすく解説します!

この記事で分かること

  • Unity標準のSystemInfo.operatingSystemでは何が足りないのか
  • iOSで正確なバージョンを取得する方法(ネイティブ)
  • 【コピペOK】Objective-C++プラグイン+Unity連携
  • OSバージョンに応じた処理分岐の実装例

Unity標準のSystemInfo.operatingSystemの限界

Unityには、OS情報を取得するための標準プロパティ

SystemInfo.operatingSystem

がありますが、これはあくまで”iPhone OS 16.4″ のような文字列**であり、

  • 直接バージョン番号を比較できない
  • OS名やデバイス名が混ざっていて処理が面倒

という弱点があります。

iOSのOSバージョンを数値で取得する方法

iOSネイティブでは、[[UIDevice currentDevice] systemVersion] を使うことで
“16.4.1” のようなバージョン番号の文字列を取得できます。
これをUnityに渡してあげれば、バージョン比較も簡単に行えるようになります!

【コピペOK】OSバージョン取得プラグインの作り方

.mmファイルを作成する

Assets/Plugins/iOS/OSVersionPlugin.mm

#import <UIKit/UIKit.h>

extern "C" const char* GetiOSVersion()
{
    NSString* version = [[UIDevice currentDevice] systemVersion];
    return [version UTF8String];
}

Unity側のC#コード

using System.Runtime.InteropServices;
using UnityEngine;

public static class OSVersionPlugin
{
#if UNITY_IOS && !UNITY_EDITOR
    [DllImport("__Internal")]
    private static extern string GetiOSVersion();
#else
    private static string GetiOSVersion() => "17.0";
#endif

    public static string VersionString => GetiOSVersion();

    public static float VersionFloat
    {
        get
        {
            float.TryParse(GetiOSVersion(), out float version);
            return version;
        }
    }
}

使用例(iOSバージョンで処理を分ける)

void Start()
{
    Debug.Log($"iOS Version: {OSVersionPlugin.VersionString}");

    if (OSVersionPlugin.VersionFloat >= 16.0f)
    {
        Debug.Log("iOS 16以上なのでFaceIDを有効化!");
        // 対応機能をON
    }
    else
    {
        Debug.Log("旧OSなので代替UIを表示");
        // フォールバック処理
    }
}

活用アイデア

  • 特定のOS未満では機能制限・警告表示
  • 古い端末に軽量モードを自動適用
  • バグ報告でOSバージョンも記録して再現性を調査
  • iOSアップデートの対応調査として内部ログ送信に使う

注意点・補足

項目内容
systemVersion は端末依存で正確デバイスが返すOS情報
float.TryParse() は小数第1位まで対応(”16.4″ → 16.4)
複数桁(例:”16.4.1″)を扱いたい場合は文字列分割で対応可

まとめ

ポイント内容
Unity標準ではバージョン比較がしにくい
iOSネイティブのsystemVersionで正確な情報取得が可能
バージョンによる処理分岐に便利
コピペOKのプラグイン+比較コード付きで導入簡単

ユーザーの環境に合わせた動作切り替えを実現し、
快適かつ安全なアプリ体験を届けましょう!