react / react/react-native

Emoji renders as [?] boxes on iOS 26 simulator (Xcode 26)

Ouverte
#56,183 11 commentaires 9 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Needs: Attention Needs: Repro
Langage dominant
C++
Étoiles
127k
Forks
25.3k
Merge moyen
1 j 23 h
PR mergées (30 j)
4

Description

Description

Emoji characters render as [?] placeholder boxes in React Native <Text> components on the iOS 26 simulator (Xcode 26.3, build 17C529). This affects all emoji — inline, standalone, flag sequences, and Unicode escape sequences.

Safari running in the same simulator renders emoji correctly, confirming the font (AppleColorEmoji) is present and registered. The issue is specific to React Native's CoreText text rendering path.

Steps to reproduce

  1. Create a new React Native project (tested with RN 0.84.1 via @react-native-community/cli)
  2. Add emoji to a <Text> component:
    <Text>Hello 🚀 World 🎨 Test ✅</Text>
    <Text>Pure emoji: 😀😃😄😁😆😅🤣😂</Text>
    <Text>Flags: 🇺🇸 🇨🇳 🇯🇵 🇬🇧</Text>
    
  3. Run on iOS 26 simulator (any device — iPhone 16, iPhone 17 Pro, etc.)
  4. All emoji appear as [?] boxes

Expected behavior

Emoji should render using the AppleColorEmoji font, as they do in Safari and native UIKit apps on the same simulator.

Actual behavior

All emoji render as [?] replacement characters/boxes.

Environment

  • React Native: 0.84.1 (also reproduced on 0.83.2)
  • JS Engine: Hermes (also tested with JSC — same result)
  • Architecture: New Architecture / Fabric (also tested with Old Architecture — same result)
  • Xcode: 26.3 (build 17C529)
  • iOS Simulator: 26.3.1 (23D8133)
  • macOS: Darwin 25.3.0 (arm64)

Investigation done

  • ✅ Confirmed AppleColorEmoji-160px.ttc exists in the simulator runtime at CoreAddition/AppleColorEmoji-160px.ttc
  • ✅ Confirmed font is registered (CTFontManagerRegisterFontsForURL returns "already exists")
  • ✅ Confirmed Safari in the same simulator renders emoji correctly
  • ✅ Tested Hermes vs JSC — no difference
  • ✅ Tested New Architecture vs Old Architecture — no difference
  • ✅ Tested RN 0.83.2 and 0.84.1 — both affected
  • ✅ Attempted RCTSetDefaultFontHandler with AppleColorEmoji in cascade list — no effect
  • ❌ Unable to test on iOS 18 simulator (Xcode 26 only ships iOS 26 runtime)

Notes

  • This may be an iOS 26 simulator-specific issue (real devices may be unaffected)
  • The root cause appears to be in how React Native's native text rendering (via CoreText/TextKit) resolves the emoji font cascade on iOS 26
  • No older iOS simulator runtimes are available through Xcode 26 to compare

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Reproduire le problème avec React Native 0.84.1 en utilisant un composant sur un simulateur iOS 26, puis étudier le chemin de rendu natif de CoreText/TextKit et la cascade de polices emoji. Comparer le comportement avec Safari ou UIKit dans le même simulateur ; le travail est considéré comme terminé lorsque les emoji en ligne, les emoji autonomes, les drapeaux et les échappements Unicode sont rendus au lieu de boîtes de remplacement.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
ios, react-native
Domaine
mobile
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.