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

时间:2018-01-11 21:26:59

标签: ios swift cocoapods carthage

对不起,如果这些问题是基本的/愚蠢的。我过去没有必要做任何框架设置。我刚刚为项目做出了贡献。我想用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

是否有关于如何设置的一般规则? My Core项目将具有SmallerModule需要访问的接口。 SmallerModule应该是Core项目的一部分还是它们应该是独立的Xcode项目?

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

1 个答案:

答案 0 :(得分:0)

  

SmallerModule应该是Core项目的一部分还是它们应该是单独的Xcode项目

我想这取决于你需要暴露的粒度。 SmallerModule可能在Core内被分开或合并,请记住,一旦你暴露它,它就会变得非常复杂,例如:你可能会产生对其他项目的依赖。

  

其次,如果它是一个单独的项目,SmallerModule如何访问Core中的接口?

如果拆分项目,SmallerModule可以轻松访问Core动态框架的接口,首先必须要做的就是生成这样的框架。

  

我是否需要将其作为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内拖放此类框架,以便能够对其进行编译。

  如果有人试图同时使用Core和SmallerModule,那么

将不会重复Core,因为Core是SmallerModule的依赖

由于您将使用依赖项管理器(例如:Carthage),因此不会出现问题。在解析过程中(tag x.y.z),依赖关系管理器本身将解析所有依赖关系(如果它们链接相同的版本,例如:carthage update)。

请注意,如果SuperSmallerModule必须绑定您的SmallerModule,那么假设一切正常,则必须使用以下内容创建Cartfile

github "MyOrg/SmallerModule"

并按照相同的流程进行操作,并解释了here