You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift Package如何为Target配置基于平台的条件依赖?

解决Swift包基于目标平台的条件依赖问题

你的判断没错,Package.swift中的#if os()是对构建环境的判断(比如你在macOS电脑上构建,不管目标是iOS还是macOS,都会走else分支),而非目标平台。要实现基于目标平台的条件依赖,应该用SwiftPM提供的condition: .when(platforms:)参数来配置。

方案一:直接在Target依赖中指定平台条件(推荐)

修改客户端包的Package.swift,在MyLib的依赖中为不同平台添加对应的产物,并通过condition参数限定生效平台:

// swift-tools-version:5.6
import PackageDescription

let package = Package(
    name: "MyLib",
    products: [
        .library(name: "MyLib", targets: ["MyLib"]),
    ],
    dependencies: [
        .package(url: "https://github.com/spencerkohan/LibFoo", branch:"master")
    ],
    targets: [
        .target(
            name: "MyLib",
            dependencies: [
                // 仅当目标平台为iOS时,依赖LibFooFramework
                .product(name: "LibFooFramework", package: "LibFoo", condition: .when(platforms: [.iOS])),
                // 仅当目标平台为macOS时,依赖ClibFoo
                .product(name: "ClibFoo", package: "LibFoo", condition: .when(platforms: [.macOS]))
            ]
        )
    ]
)

方案二:为依赖包的Target添加平台限制(可选,增强严谨性)

为了避免在错误平台上引用不兼容的Target,可以在LibFoo的Package.swift中给每个Target添加平台限制:

// swift-tools-version:5.6
import PackageDescription

let package = Package(
    name: "LibFoo",
    products: [
        .library(name: "LibFooFramework", targets: ["LibFooFramework"]),
        .library(name: "ClibFoo", targets: ["ClibFoo"])
    ],
    targets: [
        .binaryTarget(
            name: "LibFooFramework",
            path: "path/to/LibFooFramework.xcframework",
            // 限定该Target仅支持iOS平台,可根据实际需求调整最低版本
            platforms: [.iOS(.v13)]
        ),
        .systemLibrary(
            name: "ClibFoo",
            pkgConfig: "libFoo",
            // 限定该Target仅支持macOS平台,可根据实际需求调整最低版本
            platforms: [.macOS(.v10_15)]
        )
    ]
)

关键说明

  • condition: .when(platforms:)是SwiftPM专门针对目标平台设计的条件依赖配置,会根据你要构建的目标(iOS/macOS)自动选择对应的依赖。
  • 确保LibFooFramework.xcframework包含iOS所需的架构,ClibFoo对应的系统库在macOS环境中能通过pkgConfig正常找到。

内容的提问来源于stack exchange,提问作者sak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:16:02