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