react / react/react-native

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

Aperta
#56,183 11 commenti 9 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Needs: Attention Needs: Repro
Lingua principale
C++
Stelle
127k
Fork
25.3k
Merge medio
1g 23h
PR unite (30g)
4

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci il problema con React Native 0.84.1 usando un componente su un simulatore iOS 26, quindi analizza il percorso di rendering nativo di CoreText/TextKit e la cascata dei font emoji. Confronta il comportamento con Safari o UIKit nello stesso simulatore; il lavoro è concluso quando gli emoji inline, gli emoji autonomi, le bandiere e gli escape Unicode vengono renderizzati invece di caselle di sostituzione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
ios, react-native
Ambito
mobile
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.