抱歉,如果这些问题很基础/愚蠢。过去我不需要做任何框架设置的事情。我过去只是为项目做出了贡献。我想使用 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 需要访问的接口(interface)。 SmallerModule 应该是 Core 项目的一部分还是应该是单独的 Xcode 项目?
其次,如果是一个单独的项目,SmallerModule是如何访问到Core中的接口(interface)的?我需要将它作为依赖项包含在 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
的接口(interface)动态框架,首先要做的就是生成这样的框架。
Do I need to include it as a dependency in SmallerModule
例如:如果您使用 Carthage
作为依赖项管理器,您应该创建一个 Cartfile
项目内部SmallerModule
包含这一行:
github "MyOrg/Core"
然后 SmallerModule
“Build Phases”设置选项卡,点击“+”图标,选择“New Run Script Phase”,在shell下方的脚本区添加如下内容:
/usr/local/bin/carthage copy-frameworks
在“输入文件”下添加您要使用的框架的路径,例如:
$(SRCROOT)/Carthage/Build/iOS/Core.framework
将复制框架的路径添加到“输出文件”,例如:
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Core.framework
然后在解决依赖之后:
carthage update
你会发现Core.framework
在文件夹内 ./Carthage/build/iOS/
所以你可以将这样的框架拖放到你的 SmallerModule
中能够编译它。
wouldn't Core be duplicated if someone tried to pull in both Core and SmallerModule since Core is a dependency for SmallerModule
因为您将使用依赖管理器(例如:Carthage
),所以这不是问题。在解析过程 ( tag x.y.z
) 中,依赖管理器本身将解析所有依赖项(如果它们链接相同的版本,例如: carthage update
)。
请注意,如果 SuperSmallerModule
必须绑定(bind)你的 SmallerModule
,然后假设一切正常,必须创建一个 Cartfile
与:
github "MyOrg/SmallerModule"
并遵循相同的过程,也解释了here .
关于ios - 设置一个carthage/cocoapod项目来分发多个依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48216056/