同一Xcode workspace下如何为各项目设置独立且不被主项目访问的依赖
可行实现方法
核心逻辑是切断主项目对子框架第三方依赖的模块搜索路径,同时避免依赖配置向上继承。
方法一:Swift Package Manager(SPM)配置方案
- 选中WebService项目,进入对应target的Build Phases标签页,仅将Alamofire添加到
Link Binary With Libraries阶段,不要添加到任何全局或MyApp的构建阶段 - 进入WebService的Build Settings,搜索
FRAMEWORK_SEARCH_PATHS,确认Alamofire的编译产物路径仅作用于WebService这个target,不要设置为项目级别全局生效 - 搜索
SWIFT_INCLUDE_PATHS,同样确保Alamofire的路径仅对WebService当前target生效 - 对UIComponent项目执行相同操作,仅保留Lottie在UIComponent自身的
Link Binary With Libraries阶段,对应的搜索路径仅作用于UIComponent的target - 最后进入MyApp的Build Settings,删除
FRAMEWORK_SEARCH_PATHS和SWIFT_INCLUDE_PATHS中所有指向Alamofire、Lottie编译产物的路径条目
方法二:CocoaPods配置方案
修改你的Podfile,添加inherit! :none配置阻止子框架的依赖向上传递给主项目,参考配置如下:
workspace 'MyWorkspace.xcworkspace' target 'MyApp' do use_frameworks! # 此处仅添加主项目自身需要的依赖,不要加Alamofire、Lottie end target 'WebService' do project 'WebService/WebService.xcodeproj' use_frameworks! inherit! :none # 核心配置,禁止依赖向上继承 pod 'Alamofire' end target 'UIComponent' do project 'UIComponent/UIComponent.xcodeproj' use_frameworks! inherit! :none # 核心配置,禁止依赖向上继承 pod 'Lottie' end
- 修改完成后执行
pod install重新生成配置即可
注意:如果你的子框架是静态库类型,可以在子框架的Build Settings的
Other Linker Flags中添加-ObjC参数,保证第三方依赖的符号不会被错误裁剪,不影响上层调用子框架的功能。
内容的提问来源于stack exchange,提问作者emin deniz
相关产品推荐
相关产品推荐

