iOS: prebuilt React, ReactNativeDependencies and hermesvm frameworks ship unstripped, adding 9.3 MB to Release apps
Mantenedores costumam responder em até 2 dias
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 48/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Ativa
- Stack de tecnologia
- ios, macos, react-native
- Domínio
- build-system, mobile
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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
- Linguagem predominante
- C++
- Estrelas
- 127k
- Forks
- 25.5k
- Merge médio
- 3d 18h
- PRs com merge (30d)
- 188
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de react/react-native
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
react/react-native#59945 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
react/react-native#59944 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
react/react-native#59942 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
react/react-native#59939 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
react/react-native#59929 · 1 comentário ·
Mantenedores costumam responder em até 2 dias
Todas as issues de react/react-native
Issues semelhantes
-
test(tools): two testkit cache tests fail unless GOCACHE and GOMODCACHE are in the environmentAbertabacklog
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
EchoTools/nevr-runtime#2385 ·
Mantenedores costumam responder em até 1 dia
-
type:bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
tensorflow/tflite-micro#3995 ·
Mantenedores costumam responder em até 1 dia
-
CPU update 1.31xAbertaspeed-report
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 75/100
mw00/project-maya#961 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
-
not for AI lovers
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
OSGeo/gdal#15515 · 1 comentário ·
Mantenedores costumam responder em até 1 dia