如何在项目中调试构建Swift Package?为何公开类仍不可见?
问题解决指南
一、如何在项目内直接编译调试本地Swift Package
- 确认包是通过本地依赖添加到项目:打开Xcode项目文件 → 选择
Package Dependencies标签 → 点击+按钮 → 选择本地包路径添加,不要单独打开包项目,直接在主项目中操作。 - 修改包内代码后,Xcode默认会自动触发包的编译;若未自动触发,按下
Cmd+B编译整个项目,包会同步编译,错误直接显示在Xcode问题导航栏。 - 调试包内代码和项目代码流程一致:直接在包代码行左侧打断点,运行主项目,执行到包内逻辑时断点会正常触发,可查看变量、单步执行。
- 遇到Xcode不识别包修改的情况,清理缓存:按下
Cmd+Shift+K清理项目构建,再按Cmd+Option+Shift+K彻底清理构建文件夹,之后重新编译。
二、公开类/方法无法被识别的常见原因
- 成员未加public修饰:仅给类加
public不够,类内部的方法、属性默认是internal权限,主项目无法访问,必须给需要外部调用的成员也加public:public class MyToolClass { // 错误:方法为internal,项目不可见 func calculate() {} // 正确:方法加public,项目可调用 public func publicCalculate() {} } - 类扩展的方法未加public:自定义类的扩展方法默认是
internal,要让项目访问,需给扩展和方法都加public:public extension MyToolClass { public func extendedPublicMethod() {} } - 文件未被包target包含:检查Package.swift的target配置,确保类文件放在
Sources/[你的包名]目录下(Xcode默认生成结构)。若文件放错位置,包target不会包含它,自然无法被项目识别。默认manifest结构参考:let package = Package( name: "MyLocalPackage", products: [ .library(name: "MyLocalPackage", targets: ["MyLocalPackage"]), ], targets: [ .target(name: "MyLocalPackage", dependencies: []), .testTarget(name: "MyLocalPackageTests", dependencies: ["MyLocalPackage"]), ] ) - 导入语句错误:主项目要导入包的Product Name,而非target名称(两者同名则无需注意)。比如包Product叫
MyLocalPackage,需写import MyLocalPackage。 - Xcode缓存异常:缓存可能导致权限识别错乱,清理构建缓存后重新导入包,或重启Xcode尝试。
内容的提问来源于stack exchange,提问作者Duck
相关产品推荐
相关产品推荐

