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