LoginSignup
36
35

More than 5 years have passed since last update.

Xcodeでゴチャゴチャになったimportの順番を一発で整理する

Posted at
  • 別の画面へ飛ぶためにViewControllerのimportを追加
  • 外部の便利フレームワークを使うためにimportを追加
  • コード上でUIを記述するためにimportを追加
  • 内製のオレオレライブラリを使うためにimportを追加

このように、Objective-Cでimportをずらずらと追加していくと、下の画像のような状態になってしまうことがないでしょうか。

スクリーンショット 2015-03-29 10.05.29.png

この煩わしさをなくすため、Xcodeでimportの順番を自動で整理してくれるプラグインを作ってみました。その名もImportSorterです。

ImportSorter

リポジトリ:manji602/ImportSorter

インストール方法

上記のリポジトリをcloneしてプロジェクトをビルドするか、以下のワンライナーを実行してください。

$ curl -fsSL http://github.com/manji602/ImportSorter/raw/master/Scripts/install.sh | sh

使い方

ctrl+sを押すか、メニューからEdit->Import Sorter->Sort Import On Current Fileをクリックしてください。

先ほどのimportは、このように綺麗に並び替えることが出来ます。

スクリーンショット 2015-03-29 10.10.25.png

Roleについて

ImportSorterでは、Roleという概念を利用してimportされたファイルを区別し、そのRole毎にアルファベット順にソートします。

デフォルトでは、上の画像のように

  • 自分自身のヘッダ
  • フレームワークのヘッダ(<>で閉じられたヘッダ。// :: Framework ::以下のヘッダ)
  • その他(// :: Other ::以下のヘッダ)

の順番で並ぶようになっています。

Roleをカスタマイズするには

プロジェクト内のObjCClassRoleというmoduleでroleを管理しているので、以下の部分を修正してください。

(1) ObjCClassRole.h内のenum(ObjCImportClassRole)
ObjCClassRole.h

typedef NS_ENUM(NSInteger, ObjCImportClassRole) {
    ObjCImportClassRoleSelf = 0,
    ObjCImportClassRoleFramework,
    ObjCImportClassRoleOther
};

ここに必要なRoleを追加してください。

(2) ObjCClassRole.m内のgetImportClassRole

import宣言された行が引数として渡ってくるため、どの行をどのRoleにマッチさせたいかはこちらで定義してください。

(3) ObjCClassRole.m内のlabelForClassRole

(1)で定義したRoleに付けるLabelを記述してください。Labelを定義する場合はソートのロジックの都合上、kClassRoleLabelPrefixで始まるNSStringにしてください。

(4) ObjCClassRole.m内のlastImportClassRoleIndex

(1)で定義したenumの末尾に該当する項目を記述してください。

Swiftでも

Swiftでコードを書く場合は、同じプロジェクト内で実装したファイルは自動で読み込まれるため、import宣言を記述する必要のあるファイルは少なくなると思います。

当プラグインはSwiftでのimport順のソートにも対応していますが、Objective-Cほどimportの量が多くなることはあまりないため、roleについては特に設定しておりません。
roleを変更する場合は上述のObjCClassRoleに該当するSwiftClassRole内の同様の項目を編集してください。

終わりに

保存時(Command+S)に自動でソートできないなど、まだまだ機能不足な面もあるので随時アップデートしていく予定です。また、ニーズが多ければAlcatrazに登録するつもりです。バグや機能改善等のPRもお待ちしています…!

36
35
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
35