优雅快速的搭建iOS工程框架的探讨

移动开发
一个简洁优雅的iOS工程目录,能够帮助团队提升开发效率,同时也令自己进行心情愉悦的编码;反之,杂乱无章的目录则会使人心情烦躁,降低团队开发效率。

一个简洁优雅的iOS工程目录,能够帮助团队提升开发效率,同时也令自己进行心情愉悦的编码;反之,杂乱无章的目录则会使人心情烦躁,降低团队开发效率。

不知你是否也有同感?欢迎你在评论区写下的感受。

首先,我想说:

  • 本文说的工程架构适用于纯代码开发的团队,也适用于使用Storyboard开发的团队;
  • 本文适用于传统的Tabbar+NavigationBar搭建的app,也适用于其他非传统的app;
  • 本文特别适用于让团队的新进成员了解项目的整体构架,并且进行快速开发

本文以公司的FCS app为例,界面如下:

 

主界面

公司的项目属于Objective-C和Swift混编的项目,对于纯swift的项目和纯OC的项目,可能文件夹和类文需要自行修改,Xcode项目工程目录如下:

 


工程框架搭建图

正如上图所示,我将项目划分为9大部分,GitHub地址

Models:模型数据类,所有自定义的数据模型应该放在此处;

Views:视图类,以功能模块还需要再建一层文件夹,所有自定义的功能模块的视图类都应该放在给自的文件夹下此处,,手动拖入的第三方UI控件除外,第三方的UI应该放入Vendor文件夹里;

Controllers:控制器类,所有控制器类放在此文件夹里面,如果有BaseViewController、BaseNavigationController可以放在Base文件夹下(可以在此目录下新建的一个Base文件夹),同时相应功能模块的Storyboard也放在此目录下,Storyboard放在此处相比于放在View里面更加方便(我们项目最开始在Views目录下新建Storyboards文件夹来存放所有的Storyboard,这样的做法弊端是去相应的Storyboard和功能模块的VC太远,操作不便);

Resouces:资源文件夹,存放项目需要用到的音频、视频、图片(webP格式的图片或者内存比较大png只需要用到一份的背景图片)、字体、动画等等资源文件都放在此处;

Util,一些工具类的文件夹,比如Objective-C的分类文件夹Category、swift扩展类的文件夹Extension,管理单例类文件夹Manager等等;

Vendor,手动管理的第三方库,上图的BookRoom是我们FCS app的BookRoom模块都是封装为framework的形式引入的,所以就适合在此处添加,还有一些比较轻的第三方库就可以手动拖入代码添加进来,比如我们的项目中有一个获取适配型号的第三方库DeviceUtil,对于这类比较轻的库尽量使用手动拖入代码管理,毕竟项目中的framework多了,会影响app的启动时间,这个在WWDC 2016 Session 406 - Optimizing App Startup Time的演讲中有讲原理;

Pods :优秀的第三方库管理工具,比如网络请求AFNetworking,图片加载SDWebImage等等比较重的第三方库就可以使用Pods自动管理,当然你也可以使用Carthage来管理,具体使用哪个见仁见智,网络上也有很多关于这个的讨论。我们公司使用的是Pods,所以就是以Pods为主了

Appdelegate和首页:Appdelegate和首页是各个功能模块的入口,所以放在顶部最显眼的位置,(对于传统Tabbar+NavigationBar App的首页类文件可能会在对应的模块下);

Assets.xcassets、info.plist:这部分相对Appdelegate在同一目录下,但是放在最下面,这部分的操作频率不是太多,Assets.xcassets里面的图片,可以使用功能模块放置添加(New Folder,以模块命名)。

看到这里,有的人会想:一个项目直接按照功能模块划分不也挺好的么,每个功能模块里面再按照MVC的模式划分,以下面这个app为例

 


艺学机构版

划分如下所示如下图所示:

 


以功能模块划分工程框架图

这两种搭建项目框架的模式没有孰优孰劣之分,只有得放到具体情境下面讨论才有意义,不过很明显,第二种以功能模块划分的模式适用于以小团队开发(iOS端2-3人以下),这样每个人负责开发一个模块,效率非常高。如果团队人员比较多,则更适合采用***种模式,这样开发效率更高,比如有人专门负责,网络层代码的编写,有人专门负责UI界面的编写,有人负责日志类的封装编写。

一些其他的小建议:

文件夹模块使用英文而不要使用中文命名,并且使用正确的英文名不要使用拼音;

  1. 名称首字母大写;
  2. 文件夹层数不要太多,最多三层;
  3. 快速定位某一个类文件的位置,光标在定位在类文件里面,按快捷键command+shift+J并可定位他的具体位置模块。

demo的GitHub地址

责任编辑:未丽燕 来源: 简书
相关推荐

2011-09-22 14:08:38

需求工程的探讨

2010-09-15 09:03:44

JavaScript

2018-05-24 11:38:17

2024-04-02 09:55:36

GolangColly开发者

2023-04-18 10:05:20

系统框架

2021-11-18 09:46:24

ServerlessKubeless 阿里云

2009-06-24 17:21:23

JSF框架设计模式

2011-04-08 10:51:17

Objective-CiOS

2018-10-08 14:13:04

区块链框架项目

2023-01-14 08:12:53

KnowTopic配置

2019-02-21 06:51:31

2022-04-12 12:02:14

Nginx公网加密数据

2019-10-09 11:26:01

JavaXMLSQL

2021-12-03 11:06:01

VeleroKubernetesLinux

2023-09-14 07:46:52

2009-10-28 12:39:33

Java EE无框架

2024-01-24 10:48:39

CMakeMakefile文件工具

2017-05-27 09:23:10

IOS框架APP框架代码

2017-09-10 17:31:18

iOS渲染数据

2024-02-02 18:00:11

C++代码C++14
点赞
收藏

51CTO技术栈公众号