iOS项目转Framework:Swift与Objective-C互操作及头文件导入问题
解决Framework中Swift与Objective-C互操作的
ModuleMapPrivate错误及头文件导入问题 结论先行:不能用Profile-Swift.h替代ProductName-Swift.h
Xcode生成的单个Swift类对应的XXX-Swift.h是内部临时文件,并非供开发者直接导入的正式头文件。官方仅支持通过$(PRODUCT_MODULE_NAME)-Swift.h(即你的ProductName-Swift.h)来桥接Swift与Objective-C。
解决@import ModuleMapPrivate not found错误的步骤
检查Framework的核心配置
- 打开项目Build Settings,确保
Defines Module设置为YES(Framework必须开启此选项才能支持模块化导入) - 确认
Product Module Name与你的Framework名称完全一致,避免包含空格、特殊字符 - 查看
Swift Compiler - General下的Objective-C Generated Interface Header Name,保持默认值$(PRODUCT_MODULE_NAME)-Swift.h,不要手动修改
- 打开项目Build Settings,确保
修正头文件导入语法
在Objective-C文件中,必须使用模块化导入语法,而非相对路径导入:// 正确写法(替换YourFrameworkName为你的Framework实际名称) #import <YourFrameworkName/YourFrameworkName-Swift.h>若在Framework内部的Objective-C文件中使用,也可以用:
#import "YourFrameworkName-Swift.h"注意:绝对不要直接写
#import "ProductName-Swift.h",这会导致Xcode无法正确识别模块化路径。清理缓存并重建项目
- 执行
Cmd+Shift+K清理项目 - 执行
Cmd+Shift+Option+K清理构建文件夹 - 重启Xcode后重新构建,缓存异常是导致此类头文件错误的常见原因
- 执行
移除多余的路径配置
你之前添加的User Header search paths可能会干扰Framework的模块化路径解析,建议将其移除,依赖Xcode的默认模块化导入机制即可。验证Swift类的访问权限
你的Profile类已经正确标记了@objc public并继承自NSObject,这部分配置没问题。无需手动将生成的Swift头文件添加到Framework的Public Headers中,Xcode会自动处理桥接逻辑。
内容的提问来源于stack exchange,提问作者shikha
相关产品推荐
相关产品推荐

