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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:24:42