Xcodeのファイルを整理する Synx


Xcodeのグループに合わせて、
ファイルを整理してくれる便利ツールを紹介します。

##リンク
https://github.com/venmo/synx


##インストール
`$ gem install synx`


##使い方
`$ synx path/to/my/project.codeproj`

*CocoaPods* を利用する場合は
先に *Synx* で整理してから
`$ pod install`
を行ったほうがいいみたいです。


##Advanced
-e 指定したグループの整理はしない
-p Xcodeで管理されていないファイルを削除

例

```shell-session:sh
$ synx -p -e "/MyProject/My Group" -e /MyProject/MyGroup ./MyProject.xcodeproj/
```

##使用例
新規プロジェクトを作成しました。
初期のグループはこんな感じですよね。
![ss_1.png](https://qiita-image-store.s3.amazonaws.com/0/37344/2d2317e0-22a2-23b8-0116-784c533362a6.png "スクリーンショット 2015-01-06 18.34.23.png")

ディレクトリ構成をtreeコマンドで確認してみましょう。

```shell-session:sh
$ tree
.
├── MyProject
│   ├── AppDelegate.h
│   ├── AppDelegate.m
│   ├── Base.lproj
│   │   ├── LaunchScreen.xib
│   │   └── Main.storyboard
│   ├── DetailViewController.h
│   ├── DetailViewController.m
│   ├── Images.xcassets
│   │   └── AppIcon.appiconset
│   │       └── Contents.json
│   ├── Info.plist
│   ├── MasterViewController.h
│   ├── MasterViewController.m
│   └── main.m
├── MyProject.xcodeproj
│   ├── project.pbxproj
│   ├── project.xcworkspace
│   │   ├── contents.xcworkspacedata
│   │   └── xcuserdata
│   │       └── Nomura.xcuserdatad
│   │           └── UserInterfaceState.xcuserstate
│   └── xcuserdata
│       └── Nomura.xcuserdatad
│           └── xcschemes
│               ├── MyProject.xcscheme
│               └── xcschememanagement.plist
└── MyProjectTests
    ├── Info.plist
    └── MyProjectTests.m

12 directories, 18 files
```

このようにMyProjectフォルダに全てのファイルがある状態です。
ごちゃごちゃしててわかりにくい。。。

ではまずXcode上でグループ分けをします。
簡単にこんな感じにしてみました。

![ss_2.png](https://qiita-image-store.s3.amazonaws.com/0/37344/46631693-b4c7-8a9d-8d34-8573ed69e7c4.png "スクリーンショット 2015-01-06 18.37.14.png")

synxコマンドで整理してみましょう

```shell-session:sh
$ synx ./MyProject.xcodeproj/

  Syncing files that are included in Xcode project...
  MyProject/
    Sources/
      Defaults/
        AppDelegate.h
        AppDelegate.m
      Views/
        Master/
          MasterViewController.h
          MasterViewController.m
        Detail/
          DetailViewController.h
          DetailViewController.m
        Base.lproj/
          Main.storyboard
    Resources/
      Images/
        Images.xcassets
        Base.lproj/
          LaunchScreen.xib
    Supporting Files/
      Info.plist (build settings amended: INFOPLIST_FILE)
      main.m
  MyProjectTests/
    MyProjectTests.m
    Supporting Files/
      Info.plist (build settings amended: INFOPLIST_FILE)
  Products/ (excluded)


  Syncing files that are not included in Xcode project..
  MyProject/
    Sources/
      Defaults/
      Views/
        Master/
        Detail/
        Main.storyboard/
    Resources/
      Images/
        LaunchScreen.xib/
    Supporting Files/
  MyProjectTests/
    Supporting Files/
  Products/ (excluded)
```

なにやらカラフルなものがでて、一瞬で整理されました。
treeコマンドで確認してみましょう。

```shell-session:sh
$ tree
.
├── MyProject
│   ├── Resources
│   │   └── Images
│   │       └── Images.xcassets
│   │           └── AppIcon.appiconset
│   │               └── Contents.json
│   ├── Sources
│   │   ├── Defaults
│   │   │   ├── AppDelegate.h
│   │   │   └── AppDelegate.m
│   │   └── Views
│   │       ├── Base.lproj
│   │       │   ├── LaunchScreen.xib
│   │       │   └── Main.storyboard
│   │       ├── Detail
│   │       │   ├── DetailViewController.h
│   │       │   └── DetailViewController.m
│   │       └── Master
│   │           ├── MasterViewController.h
│   │           └── MasterViewController.m
│   └── Supporting\ Files
│       ├── Info.plist
│       └── main.m
├── MyProject.xcodeproj
│   ├── project.pbxproj
│   ├── project.xcworkspace
│   │   ├── contents.xcworkspacedata
│   │   └── xcuserdata
│   │       └── Nomura.xcuserdatad
│   │           └── UserInterfaceState.xcuserstate
│   └── xcuserdata
│       └── Nomura.xcuserdatad
│           └── xcschemes
│               ├── MyProject.xcscheme
│               └── xcschememanagement.plist
└── MyProjectTests
    ├── MyProjectTests.m
    └── Supporting\ Files
        └── Info.plist

21 directories, 18 files
```

[Sources]、[Resources]、[Views]、各グループ名のディレクトリが作成され、
その中にファイルがはいりました。


最初のディレクトリ整理で時間を取られていた時代はなんだったんだろう。。。