预处理器指令在包中不起作用.swift?



在我的 Swift 包中,我试图排除一些目录,以便为某些目标编译,如下所示:

import PackageDescription
let package = Package(
name: "SPMUIKit",
products: [
.library(
name: "SPMUIKit",
targets: ["SPMUIKit"]
)
],
targets: [
.target(
name: "SPMUIKit",
exclude: {
var exclude = [String]()
#if !os(iOS) || !canImport(UIKit)
exclude.append("UIKit")
#endif
return exclude
}()
)
]
)

它没有按预期工作。举个例子,我的 Swift 包在UIKit/UILabel.swift中有这个:

import UIKit
public extension UILabel {
static func spmUIKitTest() {
print("UILabel.spmUIKitTest from Swift package")
}
}

为了测试它,我将其拖到一个新的 Xcode 11 iOS 应用程序中并在项目信息中链接库,然后将此代码添加到ViewController

import UIKit
import SPMUIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UILabel.spmUIKitTest()
}
}

编译错误:// Type 'UILabel' has no member 'spmUIKitTest'

如果我从Package.swift中删除#if !os(iOS) || !canImport(UIKit),它可以很好地编译。似乎预处理器宏在Package.swift中没有任何作用,我已经尝试过使用watchOStvOS等。

#if os(iOS)这样的预处理器指令应该在Package.swift工作吗?某处有工作示例吗?

还没有找到一种方法来做到这一点,但确实发现通过平台检查开始控制单个文件很有帮助。它向二进制文件添加的大小可以忽略不计,并且可以更轻松地包含或排除要编译的文件,尤其是在支持多个依赖项管理器时。同意这是应该支持的东西。

相关内容

  • 没有找到相关文章

最新更新