设置一个 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。
抱歉,如果这些问题是 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。