A concise and elegant iOS project catalog that helps teams improve development efficiency while making coding fun for themselves; On the other hand, a cluttered catalog can be frustrating and slow down team development.

Do you feel the same way? Feel free to leave your thoughts in the comments section.


First of all, I want to say:

  • The engineering architecture described in this article is applicable to teams that develop in pure code as well as those that develop in Storyboard;
  • This article is applicable to the traditional Tabbar+NavigationBar built app, also applicable to other non-traditional apps;
  • This article is especially useful for letting new members of the team understand the overall architecture of the project and develop it quickly

This paper takes the COMPANY’s FCS APP as an example, and the interface is as follows:


The main interface




Construction drawing of engineering framework



Making the address

Models: The model data class, where all custom data Models should be placed; Views: View classes, function modules need to build another layer of folder, all custom function module view classes should be placed in the folder given by the user, except the manual drag third-party UI controls, third-party UI should be placed in the Vendor folder; Controllers: Controller class, all controller classes in this folder, if there are BaseViewController, BaseNavigationController can be placed in the Base folder (can be created in this directory a Base folder), The Storyboards of the corresponding function modules are also stored in this directory. It is more convenient to put Storyboards in this directory than in View. (Our project started by creating a Storyboards folder in the Views directory to store all Storyboards. The downside of this approach is that the corresponding Storyboard and function module VC is too far away to operate. Resouces: Resource folder, where audio, video, images (webP format images or PNG background images with large memory only need one copy), fonts, animations and other resource files are stored. Util, some utility class folder, such as objective-C classification folder Category, swift Extension folder Extension, management singleton folder Manager etc. Vendor is a third-party library that is manually managed. The BookRoom module of our FCS app in the figure above is introduced in the form of encapsulation as framework, so it is suitable to be added here. There are also some lightweight third-party libraries that can be manually added by dragging codes. For example, in our project, there is a third-party library DeviceUtil to obtain the adaptation model. For such a relatively light library, try to use manual drag-in code management. After all, too many frameworks in the project will affect the startup time of app. WWDC 2016 Session 406-Optimizing App Startup Time The Pods: Great third-party library management tools like AFNetworking, image loading SDWebImage, and heavier third-party libraries can be automatically managed using Pods. You can also use Carthage to manage libraries, and there’s a lot of discussion on the web about which one to use. Our company uses Pods, so we call Pods 🌰; Appdelegate and Home Page: The Appdelegate and home page are the entry points to each function module, so they are placed most prominently at the top (for traditional Tabbar+NavigationBar App, the home page class file might be under the corresponding module). Assets. Xcassets, info. Plist: This part is in the same directory as the Appdelegate, but it is placed at the bottom. The operation frequency of this part is not too much. Pictures inside assets. xcassets can be placed and added by the function module (New Folder, named after the module).

Seeing this, some people may think: isn’t it good for a project to be divided directly according to function modules, and then divide each function module according to MVC mode? Take the following APP as an example


Art Institution Edition




Divide engineering frame drawing by function module



The second mode, which is divided into functional modules, is suitable for small teams (less than 2-3 people on iOS).
If the team has a large number of people, the first pattern is better suited for more efficient development

Some other tips:

  1. The folder module should be named in English instead of Chinese, and the correct English name should not be pinyin.
  2. Capitalize the first letter of the name;
  3. The number of folder layers should not be too many, up to three layers;
  4. To quickly locate a class file, press command+ Shift +J to locate its specific location module.

GitHub address of Demo