您好,这里是我们的Podspec,它具有default_subspec
和可选的子规范(由于已经设置了默认值,因此不会使用)。该子规格具有更多功能,但需要额外的8MB大小…
`s.default_subspec = 'mainSDK'
s.subspec 'mainSDK' do |mainSDK|
mainSDK.vendored_frameworks = 'mainSDK.framework'
mainSDK.source_files = "mainSDK.framework/Headers/*.h"
end
s.subspec 'additionalSDK' do |additionalSDK|
additionalSDK.source_files = "additionalSDK.framework/Headers/*.h"
additionalSDK.vendored_frameworks =['additionalSDK.framework', 'mainSDK.framework']
end
现在,在我们的mainSDK中,我们在 #if canImport(additionalSDK)中 包含了AdditionalSDK,然后在
这些编译器标志 之间提供了与AdditionalSDK 相关的代码 ,如下所示:
#if canImport(additionalSDK)
//adding optional delegate
class ViewController: UIViewController, OptionalDelagate
#else
//no need for delagete
class ViewController: UIViewController
#endif
但是,客户端集成了我们mainSDK后,他认为,该框架是缺少模块: additionalSDK.framework
这怎么可能?我们在工作空间中将AdditionalSDK标记为可选。我们试图设置 additionalSDK 为
-weak_framework 在 其他连接标志 (构建设置),但这并没有帮助。
如果客户端集成了 额外的 SDK,则所有框架都将正常运行,因为所有框架都已链接。
可选的依赖关系,没有的CocoaPods做工精良,它的CocoaPods的只是问题或我不知道如何配置它
s.platform = :ios
s.html" target="_blank">ios.deployment_target = '9.0'
s.name = "mainSDK"
s.summary = "mainSDK IOS SDK"
s.requires_arc = true
# 2
s.version = "1.0.8.6.5"
s.source = { :http => "https://s3-eu-west-1.amazonaws.com/zipOfSDK.zip"}
s.framework = "UIKit"
s.source_files = "mainSDK.framework/Headers/*.h"
s.default_subspec = 'mainSDK'
s.subspec 'mainSDK' do |mainSDK|
mainSDK.vendored_frameworks = 'mainSDK.framework'
mainSDK.source_files = "mainSDK.framework/Headers/*.h"
end
s.subspec 'additionalSDK' do |additionalSDK|
additionalSDK.source_files = "additionalSDK.framework/Headers/*.h"
additionalSDK.vendored_frameworks =['additionalSDK.framework', 'mainSDK.framework']
end
s.swift_version = "4.2"
end
简短的回答: 使用#if canImport(Module)
不能实现封闭源设置中描述的内容。我对这种条件编译的工作方式有一些误解。
我的意思是您已经建立了一个框架。似乎#if canImport
是在编译时解决的,所以它不是动态的。
当您使用已经预建时mainSDK.framework
,该零件#if canImport(additionalSDK)
已被评估。结果取决于构建链中“
additionalSDK”的可用性(构建时)(因此在机器上准备将其交付给客户端时也是如此),而不是在链接时。
我发现有人在这里遇到类似的问题:https : //flint.tools/blog/finding-a-weak-linking-
solution.html
好消息是,使用弱链接和Objective-C 互操作性 可以实现您想要的目标 。
同时,我正在撰写有关该主题的简短文章,这是一个示例库,该库具有有效的设置,类似于您所描述的需求:
https://github.com/amichnia/Swift-framework-with-optional-
frameworks
它支持:
更新:
我完成了一篇文章,该文章应更详细地描述解决方案。可在https://medium.com/@amichnia_31596/create-a-mostly-
swift-framework-with-optional-
features-7e8a9ac960f9获得
我对CocoaPods有问题,我得到这个错误: ld:找不到框架 Pods clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) 我试图安装谷歌分析,我做了什么?: 我安装了CococaPods 编辑PodFile 安装库 容器文件: 谷歌分析代码: solutis-桥接-标题。h: 在生成设置中添加了此文件 我做到了: 命令 但是我得到错误,我想我在pod的文件夹安装上犯了一
我一直在尝试使用cocoapods安装一个名为SabBar的pod,我成功地安装了cocoapod和初始设置。但出于某种原因,我在编译时遇到了这个错误: ld:警告:未找到选项“-F/Users/Andy/Library/Developer/Xcode/DerivedData/JymJam gocrzdctroqhlaedmghajkejcugm/Build/Products/Debug ipho
对于这种类型的错误,我在cocoapods中遵循了faq,似乎没有任何工作。任何帮助都很感激。 整个错误如下所示 Ld build/products/debug-iphonesimulator/komunety.app/komunety normal i386 cd/users/lawrenceflancbaum/dropbox/appledev/appdev/komunety export ip
我在一天中做了一些API调用,但在使用Adobe Sign的新设置时遇到了问题。我可以得到请求很好,但得到HTTP404时,尝试任何张贴或放入他们的服务器。例如,到这里.... 当然,$HttpCode返回404,如上图所示。我为邮局做错什么了吗?
在我通过“pod update”更新我的Firebase之后,我得到了如下错误: 在这里我的播客文件: 有人知道这个错误吗? 我寻找GoogleToolboxForMac和Firebase之间的关系,但我只得到了一点信息。 仅供参考,我使用Swift 2.3和Firebase 3.8.0。 我将非常感谢您能提供的任何帮助。谢谢!
我试图在一台新计算机上运行一个项目,但是我发现了这个错误< code > framework not found dtx profiler 。我已经阅读了这篇文章,但是我没有任何Pods.framework文件,也没有< code >链接的框架和库。我不知道该怎么办。我还尝试了< code>pod反集成安装。 PS。 我打开了.xcworkspace文件,而不是另一个 清洁安装的项目 多次删除派生