Objective-C
Xcode
iOS

突然 iOS 案件にヘルプとして召喚されたときに役立った6つの Tips

先日、突然 iOS の案件に召喚 され、新機能の実装をしてきました。

当方は、何年か前に 数ヶ月程度 iOS アプリの開発経験がある 程度で、
さらに join する案件のナレッジは皆無 という状況で、
一早く全体像を掴んだり、作業効率の向上に寄与した6つの Tips を紹介します。

とにかくまずはアプリを触る

あまりに基本ですが、全体像を把握するためには、
やっぱり実際に動くアプリをいじり倒すのが一番 ですね。

既に AppStore にリリースされていて、コンシューマ向けのアプリが動作すればベストですが、
何かしらの理由で難しい場合は、開発環境を整えて、実機でアプリを触れる環境を作りましょう。

iOS の simulator は優秀ですが、やはりできれば実機で操作するのがベストだと思います。
また、その時点で、よくわからない機能や仕様、怪しい動作等あれば確認しておくと良いですね。

サブディスプレイを用意する

完全に私の事情に依存した話ですが、
私の場合 プロジェクトルームとして別室 が用意されました。

iOS アプリ開発なので MacBook 1台持っていけば開発自体問題はないのですが、
モニタを1台運び込んだ ことで作業効率が大幅に向上しました。

特に join したばかりのプロジェクトでは、
ソースコード以外にも、wiki や仕様書類、過去チケットなど、あらゆる情報を見比べることが多くなります。

その際に、毎回ウィンドウをスイッチしていては効率が上がらないため、
多少面倒な環境(手狭、客先など)であっても、ディスプレイは用意するべきです。

一般的に、脳のコンテキストスイッチを削減するための労力は惜しむべきではないと思います。

Debugging View Hierarchies の活用

未だに Storyboard/Xib を利用していない レガシーアプリだったり、
動的にビューをゴリゴリ変更している場合、特定画面の構造が把握しづらい場合があります。

そういうときは、Debugging View Hierarchies が役に立ちました。
画像の通り、デバッガで動的に view の構造を可視化してくれます。

詳細は Apple 公式か、他記事が詳しいのでご参照ください。

CoreData の Editor Style Graph の活用

永続化データを CoreData に保持する機能を触る、あるいは追加する際は、ある程度テーブルの関係を把握しておく必要があります。
Xcode に Editor Style Graph という (E-R図ライクな)関係図を表示する機能があるため、
これを利用すると全体像を把握しやすいと思います。

位置は自由に変更が可能なので、見やすいように並べれば良いですが、
座標情報は プロジェクトファイルに保存される ため、既にコミット予定の変更が modified の状態にある場合は、
混ざってしまうため注意が必要です。

Show only recent files の活用

コードリーディングでは、ソースコードを飛び回ることになると思いますが、
いざコーディングするとなると、手を加えるファイルはそれほど多くない 場合もあります。

しかし、手を加えたいファイルが構成上、別ディレクトリに分かれていたり、同階層にズラッと並んでいると、
Project Navigator で辿るのが面倒だったり、
Spotlight(cmd + shift + o) 使おうにも、ファイル名がまだスッとはでてこない。

そういうときは Show only recent files で、最近使ったファイルのみを Project Navigator に表示する のが便利です。
これ凄い便利なのに全く主張しない場所にあって、
実装がほぼ終わった後に知りました。もっと早く君と出会いたかった。

show_only_recent_files.png

画像の通り Project Navigator の最下部にある時計マークのアイコンです。(画像は selected の状態)

クラス図の自動生成

これは正直うまく活用できなかったのですが、紹介しておきます。

大まかに下記2段階で処理を行います。

  1. python スクリプトで、ソースファイルを読み込み relation を dot ファイルに出力
  2. graphviz で可視化

通常、それなりの規模のプロジェクトでこれをやると、
8Kを超える解像度のスパゲティ が生成されて心に傷を負うことになるので、

有効活用するためには、
手順 1. の段階で、特定のサブディレクトリのみをターゲット にスクリプトを実行するとか、
明らかに参照元の多い ユーティリティやヘルパーのようなファイルは事前に除いておく などの前処理が必要だと思います。

依存関係が綺麗に整理されているプロジェクトや、
ファイルがそれほど多くないプロジェクトであれば、特に前処理を行わずとも有効的に活用できるのかも。

まとめ

というわけで、6つの Tips を紹介してみました。

結局のところ、突然入った案件で瞬発力を求められる場合は、いかに早く全体像を捉えるか がポイントで、
そのために役立ったアクションや Xcode の機能をリストアップしたという結果になりました。

少しでも彷徨える初級 iOS エンジニアの助けになればと思います。

環境情報

  • MacOS High Sierra 10.13.4
  • Xcode 8.3.3/9.3
  • Objective-C 2.0