shellでMacOSXのバージョンを調べる

sw_versを使う。unameよりも便利。

バージョン番号の取得

$ sw_vers -productVersion
10.8.4

ビルド番号の取得

$ sw_vers -buildVersion
12E55

さらにバージョン番号を分解して扱いやすくするには、以下のようにcutを使えば良い。

  • メジャー
$ sw_vers -productVersion | cut -f1 -d "."
10
  • マイナー
$ sw_vers -productVersion | cut -f2 -d "."
8
  • リビジョン
$ sw_vers -productVersion | cut -f3 -d "."
4

実際に使うのはマイナー番号だろうな。

xcode-select

2つのバージョンのxcodeをインストールしてハマった。

makeファイルからxcodebuildを呼出しているのだが古いxcodeの設定で実行されていてコマンドラインからうまくコンパイル出来なかった。

xcodebuildのオプションを使うのかもしれないと、少ししらべるとxcode-selectなるコマンドを発見。

xcode-select: Report or change the path to the active
              Xcode installation for this machine.

Usage: xcode-select --print-path
           Prints the path of the active Xcode folder
   or: xcode-select --switch <xcode_path>
           Sets the path for the active Xcode folder
   or: xcode-select --version
           Prints the version of xcode-select

DP版のxcodeを使うには

xcode-select --switch /Applications/Xcode5-DP4.app/Contents/Developer

を入れれば使える。元に戻すには、

xcode-select --switch /Applications/Xcode.app/Contents/Developer

を入れれば良い。

Cocoaの添字演算子”[]”のオーバーロード

  • 数値による添字演算子のオーバーロード

以下のメソッドを実装しているとObj[nnn]が使えるようになる。

- (id)objectAtIndexedSubscript:(NSUInteger)idx;
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;
  • 文字列による添字演算子のオーバーロド

以下のメソッドを実装しているとobj[@”string”]が使えるようになる。

- (id)objectAtKeyedSubscript:(id <NSCopying>)key;
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;

NSArrayとNSDictonary以外でどのように使うべきかは不明。C++のように超絶技巧で使うときも有るのかもしれない。

KVCでObjectからまとめて値の参照と設定が出来るメソッド

KVCでObjectからまとめて値の参照と設定が出来るメソッドが何処かの本に書いてあった記憶が有ったので、本棚をひっくり返す。

翔泳社の”入門 Objective-C 2.0” p290からキーバリューコーディングのバッチ処理として説明が有った。

  • ObjectへNSDictonaryにあるキーと名前が一致するプロパティに値を入れるメソッド
- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;
  • ObjectからNSArrayにあるキーに一致する名前のプロパティーの値でNSDictonaryを作るメソッド
- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;

リフトアンドスタンンプツール等の作成に使えるとの事でした。多分インスペクタパネルのような物にも使えると思う。

参考文献

翔泳社の”入門 Objective-C 2.0” p290