2014年2月19日水曜日

AssetCatalogの良い点やハマリ点

XCode5から使用できるようになったAssetCatalog。
素敵!最初は全部の画像をこれに移行だ! と思ったものの、やっぱり使い分け ですかね。
アイコン、スプラッシュ画像はAssetCatalog管理でキマリかな
とはまだ思っていますが。

使ってみて、感じた事をば。

良い点

1. 画像を追加してもpbprojファイルの修正が入らない

デザイナーさんに、
「自由に画像は追加しつつStoryboard上のデザイン、修正しちゃってください!」
...としたいのですが、画像をファイルとしてプロジェクトに突っ込むと、プロジェクト構成が記述されているpbprojファイルも修正入ってしまいます。

デザイン部分/コード部分 と分けて作業していても、pbprojファイルがお互い更新が必要になってコンフリクトに。おーまいがー。

結局、「今さわってくださーい」「今さわらないでくださーい」みたいな運用になりがちでした。

だが! AssetCatalogで画像を追加する限り、pbropjの修正は入らない。
分担して並行作業しやすくなりました。

2. 何の画像があるかが一目で確認できる



あの画像の名前、なんだったけーー? という時にXCode上だけだと全部が見渡せず、Finderで探したりしていましたが、XCode上でもすっきり見えるように。

3. アプリアイコン/スプラッシュ画像のサイズが分かる

iOS6, iOS7 とバージョンが上がって幾度に増えていくアイコンのサイズ(笑
どのサイズが必要かはもはや覚えられない。


AssetCatalogでは、どのバージョンであればどのサイズがいるかを示してくれるので便利。
今後のバージョンアップでまたサイズが変わっても、追加対応してくれるに違いない!

4. 画像ファイル名とCatalog上の名前が違ってもOK

デザイナーさんが管理する画像ファイル名のルールと、プログラム上で使う名前のルールが違うこともあるはず。
Catalog上の名前と実画像ファイルの名前が違ってもOKです。

管理という観点では同じ名前の方がやりやすいですけども。



良くない点

1. UIImage#imageNamedでしか読込みができない

AssetCatalogの画像は
[UIImage imageNamed@"aaa"] 
で読み込みます。

これをつかうと画像キャッシュされてしまうので、

NSString *path = [[NSBundle mainBundle] pathForResource:@"aaa" ofType:@"png"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:path];

を使いたい所ですが...残念ながらできません。
AssetCatalogで設定した画像は、コンパイルされると Assets.car というファイルにまとまってしまうようです。

2. CocoaPodsで追加するライブラリプロジェクトには使えない

Aプロジェクトをつくる
BプロジェクトでAをCocoaPodsでinstall

する場合、Aプロジェクトの方にAssetCatalogを使うと画像が上手く取り込めませんでした。

解決方法わからず... 諦めてAssetCatalog使わない方向へ..。

refs:
Getting .xcassets compilation to work for development pods? #1549



ハマリ点

1. iOS6でのアプリアイコンが non pre-rendered

iOS6で実行したら、アプリアイコンに光沢(グロス)ついちゃってた ということが良く有る。iOS7で見ていると光沢は付かないので結構うっかりやってしまう。
pre-renderedの設定は、AssetsCatalog内にあるので、忘れず設定しましょう。

2. plistのアイコン設定消し忘れ

plistにある、アイコン設定
- Icon files
- CGBundleIcons~ipad
などは忘れず消しましょう。

iPhoneアプリで CGBundleIcons~ipad の設定がある + でも値は空の状態だと、
iPadにインストールした時アイコン無しになっちゃうみたいです。
設定がないなら、他の画像を使ってくれるというルールはここには無いらしい...。

XCode4時代に作ったプロジェクトだと、追加した覚えがなくてもCGBundleIcons~ipadが自動的に入っている可能性があるので注意。

3. sliceはiOS7以上だけ

sliceをみたとき、resizableImageWithCapInsets をいちいち書かなくてもよいのか!と小躍りしましたが、iOS7以上のみで使用可能でございます。
sliceしたものは、Storyboard上でもslice後の表示になるのも、とても嬉しい。

デザイナーさんも、左右上下は○pxづつ固定であとは引き延ばしで...とプログラマさんに指示しなくてもOKなので、やりやすいですな!

端末サイズが大きくなる噂もあるから、
さっさとiOS7以上のみ対応にして、sliceつかって画像を入れるようにした方が後々勝ち組になる気も...!




• • •