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

Swift Package Manager无法访问Sources下相邻文件夹及类问题咨询

问题解答

1. 配置错误说明

你当前的问题分为两处:

  • 类访问等级错误:你只给Apple类的属性、方法、初始化方法标记了public,但类本身没有添加public修饰符,Swift中类默认访问等级为internal,仅当前模块可访问,外部模块(包括同包下的其他target、宿主程序)都无法访问。
  • 包清单依赖缺失:你当前定义了两个完全独立的targetRicPackage和Apple,互相没有依赖关系,所以RicPackage内无法直接访问Apple的代码;如果测试代码需要访问Apple,也需要在测试target的依赖中添加Apple。

修正代码示例

Apple.swift 修正

import Foundation

// 类本身必须添加public修饰符,对外暴露
public class Apple {
    public private(set) var text = "Hello from Apple!"

    public init() {
    }
    
    public func eat() -> String {
        print("Inside Eat Apple")
        return "Hello from Eat Apple."
    }
}

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: "RicPackage",
    products: [
        .library(
            name: "RicPackage",
            targets: ["RicPackage"]),
        .library(
            name: "Apple",
            targets: ["Apple"]),
    ],
    targets: [
        .target(
            name: "RicPackage",
            // 给RicPackage添加对Apple的依赖,即可在RicPackage内访问Apple的公开接口
            dependencies: ["Apple"]),
        .target(
            name: "Apple",
            dependencies: []),
        .testTarget(
            name: "RicPackageTests",
            // 测试需要访问Apple的话也要添加对应依赖
            dependencies: ["RicPackage", "Apple"]),
    ]
)

额外说明:如果你不需要将Apple作为独立库对外提供,完全可以把Apple相关文件放到Sources/RicPackage目录下,不需要单独拆分为target,RicPackage和宿主程序都能直接访问公开的Apple类,不需要额外配置依赖。

2. target与文件夹命名规则

  • 默认规则下,SPM会自动查找Sources目录下和target同名的文件夹作为该target的源码根目录,比如名为Apple的target,默认读取Sources/Apple下的所有Swift文件,根目录下的文件不需要和target同名,你可以命名为Fruit.swift、Apple+Extension.swift等都可以正常编译。
  • 如果你不想遵循默认的目录命名规则,可以在target配置中添加path参数自定义源码路径,例如:
    .target(
        name: "Apple",
        dependencies: [],
        path: "Sources/CustomAppleFolder" // 自定义源码路径,不需要和target同名
    )
    

内容的提问来源于stack exchange,提问作者Frederick C. Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:27:03