如何为本地包添加依赖

移动开发 2026-07-09

我正在开发一个SwiftUI的 iOS应用,配套的watchOS应用使用一个本地的公共包来共享数据、服务和工具。在整个开发过程中,我一直让它尽量自给自足,但一个硬性要求是必须把日志和错误上报到Sentry,因此我别无选择,只能集成Sentry SDK。这个公共包和应用本身的许多地方都会向Sentry实例记录日志。

起初,我按照 说明 使用向导安装Sentry SDK,它按预期被添加到Xcode管理的应用依赖列表中。

开发阶段一切正常。但当我尝试归档项目以提交TestFlight时,公共包中出现了Sentry依赖找不到的错误。

在 Xcode 中显示的 “No such module 'Sentry'” 错误,出现在代码 “import Sentry” 上

注:这个错误仅在尝试归档项目后才会出现。本地构建和运行都没有问题。

上网搜索这个问题非常无用,因为每个结果都是告诉你如何把依赖项添加到应用中,而不是添加到独立包中的办法。有一个来源 显示了使用SPM脚本来添加依赖项的方式,于是我尝试按照 SPM指南 进行操作,但并未解决错误。

// swift-tools-version: 6.3

import PackageDescription

let package = Package(
    name: "CommonUtilities",
    products: [
        .library(
            name: "CommonUtilities",
            targets: ["CommonUtilities"]
        ),
    ],
    dependencies: [
      .package(url: "https://github.com/getsentry/sentry-cocoa", from: "9.16.1"),
    ],
    targets: [
        .target(
            name: "CommonUtilities",
            // I've tried with and without this section:
            dependencies: [
              .product(name: "sentry-cocoa", package: "sentry-cocoa"),
            ],
        ),

    ],
    swiftLanguageModes: [.v6]
)

我还尝试了其他方法:

  • 在归档前清理构建文件夹也无效。
  • ["Sentry": "sentry-cocoa"] 添加到 target >> dependencies >> product >> moduleAliases,反之亦然,似乎没有效果。(也不清楚那到底做了什么。)
  • 这个问题 的回答没有帮助,因为那个复选框从一开始就在我的项目中被勾选。

我不想做的事情:

  • 将Sentry日志记录包裹在某个 LoggingProtocol 对象中,在应用代码中初始化后再手动传递给公共包中的每个模块。
  • 完全移除utilities包,并在应用之间复制所有代码。
  • 迁移到CocoaPods。(很快就会被逐步淘汰 ,所以这不是一个长期解决方案。)

TL;DR - 本地构建和运行我的应用没有问题,但在尝试进行 Product >> Archive 时,以上错误会出现。

解决方案

Sentry的仓库URL slug (sentry-cocoa) 与通过SPM暴露的产品名称(Sentry)不同。你的 dependencies 块引用了错误的名称:

// Wrong "sentry-cocoa" is the repo/package name, not the product name
.product(name: "sentry-cocoa", package: "sentry-cocoa"),

// Correct
.product(name: "Sentry", package: "sentry-cocoa"),

完整的 Package.swift 应该看起来像:

// swift-tools-version: 6.3
import PackageDescription

let package = Package(
    name: "CommonUtilities",
    products: [
        .library(name: "CommonUtilities", targets: ["CommonUtilities"]),
    ],
    dependencies: [
        .package(url: "https://github.com/getsentry/sentry-cocoa", from: "9.16.1"),
    ],
    targets: [
        .target(
            name: "CommonUtilities",
            dependencies: [
                .product(name: "Sentry", package: "sentry-cocoa"),
            ]
        ),
    ],
    swiftLanguageModes: [.v6]
)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章