いよいよ待望のネイティブ動作する watchOS 2 が登場しました。で、さっそく試してみよう、と Xcode 7 で WatchKit App をつくってみると、以前と同じように Extension であることがわかります。きっとこの Extension に書いたコードがウォッチ側で実行されるということなんだろうとは理解してはいても、やはり本当にそうなっているのか確認したくなります。また、以前つくった WatchKit App は watchOS 2 ではネイティブ動作するのかどうなのか?とか。ドキュメントに書いてあることと挙動が違うこととかもごくたまにありますし。。
で、どっちで処理されてるのか確認する方法はないかなーと考えてみてひとつ思いついたのが NSProcessInfo を利用する方法。
print("\(NSProcessInfo().operatingSystemVersionString)")
このコードを iPhone で実行すると、
Version 9.0 (Build 13A4254v)
と iOS のバージョンとビルド番号が出力されます。
これを WatchKit Extension のコード内で実行すると、
Version 2.0 (Build 13S5254w)
と watchOS のバージョンとビルド番号が出力されます。
ということでこの処理はウォッチ側で実行されている、ということがわかります。
ちなみに NSProcessInfo は基本的にはプロセスに関する情報を取得するためのクラスですが、結構いろんな情報が見れます。environment
とかでも何かしらウォッチ側かどうかの判断ができるかもしれません。
var environment: [String : String] { get }
var arguments: [String] { get }
var hostName: String { get }
var processName: String
var globallyUniqueString: String { get }