设置一个 carthage/cocoapod 项目来分发多个依赖项

set up a carthage/cocoapod project to distribute multiple dependencies

抱歉,如果这些问题是 basic/dumb。过去我不需要做任何框架设置的事情。我过去只是为项目做出了贡献。我想使用 Cocoapods 和 Carthage 分发 SDK 的不同部分。例如,

github "MyOrg/Core" -> Has interfaces I want to use in SmallerModule.
github "MyOrg/SmallerModule" -> Has third party dependencies I do not own

是否有关于如何设置的一般规则?我的核心项目将具有 SmallerModule 需要访问的接口。 SmallerModule 应该是 Core 项目的一部分还是应该是单独的 Xcode 个项目?

其次,如果是一个单独的项目,SmallerModule是如何访问到Core中的接口的?我需要将它作为依赖项包含在 SmallerModule 中吗?如果是这样,如果有人试图同时引入 Core 和 SmallerModule,Core 是否会被复制,因为 Core 是 SmallerModule 的依赖项?

Should SmallerModule be a part of the Core project or should they be separate Xcode projects

我想这取决于您需要公开的内容的粒度。 SmallerModule 可能会在 Core 中分离或合并,请记住,一旦公开它,返回起来就非常复杂,例如:您可能会生成对其他项目的依赖关系。

Secondly, if it is a separate project, how does SmallerModule have access to the interfaces in Core?

如果拆分项目,SmallerModule将很容易访问Core动态框架的接口,首先要做的是生成这样的框架。

Do I need to include it as a dependency in SmallerModule

例如:如果您使用 Carthage 作为依赖项管理器,您应该在项目 SmallerModule 中创建一个 Cartfile 包含以下行:

github "MyOrg/Core"

然后在SmallerModule“Build Phases”设置选项卡上,单击“+”图标并选择“New 运行 Script Phase”,将以下内容添加到[=下面的脚本区域73=]:

/usr/local/bin/carthage copy-frameworks

在“输入文件”下添加您要使用的框架的路径,例如:

$(SRCROOT)/Carthage/Build/iOS/Core.framework

将复制框架的路径添加到“输出文件”,例如:

$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Core.framework

然后在解决依赖之后:

carthage update

您会在文件夹 ./Carthage/build/iOS/ 中找到 Core.framework,因此您可以将此框架拖放到 SmallerModule 中以便能够编译它。

wouldn't Core be duplicated if someone tried to pull in both Core and SmallerModule since Core is a dependency for SmallerModule

因为您将使用依赖管理器(例如:Carthage),所以这不是问题。在解析过程中,依赖管理器本身将解析所有依赖项(如果它们 link 相同版本,例如:tag x.y.z)(carthage update)。

请注意,如果 SuperSmallerModule 必须绑定您的 SmallerModule,那么假设一切正常,必须创建一个 Cartfile,其中:

github "MyOrg/SmallerModule"

并遵循相同的过程,也解释了here