「Xamarin.MacでOSのバージョンを取得する」の版間の差分

編集の要約なし
1行目: 1行目:
==概要==
==概要==
[[Xamarin.Mac]]に存在しない標準ライブラリを[[P/Invoke]]で叩く際には[[OS]]のバージョンにより[[API]]があったりなかったりして[[条件分岐]]に迫られることが多い。
[[Xamarin.Mac]]に存在しない標準ライブラリを[[P/Invoke]]で叩く際には[[OS]]のバージョンにより[[API]]があったりなかったりして[[条件分岐]]に迫られることが多い。
基本的に[[Mac OS X]]は[[Windows]]のように古いAPIも継続して使えるなどという軟弱な仕様ではない。
基本的に[[MacOS]]は[[Windows]]のように古いAPIも継続して使えるなどという軟弱な仕様ではない。
良くも悪くも代謝を施し市場活性化のためにバッサリ切り捨てである。
MacOSは良くも悪くも代謝を施し市場活性化のためにバッサリ切り捨てが頻繁に起きる。
そのためバージョンを取得する手段が重要になってくる。


==実装:SystemVersion.plistから抜く==
==実装:SystemVersion.plistから抜く==
SystemVersion.plistというファイルから抜けるようだ。
/System/Library/CoreServices/SystemVersion.plistというファイルから抜けるようだ。
<source lang="csharp">
<source lang="csharp">
            var version = NSDictionary.FromFile(@"/System/Library/CoreServices/SystemVersion.plist");
var version = NSDictionary.FromFile(@"/System/Library/CoreServices/SystemVersion.plist");
            Console.WriteLine(version);
Console.WriteLine(version);
</source>
</source>


24行目: 25行目:
[[Xamarin]]のNSDictionaryはIDictionaryを実装しているので以下のように手軽にアクセスできる。
[[Xamarin]]のNSDictionaryはIDictionaryを実装しているので以下のように手軽にアクセスできる。
<source lang="csharp">
<source lang="csharp">
            Console.WriteLine(version["ProductVersion"]);
Console.WriteLine(version["ProductVersion"]);
</source>
</source>


[[文字列]]では扱いにくい場合は[[.NET]]標準のVersionクラスを使えばパースも簡単にできる。
[[文字列]]では扱いにくい場合は[[.NET]]標準のVersionクラスを使えばパースも簡単にできる。
<source lang="csharp">
<source lang="csharp">
            var v = new Version(version["ProductVersion"].ToString());
var v = new Version(version["ProductVersion"].ToString());
            Console.WriteLine(v.Major);
Console.WriteLine(v.Major);
            Console.WriteLine(v.Minor);
Console.WriteLine(v.Minor);
            Console.WriteLine(v.Build);
Console.WriteLine(v.Build);
</source>
</source>


39行目: 40行目:
[[Mac OS X 10.9]]([[Mavericks]])以下は切り捨てるというのであればこの方法が推奨となるようだ。
[[Mac OS X 10.9]]([[Mavericks]])以下は切り捨てるというのであればこの方法が推奨となるようだ。
<source lang="csharp">
<source lang="csharp">
            var version = NSProcessInfo.ProcessInfo.OperatingSystemVersion;
var version = NSProcessInfo.ProcessInfo.OperatingSystemVersion;
            Console.WriteLine(version);
Console.WriteLine(version);
</source>
</source>


46行目: 47行目:
*[[Xamarin.Mac/アクセシビリティの許可の有無を取得する]]
*[[Xamarin.Mac/アクセシビリティの許可の有無を取得する]]
*[[Xamarin.Mac/Global Event Monitorでキー入力を監視する]]
*[[Xamarin.Mac/Global Event Monitorでキー入力を監視する]]
==参考文献==
{{reflist}}
{{stub}}


[[category:Xamarin.Mac]]
[[category:Xamarin.Mac]]
[[category:MonoMac]]
[[category:MonoMac]]