Vik*_*kov 6 ios ios-frameworks cocoapods podspec swift
您好,这里是我们的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
Run Code Online (Sandbox Code Playgroud)
现在,在我们的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
Run Code Online (Sandbox Code Playgroud)
但是,客户端集成了我们mainSDK后,他认为,该框架是缺少模块:additionalSDK.framework
这怎么可能?我们已经在工作空间中将AdditionalSDK标记为可选。我们试图设置additionalSDK为-weak_framework在其他连接标志(构建设置),但这并没有帮助。
如果客户端集成了额外的 SDK,则所有框架都将正常运行,因为所有框架都已链接。
可选的依赖关系,没有的CocoaPods做工精良,它的CocoaPods的只是问题或我不知道如何配置它
`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
Run Code Online (Sandbox Code Playgroud)
简短的回答:使用#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获取
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |