「Xamarin.MacでOSのバージョンを取得する」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「==概要== Xamarin.Macに存在しない標準ライブラリをCocoa Binding(P/Invoke)で叩く際にはOSのバージョンによりAPIがあっ...」) |
|||
22行目: | 22行目: | ||
</source> | </source> | ||
− | + | [[Xamarin]]のNSDictionaryはIDictionaryを実装しているので以下のように手軽にアクセスできる。 | |
<source lang="csharp"> | <source lang="csharp"> | ||
Console.WriteLine(version["ProductVersion"]); | Console.WriteLine(version["ProductVersion"]); | ||
</source> | </source> | ||
+ | [[文字列]]では扱いにくい場合は[[.NET]]標準のVersionクラスを使えばパースも簡単にできる。 | ||
+ | <source lang="csharp"> | ||
+ | var v = new Version(version["ProductVersion"].ToString()); | ||
+ | Console.WriteLine(v.Major); | ||
+ | Console.WriteLine(v.Minor); | ||
+ | Console.WriteLine(v.Build); | ||
+ | </source> | ||
==実装:NSProcessInfoを使う== | ==実装:NSProcessInfoを使う== |
2015年10月15日 (木) 02:05時点における版
概要
Xamarin.Macに存在しない標準ライブラリをCocoa Binding(P/Invoke)で叩く際にはOSのバージョンによりAPIがあったりなかったりして条件分岐に迫られる。 基本的にMac OS XはWindowsのように古いAPIも継続して使えるなどという軟弱な仕様ではない。 良くも悪くも代謝を施し市場活性化のためにバッサリ切り捨てである。
実装:SystemVersion.plistから抜く
SystemVersion.plistというファイルから抜けるようだ。
var version = NSDictionary.FromFile(@"/System/Library/CoreServices/SystemVersion.plist");
Console.WriteLine(version);
上記で取得したNSDictionaryの中身は以下のような感じになっている。
{
ProductBuildVersion = 14F27;
ProductCopyright = "1983-2015 Apple Inc.";
ProductName = "Mac OS X";
ProductUserVisibleVersion = "10.10.5";
ProductVersion = "10.10.5";
}
XamarinのNSDictionaryはIDictionaryを実装しているので以下のように手軽にアクセスできる。
Console.WriteLine(version["ProductVersion"]);
文字列では扱いにくい場合は.NET標準のVersionクラスを使えばパースも簡単にできる。
var v = new Version(version["ProductVersion"].ToString());
Console.WriteLine(v.Major);
Console.WriteLine(v.Minor);
Console.WriteLine(v.Build);
実装:NSProcessInfoを使う
NSProcessInfoからバージョン情報を取得する方法はMac OS X 10.10(Yosemite)以上でしか使えないが、iOSでも共通で使えるという利点がある。 Mac OS X 10.9(Mavericks)以下は切り捨てるというのであればこの方法が推奨となるようだ。
var version = NSProcessInfo.ProcessInfo.OperatingSystemVersion;
Console.WriteLine(version);