React Native iOS编译报Typedef redefinition错误如何解决?
React Native iOS 编译重定义问题解决方案
针对 Typedef redefinition with different types ('uint8_t' (aka 'unsigned char') vs 'enum clockid_t') 报错,可按以下优先级尝试修复:
方案1:修改Podfile配置(优先推荐,一次修改永久生效)
打开项目ios目录下的Podfile文件,在post_install代码块中添加如下逻辑:
若已有
post_install块,直接合并内部逻辑即可,不要重复定义该块
post_install do |installer| installer.pods_project.targets.each do |target| if target.name == 'RCT-Folly' target.build_configurations.each do |config| config.build_settings['OTHER_CFLAGS'] ||= ['$(inherited)'] config.build_settings['OTHER_CFLAGS'] << '-D__CLOCKID_T_DEFINED' end end end end
修改完成后执行以下命令更新依赖:
- 进入ios目录:
cd ios - 清理旧依赖缓存:
rm -rf Pods Podfile.lock build ~/Library/Developer/Xcode/DerivedData - 重新安装Pods:
pod install --repo-update - 重启Xcode后重新编译项目即可
方案2:临时修改RCT-Folly头文件(快速验证用)
如果需要快速验证修复效果,可直接修改依赖源码:
- 打开Xcode,在Pods项目下找到
RCT-Folly->folly->portability->Time.h文件 - 注释掉以下两行代码:
// typedef uint8_t clockid_t; // #define CLOCK_REALTIME 0
- 直接重新编译项目即可
注意:该修改为临时修改,下次执行
pod install后会被覆盖,只适合临时测试使用
方案3:升级React Native版本
该问题是React Native 0.66及更早版本与Xcode 13+的兼容性问题,官方在0.67.0及后续版本已完成修复。如果项目允许升级依赖,直接将react-native版本升级到0.67.0及以上即可彻底解决该问题,无需额外配置。
内容的提问来源于stack exchange,提问作者Ayan Murad
相关产品推荐
相关产品推荐

