iOS: prebuilt React, ReactNativeDependencies and hermesvm frameworks ship unstripped, adding 9.3 MB to Release apps
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
- Ambito
- build-system, mobile
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
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
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di react/react-native
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
react/react-native#59945 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
react/react-native#59944 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
react/react-native#59942 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
react/react-native#59939 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
react/react-native#59929 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di react/react-native
Issue simili
-
test(tools): two testkit cache tests fail unless GOCACHE and GOMODCACHE are in the environmentApertabacklog
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
EchoTools/nevr-runtime#2385 ·
I maintainer di solito rispondono entro 1 giorno
-
type:bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
tensorflow/tflite-micro#3995 ·
I maintainer di solito rispondono entro 1 giorno
-
CPU update 1.31xApertaspeed-report
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
mw00/project-maya#961 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
not for AI lovers
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
OSGeo/gdal#15515 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno