'Can't link assets (fonts) in react native >= 0.60

react-native: 0.60.4,
react: 16.8.6,
npm: 6.10.1
XCode: 10.2.1
AndroidStudio: 3.4.1

I created a project using

npx react-native init awesomeApp --template typescript

I have put my assets in the

assets/fonts/<Bunch of .ttf files>

My Directory Structure

awesomeApp
|
+--android
+--ios
+--assets
|  |
|  +---fonts
|      |
|      +-- ProximaNova-Bold.ttf
+--react-native-config.js

then I ran react-native link

Nothing happends, XCode not showing any added Resource neither the android, and when I'm running react-native run-ios showing error that the font is not found.

My react-native-config.js

module.exports = {
    project: {
        ios: {},
        android: {},
    },
    assets: ['./assets/fonts']
};

I have also tried yarn react-native link and npx react-native link



Solution 1:[1]

my react-native.config.js

module.exports = {
project: {
    ios: {},
    android: {},
},
assets: ['./assets/fonts/'],
};

and logs:

info Linking assets to ios project                                                                                      
info Linking assets to android project                                                                                  
success Assets have been successfully linked to your project

but My mistake was:

Wrong way:

fontFamily: BYekan

Right way:

fontFamily: 'BYekan'

just put font name in ''

Solution 2:[2]

Just to complement keyserfaty's answer, here is my react-native.config.js working using react-native link:

module.exports = {
  dependencies: {
    "react-native-gesture-handler": { platforms: { android: null, ios: null } }
  },
  assets: ['./src/assets/fonts']
};

Solution 3:[3]

Create a file in your react native project called react-native.config.js:

In it, paste

module.exports = {
    project: {
      ios: {},
      android: {},
    },
    assets: ['./src/assets/fonts/'],
};

assets: ['./src/assets/fonts/'], should be the path to wherever you stored your custom fonts in your project folder. When you run the link command, it should work then.

Solution 4:[4]

Using RN 0.60.8 with a react-native-config.js file should allow you to link your fonts using react-native link.

My logs:

react-native link       
info Linking assets to ios project
info Linking assets to android project
success Assets have been successfully linked to your project

Since you installed React Native using npx I'm guessing you maybe don't have react-native installed globally? Is running react-native link giving you any errors?

Solution 5:[5]

None of the above solutions work for me. The issue with what I was having is my Xcode project already had Resources group with a backed folder in it. The way react-native link is working as my understanding is it's creating a group without a folder and add it to your project and link to all your fonts from there. This approach doesn't work when you already have a Resources folder. The solution I could come up with was just renaming the Resources folder to something else and run react-native link again.

If you don't have such a setup, create react-native.config.js file and running react-native link works fine.

react-native.config.js

module.exports = {
    project: {
        ios: {},
        android: {},
    },
    assets: ['./src/assets/fonts/']
};

Solution 6:[6]

change assets: ['./src/assets/fonts/'] to assets: ['/src/assets/fonts/']

or use

assets: ['./src/assets/fonts/'] but nameProject/assets

Solution 7:[7]

some times you have writed react-native.config.js correctlly

in such cases ; if you do this tasks

it helps you

1- delete react-native.config.js file

2- create this file with same code again

3- write react-native link in console

then you can see resources folder in Xcode

and you can see your fonts in info.plist and copy bundle resources

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Mohammad Reza Shahrestani
Solution 2 Lucas Simões
Solution 3 Akshay I
Solution 4
Solution 5 manman
Solution 6 George Nch
Solution 7 amir behrouzi