一个代码库创建多个应用程序 - 在Xcode中使用多个项目或目标?

29
我正在开发一款iOS应用。现在它是一个应用程序和两个目标(应用程序和测试)。
接近发布时,我想将这个应用拆分成三个应用程序,共享很多代码和测试。(为App Store的免费版和完整版以及不会被发布的原型应用程序考虑)。
你会在Xcode中设置多个项目(1个库项目和3个应用程序项目),还是保持一个项目并只设置多个目标?

1
我倾向于采用单一项目的方法,因为我想保持我的唯一的git存储库,并且这种方法对我来说听起来不那么麻烦。另一方面,Xcode用户指南建议设置一个具有多个项目的工作区。我对后者的担忧是:这对我的当前结构来说是一个更大的改变。此外,从我在Stackoverflow上看到的情况来看,在多项目设置中,很多人似乎都有问题正确获取依赖项。 - Miriam
我有5个应用程序,它们都来自同一代码库。其中4个相关性足够高,可以使用相同的项目和4个目标,但1个非常不同,因此它有自己的项目。这两个项目都基于相同的Git子模块进行绘制,具有自己的顶级存储库。 - borrrden
@borrrden:谢谢。我的理解是:你将这个非常不同的应用程序拆分出来的原因是结构性的——有很多非共享代码只为这个应用程序服务?所以看起来我可以采用单一项目方法,并将进一步的重构留给“以后再说”。 - Miriam
1
是的,它们都是数字教材。我有四本英语教材和一本日语教材。英语教材在功能上几乎完全相同,只有内容有所不同。但是,日语教材有许多不同的功能,同时也有许多共享的核心功能,例如页面显示、页面导航、登录等。 - borrrden
2个回答

34

我认为您至少有以下3个选项:

  1. 分离项目。 跨项目共享代码更加困难,但使用Xcode工作空间可以实现。 如果每个项目都需要大量定制,则这可能是有意义的。

  2. 同一项目,多个目标。 这是通常的做法。 它非常简单,因为您可以清晰地查看哪些文件进入哪个目标。 如果您有大约十几个目标左右,那么处理起来就非常容易。

  3. 分离git分支。 我曾经使用过这种方法。 应用程序之间的差异(Info.plist、配置文件、数据文件)在相应的git分支中进行交换。 如果您拥有大量数据并且不需要随时都可用,则此方法很实用。 但是,如果您不熟悉git,则其复杂性相当大。 您可以创建git子模块以一次性更改共享代码部分。


1
子模块是一种从一个仓库内部访问另一个仓库的方式。然而,它的设计非常糟糕(在我看来),并且在分支存在时会搞乱事情。为了实现非常类似的目的,我最终在同一个文件夹内创建了几个项目,并将大部分代码库放在其中一个项目中(其他项目引用这些代码)。我可以从同一个 Git 仓库管理所有项目,并轻松管理要添加/删除到各自项目文件中的文件。 - Ege Akpinar

2
我建议您根据您的需求采用混合方法。
  • 如果您需要多个应用程序-创建Target,这正是它们的用途。您可以使用Target Membership来处理共享文件[关于]

  • 如果您有可以分离成模块的源代码-在Workspace中创建附加的Project(用于共享源)。 CocoaPods使用此技术。

[Xcode Workspace vs Project]
[Xcode组件]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接