iOS: prebuilt React, ReactNativeDependencies and hermesvm frameworks ship unstripped, adding 9.3 MB to Release apps
Les mainteneurs répondent en général sous 2 jours
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 48/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- ios, macos, react-native
- Domaine
- build-system, mobile
Piste de recherche
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.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
- Langage dominant
- C++
- Étoiles
- 127k
- Forks
- 25.5k
- Merge moyen
- 3 j 18 h
- PR mergées (30 j)
- 188
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de react/react-native
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
react/react-native#59945 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
react/react-native#59944 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
react/react-native#59942 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
react/react-native#59939 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
react/react-native#59929 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de react/react-native
Issues similaires
-
test(tools): two testkit cache tests fail unless GOCACHE and GOMODCACHE are in the environmentOuvertebacklog
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
EchoTools/nevr-runtime#2385 ·
Les mainteneurs répondent en général sous 1 jour
-
type:bug
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
tensorflow/tflite-micro#3995 ·
Les mainteneurs répondent en général sous 1 jour
-
CPU update 1.31xOuvertespeed-report
Difficulté 1/5 Moins d'une heure Accessibilité débutants 75/100
mw00/project-maya#961 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
not for AI lovers
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
OSGeo/gdal#15515 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour