使用 Swift 5.1 将另一个包作为 SPM 中的依赖项导入另一个包

Posted

技术标签:

【中文标题】使用 Swift 5.1 将另一个包作为 SPM 中的依赖项导入另一个包【英文标题】:Importing another Package as a Dependency in SPM into another Package, with Swift 5.1 【发布时间】:2019-11-15 21:36:20 【问题描述】:

所以我使用 SPM(Swift 包管理器)来创建我自己的包库。我想在我的包中导入另一个包,以使用,如下图:

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

import PackageDescription

let package = Package(
    name: "SwiftRecommendations",
    platforms: [
        .ios(.v13),
        .macOS(.v10_13),
        .tvOS(.v13)
    ],
    products: [
        // Products define the executables and libraries produced by a package, and make them visible to other packages.
        .library(
            name: "SwiftRecommendations",
            targets: ["SwiftRecommendations"]),
    ],
    dependencies: [
        .package(
            url: "https://github.com/apple/swift-log.git",
            .branch("master")
        )
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages which this package depends on.
        .target(
            name: "SwiftRecommendations",
            dependencies: ["Logging"]),
        .testTarget(
            name: "SwiftRecommendationsTests",
            dependencies: ["SwiftRecommendations", "Logging"]),
    ]
)

我试图在我的测试文件中导入和运行 Logger,但在我添加导入语句后它抱怨 No such module Logger。我可以在我的 Xcode 中看到 Swift Package Dependencies 显示 swift-log,所以不确定发生了什么。

我的测试类如下:

import XCTest
import Logger
@testable import SwiftRecommendations

final class SwiftRecommendationsTests: XCTestCase 

    static var tokenService: TokenService?
    var logger: Logger?


    override func setUp()
        super.setUp()
        self.logger = Logger(label: "com.samba.tv.recommendations")


    

【问题讨论】:

你能展示你的导入吗?导入不应该称为 Logging 吗? @Robin 我更新了代码以显示我的导入语句。 根据library instructions from Apple 应该是Logging。一个有趣的事实是,在我的正常目标(不是测试)中它不会抱怨。 其实@robin 很尴尬,但你是对的,import 语句是错误的。抱歉在屏幕前太长了。尴尬:) 【参考方案1】:

哦,天哪,我确实有错误的导入语句。真的很抱歉... :( 应该是import Logging 而不是import Logger

【讨论】:

以上是关于使用 Swift 5.1 将另一个包作为 SPM 中的依赖项导入另一个包的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 和 SPM 库

使用 SPM 在 XCode11 中添加本地依赖项

使用 Swift 5.1 编译的模块不能被 Swift 5.1.2 编译器导入

Swift 包显示错误为 No such module for added dependency

如何使用 Swift 包管理器更新 iOS 模拟器部署目标?

Swift 包管理器 - 解决包版本终端命令