Xcode项目组结构的最佳实践?

App*_*Dev 15 directory xcode file project-structure ios

在提供代码示例的教程和示例中,有时我看到Xcode项目导航器中的项目文件按照MVC模式("视图","控制器","模型")按组排列,有时它们被组织成组按功能(例如"登录","清单").

关于iOS,Apple有什么约定/推荐吗?哪个应该是最好的做法?

Jam*_*lam 19

开发人员以多种方式组织他们的组,代码和文件.但我使用如下内容:

  • CoreData:包含DataModel和Entity Classes.

  • 扩展:包含一个类(默认的apple类扩展+项目类扩展.)

  • 助手:包含第三方类/框架(例如SWRevealController)+桥接类(例如基于Swift的项目中的Obj C类)

  • Model:创建一个单例类(例如,AppModel - NSArray,NSDictionary,String等)来保存数据.Web服务响应解析和存储数据也在此处完成.

  • 服务:包含Web服务进程(例如,登录验证,HTTP请求/响应)

  • 视图:包含故事板,LaunchScreen.XIB和视图类.创建子文件夹单元格 - 包含UITableViewCell,UICollectionViewCell等.

  • 控制器:包含与UIElements相关的逻辑或代码(例如,UIButton的参考+点击动作)

此结构来自另一个Stack Overflow帖子.

这些也可能对您有所帮助:

  1. http://akosma.com/2009/07/28/code-organization-in-xcode-projects/

  2. https://github.com/futurice/ios-good-practices/issues/28

  3. http://www.slideshare.net/MassimoOliviero/architecting-ios-project

  • 第一个链接失效了 (2认同)

Emm*_*Emm 11

在组织项目中的文件时,有两种最常见的方法。按类型功能组织代码文件。

按类型组织代码

对于小型项目来说,按类型组织代码是可以的,但对于大型项目来说,这不是一个好的做法。

这样,您将所有模型放在一个文件夹中,所有视图放在另一个文件夹中,所有控制器放在第三个文件夹中,等等。

想象一下,您有大量按类型组织的文件和文件夹,当您处理单个功能时,您必须打开所有文件夹。这可能会让您感到困惑,并且在滚动浏览文件时可能会多次迷失方向。

像这样的东西:

  • 应用程序代理
  • 视图控制器
    • 特点 1 风险投资
    • 特征 2 VC
    • 特征 3 VC
  • 楷模
    • 特点1 型号
    • 特点 2 型号
    • 特点 3 型号
  • 意见
    • 特征 1 视图
    • 特征 2 视图
    • 特征 3 视图
  • 扩展
    • 特性 1 扩展
    • 特性 2 扩展
    • 特性 3 扩展
  • 联网
  • 资源

按功能(意图)组织代码

按功能(意图)组织代码是大型项目和大型团队的最佳实践。您将与该功能相关的所有内容都放在一个文件夹中,当您使用该功能时,无需打开所有其他文件夹(组)。

因为通常团队只专注于单一功能,并且他们只关注单个文件夹或一组文件。他们不一定需要了解其他功能和文件。

它看起来像这样:

  • 应用程序代理
  • 特征
    • 特点1
      • 视图控制器
      • 楷模
      • 意见
      • 逻辑
    • 特点2
      • 视图控制器
      • 楷模
      • 意见
      • 逻辑
  • 联网
    • 楷模
    • 逻辑
    • 扩展
  • 资源

另外,值得一提的是,这种实践和技术(按功能组织项目)是由世界各地最大的公司实施的。因此,他们根据项目的功能划分团队,每个团队都致力于特定的功能。除此之外,当您使用 时git,它可以减少合并和变基时发生冲突的机会。


Jul*_* B. 6

我实际上创建了一个项目,以展示我认为中小型代码库所用的Xcode项目结构。你可以在这里找到它。

这是它的轮廓:

  • 源-所有源代码
    • 帐户-与帐户相关的类(与会话相关的类,帐户逻辑等)
    • 应用程序-与应用程序相关的类。应用程序委托,配置类等
    • 核心添加-来自Apple类的扩展和子类
      • 实用程序-通用实用程序类。有用的扩展,格式化实用程序,便利类等
      • 基于元素的文件夹-用于UIView,UITableViewCell等的文件夹
    • 本地持久性-本地持久性层。与本地数据库的所有交互(领域,核心数据)
      • 存储库-所有与模型相关的本地持久性逻辑
    • 常数-所有常数。网址,字体,颜色,错误等
    • 模型-所有模型(服务器端实体的表示形式)。我们还将在这里抛出任何对象映射逻辑
    • 模块-在这里我们可以找到按功能划分的每个应用程序片段
      • 基于模块的文件夹-每个文件夹包含所有特定于模块的视图控制器,视图,委托和相关类
    • 联网-应用程序的联网层(例如负责与Web服务交互的类)
      • 服务-所有与模型相关的Web逻辑
  • 故事板-包含所有故事板文件
  • 资源-任何其他资源,例如媒体,文档,本地化文件等