StoryBoard Referenceについての所感

StoryBoard Reference

Xcode7からStoryBoard間での参照ができるようになりました。 今までのStoryBoardでは、1つのstoryboardファイル上で複数のエンジニア・デザイナーがそれぞれ異なるViewControllerのオブジェクトに編集作業を施してマージを行うと、容易にファイル競合(コンフリクト)が発生してしまいました。(バージョン管理はgitを使っていると仮定)

UIKit徹底解説 iOSユーザーインターフェイスの開発

UIKit徹底解説 iOSユーザーインターフェイスの開発

StoryBoardは御存知のようにXMLで記述されているので、競合を解消するとなるとstoryboardファイルをエディターで開き、競合箇所を探し、都度手作業で直すという恐ろしく泥臭い作業をこなさなければいけません。

もちろん、この競合をさけるため1storyboardファイルは1作業者とルール付けをし、そのルールを守るためにstoryboradファイル自体に収めるViewControllerのオブジェクト数も限定する(脱・Moster Storyboard) という、設計レベルからの十分な考慮をされている方もいらっしゃるでしょう。

ただ、アプリの「機能」という軸で画面を分割していく過程で、どうしても1人のエンジニアが大量の画面群と遭遇してしまうことは往々にしてあるのかと思います。そういったケースの打開策として、上述のように無理矢理、複数人で同一storyboardを編集してファイル競合の憂き目にあうのではなく、StoryBoard Referenceの利用により複数人による安全な開発を行うということは十分現実的なのかと考えられます。

また、開発の現場においては、例えば「ユーザの回遊率アップを図るため実験的に画面の追加、それに伴う画面遷移の変更」というような突然の仕様変更が不確実な要素として降ってくることは往々にしてあるでしょう。そのような時にstoryboard間での参照機能があれば、新たに追加しなくてはいけなくなったViewControllerを専用の別のstoryboardに追加して、その参照を今回の「対応」の対象となるstoryboardに持たせることで比較的安全かつ柔軟に、そして今後の保守を見据えて「不確実な要素」に対応することが可能になるのではないでしょうか。

使ってみる

Xcode7 betaをインストールする

StoryBoard ReferenceはXcode7 betaから導入された機能です。
使うにはXcode7 betaが必要です。
ダウンロードしましょう。

storyboardファイルを用意する

今回は2つのストーリーボードを用意します

  • Main.storyboard
  • Detail.storyboard

Main.storyboardのViewControllerからDetail.storyboardのDetailViewControllerへReference経由で遷移します。

Main.storyboardを開きます。

オブジェクトライブラリーにStoryboardReferenceが追加されていることを確認しましょう。
もし、StoryboardReferenceが無ければあなたの使っているXcodeはXcode7-betaではありません。

StoryboardReferenceを配置する

Main.storyboardのキャンパス上にStoryboardReferenceを配置します。

StoryboardReferenceのアトリビュートエディッターを開きます。

項目は以下の3つ

  • Storyboard
    • 参照を持ちたいStoryboardファイルを指定します。指定は.storyboardより前の名称だけです。
      (今回の場合はDetail)
  • ReferencedId
    • Detail.storyboard内で参照したいViewControllerのStoryboard IDを指定します。
      (今回の場合はDetailViewController
  • Bundle
    • 使用するBundleを指定します。(デフォルトはMain Bundle

Detail.storyboardにDetailViewControllerを配置する

DetailViewControllerを配置したら、Storyboard IDにDetailViewControllerを設定しましょう。

Segueを設定する

遷移イベントを発火させるButtonとStoryboardReferenceをSegueで結びます。

これだけ

あとはbuildしてシュミレーターで起動しましょう。

Main.storyboardのViewControllerからDetail.storyboardのDetailViewControllerへReference経由で遷移することができました。

すごく簡単でしたが、これでStoryBoard Referenceを介してStoryboard間での参照ができるようになりました。

打倒!MonsterStoryBoard!