升级Xcode14后Swift Package Manager失效,自定义View扩展无法调用
Xcode 14.0.1无法识别本地Swift Package依赖的排查方案
问题背景
我在SwiftUI中为View定义了.readSize扩展方法,用于子视图向父视图汇报尺寸。升级至Xcode14.0.1前,这个本地包可以正常使用;但现在Xcode提示Text没有.readSize成员,尽管项目导航器中能看到该包及包含.readSize的模块。
点击项目导航器中的项目,进入Package Dependencies标签页后,packages区域为空。点击“+”选择添加本地包,仅会在项目导航器中重复显示该包,Package Dependencies标签页仍保持为空。
已尝试删除包、清理项目、重启Xcode、通过File->Add Packages重新添加等常规修复操作,问题依旧。
本地Package.swift清单内容
// 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: "ViewExtensions", platforms: [.iOS("13.0")], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( name: "ViewExtensions", targets: ["ViewExtensions"]), ], dependencies: [ // Dependencies declare other packages that this package depends on. // .package(url: /* package url */, from: "1.0.0"), ], 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 this package depends on. .target( name: "ViewExtensions", dependencies: []), .testTarget( name: "ViewExtensionsTests", dependencies: ["ViewExtensions"]), ] )
排查方法
- 升级Swift工具版本:当前
swift-tools-version为5.5,Xcode14.0.1对应Swift 5.7版本,尝试将swift-tools-version修改为5.7,重新让Xcode解析包。 - 确认依赖添加方式:避免直接拖拽本地包到项目,必须通过
File > Add Packages选择本地路径添加,确保Xcode将其识别为Package Dependencies中的依赖。 - 检查扩展访问级别:确保
.readSize扩展方法的访问级别为public,主项目才能访问包内的扩展代码。 - 重置依赖解析文件:删除项目目录下的
Package.resolved文件,重新添加本地包,让Xcode重新生成依赖解析信息。 - 查看Xcode日志:打开Report Navigator(快捷键⌘+9),查看添加包过程中的详细报错日志,定位包无法解析的具体原因。
- 新项目验证:创建全新的SwiftUI项目,尝试添加该本地包。如果新项目能正常识别,说明原项目的配置文件可能已损坏。
- 检查包文件结构:确认
ViewExtensions目标下的Swift文件都放在Sources/ViewExtensions/目录下,没有文件路径错误导致Xcode无法编译模块。
内容的提问来源于stack exchange,提问作者Bill Nattaner
相关产品推荐
相关产品推荐

