Xcode / IOS 同一代码库/项目的多个应用程序

3

我正在尝试设置Xcode,以便我可以使用相同的代码构建/发布两个应用程序,但具有不同的应用图标、资源和不同的数据库。

如果我有两个使用相同代码的应用程序:

  • 应用程序1:水果列表(显示水果列表)
  • 应用程序2:蔬菜列表(显示蔬菜列表)

对于这两个应用程序,我将拥有唯一的Bundle ID(当然),相同的代码,但不同的图片和数据库。我如何设置Xcode来拥有一个项目,并能够选择要构建的应用程序?

我似乎了解到我们可以使用方案、目标或构建配置选项,但到目前为止,我发现这些更令人困惑而不是帮助。

对此的任何建议/帮助都将受到欢迎!在这种情况下,我听起来像是一个疯狂的解决方案,需要多个项目并复制更改。

谢谢。


1
这是一个很好的用例,将“核心”代码创建为一个框架,可以被任意数量的项目或目标使用/利用。 - BonanzaDriver
我们通常创建libRuntime、libFoundation、libNetworking、libUI、libAssets、libApp等框架。这些框架通过协议或抽象类相互连接。因此,每个框架都具有足够的可配置性。具体的应用程序由特定于应用程序的框架(例如libAppOne、libAppTwo等)、独特的资源(例如libAppOneAssets、libAppTwoAssets)和文件main.swift/App.swift/AppDelegate.swift组成,这些文件连接所需的框架。为了为具体的应用程序生成Xcode项目,我们使用XcodeGen工具https://github.com/yonaskolb/XcodeGen。 - Vlad
2个回答

2

选项1:

最简单的方法是创建一个项目并向其中添加多个“app”目标。您需要确保每个目标都添加了正确的源文件(关于如何执行此操作,SO上有很多信息,包括:Xcode easily add multiple files to a target)。

每个目标都可以有独立的Bundle ID,但您可以选择向每个目标添加哪些源文件/图像等。您还可以在每个目标的“Build Settings”中设置单独的构建标志、环境变量等。

您可以使用Xcode工具栏中的目标菜单(位于源文件选项卡上方)选择要构建和运行的目标。

选项2:

另一个选项(或者说是对选项1的变体)是在同一项目中有2个应用程序目标(与选项1相同),并且还创建一个第三个目标,即框架。该框架可以封装一些应用程序之间共享的代码。例如,在我的一个应用程序中,我有一个音频引擎,它在iOS和macOS版本的应用程序之间共享。那个框架的源文件只属于一个目标(框架),然后将该框架作为两个应用程序目标的依赖项添加。

谢谢你的回答Jnpdx,听起来确实是我需要的。你给我的链接很有帮助,但是那些人都在讨论已经设置好目标的情况。我面临的问题之一是我似乎找不到如何创建/替换默认创建的目标:project、projectTest和projectUITest。 - Slamit
你不一定需要替换那些。"Project"可以是我上面提到的应用之一。然后,添加另一个目标并在它们之间共享源代码。 - jnpdx
我肯定是漏掉了一些非常简单的东西,我卡在了尝试找到如何/在哪里添加目标(target)在Xcode中。 - Slamit
我现在手头没有,但我相信只是文件菜单 -> 新建 -> 目标 - jnpdx
那里确实容易多了,我在搜索的地方。谢谢你! - Slamit

1
您正在描述一个包含两个应用程序目标的项目。在构建/运行时,只需切换窗口顶部的方案弹出菜单即可选择您想要的目标。

enter image description here

要在应用程序之间共享代码,只需将文件添加到两个应用程序目标中。

enter image description here


非常感谢你的答案,马特。你提到了“方案”和“目标”,我不太确定它们的区别。我有三个默认目标,但我不知道如何更改/替换它们! - Slamit

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