Asset Catalogを使った画像管理

iOS向けアプリだとOSバージョンやデバイス毎に要求される画像サイズが異なる。
Xcode5からそれを管理する仕組みが用意されていてそれがAsset Catalog。

f:id:arcright:20140706144427p:plain
デフォルトでも作成されるみたいでこれだとImage.xcassetsというディレクトリがそれにあたる。
f:id:arcright:20140706145141p:plain
初期状態だとアプリアイコンとスプラッシュイメージのImageSetが作成されている。
例えばアプリアイコンを選択してみる。アトリビュートインスペクタで対応デバイスを設定することができて設定に応じた画像設定欄が表示される。
画像ファイルをドラッグアンドドロップするとAsset Catalog管理下における。

画像ファイルを追加した時なにが起きるかというとディレクトリ内(ImageSetはディレクトリである)にあるContents.jsonにファイルネームが追記され、画像ファイルは同ディレクトリに配置される。
jsonファイルの中身を見ていれば何をしているかなんとなくわかると思う。
つまり大量の画像がある場合等はFinder等で画像をぶち込んでjsonファイルをどうにかして編集すれば一気にいける感じなんかな。

Xcodeのlldb対話型コンソールでオブジェクトを見たい

XcodeのデバッグエリアにNSLogとかが流れるコンソールがあるんだけどここではlldbコマンドが実行できる。
ブレークポイントを設置した箇所と同じスコープなのでプリントデバッグもできるしメソッド叩いたりもできる。
そんな時にそのままselfとか叩いてもエラーがでるのでlldbのコマンド「po」(print object)や「p」(print)を使う。

こんな感じ。
f:id:arcright:20140706183814p:plain

Objective-Cで使える汎用的な型 id型

error: property 'xxx' not found on object of type 'id'

上記のようなエラーをたくさん味わってid型というものがあるんだと知りました。
id型は対象オブジェクトへのポインタを持ったオブジェクトらしいのでそりゃ何もメソッド叩けるわけないですな。

id型の対象オブジェクトに対してなんかしたい時はキャスト変換して使うみたいです。

id hoge = @"hoge";
NSString *mozi = (NSString *)hoge;