Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

リンク

https://github.com/venmo/synx

インストール

$ gem install synx

使い方

$ synx path/to/my/project.codeproj

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

Advanced

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

sh
$ synx -p -e "/MyProject/My Group" -e /MyProject/MyGroup ./MyProject.xcodeproj/

使用例

新規プロジェクトを作成しました。
初期のグループはこんな感じですよね。
ss_1.png

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

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

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

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コマンドで確認してみましょう。

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]、各グループ名のディレクトリが作成され、
その中にファイルがはいりました。

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

Yuta
Android / iOS アプリをメインに開発しています。
http://arouse-inc.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away