アプリを開発するうえで「ユーザーの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のプラグイン+比較コード付きで導入簡単 |
ユーザーの環境に合わせた動作切り替えを実現し、
快適かつ安全なアプリ体験を届けましょう!