抱歉,如果这些问题是基本的/愚蠢的。我以前不需要做任何框架设置工作。我过去只是为项目做过贡献。我想用Cocoapods和迦太基发布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应该是核心项目的一部分,还是应该是单独的Xcode项目?
其次,如果它是一个单独的项目,那么SmallerModule如何访问Core中的接口?我需要将它作为依赖项包含在SmallerModule中吗?如果是这样,如果有人试图同时拉入Core和SmallerModule,那么Core不会被复制吗,因为Core是SmallerModule的依赖项?

最佳答案

SmallerModule应该是核心项目的一部分还是应该是单独的Xcode项目
我想这取决于你需要暴露的东西的粒度。SmallerModule可能在Core中分离或合并,请记住,一旦公开它,返回时会非常复杂,例如:您可能会生成对其他项目的依赖关系。
其次,如果它是一个单独的项目,那么SmallerModule如何访问Core中的接口?
如果拆分项目,SmallerModule将很容易访问动态框架的接口,您首先必须做的是生成这样的框架。
我需要将它作为依赖项包含在SmallerModule中吗
例如:如果使用Core作为依赖关系管理器,则应在包含以下行的项目Carthage内创建一个Cartfile
SmallerModule
然后在“构建阶段”设置选项卡上,单击“+”图标并选择“新建运行脚本阶段”,将以下内容添加到shell下面的脚本区域:
github "MyOrg/Core"
在“输入文件”下添加要使用的框架的路径,例如:
SmallerModule
将复制框架的路径添加到“输出文件”中,例如:
/usr/local/bin/carthage copy-frameworks
然后在解决依赖关系之后:
$(SRCROOT)/Carthage/Build/iOS/Core.framework
您将在文件夹$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Core.framework中找到carthage update,因此您可以在Core.framework中拖放这样的框架,以便能够编译它。
如果有人试图同时拉入Core和SmallerModule,Core就不会被复制,因为Core是SmallerModule的依赖项
因为您将使用依赖关系管理器(例如:./Carthage/build/iOS/),所以不会有问题。所有依赖项都将在解析过程中由依赖项管理器本身解析(如果它们链接同一版本,例如:SmallerModule)。
注意,如果Carthage必须绑定您的tag x.y.z,那么假设一切正常,则必须创建一个carthage update,其中包含:
SuperSmallerModule
并遵循同样的过程,也解释了here

07-24 16:15