swift - 与 iOS 相比,我如何有条件地依赖桌面系统库?

标签 swift swift-package-manager swift-package

我正在开发一个 Swift 软件包,该软件包在桌面(MacOS 或 Linux)上依赖于 GLFW,但不适用于 iOS,因为 GLFW 不是为 iOS 构建的。

我该如何解决这个问题?

我有一个像这样定义的系统库:

import PackageDescription

let package = Package(
    name: "GLFWSystemLibrary",
    products: [
        .library(name: "CGLFW3", targets: ["CGLFW3"]),
    ],
    dependencies: [],
    targets: [
        .systemLibrary(
            name: "CGLFW3",
            pkgConfig: "glfw3",
            providers: [
                .brew(["glfw"]),
                .apt(["libglfw3"])
            ]
        )
    ]
)

当我尝试将其包含在 iOS 项目中时,我的构建失败了。

在依赖于此的库中有条件地包含 CGLFW 就足够了,否则我如何在 Swift Package Manager 中创建有条件的依赖项?

即我可以做这样的事情吗?

#if !os(iOS)
import CGLFW
#endif

否则我该如何实现这一目标?

最佳答案

你的代码完全有效!此外,您还可以使用:

#if canImport(AppKit)
#endif

或者甚至:

#if canImport(CGLFW)
#endif

这取决于你的喜好!

关于swift - 与 iOS 相比,我如何有条件地依赖桌面系统库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73176908/

相关文章:

ios - UICollectionView 自调整大小自定义单元格

swift - 如何通过包管理器安装 Swift 包?

ios - Swift Package Manager 无法解析所有库、项目

ios - 与 Swift StreamVideo SDK 命名冲突

ios - NSCalendar.dateFromComponents 返回错误的时间

ios - Swift:Firebase 读取权限被拒绝

Swift Package Manager - 对事件分支的依赖不会拉取新的提交

swift - CoreML 是否与 swift 包管理器一起工作?

ios - 链接到 Swift 包中的胖静态库

php - 在 Swift 中检索和使用整个 MYSQL 表