From b5136f694112630077d9aa8334eefb2d5b332af5 Mon Sep 17 00:00:00 2001 From: Peter Velkov Date: Wed, 29 Jun 2022 12:20:27 +0300 Subject: [PATCH 1/4] Add SOURCEMAP_FILE to build phase "Bundle React Native code and images" is the phase that generates the JS bundle using `node_modules/react-native/scripts/react-native-xcode.sh` Providing a SOURCEMAP_FILE env variable would make the script generate a `.map` at build time The file can then be accessed from App project root as `ios.jsbundle.map` --- ios/NewExpensify.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index de0bf9bf28f..fd5668ac3ad 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -359,7 +359,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + shellScript = "export NODE_BINARY=node\nexport SOURCEMAP_FILE=\"$(pwd)/../ios.jsbundle.map\"\n\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; }; 0819B9EA2AC16F5E4380192C /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; From ac455fe1d5fa5b0f7ad2692e15e9b93758168b49 Mon Sep 17 00:00:00 2001 From: Peter Velkov Date: Thu, 30 Jun 2022 16:50:22 +0300 Subject: [PATCH 2/4] Add symbolicate:(ios|android) package scripts --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 7e915803aac..a75d70842f4 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,9 @@ "gh-actions-build": "./.github/scripts/buildActions.sh", "gh-actions-validate": "./.github/scripts/validateActionsAndWorkflows.sh", "analyze-packages": "ANALYZE_BUNDLE=true webpack --config config/webpack/webpack.common.js --env.envFile=.env.production", - "check-metro-bundler-port": "node config/checkMetroBundlerPort.js" + "check-metro-bundler-port": "node config/checkMetroBundlerPort.js", + "symbolicate:android": "npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map", + "symbolicate:ios": "npx metro-symbolicate ios.jsbundle.map" }, "dependencies": { "@formatjs/intl-getcanonicallocales": "^1.5.8", From db7bc3ac816737a694f2568a3e80d3d32c796a3a Mon Sep 17 00:00:00 2001 From: Peter Velkov Date: Thu, 30 Jun 2022 19:52:52 +0300 Subject: [PATCH 3/4] Expose ios/android sourcemaps as artifacts from `platformDeploy.yml` --- .github/workflows/platformDeploy.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/platformDeploy.yml b/.github/workflows/platformDeploy.yml index 28a453427c0..19a7ed6585d 100644 --- a/.github/workflows/platformDeploy.yml +++ b/.github/workflows/platformDeploy.yml @@ -93,6 +93,12 @@ jobs: env: VERSION: ${{ env.VERSION_CODE }} + - name: Archive Android sourcemaps + uses: actions/upload-artifact@v3 + with: + name: android-sourcemap + path: android/app/build/generated/sourcemaps/react/release/*.map + - name: Warn deployers if Android production deploy failed if: ${{ failure() && fromJSON(env.SHOULD_DEPLOY_PRODUCTION) }} uses: 8398a7/action-slack@v3 @@ -244,6 +250,12 @@ jobs: APPLE_DEMO_EMAIL: ${{ secrets.APPLE_DEMO_EMAIL }} APPLE_DEMO_PASSWORD: ${{ secrets.APPLE_DEMO_PASSWORD }} + - name: Archive iOS sourcemaps + uses: actions/upload-artifact@v3 + with: + name: ios-sourcemap + path: main.jsbundle.map + - name: Set iOS version in ENV if: ${{ fromJSON(env.SHOULD_DEPLOY_PRODUCTION) }} run: echo "IOS_VERSION=$(echo '${{ github.event.release.tag_name }}' | tr '-' '.')" >> "$GITHUB_ENV" From eabc1971b9d7094ec322d1c39d7632cd2f10f884 Mon Sep 17 00:00:00 2001 From: Peter Velkov Date: Thu, 30 Jun 2022 20:06:51 +0300 Subject: [PATCH 4/4] Use EXTRA_PACKAGER_ARGS instead of SOURCEMAP_FILE At the moment there's a big in react-native with SOURCEMAP_FILE and hermes enabled https://github.com/facebook/react-native/issues/32497 --- ios/NewExpensify.xcodeproj/project.pbxproj | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index fd5668ac3ad..a9fad31433f 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -359,7 +359,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export NODE_BINARY=node\nexport SOURCEMAP_FILE=\"$(pwd)/../ios.jsbundle.map\"\n\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + shellScript = "export NODE_BINARY=node\nexport EXTRA_PACKAGER_ARGS=\"--sourcemap-output $(pwd)/../main.jsbundle.map\"\n\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; }; 0819B9EA2AC16F5E4380192C /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; diff --git a/package.json b/package.json index a75d70842f4..68ba97775b7 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "analyze-packages": "ANALYZE_BUNDLE=true webpack --config config/webpack/webpack.common.js --env.envFile=.env.production", "check-metro-bundler-port": "node config/checkMetroBundlerPort.js", "symbolicate:android": "npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map", - "symbolicate:ios": "npx metro-symbolicate ios.jsbundle.map" + "symbolicate:ios": "npx metro-symbolicate main.jsbundle.map" }, "dependencies": { "@formatjs/intl-getcanonicallocales": "^1.5.8",