Swift新手求助:可执行项目调用库提示‘no such module’错误
解决Swift Package中"no such module 'Bar'"的问题
Hey there! As someone who's stumbled through this exact Swift Package Manager (SPM) hiccup as a newbie, let me walk you through the key steps you might have missed:
1. 先确认你的项目目录结构是否合规
SwiftPM有严格的目录要求,你的项目得是这个样子才对:
YourProjectRoot/ ├── Package.swift └── Sources/ ├── Foo/ │ └── main.swift └── Bar/ └── [你的库源文件,比如Bar.swift]
要是Bar不在Sources目录下,或者文件夹名称和模块名不一致(比如模块叫Bar但文件夹叫BarLib),SwiftPM根本找不到它。
2. 检查Package.swift的配置(这是核心!)
你必须在Package.swift里同时声明库目标Bar和可执行目标Foo,还要让Foo明确依赖Bar。给你个正确的示例参考:
// swift-tools-version: 5.9 import PackageDescription let package = Package( name: "YourProjectName", dependencies: [], targets: [ // 先声明库目标Bar .target( name: "Bar", dependencies: []), // 再声明可执行目标Foo,并把Bar加入依赖 .executableTarget( name: "Foo", dependencies: ["Bar"]), ] )
划重点:
- 两个target必须都写在
targets数组里 executableTarget的dependencies一定要包含"Bar",不然SwiftPM不会把Bar模块链接到Foo上- 库目标用
.target,可执行目标用.executableTarget,别搞混了
3. 确认main.swift里的导入语句正确
在Sources/Foo/main.swift里的导入要准确,大小写和模块名完全一致(Swift是大小写敏感的!):
import Bar // 比如调用Bar里的内容:Bar.someFunction()
4. 清理缓存后重新构建
有时候旧的构建缓存会搞出奇怪的问题,先清掉再重新构建试试:
swift package clean swift build
新手容易踩的坑
- 把Bar做成了独立的Package:如果Bar是单独的项目,那你需要在Foo的
Package.swift里通过dependencies引入本地路径依赖,但如果是同一个项目里的两个模块,应该放在同一个Package下的不同target里。 - Bar的目录里没有源文件:要是
Sources/Bar下面空无一物,SwiftPM不会生成这个模块,自然会报找不到的错误。
按照这些步骤检查一遍,应该就能解决这个问题啦!
内容的提问来源于stack exchange,提问作者Nutritioustim
相关产品推荐
相关产品推荐

