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

将XCFramework引入Framework项目报错:框架模块内引入非模块化头文件

问题根因

该报错核心原因是在自定义Framework的公开伞头MyFramework.h中直接引入了非模块化的第三方OC头文件,公开伞头下的所有导入都会暴露给外部调用方,苹果编译器不允许公开头引用非模块化的第三方头。

解决方案

按以下步骤操作即可修复:

  • 第一步:移除伞头中的第三方导入语句
    删掉MyFramework.h中添加的两行ACR导入代码,不要在公开伞头中引入任何第三方头文件。
  • 第二步:创建自定义模块映射文件
    在Xcode中新建文件,选择iOS > Other > Module Map,命名为module.modulemap并添加到你的Framework目标中,文件内容如下:
    framework module MyFramework {
      umbrella header "MyFramework.h"
      export *
      module * { export * }
    
      // 声明ACRCloud头文件为内部子模块
      explicit module ACRCloud {
        header "ACRCloudConfig.h"
        header "ACRCloudRecognition.h"
        export *
      }
    }
    
  • 第三步:修改构建设置
    • 搜索MODULEMAP_FILE配置项,填入你新建的module.modulemap文件的相对路径
    • 搜索SWIFT_INCLUDE_PATHS配置项,添加ACRCloudSDK.xcframework的头文件所在目录,确保编译器可以找到两个ACR头文件
    • 搜索Allow Non-modular Includes In Framework Modules配置项,同时给Project和Target两个层级都设置为Yes
    • 确认OTHER_LDFLAGS配置项中已添加-ObjC参数
  • 第四步:Swift代码中引入子模块
    在需要使用ACR能力的Swift代码开头添加导入语句,即可正常调用相关类:
    import MyFramework.ACRCloud
    
    class TestClass {
        var acrClient: ACRCloudRecognition?
    }
    
可选排查项

如果操作后仍有报错,可核对以下配置:

  • 确认拖入ACRCloudSDK.xcframework时勾选了你的Framework目标,若该XCFramework为动态库则选Embed & Sign,若为静态库则选Do Not Embed
  • 若需要将ACRCloud的能力暴露给Framework的外部使用者,可将ACR的两个头文件添加到你Framework的Build Phases > Headers > Public分组下

内容的提问来源于stack exchange,提问作者Jordan H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:15:03