- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请原谅模糊的标题。
我正在尝试构建一个包来帮助我使用第三方云存储 API(例如 Firebase 存储),添加 Combine
支持等。这个包对 CloudKit 做同样的事情。一切都编译得很好,但是当我将包模块导入到我的一个单独的项目中时,该模块显然缺少一些公共(public)符号...
具体来说,那些包裹在 #if canImport(FirebaseStorage)
条件中的。由于 Firebase 尚不支持 SwiftPM,因此包的这一部分在包项目本身中的行为符合预期;它只是跳过了编译整个位。我认为可以导入此模块的客户端项目可以很好地编译它。
旁白:我正在尝试做的事情看起来像是可选的依赖项。我不想必须导入 Firebase 才能使用此包的其他功能。我考虑过将包拆分成单独的子包,每个子包取决于我要使用的特定第三方库。无论如何我可能会那样做。但问题仍然是 Firebase 尚不支持 SwiftPM ( although I hear they're close )。
我的问题类似于 this one .我的客户端项目似乎看不到条件符号,尽管它可以导入 Firebase
和 FirebaseStorage
就好了!我的意思是生成的模块 header 完全缺少它们,阻止我的客户端项目在我使用它们时进行编译。
在我看来,编译条件永远不会离开包自身的依赖目标范围。是这样吗?还是我错过了一些明显的东西?我一直认为 Swift Packages 只是将 Swift 源文件导入并编译为命名模块,但现在我认为并非如此。
有没有一种方法可以将代码构建到一个 Swift 包中,该包仅在客户端可以导入尚不支持 SwiftPM 的第三方模块时编译?还是条件编译不能那样工作?
编辑:Here is the Swift documentation关于条件编译,供引用。
最佳答案
(2020年4月的经验回答)
看来我只是误解了编译顺序。
导入我的打包模块(我们称它为 CloudStorage
)会在客户端项目中声明对该模块的依赖关系。在客户端项目可以使用其其他依赖项进行编译之前,CloudStorage
需要在没有主项目依赖项的情况下进行编译。由于 CloudStorage
对这些依赖项一无所知,因此这些依赖项的 canImport
计算结果为 false。
这可能在 Swift 的更高版本中发生了变化。我还没有再试一次。
关于Swift 包和 `#if canImport(...)` 。它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61053928/
请原谅模糊的标题。 我正在尝试构建一个包来帮助我使用第三方云存储 API(例如 Firebase 存储),添加 Combine 支持等。这个包对 CloudKit 做同样的事情。一切都编译得很好,但是
如何在#ifCan编译器标记之间添加可选委托(delegate)? 这是我需要做的: #if canImport(optionalFramework) //adding optional delega
我正在 Java SE 7 中试验 JList 的拖放功能。问题是,一旦我为 JList 设置了 DropTarget,我的 TransferHandler 实现中的 canImport() 方法就停
你好,这里是我们的 Podspec,它有一个 default_subspec 和一个可选的 subspec(因为已经设置了默认值,所以不会被采用)。该子规范具有更多功能,但需要额外的 8MB 大小..
我正在制作使用 CoreImage 的库。库支持 Cocoapods、Carthage 和 Swift 包管理器。 当我在 Swift 包管理器中构建它时,出现了这个错误: Undefined sym
我的应用程序支持 iOS 9 版本。 我添加 Icecream 框架以同步领域对象的框架之一需要 iOS 10 或更高版本。 如何使框架的导入有条件? 我尝试在 下将 IceCream 框架设置为可选
Swift 4.2 有一个特殊条件 canImport这有助于开发人员检查是否可以在项目中导入模块。它是在 Swift 4.1 中引入的。 现在我正在开发用 Objective-C 编写的 iOS 项
我正在为 JList 组件提供拖放支持,我希望能够支持从我的文件浏览器中拖入的文件。然而,我只想允许文件而不是文件夹被拖入。因此我试图在我的 TransferHandler 中检查它,如下所示: @O
我在 JTree 之间的 DnD 方面遇到了一些问题/困惑。阅读 TransferHandler 的文档后并找到以下内容 canImport( TransferHandler.TransferSupp
我是一名优秀的程序员,十分优秀!