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

自建iOS SPM模块本地测试正常,引入项目后模块为空如何解决?

SPM模块导入后无自定义符号的解决方案
  • 检查符号的访问控制权限
    Swift默认的internal访问权限仅允许同模块内访问,SPM测试Target通常会加@testable import声明,所以测试可以正常调用内部符号,但主项目正常导入模块时无法访问。所有需要对外暴露的类、函数、常量都需要显式添加public(类可被外部初始化、调用,不可继承重写)或open(允许外部继承重写)修饰符,同时自定义的public类需要显式声明public初始化方法。
    示例:
// 错误写法:外部无法访问
class BotUtils {
    func calculate() {}
}
// 正确写法
public class BotUtils {
    public init() {}
    public func calculate() {}
}
  • 检查源文件存放路径是否符合SPM规范
    SPM默认会自动检索Sources/[目标名]路径下的Swift源文件进行编译,你的Target名为BotComputer,需要确认所有模块代码都存放在项目根目录的Sources/BotComputer路径下,不要放在根目录、其他子文件夹或者测试目录下。如果需要自定义源文件路径,可以在Target配置中添加path参数指定路径。
  • 检查是否存在编译条件排除了符号
    确认你的源文件没有添加#if DEBUG、平台限定等编译条件,导致Release编译或者对应平台下符号未被编译进二进制包。同时检查Target配置中是否添加了exclude参数误排除了源文件。
  • 清理Xcode与SPM缓存
    Xcode的SPM缓存异常会导致依赖包编译不全,执行以下操作清理缓存:
  1. 关闭Xcode
  2. 删除整个DerivedData目录:rm -rf ~/Library/Developer/Xcode/DerivedData
  3. 删除SPM全局缓存:rm -rf ~/Library/Caches/org.swift.swiftpm
  4. 打开项目,右键点击项目导航栏的Package Dependencies下的对应模块,选择Update Package重新拉取编译
  • 确认导入的模块名正确
    你的库产品名为BotComputer,需要在项目中使用import BotComputer导入,而不是你示例中的import MyModule,避免导入到其他同名空模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:27:04