react / react/react-native

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

Open
#56,183 11 comments 9 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Needs: Attention Needs: Repro
Dominant language
C++
Stars
127k
Forks
25.3k
Avg merge
1d 23h
Merged PRs (30d)
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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up β€” it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the issue with React Native 0.84.1 using a component on an iOS 26 simulator, then investigate the native CoreText/TextKit rendering path and emoji font cascade. Compare the behavior with Safari or UIKit in the same simulator; done means inline emoji, standalone emoji, flags, and Unicode escapes render instead of replacement boxes.

Written by the indexing model from the issue text.

Assessment

Tech stack
ios, react-native
Domain
mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.