今回はUniversal対応におけるノウハウを説明していきたいと思います。試行錯誤してたどり着いた結論ですが、これが王道というものではありません。自分も考えが変わるかもしれません・・・あくまで参考ということでお願いします。

Universalにすべきかどうか?

iPhone/iPad両方対応のアプリを作る場合、

  • iPhone/iPadでそれぞれ別のプロジェクトにする
  • Target DeviceをUniversalにして1つのプロジェクトにする

の2パターンがあります。

どちらが良いかは状況に応じて判断が別れるかもしれません。

Universalにする上で気になったことは、

  • iPhone版だけ修正した場合も、AppStoreに上げるとiPad版も更新対象になってしまう。逆もしかり
  • 片方だけの修正のつもりが、もう片方に影響を与えバグの引き金になるかもしれない

という点です。

もし、別々のプロジェクトにするなら、

  • 共通するコードは切り出しておく
  • GitならそれをSubmoduleとしてそれぞれのプロジェクトで読み込む

といった対応が考えられます。

しかし考え抜いた結果、やっぱりUniversalの方が管理しやすいだろうという結論に至りました。理由は以下のとおり。

  • ViewController以外の部分はiPhone/iPad両方ほぼ使いまわせる
  • ViewControllerも表示サイズが異なるだけで両方でほとんど使いまわせる

いざ手を動かしてみたら、ほとんどは使いまわせるんですね。たぶん、ほとんどのアプリがそうだと思います。

一番異なる部分はホーム画面だと思います。iPhoneはUITabBarController、iPadはUISplitViewControllerというパターンはよくありがちです。けれど、

  • UITabBarControllerのviewControllersプロパティに設定するViewController
  • UISplitControllerのdetailViewControllerプロパティに設定するViewController

は共通ではないでしょうか。また、そこから遷移するViewControllerもほとんど共通だと思います。

次に異なりそうななのは、

  • iPhoneは一画面として表示する
  • iPadではPopoverのように現在の画面上に表示する

という部分ではないでしょうか。ここは確かに工夫が必要になります。けれど表示方法が異なるだけで表示内容は同じでありViewControllerを使いまわせると思います。

次回はサンプルを元に実際のプログラミングについて説明していきたいと思います。

その2へつづく