React Native iOS添加自定义字体时每次执行react-native link命令都出错
问题根源
旧版本React Native(0.59及以下)的react-native link命令会自动扫描所有node_modules内带原生资源/配置的依赖,同时读取项目根目录package.json中的rnpm配置,将所有匹配的字体资源同时添加到Xcode的Copy Bundle Resources构建阶段和Info.plist的UIAppFonts字段中。react-native-vector-icons本身自带字体资源配置,每次执行全局link命令都会重复添加对应字体,和手动删除的操作形成冲突,最终触发Xcode的重复拷贝资源报错。
解决步骤
- 弃用全局无参数的
react-native link命令,改为仅对指定依赖执行链接操作:安装新依赖后执行npx react-native link <依赖包名>,避免触发所有依赖的自动链接逻辑 - 若使用React Native 0.60及以上版本,直接使用官方AutoLinking机制即可,无需配置rnpm字段:
- 先删除package.json中的rnpm配置段
- 在项目根目录新建
react-native.config.js文件,写入以下配置,指定仅处理自定义字体,同时禁用iOS端react-native-vector-icons的自动链接:
module.exports = { // 指定自定义字体目录 assets: ['./assets/fonts/'], dependencies: { // 禁用iOS端vector-icons的自动链接,避免重复添加字体 'react-native-vector-icons': { platforms: { ios: null, }, }, }, }; - 手动清理Xcode中已有的冲突配置:
- 打开Xcode项目,进入Target → Build Phases → Copy Bundle Resources,删除所有重复的vector-icons字体文件,仅保留自己添加的自定义字体
- 打开Info.plist,找到
Fonts provided by application字段,删除所有vector-icons相关的字体条目,仅保留自定义字体
- 后续仅在需要更新自定义字体时执行
npx react-native link即可,不会再自动添加vector-icons的字体 - 若需要使用vector-icons的字体,可手动将需要的字体文件从
node_modules/react-native-vector-icons/Fonts目录拖入Xcode的Resources文件夹,勾选「Copy items if needed」和你的项目target,再在Info.plist的Fonts provided by application字段手动添加对应字体文件名即可,后续自动链接操作不会修改这部分手动配置
内容的提问来源于stack exchange,提问作者Nazish Aslam
相关产品推荐
相关产品推荐

