Swift Package Manager创建自定义框架:无法访问内部类问题求助
解决Swift自定义框架无法访问内部类的问题
嘿,我来帮你搞定这个问题!从你描述的情况来看,主要有两个核心问题:一是导入框架后没法访问TestClass,二是框架里的二进制文件居然是可执行文件——这明显不对,咱们一步步来修复:
首先搞清楚为啥访问不了类
Swift里的类/方法默认是internal访问权限,这个权限只能在框架内部用,外部项目根本看不到!所以你必须给要暴露的类和它的初始化方法(还有需要外部调用的方法)加上public修饰符,比如:
public class TestClass { // 初始化方法也要加public,不然外部没法实例化 public init() {} public func doSomething() { // 你的逻辑 } }
这是最容易踩的坑,很多人刚写Swift库都会忽略这个权限问题。
然后解决框架变成可执行文件的问题
你用swift package init --type library创建的是库项目,但生成的.framework里出了可执行文件,大概率是Package.swift的配置不完整或者出错了。你贴的代码只写了一半,完整的配置应该包含targets部分,而且要确保target是库类型,不是可执行的。给你一个标准的完整示例:
let package = Package( name: "TestFramework", products: [ .library( name: "TestFramework", targets: ["TestFramework"]), ], dependencies: [ // 没有依赖就留空,有依赖的话在这里加 ], targets: [ .target( name: "TestFramework", dependencies: []), .testTarget( name: "TestFrameworkTests", dependencies: ["TestFramework"]), ] )
重点确认targets里的.target没有设置type: .executable,默认就是库类型,要是不小心加了这个,就会生成可执行文件了。
最后重新构建并替换框架
现在咱们清理旧的构建产物,重新编译:
# 清理旧的构建文件 swift package clean # 构建release版本(分发用release更合适,优化更好) swift build -c release # 如果需要用Xcode开发,重新生成xcodeproj swift package generate-xcodeproj
构建完之后,正确的框架路径是./.build/release/TestFramework.framework,这个里面的二进制文件应该是库文件,不是可执行的了。
把这个新的框架替换掉你之前复制到目标项目里的旧框架,然后再试试import TestFramework,应该就能正常访问TestClass了。
额外排查点(如果还是不行的话)
- 检查目标项目的iOS/macOS部署版本和框架的部署版本是否一致,版本不兼容也可能出问题
- 确认构建框架时的架构包含目标项目需要的(比如iOS设备是arm64,模拟器是x86_64),可以用
lipo -info命令查看框架支持的架构
内容的提问来源于stack exchange,提问作者Lupurus
相关产品推荐
相关产品推荐

