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

SPM构建报错:target中依赖项需显式声明如何解决

问题描述

使用SPM为项目/App添加软件包,在Package.swift文件中为target配置依赖项后,每次构建应用都会触发报错。

原有错误配置

// swift-tools-version:5.5
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription

let package = Package(
    name: "Sycra",
    products: [
      
        .library(
            name: "Sycra",
            targets: ["Sycra"]),
    ],
    dependencies: [
        .package(url: "https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library", .upToNextMinor(from: "3.2.0"))
        
    ],
    targets: [
         define a module or a test suite.
         
        .target(
            name: "Sycra",
            dependencies: ["NordicMesh"]),
        .testTarget(
            name: "SycraTests",
            dependencies: ["Sycra"]),
    ]
)

项目文件结构

文件结构示意图

报错信息

dependency 'NordicMesh' in target 'Sycra' requires explicit declaration; reference the package in the target dependency with '.product(name: "NordicMesh", package: "IOS-nRF-Mesh-Library")'
问题原因

Swift 5.2及以上版本的SPM要求,引用外部包的产品作为依赖时,不能直接在target依赖项里写模块名字符串,必须显式声明该依赖产品所属的外部包名。另外原有配置中target块上方的说明文字没有加//注释前缀,也会触发语法错误。

修复方案

修改Package.swift文件,做两处调整:

  • 给target块上方的说明文字加上//前缀,标记为合法注释
  • 把Sycra target下的依赖从直接写"NordicMesh",替换为显式的product声明,明确指定依赖所属的外部包名

修改完成后的完整可用配置如下:

// swift-tools-version:5.5
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription

let package = Package(
    name: "Sycra",
    products: [
        .library(
            name: "Sycra",
            targets: ["Sycra"]),
    ],
    dependencies: [
        .package(url: "https://github.com/NordicSemiconductor/IOS-nRF-Mesh-Library", .upToNextMinor(from: "3.2.0"))
    ],
    targets: [
        // define a module or a test suite.
        .target(
            name: "Sycra",
            dependencies: [
                .product(name: "NordicMesh", package: "IOS-nRF-Mesh-Library")
            ]),
        .testTarget(
            name: "SycraTests",
            dependencies: ["Sycra"]),
    ]
)

保存文件后重新执行SPM依赖拉取、构建项目即可正常编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:57:16