#if canImport()未找到带有CocoaPods的框架

您好,这里是我们的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中,我们在 包含了AdditionalSDK,然后在

这些编译器标志 之间提供了与AdditionalSDK 相关的代码 ,如下所示:

#if canImport(additionalSDK)

//adding optional delegate

class ViewController: UIViewController, OptionalDelagate

#else

//no need for delagete

    class ViewController: UIViewController

#endif

但是,客户端集成了我们mainSDK后,他认为,该框架是缺少模块:

这怎么可能?我们在工作空间中将AdditionalSDK标记为可选。我们试图设置 为

其他连接标志 (构建设置),但这并没有帮助。

如果客户端集成了 SDK,则所有框架都将正常运行,因为所有框架都已链接。

可选的依赖关系,没有的CocoaPods做工精良,它的CocoaPods的只是问题或我不知道如何配置它

s.platform = :ios

s.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

互操作性 。

同时,我正在撰写有关该主题的简短文章,这是一个示例库,该库具有有效的设置,类似于您所描述的需求:

https://github.com/amichnia/Swift-framework-with-optional-

frameworks

  • AdditionalSDK是可选的
  • MainSDK具有采用AdditionalSDK协议的类
  • MainSDK知道其他功能是否可用
  • 全部在封闭源代码设置中

我完成了一篇文章,该文章应更详细地描述解决方案。可在https://medium.com/@amichnia_31596/create-a-mostly-

swift-framework-with-optional-

features-7e8a9ac960f9获得

以上是 #if canImport()未找到带有CocoaPods的框架 的全部内容, 来源链接: utcz.com/qa/422578.html

回到顶部