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

Xcode/IOS具有相同代码库/项目的多个应用程序,ios,xcode,xcode-scheme,xcode-build-settings,xcode-target,Ios,Xcode,Xcode Scheme,Xcode Build Settings,Xcode Target,我正在尝试设置xcode,以允许我使用相同的代码构建/发布2个应用程序,但使用不同的应用程序图标、资源和不同的数据库 如果我有两个应用程序使用相同的代码: 应用1:水果列表(显示水果列表) 应用2:蔬菜列表(显示蔬菜列表) 对于这两个应用程序,我会有一个唯一的bundle ID(当然),相同的代码,但不同的图像和数据库。如何设置Xcode以拥有1个项目,并能够选择要构建的应用程序 我似乎理解我们可以选择使用方案、目标或构建配置,但到目前为止,我发现比其他任何东西都更令人困惑 欢迎对此提出任何

我正在尝试设置xcode,以允许我使用相同的代码构建/发布2个应用程序,但使用不同的应用程序图标、资源和不同的数据库

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

  • 应用1:水果列表(显示水果列表)
  • 应用2:蔬菜列表(显示蔬菜列表)
对于这两个应用程序,我会有一个唯一的bundle ID(当然),相同的代码,但不同的图像和数据库。如何设置Xcode以拥有1个项目,并能够选择要构建的应用程序

我似乎理解我们可以选择使用方案、目标或构建配置,但到目前为止,我发现比其他任何东西都更令人困惑

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


谢谢。

选项1

最简单的方法是拥有一个项目并向其中添加多个“应用程序”目标。您需要确保每个目标都添加了正确的源文件(关于如何执行此操作的大量信息,包括:)

正如您所提到的,每个目标可以有一个单独的bundle ID,但是您可以选择要添加到每个目标的源文件/图像/等等。您还可以在“构建设置”中为每个目标设置单独的构建标志、环境变量等

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

选项2


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

选项1

最简单的方法是有一个项目,并向其添加多个“应用”目标。您需要确保每个目标都添加了正确的源文件(关于如何执行此操作的大量信息,包括:)

正如您所提到的,每个目标可以有一个单独的bundle ID,但是您可以选择要添加到每个目标的源文件/图像/等等。您还可以在“构建设置”中为每个目标设置单独的构建标志、环境变量等

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

选项2


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

您描述的是一个具有两个应用程序目标的项目。构建/运行时,只需将窗口顶部的方案弹出窗口切换到所需的方案

要在应用程序之间共享代码,只需向两个应用程序目标添加一个文件


您正在描述一个包含两个应用程序目标的项目。构建/运行时,只需将窗口顶部的方案弹出窗口切换到所需的方案

要在应用程序之间共享代码,只需向两个应用程序目标添加一个文件


这是创建“核心”代码作为框架的一个很好的用例,可以被任意数量的项目或目标使用/利用。我们通常创建libRuntime、libFoundation、libNetworking、libUI、libAssets、libApp等框架。框架通过协议或抽象类相互连接。因此,每个框架都具有足够的可配置性。具体的应用程序包括特定于应用程序的框架(如libAppOne、libAppTwo等)、独特的资源(如libAppOneAssets、libAppTwoAssets)和连接所需框架的main.swift/App.swift/AppDelegate.swift文件。为了为具体的应用程序生成Xcode项目,我们使用XcodeGen工具。这是创建“核心”代码作为框架的一个很好的用例,可以被任意数量的项目或目标使用/利用。我们通常创建libRuntime、libFoundation、libNetworking、libUI、libAssets、libApp等框架。框架通过协议或抽象类相互连接。因此,每个框架都具有足够的可配置性。具体的应用程序包括特定于应用程序的框架(如libAppOne、libAppTwo等)、独特的资源(如libAppOneAssets、libAppTwoAssets)和连接所需框架的main.swift/App.swift/AppDelegate.swift文件。为了生成具体应用程序的Xcode项目,我们使用XcodeGen工具。感谢您的回答,Matt,您谈到了方案和目标,我不确定有什么区别。我有3个默认目标,但我不知道如何更改/替换它们!谢谢你的回答,马特,你谈到了计划和目标,我不知道有什么区别。我有3个默认目标,但我不知道如何更改/替换它们!谢谢你的回答,这听起来像我真正需要的。你给我的链接帮助了我,但是那些家伙说他们已经设定了目标。我面临的一个问题是,我似乎无法找到如何创建/替换默认创建的目标:project、projectTest和projectUITest。您不必替换它们。“项目”可能是我上面提到的应用程序之一。然后,添加另一个目标并在它们之间共享源。我必须错过一些非常简单的东西,我被卡住了