如何解决Xcode 16.0与React Native 0.78.1环境下的‘non-modular-include-in-framework-module’错误?
我之前在升级Xcode 16后维护React Native 0.78.x项目时,刚好碰到过和你一模一样的问题——尤其是Swift和Objective-C混合的项目里,这个non-modular-include-in-framework-module错误在react-native-reanimated、react-native-permissions这类依赖上反复出现,折腾了好一阵才搞定,分享几个亲测有效的解决方法:
开启非模块化导入允许设置
这是最直接的解决方案:打开Xcode,找到你的主项目Target → Build Settings,搜索Allow Non-modular Includes in Framework Modules,把它设置为YES。注意别只改主Target,那些报错的依赖(比如react-native-reanimated的Target)也要检查并开启这个选项,不然还是会报错。批量通过Podfile配置依赖的Build Settings
如果手动改每个依赖的Target太麻烦,可以直接在项目的Podfile里添加批量配置,这样执行pod install时会自动给指定依赖开启允许非模块化导入的设置。在Podfile末尾加入这段代码:post_install do |installer| installer.pods_project.targets.each do |target| # 把你报错的依赖名称都加进这个数组里 if ['react-native-reanimated', 'react-native-permissions', 'react-native-fast-image'].include?(target.name) target.build_configurations.each do |config| config.build_settings['ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES' end end end end保存后执行
pod deintegrate && pod install,重新安装依赖即可。修改依赖的头文件导入方式(临时方案)
有些依赖的源码里用了#import "xxx.h"这种非模块化的导入方式,Xcode 16的模块检查更严格,就会触发错误。你可以找到报错的文件,把导入语句改成模块化格式:比如把#import "REAUtils.h"改成#import <react-native-reanimated/REAUtils.h>。不过这个方法需要修改依赖源码,建议用patch-package打补丁,避免下次pod install时被覆盖,或者等依赖官方发布适配Xcode 16的版本。清理Xcode缓存与Derived Data
有时候缓存会导致一些莫名其妙的编译错误,试试这套“清洁流程”:- 彻底关闭Xcode
- 删除Derived Data:打开Xcode → Settings → Locations,点击Derived Data旁边的箭头打开文件夹,删除里面的所有内容
- 执行
pod deintegrate && pod install重新安装依赖 - 重启Xcode,按下
Cmd+Shift+K清理Build Folder,再重新构建项目
备注:内容来源于stack exchange,提问作者ByteBender




