iOS: prebuilt React, ReactNativeDependencies and hermesvm frameworks ship unstripped, adding 9.3 MB to Release apps

Aperta
#59,772 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 2 giorni

Nessuno ha ancora preso questa issue.

Valutazione

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

Direzione di ricerca

Start by tracing how the Release iOS framework artifacts for React Native 0.88.1 and Hermes are linked and packaged; the issue does not name the relevant build files or entry points. Run the supplied macOS reproducer against the published artifacts and compare the binary sizes before and after strip -x. Done means the shipped Release frameworks no longer retain the removable symbols and debug map described in the issue.

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

Descrizione

Needs: Attention Needs: Repro Platform: iOS
Description

The Release artifacts of the prebuilt iOS frameworks keep their local symbols and a debug map, and an app's Release archive embeds them as they are. strip -x removes 9.3 MB, 48% of the three binaries (ios-arm64 slice, React Native 0.88.1):

Framework Published After strip -x
React 11,894,280 6,370,280 (-46%)
hermesvm 6,360,048 3,002,976 (-53%)
ReactNativeDependencies 1,258,544 828,712 (-34%)

The debug maps point to object files on the build machine, such as /Users/runner/work/react-native/react-native/packages/react-native/.build/output/spm/Release/Build/Intermediates.noindex/... and /Users/runner/work/hermes/hermes/build_iphoneos/.... The artifacts ship no dSYMs. Our app uses the prebuilt frameworks, the default in 0.88. In its Xcode archive the three binaries are byte-identical to the published ones, because Xcode strips only the targets it builds.

Likely cause: the Release artifacts are linked without the strip step that an Xcode archive applies to its own targets.

Related: meta/hermes#1920 (hermesvm size against the 15 MB App Clip limit).

We found this while tracking the Release sizes of the React Native example apps of Evolu (https://evolu.dev), a local-first platform.

Steps to reproduce

On macOS, run:

base=https://repo.reactnative.dev/maven2/com/facebook
for path in \
  react/react-native-artifacts/0.88.1/react-native-artifacts-0.88.1-reactnative-core-release.tar.gz \
  react/react-native-artifacts/0.88.1/react-native-artifacts-0.88.1-reactnative-dependencies-release.tar.gz \
  hermes/hermes-ios/260318099.0.5/hermes-ios-260318099.0.5-hermes-ios-release.tar.gz; do
  dir=$(mktemp -d) && curl -sSfL "$base/$path" | tar -xz -C "$dir"
  for framework in $(find "$dir" -path '*/ios-arm64/*.framework' -type d); do
    binary="$framework/$(basename "$framework" .framework)"
    cp "$binary" "$dir/stripped" && strip -x "$dir/stripped"
    echo "$(basename "$binary"): $(stat -f %z "$binary") -> $(stat -f %z "$dir/stripped") bytes after strip -x"
  done
done
React Native Version

0.88.1

Affected Platforms

Runtime - iOS, Build - MacOS

Output of npx @react-native-community/cli info
Not app-specific: the script reads the published Maven artifacts. macOS 26.6.2, Xcode 27.2.
Stacktrace or Logs
React: 11894280 -> 6370280 bytes after strip -x
ReactNativeDependencies: 1258544 -> 828712 bytes after strip -x
hermesvm: 6360048 -> 3002976 bytes after strip -x
MANDATORY Reproducer

The script in Steps to reproduce: it reads the published artifacts, no app needed

Screenshots and Videos

No response

Lingua principale
C++
Stelle
127k
Fork
25.5k
Merge medio
3g 18h
PR unite (30g)
188

Preparare l'ambiente

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.

Altre issue di react/react-native

Tutte le issue di react/react-native

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.