Storyboardで消耗しないためのTips

>まだ Storyboard で消耗してるの？——Re:ゼロから始める視覚表現（ビジュアルリプリゼンテーション）
>http://qiita.com/lovee/items/acfc9d0f1ffa7207b38b

上記記事にて Storyboard の問題点が数多く指摘されていましたが、運用でカバーできそうな部分もあったので、元記事を引用しつつTipsとして残しておきます。

# ~~Storyboardの変更を.stringsに反映する~~
Xcode8.2.1で再度確認したところ下記のテクニックは使用不可になっていました
残念:frowning2:

=> **よりまともな方法が見つかりました。**
http://qiita.com/kenmaz/items/756750266677934de7fe

**以下deprecated**

////////////

> http://qiita.com/lovee/items/acfc9d0f1ffa7207b38b#最初から全て設計しておかなければ後から追加するのが大変
> ...
> Localize ボタンを押した時点で、Storyboard の中に何があるのか、何が翻訳必要か、などのようなものを自動で生成してくれるけど、そのあとは一切知らんぷり。例えばボタンを一つ追加した。しかし .strings (Language) ファイルは何一つ変わってくれません。

BaseのStoryboardを変更したあとに、ローカライズ対象のstringsファイルを再変換すれば自動でstoryboardの変更点がstringsに反映されます。手順は以下のとおりです。

(1) `Main.storyboard` に `LABEL_1`というラベルがひとつだけ定義されている

![スクリーンショット 2016-11-14 15.30.14.png](https://qiita-image-store.s3.amazonaws.com/0/8399/4d88cbad-aa7f-71d0-87a1-03bdf00401b6.png)

(2) jaのLocalized String (`Main.storyboard (Japanese)`) には `"LABEL_1"`が `"ラベル１"`としてローカライズ定義済み 

![スクリーンショット 2016-11-14 15.31.14.png](https://qiita-image-store.s3.amazonaws.com/0/8399/92922f55-72c1-c20c-fe74-6ff85379227d.png)

(3) `Main.storyboard` に新たなUILabel `LABEL_2` を追加

![スクリーンショット 2016-11-14 15.31.40.png](https://qiita-image-store.s3.amazonaws.com/0/8399/dd6d0044-1c56-a4bf-8544-bac832bb7f74.png)

(4) Main.storyboard(Japanese) を選択し、File Inspector > Localization で Japanese の隣の `Localizable Strings` の部分をクリックし、`Interface Builder Storyboard` を選択する。

![スクリーンショット 2016-11-14 15.45.25.png](https://qiita-image-store.s3.amazonaws.com/0/8399/6b81f60a-e525-19ab-4f21-8d3c129e2e11.png)

(5) 変換された `Main.storyboard (Japanese)` を開くと `ラベル１`はローカライズされた状態が保たれつつ、新たなラベル `LABEL_2` が追加されたことがわかる。

![スクリーンショット 2016-11-14 15.45.59.png](https://qiita-image-store.s3.amazonaws.com/0/8399/230fb0b9-45c4-6191-479e-11f41d31031a.png)

(6) ここで再び File Inspector > Localization を Interface Builder Storyboard から Localized Strings に変更し、ふたたび stringsファイルに変換する。

![スクリーンショット 2016-11-14 15.46.13.png](https://qiita-image-store.s3.amazonaws.com/0/8399/e8194fdd-1ee8-b5c5-c2d6-7758dc1c99c7.png)

(7) 元のstringsに新たなラベル LABEL_2 に対応する 定義が追加された状態になっている。あとは追加されたLABEL_2をローカライズすれば完了。

ちなみにドキュメントにはこの手順についての記述がなかったので、昨年のWWDC2015に行ったときにInterface Builder開発担当のApple社員に「この挙動はバグなの？仕様なの？他に正しいやり方はあるの？」と確認したところ「へえ、こんなことできたんだ、それでいいんじゃない？」という回答を得ました（）

# コメントをつけて Storyboard と strings 上の要素間の対応関係をわかりやすく

>http://qiita.com/lovee/items/acfc9d0f1ffa7207b38b#最初から全て設計しておいても後からメンテするのが大変
> ...
>結局のところ全ての要素は ID で示されています。おまけに一応コメントを作ってくれるが大した有用な情報はない。クラス名は教えてくれるけど。でもあのわけわからん ID は別に自分から検索できたりはしない。

Storyboard 上の各要素にコメントを付けておけば、stringsにもコメントが反映されるので、わけのわからないIDで検索する必要はなくなります。

(1) Identity Inspector > Document の Comment For Localizer にコメントを書く

![スクリーンショット 2016-11-14 16.16.06.png](https://qiita-image-store.s3.amazonaws.com/0/8399/6af6fd79-2fed-e1cf-5b96-f4cbd8870859.png)

(2) stringsファイルの各項目に Note = <コメント> が記載される

![スクリーンショット 2016-11-14 16.00.47.png](https://qiita-image-store.s3.amazonaws.com/0/8399/013f9bed-ad7e-7092-084a-8a888f32966a.png)

# がんばってやっていこう

過去に 

>だいすきストーリーボード
>http://www.slideshare.net/kenmaz/storyboard-34726644

というタイトルで発表しちゃったことがあるくらいなので、Storyboardがdisられていると聞いて、思わず擁護記事を書いてしまいましたが、まあ確かに辛い部分は多々ありますね。Storyboardでできる部分はStoryboardで、そうでない部分はコードで、というのが現実的なところですかね。

各位がんばってやっていきましょう。