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

如何在Swift Package Manager中导入已编译的Objective-C Framework

SPM 集成已编译 Objective-C XCFramework 操作指南

前置检查

首先确认你使用的ObjCFramework.xcframework本身结构合规:每个平台切片对应的.framework包内的Modules目录下是否已经存在module.modulemap文件。如果已存在且配置正确,你无需额外修改配置,直接在Swift代码中执行import ObjCFramework即可正常调用接口。

无内置Modulemap的处理方案

如果第三方Framework没有内置模块映射文件,按以下步骤配置:

1. 调整包目录结构

在你的Swift目标源代码目录(默认路径为Sources/MySPM)下新建两个文件:

  • include/MySPMUmbrella.h:伞头文件,用于引入所有需要暴露的OC接口
  • module.modulemap:自定义模块配置

2. 编写伞头文件

在MySPMUmbrella.h中引入OC Framework的所有公开头:

// 替换为你实际需要引入的OC头文件路径
#import <ObjCFramework/ObjCFramework.h>
#import <ObjCFramework/XXXTool.h>

3. 编写模块映射文件

在module.modulemap中添加以下内容:

module MySPM {
    umbrella header "MySPMUmbrella.h"
    export *
    link framework "ObjCFramework"
}

4. 修正Package.swift配置

给你的Swift目标添加头文件搜索路径、编译定义和链接配置:

targets: [
    .target(
        name: "MySPM",
        dependencies: ["ObjCFramework"],
        cSettings: [
            // 替换为对应XCFramework头文件的相对路径(相对于Sources/MySPM目录)
            .headerSearchPath("../../Frameworks/ObjCFramework.xcframework/Headers", .when(platforms: [.iOS, .macOS])),
            .define("OBJC_MODULES", to: "1")
        ],
        linkerSettings: [
            .linkedFramework("ObjCFramework")
        ]
    ),
    .binaryTarget(name: "ObjCFramework",
                  path: "Frameworks/ObjCFramework.xcframework")
]

常见问题排查

  • 所有路径配置注意大小写匹配,SPM对大小写敏感
  • 不需要单独声明独立的ObjCFramework模块,直接将OC接口暴露到你的Swift包模块下即可调用
  • 如果报头文件找不到错误,调整headerSearchPath的相对路径到正确位置即可

内容的提问来源于stack exchange,提问作者Pankaj Gaikar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:54:04