2014-04-21OrganizationXcodeプロジェクト内のクラスの依存関係を図示するsellPython,Objective-C,iPhone,Xcode,iOS他人から引き継いだプロジェクトの大まかな全体設計を把握したい場合、規模の大きいライブラリの一部だけ取り出して使用したい場合、複雑になってしまったコードをリファクタリングしたい場合等、プロジェクト内のクラスの依存関係が一望できると有益な場面は多いのではないでしょうか。objc_depというスクリプトを用いると、下記のように、Xcodeプロジェクト内のクラスの依存関係を示す図をコマンド一発で生成することができます。このスクリプトの使い方、生成される図の見方等を紹介します。いうファイルが入っています。https://github.com/nst/objc_depそのスクリプトを適当な場所に置き、ターミナルから次のように実行します。demo.dotというコマンドになります。いうアプリケーションで表示できます。いうサンプルアプリの依存関係を出力してみました。出力された図を見ると、青い矢印で結ばれているところがあります。ソースコード内のコメントによると、「相互にimportしている」場合に青い矢印で結ばれるようです。コードの保守性の観点から、クラスの相互依存はなるべく避けたいところかと思います。青い矢印が存在した場合、プロトコルを使用して直接参照を片方向からのみにできないか検討する、といったようにリファクタリングの指針とすることができます。この例には出てきませんでしたが、赤い矢印が出てくることがあります。赤い矢印は、.pchファイルからのimportを意味します。されたヘッダは全クラスから参照される(この参照の矢印は描画されない)ため、このような使用になっているものと思われます。している、といったように不要な依存性がないかのチェックの指針となります。この例には出ていませんが、カテゴリは(他のクラスに依存していない場合は)依存関係図から切り出して右上の方に列挙してくれます。カテゴリはその性質上多くのファイルから参照されていても設計上の問題とはならないため、図がゴチャゴチャしないようにこういう仕様になっているようです。