From defc5a63c8ff3e774c610788ea1ad7e6f06dceaa Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Thu, 16 Oct 2025 14:55:22 -0700 Subject: [PATCH 01/67] init emerge docs --- .../size-analysis/build-comparison.mdx | 126 ++++++++++++++ docs/product/size-analysis/build-details.mdx | 68 ++++++++ .../size-analysis/github-integration.mdx | 126 ++++++++++++++ docs/product/size-analysis/index.mdx | 58 +++++++ .../uploading-builds/android.mdx | 162 ++++++++++++++++++ .../size-analysis/uploading-builds/cli.mdx | 155 +++++++++++++++++ .../size-analysis/uploading-builds/index.mdx | 140 +++++++++++++++ .../size-analysis/uploading-builds/ios.mdx | 113 ++++++++++++ 8 files changed, 948 insertions(+) create mode 100644 docs/product/size-analysis/build-comparison.mdx create mode 100644 docs/product/size-analysis/build-details.mdx create mode 100644 docs/product/size-analysis/github-integration.mdx create mode 100644 docs/product/size-analysis/index.mdx create mode 100644 docs/product/size-analysis/uploading-builds/android.mdx create mode 100644 docs/product/size-analysis/uploading-builds/cli.mdx create mode 100644 docs/product/size-analysis/uploading-builds/index.mdx create mode 100644 docs/product/size-analysis/uploading-builds/ios.mdx diff --git a/docs/product/size-analysis/build-comparison.mdx b/docs/product/size-analysis/build-comparison.mdx new file mode 100644 index 00000000000000..a747fddd12a468 --- /dev/null +++ b/docs/product/size-analysis/build-comparison.mdx @@ -0,0 +1,126 @@ +--- +title: Build Comparison +sidebar_order: 30 +description: Compare builds to understand how code changes impact your app's size. +--- + +Build comparison helps you understand how changes between two builds impact your app size. When you open a pull request, Size Analysis automatically compares your PR build against the base branch, showing you exactly what changed. + +## Automatic PR Comparisons + +When the [GitHub integration](/product/size-analysis/github-integration/) is enabled and you upload builds from pull requests, Size Analysis automatically: + +1. Compares the PR build to the base branch build +2. Posts a comment on the PR with size change summary +3. Updates the PR status check with the size impact + +This makes size considerations a natural part of your code review process. + +## Viewing Comparisons + +You can view detailed build comparisons in two ways: + +### In GitHub + +When a PR has builds from both the head and base branches, Size Analysis posts a comment showing: + +- **Total size change**: How much the app grew or shrank +- **Percentage change**: The relative size impact +- **Component changes**: Which components changed the most + +Click the link in the PR comment to view the full comparison in [sentry.io](https://sentry.io). + +### In Sentry + +Navigate to Size Analysis in [sentry.io](https://sentry.io) and select a build to compare. You can: + +- Compare any two builds from the same project +- Filter comparisons by branch, commit, or build configuration +- View detailed component-level changes + +## What's Compared + +Build comparisons show changes across several dimensions: + +### Size Changes + +- **Total size delta**: The overall size increase or decrease +- **Component-level changes**: Which specific components grew or shrank +- **New components**: Components added in the new build +- **Removed components**: Components removed from the previous build + +### Component Details + +For each changed component, the comparison shows: + +- **Absolute change**: How many bytes the component grew or shrank +- **Percentage change**: The relative size change +- **Before/after sizes**: The component's size in both builds + +### Visualization + +The comparison view includes: + +- **Treemap comparison**: Side-by-side treemaps showing both builds +- **Delta view**: A visual representation highlighting size changes +- **Table view**: A sortable table of all component changes + +## Understanding Changes + +### Expected Size Increases + +Some changes naturally increase app size: + +- Adding new features or dependencies +- Including additional assets or resources +- Supporting new platforms or device types + +### Unexpected Size Increases + +Watch out for: + +- **Large dependency updates**: A minor version bump shouldn't cause major size changes +- **Duplicate resources**: The same resource included multiple times +- **Debug symbols**: Debug information accidentally included in release builds +- **Unoptimized assets**: Images or other resources that could be compressed + +## Build Configuration Matching + +Builds are only compared if they have the same build configuration. For example: + +- iOS `Debug` builds are only compared with other `Debug` builds +- Android `freeRelease` builds are only compared with other `freeRelease` builds + +This ensures you're comparing apples to apples and prevents misleading comparisons between fundamentally different build types. + +## Using Comparisons in Your Workflow + +### Set Size Budgets + +Use historical comparisons to establish size budgets for your app: + +1. Review typical size changes from past PRs +2. Define acceptable size increase thresholds +3. Flag PRs that exceed these thresholds during code review + +### Identify Size Regressions + +When you see an unexpected size increase: + +1. Review the comparison to identify which components changed +2. Check if the size increase is justified by the functionality added +3. Look for optimization opportunities (compress assets, remove unused code, etc.) +4. Consider breaking large PRs into smaller ones to isolate size impacts + +### Track Size Over Time + +Compare builds across releases to: + +- Understand long-term size trends +- Identify gradual size creep +- Measure the impact of size optimization initiatives + +## Next Steps + +- [Set up the GitHub integration](/product/size-analysis/github-integration/) to enable automatic PR comparisons +- [View build details](/product/size-analysis/build-details/) to understand what's contributing to size changes diff --git a/docs/product/size-analysis/build-details.mdx b/docs/product/size-analysis/build-details.mdx new file mode 100644 index 00000000000000..d50bf5d46d6c08 --- /dev/null +++ b/docs/product/size-analysis/build-details.mdx @@ -0,0 +1,68 @@ +--- +title: Build Details +sidebar_order: 20 +description: Understand your app's size breakdown with treemaps, insights, and detailed component analysis. +--- + +The Build Details page provides a comprehensive view of your app's size, breaking down which components, frameworks, and resources contribute to your app's overall footprint. + +## Viewing Build Details + +Navigate to a specific build in [sentry.io](https://sentry.io) to see its detailed size analysis. You can access build details from: + +- The Size Analysis project page +- Links in GitHub PR comments (when the [GitHub integration](/product/size-analysis/github-integration/) is enabled) +- Build comparison views + +## Treemap + +The treemap provides an interactive, visual representation of your app's size breakdown. Each rectangle represents a component of your app, with the size of the rectangle proportional to that component's contribution to the overall app size. + +### How to Use the Treemap + +- **Larger rectangles** indicate components that take up more space +- **Click on a rectangle** to drill down into that component's sub-components +- **Hover over a rectangle** to see detailed size information +- **Use the breadcrumb navigation** at the top to navigate back up the hierarchy + +The treemap helps you quickly identify the largest contributors to your app size and find optimization opportunities. + +## Insights + +Insights automatically highlight important patterns and potential issues in your build: + +- **Unusually large components**: Identifies frameworks or resources that are significantly larger than typical +- **Duplicate resources**: Finds resources that may be included multiple times +- **Optimization opportunities**: Suggests areas where you might reduce size + +These insights help you prioritize your size optimization work by focusing on the areas with the most potential impact. + +## Breakdown + +The breakdown view provides a detailed, tabular breakdown of your app's components. This view shows: + +- **Component name**: The name of the framework, library, or resource +- **Size**: The component's size (in bytes, KB, or MB) +- **Percentage**: What percentage of the total app size this component represents +- **Change**: How this component's size has changed from previous builds (when available) + +### Sorting and Filtering + +- **Sort by size** to find the largest components +- **Sort by change** to see which components grew or shrank the most +- **Filter by type** to focus on specific categories (frameworks, resources, code, etc.) + +## Size Metrics + +Each build displays several key size metrics: + +- **Total app size**: The complete size of the app bundle or archive +- **Download size**: The estimated size when downloaded from the app store (compressed) +- **Install size**: The estimated size after installation on a device + +Understanding these different metrics helps you optimize for the right target. Download size affects user acquisition, while install size affects device storage. + +## Next Steps + +- [Compare builds](/product/size-analysis/build-comparison/) to see how your changes impact app size +- [Set up GitHub integration](/product/size-analysis/github-integration/) to receive size insights on pull requests diff --git a/docs/product/size-analysis/github-integration.mdx b/docs/product/size-analysis/github-integration.mdx new file mode 100644 index 00000000000000..502e545f61caf7 --- /dev/null +++ b/docs/product/size-analysis/github-integration.mdx @@ -0,0 +1,126 @@ +--- +title: GitHub Integration +sidebar_order: 40 +description: Set up the GitHub integration to receive size change notifications as PR comments and status checks. +--- + +The GitHub integration brings Size Analysis directly into your pull request workflow by posting size change summaries as PR comments and status checks. + + + GitHub is currently the only supported VCS provider for Size Analysis. + + +## Benefits + +With the GitHub integration enabled, you get: + +- **PR comments**: Automatic comments on pull requests showing size changes +- **Status checks**: Pass/fail checks based on size thresholds (coming soon) +- **Inline notifications**: See size impacts without leaving GitHub +- **Historical tracking**: Links to detailed comparisons in [sentry.io](https://sentry.io) + +## Installation + +### Install the Sentry GitHub App + +The GitHub integration requires the Sentry GitHub App to be installed on your repository: + +1. Navigate to **Organization Settings > Integrations** in [sentry.io](https://sentry.io) +2. Find the **GitHub** integration and click **Install** +3. Follow the prompts to authorize the app for your GitHub organization +4. Select the repositories where you want to enable Size Analysis + +For detailed installation instructions, see the [GitHub integration documentation](https://docs.sentry.io/organization/integrations/source-code-mgmt/github/). + +### Configure Repository Access + +Ensure the Sentry GitHub App has access to the repositories where you're uploading builds: + +1. Go to your GitHub organization settings +2. Navigate to **Integrations > Applications** +3. Click on **Sentry** +4. Under **Repository access**, grant access to your repositories + +## How It Works + +Once the integration is set up and you're uploading builds from your CI: + +### On Pull Requests + +1. **You open a PR**: Your CI builds the app and uploads it to Sentry +2. **Base branch build**: Sentry finds the corresponding build from your base branch +3. **Comparison**: Sentry compares the two builds +4. **PR comment**: A comment is posted with the size change summary + +### Comment Content + +The PR comment includes: + +- **Total size change**: How much the app grew or shrank (e.g., "+142 KB" or "-23 KB") +- **Percentage change**: The relative impact (e.g., "+2.3%") +- **Component highlights**: The components that changed the most +- **Link to details**: A link to view the full comparison in [sentry.io](https://sentry.io) + +### Example PR Comment + +``` +## 📊 Size Analysis + +**App size changed by +142 KB (+2.3%)** + +### Largest Changes +- `Frameworks/MyFramework.framework`: +98 KB +- `Resources/Assets.car`: +52 KB +- `Binary`: -8 KB + +[View detailed comparison →](https://sentry.io/...) +``` + +## Requirements + +For the GitHub integration to work with Size Analysis: + +1. **GitHub App installed**: The Sentry GitHub App must be installed on your repository +2. **Builds from PRs**: You must upload builds from pull request CI runs +3. **Base branch builds**: You must also upload builds from your main/base branch +4. **Metadata**: Your build uploads must include PR metadata (auto-detected in GitHub Actions) + +## Troubleshooting + +### Not Seeing PR Comments? + +Check that: + +- The Sentry GitHub App is installed and has access to your repository +- You're uploading builds from both PR branches and the base branch +- Your CI is running on pull request events +- The `SENTRY_AUTH_TOKEN` is set correctly in your CI environment +- Your builds have the same build configuration (e.g., both are `Release` builds) + +### Comments Not Updating? + +- Make sure you're uploading a new build after each code change +- Check that the build configuration matches between PR and base builds +- Verify that the PR metadata (PR number, base SHA) is being detected correctly + +### Missing Base Build? + +The first time you set up Size Analysis, your main branch may not have any builds yet: + +1. Merge a PR or push to your main branch to trigger a build +2. Future PRs will be able to compare against this base build + +## Permissions + +The GitHub App requires these permissions: + +- **Read access to code**: To identify the repository and branches +- **Write access to pull requests**: To post comments on PRs +- **Write access to checks**: To create status checks (coming soon) + +These permissions are requested during the GitHub App installation flow. + +## Next Steps + +- [Upload your first build](/product/size-analysis/getting-started/) to start seeing size analysis +- [View build comparisons](/product/size-analysis/build-comparison/) to understand size changes in detail diff --git a/docs/product/size-analysis/index.mdx b/docs/product/size-analysis/index.mdx new file mode 100644 index 00000000000000..ede86721bd8a1d --- /dev/null +++ b/docs/product/size-analysis/index.mdx @@ -0,0 +1,58 @@ +--- +title: Size Analysis (Mobile) +sidebar_order: 136 +description: Track and optimize your mobile app's binary size with automated uploads, detailed breakdowns, and build comparisons. +--- + + + Size Analysis is currently in early access. Features are + still in development and may change. + + +Size Analysis helps you monitor and optimize your mobile application's binary size. By tracking your app size across builds and releases, you can catch unexpected size increases, understand what's contributing to your app's footprint, and deliver faster downloads for your users. + +## Why Track App Size? + +Mobile app size directly impacts user acquisition and retention. Smaller apps: + +- Download faster, reducing user drop-off during installation +- Take up less storage space on user devices +- Are more likely to be downloaded on slower networks +- Update more quickly, improving user experience + +Size Analysis gives you visibility into your app's size trends and helps you catch regressions before they reach production. + +## How Size Analysis Works + +### Track Size Across Builds + +Upload your iOS (`.xcarchive`, `.ipa`) or Android (`.aab`, `.apk`) builds to Sentry as part of your CI pipeline. Size Analysis automatically extracts size metrics and tracks changes over time. [Get started with automated uploads](/product/size-analysis/getting-started/). + +### Compare Builds + +When you open a pull request, Size Analysis automatically compares your PR build against the base branch, showing you exactly how your changes impact app size. View detailed comparisons in [sentry.io](https://sentry.io) or receive status checks directly in GitHub. Learn more about [build comparisons](/product/size-analysis/build-comparison/). + +### Understand Size Contributors + +Use the interactive treemap and breakdown views to see which components, frameworks, and resources contribute most to your app size. The [build details page](/product/size-analysis/build-details/) helps you identify optimization opportunities and track the impact of size reduction efforts. + +### Integrate with Your Workflow + +Set up the [GitHub integration](/product/size-analysis/github-integration/) to receive size change notifications as PR comments and status checks, making size considerations a natural part of your code review process. + +## Supported Platforms + +- **iOS**: XCArchive (`.xcarchive`) and IPA (`.ipa`) files +- **Android**: Android App Bundle (`.aab`, preferred) and APK (`.apk`) files + +## Requirements + +To use Size Analysis, you need: + +- A Sentry account with access to any [core plan](https://sentry.io/pricing/) +- A Sentry auth token for uploading builds +- GitHub as your VCS provider (currently the only supported provider) + +## Learn More + + diff --git a/docs/product/size-analysis/uploading-builds/android.mdx b/docs/product/size-analysis/uploading-builds/android.mdx new file mode 100644 index 00000000000000..965393f00e3712 --- /dev/null +++ b/docs/product/size-analysis/uploading-builds/android.mdx @@ -0,0 +1,162 @@ +--- +title: Android Setup +sidebar_order: 20 +description: Configure Size Analysis for Android apps using the Sentry Gradle plugin and GitHub Actions. +--- + +This guide walks you through setting up Size Analysis for Android applications using the Sentry Android Gradle plugin. This assumes you already have a working integration with the Sentry Android Gradle plugin and are using GitHub Actions. + + + If you don't already have Sentry set up with Gradle, see the [Android SDK + setup guide](https://docs.sentry.io/platforms/android/) first. + + +## Apply the Gradle Plugin + +Use version `6.0.0-alpha.4` or higher of the Sentry Android Gradle plugin. + +### For Kotlin DSL (build.gradle.kts) + +In your app-level `build.gradle.kts`: + +```kotlin +plugins { + id("io.sentry.android.gradle") version "6.0.0-alpha.4" +} + +sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent + } +} +``` + +### For Groovy (build.gradle) + +In your app-level `build.gradle`: + +```groovy +plugins { + id "io.sentry.android.gradle" version "6.0.0-alpha.4" +} + +sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").present + } +} +``` + +## Configuration + +The `sizeAnalysis` block configures when Size Analysis uploads are triggered. The example above enables uploads only when running in GitHub Actions, preventing uploads from local development builds. + +### Configuration Options + +```kotlin +sentry { + sizeAnalysis { + // Enable or disable size analysis uploads + enabled = true + + // Override auto-detected organization slug + org = "your-org" + + // Override auto-detected project slug + project = "your-project" + + // Override auto-detected build configuration + buildConfiguration = "customRelease" + } +} +``` + +Most of the time, you only need to set `enabled`. The plugin automatically detects your organization, project, and build configuration from your environment. + +## Set Up GitHub Actions + +In your GitHub Actions workflow, set the `SENTRY_AUTH_TOKEN` environment variable: + +```yaml +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: "17" + distribution: "temurin" + + - name: Build release bundle + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + run: ./gradlew bundleRelease +``` + +Add your Sentry auth token as a [GitHub secret](https://docs.github.com/en/actions/security-guides/encrypted-secrets) named `SENTRY_AUTH_TOKEN`. + +## Build Configuration + +The plugin automatically sets the build configuration to your build variant (a combination of build type and build flavor). For example: + +- `freeDebug` +- `paidRelease` +- `demoRelease` + +This ensures builds with different configurations are not compared against each other in Size Analysis. + +## Supported Build Tasks + +Size Analysis uploads are automatically triggered when you run: + +- `bundle` - Creates an Android App Bundle (`.aab`, preferred) +- `assemble` - Creates an APK (`.apk`) + +For example: + +```bash +./gradlew bundleRelease # Uploads Release AAB +./gradlew assembleFreeDebug # Uploads freeDebug APK +``` + +## Example Workflow + +Here's a complete example of a GitHub Actions workflow that builds an Android app and uploads it to Sentry: + +```yaml +name: Android Build and Size Analysis + +on: + pull_request: + push: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: "17" + distribution: "temurin" + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Build release bundle + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + run: ./gradlew bundleRelease +``` + +## Next Steps + +- [Set up the GitHub integration](/product/size-analysis/github-integration/) to receive size change notifications in your pull requests +- [View build details](/product/size-analysis/build-details/) to explore your app's size breakdown diff --git a/docs/product/size-analysis/uploading-builds/cli.mdx b/docs/product/size-analysis/uploading-builds/cli.mdx new file mode 100644 index 00000000000000..a2bede6336559c --- /dev/null +++ b/docs/product/size-analysis/uploading-builds/cli.mdx @@ -0,0 +1,155 @@ +--- +title: CLI Upload +sidebar_order: 30 +description: Upload builds to Size Analysis using the Sentry CLI for any platform or build system. +--- + +The Sentry CLI provides a platform-agnostic way to upload builds to Size Analysis. This is useful if you're not using Fastlane (iOS) or Gradle (Android), or if you want more control over the upload process. + +## Install Sentry CLI + +If you don't already have the Sentry CLI installed, see the [Sentry CLI installation guide](https://docs.sentry.io/cli/installation/). + +## Upload Command + +Use the `sentry-cli build upload` command to upload your build artifact: + +```bash +sentry-cli build upload \ + --org \ + --project \ + --build-configuration +``` + +### iOS Example + +```bash +sentry-cli build upload app.xcarchive.zip \ + --org your-org \ + --project your-ios-project \ + --build-configuration Release +``` + +### Android Example + +```bash +sentry-cli build upload app.aab \ + --org your-org \ + --project your-android-project \ + --build-configuration freeRelease +``` + +## Upload Metadata + +The CLI accepts several parameters to provide metadata about the build. Some are auto-detected when running in GitHub Actions. + +| Parameter | Description | Auto-detected in GitHub Actions | +| ----------------------- | ---------------------------------------------- | ------------------------------- | +| `--org` | Sentry organization slug | ❌ Required | +| `--project` | Sentry project slug | ❌ Required | +| `--build-configuration` | Build configuration (e.g., `Release`, `Debug`) | ❌ Required | +| `--head-sha` | Current commit SHA | ✅ Yes | +| `--base-sha` | Base commit SHA (for comparison) | ✅ Yes (PR only) | +| `--head-repo-name` | Repository name (org/repo format) | ✅ Yes | +| `--pr-number` | Pull request number | ✅ Yes (PR only) | +| `--head-ref` | Branch or tag name | ✅ Yes | +| `--base-ref` | Base branch name | ✅ Yes (PR only) | +| `--vcs-provider` | VCS provider (currently only `github`) | ✅ Yes | + +### Build Configuration + +The `--build-configuration` parameter is used to ensure builds with different configurations are not compared. This should match your platform's build configuration: + +**iOS**: Your Xcode build configuration + +- `Debug`, `Release`, `Staging`, etc. + +**Android**: Your build variant (combination of build type and flavor) + +- `freeDebug`, `paidRelease`, etc. + +## Authentication + +The CLI needs a Sentry auth token to upload builds. You can provide it in two ways: + +### Environment Variable (Recommended) + +```bash +export SENTRY_AUTH_TOKEN=your-token-here +sentry-cli build upload app.aab --org your-org --project your-project --build-configuration Release +``` + +### Command-line Parameter + +```bash +sentry-cli build upload app.aab \ + --org your-org \ + --project your-project \ + --build-configuration Release \ + --auth-token your-token-here +``` + +Generate an auth token in your [Sentry account settings](https://sentry.sentry.io/settings/auth-tokens/). + +## GitHub Actions Integration + +When running in GitHub Actions, most metadata is auto-detected. You only need to provide the organization, project, and build configuration: + +```yaml +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Build app + run: ./build-script.sh + + - name: Upload to Sentry + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + run: | + sentry-cli build upload build/outputs/bundle/release/app-release.aab \ + --org your-org \ + --project your-project \ + --build-configuration Release +``` + +### Manual Metadata Override + +If you need to override auto-detected values or are using a custom CI system, you can provide all metadata manually: + +```bash +sentry-cli build upload app.aab \ + --org your-org \ + --project your-project \ + --build-configuration Release \ + --head-sha abc123 \ + --base-sha def456 \ + --head-repo-name your-org/your-repo \ + --pr-number 42 \ + --head-ref feature-branch \ + --base-ref main \ + --vcs-provider github +``` + +## Supported Build Formats + +The CLI accepts the following build artifact formats: + +| Platform | Format | Extension | +| -------- | ------------------------------ | --------------------- | +| Android | Android App Bundle (preferred) | `.aab` | +| Android | APK | `.apk` | +| iOS | XCArchive (preferred) | `.xcarchive` (zipped) | +| iOS | IPA | `.ipa` | + + + For iOS XCArchive files, you must zip the `.xcarchive` directory before + uploading. + + +## Next Steps + +- [Set up the GitHub integration](/product/size-analysis/github-integration/) to receive size change notifications in your pull requests +- [View build details](/product/size-analysis/build-details/) to explore your app's size breakdown diff --git a/docs/product/size-analysis/uploading-builds/index.mdx b/docs/product/size-analysis/uploading-builds/index.mdx new file mode 100644 index 00000000000000..2ac27e9327dd0b --- /dev/null +++ b/docs/product/size-analysis/uploading-builds/index.mdx @@ -0,0 +1,140 @@ +--- +title: Uploading Builds +sidebar_order: 1 +description: Upload your first build to Size Analysis in under 5 minutes. +--- + +Get your first build uploaded to Size Analysis in under 5 minutes + +GitHub is currently the only supported VCS provider. + +## Prerequisites + +Before uploading builds, you'll need: + +1. **A Sentry account** with access to any [core plan](https://sentry.io/pricing/) +2. **A Sentry auth token** - [Docs](/account/auth-tokens/) | [Generate token](https://sentry.sentry.io/settings/auth-tokens/) + - Set `SENTRY_AUTH_TOKEN` as an environment variable to have it automatically picked up by the upload tools + +## Quickstart + +Choose your platform to get started: + +### iOS (Fastlane + GitHub Actions) + +**1. Install the Fastlane plugin** (version 1.34.0 or higher): + +```ruby +bundle exec fastlane add_plugin fastlane-plugin-sentry +``` + +**2. Add to your Fastfile:** + +```ruby +lane :upload_to_sentry do + sentry_upload_build( + org_slug: 'your-org', + project_slug: 'your-project', + build_configuration: 'Release' # Adjust to your configuration + ) +end +``` + +**3. Set your auth token in GitHub Actions:** + +```yaml +env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} +``` + +**4. Run the lane:** + +```bash +bundle exec fastlane upload_to_sentry +``` + +[Read the full iOS setup guide →](/product/size-analysis/getting-started/ios/) + +### Android (Gradle + GitHub Actions) + +**1. Add the plugin** (version 6.0.0-alpha.4 or higher) in your `build.gradle.kts`: + +```kotlin +plugins { + id("io.sentry.android.gradle") version "6.0.0-alpha.4" +} + +sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent + } +} +``` + +Or for `build.gradle`: + +```groovy +plugins { + id "io.sentry.android.gradle" version "6.0.0-alpha.4" +} + +sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").present + } +} +``` + +**2. Set your auth token in GitHub Actions:** + +```yaml +env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} +``` + +**3. Build your app:** + +```bash +./gradlew bundleRelease +``` + +[Read the full Android setup guide →](/product/size-analysis/getting-started/android/) + +### Using the CLI (Any Platform) + +The Sentry CLI provides a platform-agnostic way to upload builds: + +```bash +export SENTRY_AUTH_TOKEN=your-token-here + +# iOS +sentry-cli build upload app.xcarchive.zip \ + --org your-org \ + --project your-project \ + --build-configuration Release + +# Android +sentry-cli build upload app.aab \ + --org your-org \ + --project your-project \ + --build-configuration freeRelease # Adjust to your build flavor +``` + +[Read the full CLI guide →](/product/size-analysis/getting-started/cli/) + +## Supported Build Formats + +| Platform | Format | Extension | Notes | +| -------- | ------------------ | ------------ | --------- | +| Android | Android App Bundle | `.aab` | Preferred | +| Android | APK | `.apk` | Supported | +| iOS | XCArchive | `.xcarchive` | Preferred | +| iOS | IPA | `.ipa` | Supported | + +## Next Steps + +After uploading your first build: + +1. [Set up the GitHub integration](/product/size-analysis/github-integration/) to receive PR comments and status checks +2. [View build details](/product/size-analysis/build-details/) to explore size breakdowns and insights +3. [Compare builds](/product/size-analysis/build-comparison/) to understand how changes impact your app size diff --git a/docs/product/size-analysis/uploading-builds/ios.mdx b/docs/product/size-analysis/uploading-builds/ios.mdx new file mode 100644 index 00000000000000..04f721dda235d2 --- /dev/null +++ b/docs/product/size-analysis/uploading-builds/ios.mdx @@ -0,0 +1,113 @@ +--- +title: iOS Setup +sidebar_order: 10 +description: Configure Size Analysis for iOS apps using Fastlane and GitHub Actions. +--- + +This guide walks you through setting up Size Analysis for iOS applications using the Sentry Fastlane plugin. This assumes you already have a working integration with the Sentry Fastlane plugin and are using GitHub Actions. + + + If you don't already have Sentry set up with Fastlane, see the [Fastlane + integration + guide](https://docs.sentry.io/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) + first. + + +## Install the Fastlane Plugin + +Ensure you have version 1.34.0 or higher of the `fastlane-plugin-sentry`. Install or update it using: + +```ruby +bundle exec fastlane add_plugin fastlane-plugin-sentry +``` + +## Update Your Fastfile + +Add a lane (or update an existing one) with the `sentry_upload_build` action: + +```ruby +lane :upload_to_sentry do + sentry_upload_build( + org_slug: 'your-org', + project_slug: 'your-project', + build_configuration: 'Release' # Adjust to your Xcode configuration + ) +end +``` + +### Configuration Options + +| Parameter | Description | Required | +| --------------------- | --------------------------------------------------------------- | -------- | +| `org_slug` | Your Sentry organization slug | Yes | +| `project_slug` | Your Sentry project slug | Yes | +| `build_configuration` | Xcode build configuration (e.g., `Debug`, `Release`, `Staging`) | Yes | +| `auth_token` | Sentry auth token (defaults to `SENTRY_AUTH_TOKEN` env var) | No | + +## Set Up GitHub Actions + +In your GitHub Actions workflow, ensure the `SENTRY_AUTH_TOKEN` environment variable is set: + +```yaml +jobs: + build: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + + - name: Build and upload to Sentry + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + run: bundle exec fastlane upload_to_sentry +``` + +Add your Sentry auth token as a [GitHub secret](https://docs.github.com/en/actions/security-guides/encrypted-secrets) named `SENTRY_AUTH_TOKEN`. + +## Build Configuration + +The `build_configuration` parameter should match your Xcode build configuration. This ensures builds with different configurations (e.g., Debug vs. Release) are not compared against each other. + +Common build configurations: + +- `Debug` +- `Release` +- `Staging` +- Custom configurations defined in your Xcode project + +## Example Workflow + +Here's a complete example of a GitHub Actions workflow that builds an iOS app and uploads it to Sentry: + +```yaml +name: iOS Build and Size Analysis + +on: + pull_request: + push: + branches: [main] + +jobs: + build: + runs-on: macos-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + bundler-cache: true + + - name: Build app + run: bundle exec fastlane build + + - name: Upload to Sentry + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + run: bundle exec fastlane upload_to_sentry +``` + +## Next Steps + +- [Set up the GitHub integration](/product/size-analysis/github-integration/) to receive size change notifications in your pull requests +- [View build details](/product/size-analysis/build-details/) to explore your app's size breakdown From 0a0fbaa73f3d22b165b95c605b1a50ba6d2695b3 Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Thu, 16 Oct 2025 19:30:43 -0700 Subject: [PATCH 02/67] delete feature pages (for now) --- .../size-analysis/build-comparison.mdx | 126 ------------------ docs/product/size-analysis/build-details.mdx | 68 ---------- 2 files changed, 194 deletions(-) delete mode 100644 docs/product/size-analysis/build-comparison.mdx delete mode 100644 docs/product/size-analysis/build-details.mdx diff --git a/docs/product/size-analysis/build-comparison.mdx b/docs/product/size-analysis/build-comparison.mdx deleted file mode 100644 index a747fddd12a468..00000000000000 --- a/docs/product/size-analysis/build-comparison.mdx +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Build Comparison -sidebar_order: 30 -description: Compare builds to understand how code changes impact your app's size. ---- - -Build comparison helps you understand how changes between two builds impact your app size. When you open a pull request, Size Analysis automatically compares your PR build against the base branch, showing you exactly what changed. - -## Automatic PR Comparisons - -When the [GitHub integration](/product/size-analysis/github-integration/) is enabled and you upload builds from pull requests, Size Analysis automatically: - -1. Compares the PR build to the base branch build -2. Posts a comment on the PR with size change summary -3. Updates the PR status check with the size impact - -This makes size considerations a natural part of your code review process. - -## Viewing Comparisons - -You can view detailed build comparisons in two ways: - -### In GitHub - -When a PR has builds from both the head and base branches, Size Analysis posts a comment showing: - -- **Total size change**: How much the app grew or shrank -- **Percentage change**: The relative size impact -- **Component changes**: Which components changed the most - -Click the link in the PR comment to view the full comparison in [sentry.io](https://sentry.io). - -### In Sentry - -Navigate to Size Analysis in [sentry.io](https://sentry.io) and select a build to compare. You can: - -- Compare any two builds from the same project -- Filter comparisons by branch, commit, or build configuration -- View detailed component-level changes - -## What's Compared - -Build comparisons show changes across several dimensions: - -### Size Changes - -- **Total size delta**: The overall size increase or decrease -- **Component-level changes**: Which specific components grew or shrank -- **New components**: Components added in the new build -- **Removed components**: Components removed from the previous build - -### Component Details - -For each changed component, the comparison shows: - -- **Absolute change**: How many bytes the component grew or shrank -- **Percentage change**: The relative size change -- **Before/after sizes**: The component's size in both builds - -### Visualization - -The comparison view includes: - -- **Treemap comparison**: Side-by-side treemaps showing both builds -- **Delta view**: A visual representation highlighting size changes -- **Table view**: A sortable table of all component changes - -## Understanding Changes - -### Expected Size Increases - -Some changes naturally increase app size: - -- Adding new features or dependencies -- Including additional assets or resources -- Supporting new platforms or device types - -### Unexpected Size Increases - -Watch out for: - -- **Large dependency updates**: A minor version bump shouldn't cause major size changes -- **Duplicate resources**: The same resource included multiple times -- **Debug symbols**: Debug information accidentally included in release builds -- **Unoptimized assets**: Images or other resources that could be compressed - -## Build Configuration Matching - -Builds are only compared if they have the same build configuration. For example: - -- iOS `Debug` builds are only compared with other `Debug` builds -- Android `freeRelease` builds are only compared with other `freeRelease` builds - -This ensures you're comparing apples to apples and prevents misleading comparisons between fundamentally different build types. - -## Using Comparisons in Your Workflow - -### Set Size Budgets - -Use historical comparisons to establish size budgets for your app: - -1. Review typical size changes from past PRs -2. Define acceptable size increase thresholds -3. Flag PRs that exceed these thresholds during code review - -### Identify Size Regressions - -When you see an unexpected size increase: - -1. Review the comparison to identify which components changed -2. Check if the size increase is justified by the functionality added -3. Look for optimization opportunities (compress assets, remove unused code, etc.) -4. Consider breaking large PRs into smaller ones to isolate size impacts - -### Track Size Over Time - -Compare builds across releases to: - -- Understand long-term size trends -- Identify gradual size creep -- Measure the impact of size optimization initiatives - -## Next Steps - -- [Set up the GitHub integration](/product/size-analysis/github-integration/) to enable automatic PR comparisons -- [View build details](/product/size-analysis/build-details/) to understand what's contributing to size changes diff --git a/docs/product/size-analysis/build-details.mdx b/docs/product/size-analysis/build-details.mdx deleted file mode 100644 index d50bf5d46d6c08..00000000000000 --- a/docs/product/size-analysis/build-details.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Build Details -sidebar_order: 20 -description: Understand your app's size breakdown with treemaps, insights, and detailed component analysis. ---- - -The Build Details page provides a comprehensive view of your app's size, breaking down which components, frameworks, and resources contribute to your app's overall footprint. - -## Viewing Build Details - -Navigate to a specific build in [sentry.io](https://sentry.io) to see its detailed size analysis. You can access build details from: - -- The Size Analysis project page -- Links in GitHub PR comments (when the [GitHub integration](/product/size-analysis/github-integration/) is enabled) -- Build comparison views - -## Treemap - -The treemap provides an interactive, visual representation of your app's size breakdown. Each rectangle represents a component of your app, with the size of the rectangle proportional to that component's contribution to the overall app size. - -### How to Use the Treemap - -- **Larger rectangles** indicate components that take up more space -- **Click on a rectangle** to drill down into that component's sub-components -- **Hover over a rectangle** to see detailed size information -- **Use the breadcrumb navigation** at the top to navigate back up the hierarchy - -The treemap helps you quickly identify the largest contributors to your app size and find optimization opportunities. - -## Insights - -Insights automatically highlight important patterns and potential issues in your build: - -- **Unusually large components**: Identifies frameworks or resources that are significantly larger than typical -- **Duplicate resources**: Finds resources that may be included multiple times -- **Optimization opportunities**: Suggests areas where you might reduce size - -These insights help you prioritize your size optimization work by focusing on the areas with the most potential impact. - -## Breakdown - -The breakdown view provides a detailed, tabular breakdown of your app's components. This view shows: - -- **Component name**: The name of the framework, library, or resource -- **Size**: The component's size (in bytes, KB, or MB) -- **Percentage**: What percentage of the total app size this component represents -- **Change**: How this component's size has changed from previous builds (when available) - -### Sorting and Filtering - -- **Sort by size** to find the largest components -- **Sort by change** to see which components grew or shrank the most -- **Filter by type** to focus on specific categories (frameworks, resources, code, etc.) - -## Size Metrics - -Each build displays several key size metrics: - -- **Total app size**: The complete size of the app bundle or archive -- **Download size**: The estimated size when downloaded from the app store (compressed) -- **Install size**: The estimated size after installation on a device - -Understanding these different metrics helps you optimize for the right target. Download size affects user acquisition, while install size affects device storage. - -## Next Steps - -- [Compare builds](/product/size-analysis/build-comparison/) to see how your changes impact app size -- [Set up GitHub integration](/product/size-analysis/github-integration/) to receive size insights on pull requests From a3fc8ebd61b803a5227a66aec88756c05abb5e1b Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Thu, 16 Oct 2025 19:58:14 -0700 Subject: [PATCH 03/67] throwing stuff down --- .../early-adopter-features/index.mdx | 1 + .../platforms/android/size-analysis/index.mdx | 22 +++ .../apple/guides/ios/size-analysis/index.mdx | 21 +++ .../guides/flutter/size-analysis/index.mdx | 23 +++ .../react-native/size-analysis/index.mdx | 24 +++ .../size-analysis/github-integration.mdx | 9 +- docs/product/size-analysis/index.mdx | 11 +- .../uploading-builds/android.mdx | 162 ------------------ .../size-analysis/uploading-builds/cli.mdx | 142 ++------------- .../uploading-builds/fastlane.mdx | 47 +++++ .../size-analysis/uploading-builds/gradle.mdx | 51 ++++++ .../size-analysis/uploading-builds/index.mdx | 137 ++------------- .../size-analysis/uploading-builds/ios.mdx | 113 ------------ .../size-analysis/build-configuration.mdx | 1 + includes/size-analysis/ci.mdx | 5 + includes/size-analysis/ea.mdx | 5 + includes/size-analysis/github-only.mdx | 3 + includes/size-analysis/prerequisites.mdx | 4 + includes/size-analysis/quickstart-cli.mdx | 17 ++ .../size-analysis/quickstart-fastlane.mdx | 32 ++++ includes/size-analysis/quickstart-gradle.mdx | 42 +++++ includes/size-analysis/quickstart-intro.mdx | 1 + includes/size-analysis/section-android.mdx | 27 +++ includes/size-analysis/section-cli.mdx | 15 ++ includes/size-analysis/section-ios.mdx | 17 ++ includes/size-analysis/supported-formats.mdx | 6 + includes/size-analysis/upload-metadata.mdx | 11 ++ 27 files changed, 411 insertions(+), 538 deletions(-) create mode 100644 docs/platforms/android/size-analysis/index.mdx create mode 100644 docs/platforms/apple/guides/ios/size-analysis/index.mdx create mode 100644 docs/platforms/dart/guides/flutter/size-analysis/index.mdx create mode 100644 docs/platforms/react-native/size-analysis/index.mdx delete mode 100644 docs/product/size-analysis/uploading-builds/android.mdx create mode 100644 docs/product/size-analysis/uploading-builds/fastlane.mdx create mode 100644 docs/product/size-analysis/uploading-builds/gradle.mdx delete mode 100644 docs/product/size-analysis/uploading-builds/ios.mdx create mode 100644 includes/size-analysis/build-configuration.mdx create mode 100644 includes/size-analysis/ci.mdx create mode 100644 includes/size-analysis/ea.mdx create mode 100644 includes/size-analysis/github-only.mdx create mode 100644 includes/size-analysis/prerequisites.mdx create mode 100644 includes/size-analysis/quickstart-cli.mdx create mode 100644 includes/size-analysis/quickstart-fastlane.mdx create mode 100644 includes/size-analysis/quickstart-gradle.mdx create mode 100644 includes/size-analysis/quickstart-intro.mdx create mode 100644 includes/size-analysis/section-android.mdx create mode 100644 includes/size-analysis/section-cli.mdx create mode 100644 includes/size-analysis/section-ios.mdx create mode 100644 includes/size-analysis/supported-formats.mdx create mode 100644 includes/size-analysis/upload-metadata.mdx diff --git a/docs/organization/early-adopter-features/index.mdx b/docs/organization/early-adopter-features/index.mdx index b474408fe4fc6c..651542f8e9545e 100644 --- a/docs/organization/early-adopter-features/index.mdx +++ b/docs/organization/early-adopter-features/index.mdx @@ -23,3 +23,4 @@ Limitations: - [Dynamic Alerts](/product/alerts/create-alerts/metric-alert-config/#dynamic-alerts) - [New Trace Explorer With Span Metrics](/product/explore/new-trace-explorer/) - [OpenTelemetry (OTLP) Logs Endpoint](/concepts/otlp/#opentelemetry-logs) +- [Size Analysis](/product/size-analysis/) diff --git a/docs/platforms/android/size-analysis/index.mdx b/docs/platforms/android/size-analysis/index.mdx new file mode 100644 index 00000000000000..570552f9772083 --- /dev/null +++ b/docs/platforms/android/size-analysis/index.mdx @@ -0,0 +1,22 @@ +--- +title: Size Analysis +sidebar_title: Size Analysis +sidebar_order: 5200 +description: Upload Android builds to Sentry for size analysis. +--- + +Size Analysis uploads your Android builds so you can catch size regressions before they reach production. + + + +## Quick Start + + + + + + + +## More Upload Basics + +See [Uploading Builds](/product/size-analysis/uploading-builds/) for supported formats and required metadata. diff --git a/docs/platforms/apple/guides/ios/size-analysis/index.mdx b/docs/platforms/apple/guides/ios/size-analysis/index.mdx new file mode 100644 index 00000000000000..bc20b35343e6ce --- /dev/null +++ b/docs/platforms/apple/guides/ios/size-analysis/index.mdx @@ -0,0 +1,21 @@ +--- +title: Size Analysis +sidebar_order: 5200 +description: Upload iOS builds to Sentry for size analysis. +--- + +Size Analysis uploads your release builds so you can spot app-size regressions before shipping. + + + +## Quick Start + + + + + + + +## More Upload Basics + +See [Uploading Builds](/product/size-analysis/uploading-builds/) for supported formats and required metadata. diff --git a/docs/platforms/dart/guides/flutter/size-analysis/index.mdx b/docs/platforms/dart/guides/flutter/size-analysis/index.mdx new file mode 100644 index 00000000000000..2fa06f552f73d1 --- /dev/null +++ b/docs/platforms/dart/guides/flutter/size-analysis/index.mdx @@ -0,0 +1,23 @@ +--- +title: Size Analysis +sidebar_order: 5200 +description: Upload Flutter builds to Sentry for size analysis. +--- + +Use Size Analysis to monitor how your Flutter app size changes across iOS and Android builds. + + + +## Quick Start + + + + + + + + + +## More Upload Basics + +See [Uploading Builds](/product/size-analysis/uploading-builds/) for supported formats and required metadata. diff --git a/docs/platforms/react-native/size-analysis/index.mdx b/docs/platforms/react-native/size-analysis/index.mdx new file mode 100644 index 00000000000000..f6a7e9389a158c --- /dev/null +++ b/docs/platforms/react-native/size-analysis/index.mdx @@ -0,0 +1,24 @@ +--- +title: Size Analysis +sidebar_title: Size Analysis +sidebar_order: 5200 +description: Upload React Native iOS and Android builds to Sentry for size analysis. +--- + +Size Analysis helps React Native teams compare app size across iOS and Android builds from the same pull request. + + + +## Quick Start + + + + + + + + + +## More Upload Basics + +See [Uploading Builds](/product/size-analysis/uploading-builds/) for supported formats and required metadata. diff --git a/docs/product/size-analysis/github-integration.mdx b/docs/product/size-analysis/github-integration.mdx index 502e545f61caf7..71e7e0108d0be0 100644 --- a/docs/product/size-analysis/github-integration.mdx +++ b/docs/product/size-analysis/github-integration.mdx @@ -56,8 +56,8 @@ Once the integration is set up and you're uploading builds from your CI: The PR comment includes: -- **Total size change**: How much the app grew or shrank (e.g., "+142 KB" or "-23 KB") -- **Percentage change**: The relative impact (e.g., "+2.3%") +- **Total size change**: How much the app grew or shrank (for example, `+142 KB` or `-23 KB`) +- **Percentage change**: The relative impact (for example, `+2.3%`) - **Component highlights**: The components that changed the most - **Link to details**: A link to view the full comparison in [sentry.io](https://sentry.io) @@ -95,7 +95,7 @@ Check that: - You're uploading builds from both PR branches and the base branch - Your CI is running on pull request events - The `SENTRY_AUTH_TOKEN` is set correctly in your CI environment -- Your builds have the same build configuration (e.g., both are `Release` builds) +- Your builds have the same build configuration (for example, both are `Release` builds) ### Comments Not Updating? @@ -122,5 +122,4 @@ These permissions are requested during the GitHub App installation flow. ## Next Steps -- [Upload your first build](/product/size-analysis/getting-started/) to start seeing size analysis -- [View build comparisons](/product/size-analysis/build-comparison/) to understand size changes in detail +- [Upload your first build](/product/size-analysis/uploading-builds/) to start seeing size analysis diff --git a/docs/product/size-analysis/index.mdx b/docs/product/size-analysis/index.mdx index ede86721bd8a1d..0c270d4ba82c6f 100644 --- a/docs/product/size-analysis/index.mdx +++ b/docs/product/size-analysis/index.mdx @@ -4,10 +4,7 @@ sidebar_order: 136 description: Track and optimize your mobile app's binary size with automated uploads, detailed breakdowns, and build comparisons. --- - - Size Analysis is currently in early access. Features are - still in development and may change. - + Size Analysis helps you monitor and optimize your mobile application's binary size. By tracking your app size across builds and releases, you can catch unexpected size increases, understand what's contributing to your app's footprint, and deliver faster downloads for your users. @@ -26,15 +23,15 @@ Size Analysis gives you visibility into your app's size trends and helps you cat ### Track Size Across Builds -Upload your iOS (`.xcarchive`, `.ipa`) or Android (`.aab`, `.apk`) builds to Sentry as part of your CI pipeline. Size Analysis automatically extracts size metrics and tracks changes over time. [Get started with automated uploads](/product/size-analysis/getting-started/). +Upload your iOS (`.xcarchive`, `.ipa`) or Android (`.aab`, `.apk`) builds to Sentry as part of your CI pipeline. Size Analysis automatically extracts size metrics and tracks changes over time. [Get started with automated uploads](/product/size-analysis/uploading-builds/). ### Compare Builds -When you open a pull request, Size Analysis automatically compares your PR build against the base branch, showing you exactly how your changes impact app size. View detailed comparisons in [sentry.io](https://sentry.io) or receive status checks directly in GitHub. Learn more about [build comparisons](/product/size-analysis/build-comparison/). +When you open a pull request, Size Analysis automatically compares your PR build against the base branch, showing you exactly how your changes impact app size. View the results directly in [sentry.io](https://sentry.io) or receive status checks in GitHub. ### Understand Size Contributors -Use the interactive treemap and breakdown views to see which components, frameworks, and resources contribute most to your app size. The [build details page](/product/size-analysis/build-details/) helps you identify optimization opportunities and track the impact of size reduction efforts. +Use the treemap and breakdown views in Sentry to see which components, frameworks, and resources contribute most to your app size so you can identify optimization opportunities quickly. ### Integrate with Your Workflow diff --git a/docs/product/size-analysis/uploading-builds/android.mdx b/docs/product/size-analysis/uploading-builds/android.mdx deleted file mode 100644 index 965393f00e3712..00000000000000 --- a/docs/product/size-analysis/uploading-builds/android.mdx +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: Android Setup -sidebar_order: 20 -description: Configure Size Analysis for Android apps using the Sentry Gradle plugin and GitHub Actions. ---- - -This guide walks you through setting up Size Analysis for Android applications using the Sentry Android Gradle plugin. This assumes you already have a working integration with the Sentry Android Gradle plugin and are using GitHub Actions. - - - If you don't already have Sentry set up with Gradle, see the [Android SDK - setup guide](https://docs.sentry.io/platforms/android/) first. - - -## Apply the Gradle Plugin - -Use version `6.0.0-alpha.4` or higher of the Sentry Android Gradle plugin. - -### For Kotlin DSL (build.gradle.kts) - -In your app-level `build.gradle.kts`: - -```kotlin -plugins { - id("io.sentry.android.gradle") version "6.0.0-alpha.4" -} - -sentry { - sizeAnalysis { - enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent - } -} -``` - -### For Groovy (build.gradle) - -In your app-level `build.gradle`: - -```groovy -plugins { - id "io.sentry.android.gradle" version "6.0.0-alpha.4" -} - -sentry { - sizeAnalysis { - enabled = providers.environmentVariable("GITHUB_ACTIONS").present - } -} -``` - -## Configuration - -The `sizeAnalysis` block configures when Size Analysis uploads are triggered. The example above enables uploads only when running in GitHub Actions, preventing uploads from local development builds. - -### Configuration Options - -```kotlin -sentry { - sizeAnalysis { - // Enable or disable size analysis uploads - enabled = true - - // Override auto-detected organization slug - org = "your-org" - - // Override auto-detected project slug - project = "your-project" - - // Override auto-detected build configuration - buildConfiguration = "customRelease" - } -} -``` - -Most of the time, you only need to set `enabled`. The plugin automatically detects your organization, project, and build configuration from your environment. - -## Set Up GitHub Actions - -In your GitHub Actions workflow, set the `SENTRY_AUTH_TOKEN` environment variable: - -```yaml -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Set up JDK - uses: actions/setup-java@v4 - with: - java-version: "17" - distribution: "temurin" - - - name: Build release bundle - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - run: ./gradlew bundleRelease -``` - -Add your Sentry auth token as a [GitHub secret](https://docs.github.com/en/actions/security-guides/encrypted-secrets) named `SENTRY_AUTH_TOKEN`. - -## Build Configuration - -The plugin automatically sets the build configuration to your build variant (a combination of build type and build flavor). For example: - -- `freeDebug` -- `paidRelease` -- `demoRelease` - -This ensures builds with different configurations are not compared against each other in Size Analysis. - -## Supported Build Tasks - -Size Analysis uploads are automatically triggered when you run: - -- `bundle` - Creates an Android App Bundle (`.aab`, preferred) -- `assemble` - Creates an APK (`.apk`) - -For example: - -```bash -./gradlew bundleRelease # Uploads Release AAB -./gradlew assembleFreeDebug # Uploads freeDebug APK -``` - -## Example Workflow - -Here's a complete example of a GitHub Actions workflow that builds an Android app and uploads it to Sentry: - -```yaml -name: Android Build and Size Analysis - -on: - pull_request: - push: - branches: [main] - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Set up JDK - uses: actions/setup-java@v4 - with: - java-version: "17" - distribution: "temurin" - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Build release bundle - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - run: ./gradlew bundleRelease -``` - -## Next Steps - -- [Set up the GitHub integration](/product/size-analysis/github-integration/) to receive size change notifications in your pull requests -- [View build details](/product/size-analysis/build-details/) to explore your app's size breakdown diff --git a/docs/product/size-analysis/uploading-builds/cli.mdx b/docs/product/size-analysis/uploading-builds/cli.mdx index a2bede6336559c..ebcc9e7f6d88d5 100644 --- a/docs/product/size-analysis/uploading-builds/cli.mdx +++ b/docs/product/size-analysis/uploading-builds/cli.mdx @@ -1,155 +1,37 @@ --- -title: CLI Upload +title: CLI Uploads sidebar_order: 30 -description: Upload builds to Size Analysis using the Sentry CLI for any platform or build system. +description: Upload builds to Size Analysis with the Sentry CLI. --- -The Sentry CLI provides a platform-agnostic way to upload builds to Size Analysis. This is useful if you're not using Fastlane (iOS) or Gradle (Android), or if you want more control over the upload process. +The Sentry CLI can be used to upload any [accepted mobile build type](/product/size-analysis/uploading-builds/#supported-build-formats). -## Install Sentry CLI +Set your auth token and use the Sentry CLI to upload iOS or Android builds. -If you don't already have the Sentry CLI installed, see the [Sentry CLI installation guide](https://docs.sentry.io/cli/installation/). - -## Upload Command - -Use the `sentry-cli build upload` command to upload your build artifact: - -```bash -sentry-cli build upload \ - --org \ - --project \ - --build-configuration -``` - -### iOS Example - -```bash -sentry-cli build upload app.xcarchive.zip \ - --org your-org \ - --project your-ios-project \ - --build-configuration Release -``` - -### Android Example - -```bash -sentry-cli build upload app.aab \ - --org your-org \ - --project your-android-project \ - --build-configuration freeRelease -``` - -## Upload Metadata - -The CLI accepts several parameters to provide metadata about the build. Some are auto-detected when running in GitHub Actions. - -| Parameter | Description | Auto-detected in GitHub Actions | -| ----------------------- | ---------------------------------------------- | ------------------------------- | -| `--org` | Sentry organization slug | ❌ Required | -| `--project` | Sentry project slug | ❌ Required | -| `--build-configuration` | Build configuration (e.g., `Release`, `Debug`) | ❌ Required | -| `--head-sha` | Current commit SHA | ✅ Yes | -| `--base-sha` | Base commit SHA (for comparison) | ✅ Yes (PR only) | -| `--head-repo-name` | Repository name (org/repo format) | ✅ Yes | -| `--pr-number` | Pull request number | ✅ Yes (PR only) | -| `--head-ref` | Branch or tag name | ✅ Yes | -| `--base-ref` | Base branch name | ✅ Yes (PR only) | -| `--vcs-provider` | VCS provider (currently only `github`) | ✅ Yes | - -### Build Configuration - -The `--build-configuration` parameter is used to ensure builds with different configurations are not compared. This should match your platform's build configuration: - -**iOS**: Your Xcode build configuration - -- `Debug`, `Release`, `Staging`, etc. - -**Android**: Your build variant (combination of build type and flavor) - -- `freeDebug`, `paidRelease`, etc. - -## Authentication - -The CLI needs a Sentry auth token to upload builds. You can provide it in two ways: - -### Environment Variable (Recommended) +## Set your auth token ```bash export SENTRY_AUTH_TOKEN=your-token-here -sentry-cli build upload app.aab --org your-org --project your-project --build-configuration Release ``` -### Command-line Parameter +## Upload iOS builds ```bash -sentry-cli build upload app.aab \ +sentry-cli build upload app.xcarchive.zip \ --org your-org \ --project your-project \ - --build-configuration Release \ - --auth-token your-token-here -``` - -Generate an auth token in your [Sentry account settings](https://sentry.sentry.io/settings/auth-tokens/). - -## GitHub Actions Integration - -When running in GitHub Actions, most metadata is auto-detected. You only need to provide the organization, project, and build configuration: - -```yaml -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Build app - run: ./build-script.sh - - - name: Upload to Sentry - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - run: | - sentry-cli build upload build/outputs/bundle/release/app-release.aab \ - --org your-org \ - --project your-project \ - --build-configuration Release + --build-configuration Release ``` -### Manual Metadata Override - -If you need to override auto-detected values or are using a custom CI system, you can provide all metadata manually: +## Upload Android builds ```bash sentry-cli build upload app.aab \ --org your-org \ --project your-project \ - --build-configuration Release \ - --head-sha abc123 \ - --base-sha def456 \ - --head-repo-name your-org/your-repo \ - --pr-number 42 \ - --head-ref feature-branch \ - --base-ref main \ - --vcs-provider github + --build-configuration freeRelease # Adjust to your build flavor ``` -## Supported Build Formats - -The CLI accepts the following build artifact formats: - -| Platform | Format | Extension | -| -------- | ------------------------------ | --------------------- | -| Android | Android App Bundle (preferred) | `.aab` | -| Android | APK | `.apk` | -| iOS | XCArchive (preferred) | `.xcarchive` (zipped) | -| iOS | IPA | `.ipa` | - - - For iOS XCArchive files, you must zip the `.xcarchive` directory before - uploading. - - -## Next Steps +## GitHub Actions -- [Set up the GitHub integration](/product/size-analysis/github-integration/) to receive size change notifications in your pull requests -- [View build details](/product/size-analysis/build-details/) to explore your app's size breakdown +When you run the CLI in GitHub Actions, metadata like `--repo-name`, `--vcs-provider`, `--pr-number`, `--head-sha`, `--base-sha`, `--head-ref`, and `--base-ref` is filled in automatically. Provide the same flags manually if you upload from another environment. diff --git a/docs/product/size-analysis/uploading-builds/fastlane.mdx b/docs/product/size-analysis/uploading-builds/fastlane.mdx new file mode 100644 index 00000000000000..cb0f9c9a72299b --- /dev/null +++ b/docs/product/size-analysis/uploading-builds/fastlane.mdx @@ -0,0 +1,47 @@ +--- +title: Fastlane Uploads +sidebar_order: 10 +description: Configure Size Analysis uploads for iOS projects using Fastlane. +--- + +This assumes you already have the Sentry Fastlane plugin in your project. See the [Fastlane integration guide](https://docs.sentry.io/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) for the full setup. + +## Install the plugin + +```ruby +bundle exec fastlane add_plugin fastlane-plugin-sentry +``` + +Ensure the plugin version is `1.34.0` or higher. + +## Add a lane + +```ruby +lane :upload_to_sentry do + sentry_upload_build( + org_slug: 'your-org', + project_slug: 'your-project', + build_configuration: 'Release' # Adjust to your configuration + ) +end +``` + +If you already have a lane, add the `sentry_upload_build` action to it. + +## Set your auth token in GitHub Actions + +```yaml +env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} +``` + +## Run the lane + +```bash +bundle exec fastlane upload_to_sentry +``` + +## Next steps + +- View the [Sentry Fastlane plugin documentation](https://github.com/getsentry/sentry-fastlane-plugin) for advanced options +- Return to the [Size Analysis upload overview](/product/size-analysis/uploading-builds/) diff --git a/docs/product/size-analysis/uploading-builds/gradle.mdx b/docs/product/size-analysis/uploading-builds/gradle.mdx new file mode 100644 index 00000000000000..bb630b65f57514 --- /dev/null +++ b/docs/product/size-analysis/uploading-builds/gradle.mdx @@ -0,0 +1,51 @@ +--- +title: Gradle Uploads +sidebar_order: 20 +description: Configure Size Analysis uploads for Android projects using the Sentry Gradle plugin. +--- + +This assumes you already use the Sentry Android Gradle plugin. For full installation instructions, see the [Android Gradle configuration guide](https://docs.sentry.io/platforms/android/configuration/gradle/). + +## Apply the plugin + +```kotlin +plugins { + id("io.sentry.android.gradle") version "6.0.0-alpha.4" +} + +sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent + } +} +``` + +```groovy +plugins { + id "io.sentry.android.gradle" version "6.0.0-alpha.4" +} + +sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").present + } +} +``` + +## Set your auth token in GitHub Actions + +```yaml +env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} +``` + +## Build your app + +```bash +./gradlew bundleRelease +``` + +## Next steps + +- Review the [Sentry Gradle plugin documentation](https://docs.sentry.io/platforms/android/configuration/gradle/) for additional configuration +- Return to the [Size Analysis upload overview](/product/size-analysis/uploading-builds/) diff --git a/docs/product/size-analysis/uploading-builds/index.mdx b/docs/product/size-analysis/uploading-builds/index.mdx index 2ac27e9327dd0b..1f98b6cf522201 100644 --- a/docs/product/size-analysis/uploading-builds/index.mdx +++ b/docs/product/size-analysis/uploading-builds/index.mdx @@ -1,140 +1,35 @@ --- title: Uploading Builds sidebar_order: 1 -description: Upload your first build to Size Analysis in under 5 minutes. +description: Learn which formats and metadata Size Analysis needs when you upload builds. --- -Get your first build uploaded to Size Analysis in under 5 minutes - -GitHub is currently the only supported VCS provider. +Every build uploaded to Size Analysis needs a supported archive format and enough metadata for Sentry to compare releases safely. ## Prerequisites -Before uploading builds, you'll need: - -1. **A Sentry account** with access to any [core plan](https://sentry.io/pricing/) -2. **A Sentry auth token** - [Docs](/account/auth-tokens/) | [Generate token](https://sentry.sentry.io/settings/auth-tokens/) - - Set `SENTRY_AUTH_TOKEN` as an environment variable to have it automatically picked up by the upload tools - -## Quickstart - -Choose your platform to get started: - -### iOS (Fastlane + GitHub Actions) - -**1. Install the Fastlane plugin** (version 1.34.0 or higher): - -```ruby -bundle exec fastlane add_plugin fastlane-plugin-sentry -``` - -**2. Add to your Fastfile:** - -```ruby -lane :upload_to_sentry do - sentry_upload_build( - org_slug: 'your-org', - project_slug: 'your-project', - build_configuration: 'Release' # Adjust to your configuration - ) -end -``` - -**3. Set your auth token in GitHub Actions:** - -```yaml -env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} -``` - -**4. Run the lane:** - -```bash -bundle exec fastlane upload_to_sentry -``` - -[Read the full iOS setup guide →](/product/size-analysis/getting-started/ios/) + -### Android (Gradle + GitHub Actions) - -**1. Add the plugin** (version 6.0.0-alpha.4 or higher) in your `build.gradle.kts`: - -```kotlin -plugins { - id("io.sentry.android.gradle") version "6.0.0-alpha.4" -} - -sentry { - sizeAnalysis { - enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent - } -} -``` - -Or for `build.gradle`: - -```groovy -plugins { - id "io.sentry.android.gradle" version "6.0.0-alpha.4" -} - -sentry { - sizeAnalysis { - enabled = providers.environmentVariable("GITHUB_ACTIONS").present - } -} -``` - -**2. Set your auth token in GitHub Actions:** - -```yaml -env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} -``` - -**3. Build your app:** - -```bash -./gradlew bundleRelease -``` - -[Read the full Android setup guide →](/product/size-analysis/getting-started/android/) - -### Using the CLI (Any Platform) +## Supported Build Formats -The Sentry CLI provides a platform-agnostic way to upload builds: + -```bash -export SENTRY_AUTH_TOKEN=your-token-here +## Upload Tools -# iOS -sentry-cli build upload app.xcarchive.zip \ - --org your-org \ - --project your-project \ - --build-configuration Release +Use any of the following guides to configure uploads for your project: -# Android -sentry-cli build upload app.aab \ - --org your-org \ - --project your-project \ - --build-configuration freeRelease # Adjust to your build flavor -``` +- [Fastlane Setup](/product/size-analysis/uploading-builds/fastlane/) +- [Gradle Setup](/product/size-analysis/uploading-builds/gradle/) +- [CLI Setup](/product/size-analysis/uploading-builds/cli/) -[Read the full CLI guide →](/product/size-analysis/getting-started/cli/) +For cross-platform frameworks like React Native or Flutter, you can choose any of the above which work best for your pipeline. -## Supported Build Formats +## Upload Metadata -| Platform | Format | Extension | Notes | -| -------- | ------------------ | ------------ | --------- | -| Android | Android App Bundle | `.aab` | Preferred | -| Android | APK | `.apk` | Supported | -| iOS | XCArchive | `.xcarchive` | Preferred | -| iOS | IPA | `.ipa` | Supported | +The table shows the minimum fields your upload needs and whether GitHub Actions fills them in automatically. Provide the same values when using a different CI system. -## Next Steps + -After uploading your first build: +### Build Configuration -1. [Set up the GitHub integration](/product/size-analysis/github-integration/) to receive PR comments and status checks -2. [View build details](/product/size-analysis/build-details/) to explore size breakdowns and insights -3. [Compare builds](/product/size-analysis/build-comparison/) to understand how changes impact your app size + diff --git a/docs/product/size-analysis/uploading-builds/ios.mdx b/docs/product/size-analysis/uploading-builds/ios.mdx deleted file mode 100644 index 04f721dda235d2..00000000000000 --- a/docs/product/size-analysis/uploading-builds/ios.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: iOS Setup -sidebar_order: 10 -description: Configure Size Analysis for iOS apps using Fastlane and GitHub Actions. ---- - -This guide walks you through setting up Size Analysis for iOS applications using the Sentry Fastlane plugin. This assumes you already have a working integration with the Sentry Fastlane plugin and are using GitHub Actions. - - - If you don't already have Sentry set up with Fastlane, see the [Fastlane - integration - guide](https://docs.sentry.io/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) - first. - - -## Install the Fastlane Plugin - -Ensure you have version 1.34.0 or higher of the `fastlane-plugin-sentry`. Install or update it using: - -```ruby -bundle exec fastlane add_plugin fastlane-plugin-sentry -``` - -## Update Your Fastfile - -Add a lane (or update an existing one) with the `sentry_upload_build` action: - -```ruby -lane :upload_to_sentry do - sentry_upload_build( - org_slug: 'your-org', - project_slug: 'your-project', - build_configuration: 'Release' # Adjust to your Xcode configuration - ) -end -``` - -### Configuration Options - -| Parameter | Description | Required | -| --------------------- | --------------------------------------------------------------- | -------- | -| `org_slug` | Your Sentry organization slug | Yes | -| `project_slug` | Your Sentry project slug | Yes | -| `build_configuration` | Xcode build configuration (e.g., `Debug`, `Release`, `Staging`) | Yes | -| `auth_token` | Sentry auth token (defaults to `SENTRY_AUTH_TOKEN` env var) | No | - -## Set Up GitHub Actions - -In your GitHub Actions workflow, ensure the `SENTRY_AUTH_TOKEN` environment variable is set: - -```yaml -jobs: - build: - runs-on: macos-latest - steps: - - uses: actions/checkout@v4 - - - name: Build and upload to Sentry - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - run: bundle exec fastlane upload_to_sentry -``` - -Add your Sentry auth token as a [GitHub secret](https://docs.github.com/en/actions/security-guides/encrypted-secrets) named `SENTRY_AUTH_TOKEN`. - -## Build Configuration - -The `build_configuration` parameter should match your Xcode build configuration. This ensures builds with different configurations (e.g., Debug vs. Release) are not compared against each other. - -Common build configurations: - -- `Debug` -- `Release` -- `Staging` -- Custom configurations defined in your Xcode project - -## Example Workflow - -Here's a complete example of a GitHub Actions workflow that builds an iOS app and uploads it to Sentry: - -```yaml -name: iOS Build and Size Analysis - -on: - pull_request: - push: - branches: [main] - -jobs: - build: - runs-on: macos-latest - - steps: - - uses: actions/checkout@v4 - - - name: Set up Ruby - uses: ruby/setup-ruby@v1 - with: - bundler-cache: true - - - name: Build app - run: bundle exec fastlane build - - - name: Upload to Sentry - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - run: bundle exec fastlane upload_to_sentry -``` - -## Next Steps - -- [Set up the GitHub integration](/product/size-analysis/github-integration/) to receive size change notifications in your pull requests -- [View build details](/product/size-analysis/build-details/) to explore your app's size breakdown diff --git a/includes/size-analysis/build-configuration.mdx b/includes/size-analysis/build-configuration.mdx new file mode 100644 index 00000000000000..bd2dbf03fcd286 --- /dev/null +++ b/includes/size-analysis/build-configuration.mdx @@ -0,0 +1 @@ +Build configuration metadata keeps comparisons scoped to like-for-like builds. The Android Gradle plugin sends the build variant (for example, `freeDebug` or `paidRelease`). On iOS, set this to your Xcode build configuration, such as `Debug`, `Staging`, or `Release`. diff --git a/includes/size-analysis/ci.mdx b/includes/size-analysis/ci.mdx new file mode 100644 index 00000000000000..10dbd5d7d3f754 --- /dev/null +++ b/includes/size-analysis/ci.mdx @@ -0,0 +1,5 @@ + + GitHub is the only VCS provider that exposes the metadata Size Analysis needs today. Install the GitHub App to receive status checks and PR annotations. + + +[Install the GitHub App →](https://docs.sentry.io/organization/integrations/source-code-mgmt/github/) diff --git a/includes/size-analysis/ea.mdx b/includes/size-analysis/ea.mdx new file mode 100644 index 00000000000000..edb2ff4483c3cf --- /dev/null +++ b/includes/size-analysis/ea.mdx @@ -0,0 +1,5 @@ + + +Size Analysis is currently in Early Access. To access, turn on Early Adopter in your settings. + + diff --git a/includes/size-analysis/github-only.mdx b/includes/size-analysis/github-only.mdx new file mode 100644 index 00000000000000..4a4b54a8fb4d0c --- /dev/null +++ b/includes/size-analysis/github-only.mdx @@ -0,0 +1,3 @@ + + GitHub is currently the only supported VCS provider for Size Analysis uploads. + diff --git a/includes/size-analysis/prerequisites.mdx b/includes/size-analysis/prerequisites.mdx new file mode 100644 index 00000000000000..d97cf33a532a78 --- /dev/null +++ b/includes/size-analysis/prerequisites.mdx @@ -0,0 +1,4 @@ +To upload builds you'll need: + +1. A Sentry account with access to any [core plan](https://sentry.io/pricing/) +2. A Sentry auth token – [generate one here](https://sentry.sentry.io/settings/auth-tokens/) and set `SENTRY_AUTH_TOKEN` in your environment so the tools can pick it up automatically diff --git a/includes/size-analysis/quickstart-cli.mdx b/includes/size-analysis/quickstart-cli.mdx new file mode 100644 index 00000000000000..cc9575acff17e6 --- /dev/null +++ b/includes/size-analysis/quickstart-cli.mdx @@ -0,0 +1,17 @@ +### Sentry CLI (Any platform) + +```bash +export SENTRY_AUTH_TOKEN=your-token-here + +# iOS +sentry-cli build upload app.xcarchive.zip \ + --org your-org \ + --project your-project \ + --build-configuration Release + +# Android +sentry-cli build upload app.aab \ + --org your-org \ + --project your-project \ + --build-configuration freeRelease +``` diff --git a/includes/size-analysis/quickstart-fastlane.mdx b/includes/size-analysis/quickstart-fastlane.mdx new file mode 100644 index 00000000000000..3cb4527a4b1686 --- /dev/null +++ b/includes/size-analysis/quickstart-fastlane.mdx @@ -0,0 +1,32 @@ +### iOS (Fastlane + GitHub Actions) + +1. Install the plugin (version `1.34.0` or higher): + + ```ruby + bundle exec fastlane add_plugin fastlane-plugin-sentry + ``` + +2. Add to your `Fastfile`: + + ```ruby {filename:Fastfile} + lane :upload_to_sentry do + sentry_upload_build( + org_slug: 'your-org', + project_slug: 'your-project', + build_configuration: 'Release' # Adjust to your configuration + ) + end + ``` + +3. Set your auth token in GitHub Actions: + + ```yaml {filename:.github/workflows/build.yml} + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + ``` + +4. Run the lane: + + ```bash + bundle exec fastlane upload_to_sentry + ``` diff --git a/includes/size-analysis/quickstart-gradle.mdx b/includes/size-analysis/quickstart-gradle.mdx new file mode 100644 index 00000000000000..6c9b3e1f095b83 --- /dev/null +++ b/includes/size-analysis/quickstart-gradle.mdx @@ -0,0 +1,42 @@ +### Android (Gradle + GitHub Actions) + +1. Add the plugin (version `6.0.0-alpha.4` or higher) in your `build.gradle.kts`: + + ```kotlin {filename:build.gradle.kts} + plugins { + id("io.sentry.android.gradle") version "6.0.0-alpha.4" + } + + sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent + } + } + ``` + + Or for `build.gradle`: + + ```groovy {filename:build.gradle} + plugins { + id "io.sentry.android.gradle" version "6.0.0-alpha.4" + } + + sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").present + } + } + ``` + +2. Set your auth token in GitHub Actions: + + ```yaml {filename:.github/workflows/build.yml} + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + ``` + +3. Build your app: + + ```bash + ./gradlew bundleRelease + ``` diff --git a/includes/size-analysis/quickstart-intro.mdx b/includes/size-analysis/quickstart-intro.mdx new file mode 100644 index 00000000000000..b5cfbaeb8e87cf --- /dev/null +++ b/includes/size-analysis/quickstart-intro.mdx @@ -0,0 +1 @@ +Get your first build uploaded in under five minutes. diff --git a/includes/size-analysis/section-android.mdx b/includes/size-analysis/section-android.mdx new file mode 100644 index 00000000000000..6f2e4ece717327 --- /dev/null +++ b/includes/size-analysis/section-android.mdx @@ -0,0 +1,27 @@ +This guide assumes you already use the Sentry Android Gradle plugin in GitHub Actions. {/* TODO: Link to setup guide */} + +1. Apply or update the plugin (version `6.0.0-alpha.4` or higher): + + ```kotlin {filename:build.gradle.kts} + plugins { + id("io.sentry.android.gradle") version "6.0.0-alpha.4" + } + + sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent + } + } + ``` + + ```groovy {filename:build.gradle} + plugins { + id "io.sentry.android.gradle" version "6.0.0-alpha.4" + } + + sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").present + } + } + ``` diff --git a/includes/size-analysis/section-cli.mdx b/includes/size-analysis/section-cli.mdx new file mode 100644 index 00000000000000..c74f2e1b58cc8f --- /dev/null +++ b/includes/size-analysis/section-cli.mdx @@ -0,0 +1,15 @@ +Set the GitHub-provided metadata automatically where possible. When running locally, supply the fields explicitly. + +```bash +sentry-cli build upload \ + --org \ + --project \ + --head-sha \ + --base-sha \ + --head-ref \ + --base-ref \ + --head-repo-name \ + --pr-number \ + --vcs-provider github \ + --build-configuration +``` diff --git a/includes/size-analysis/section-ios.mdx b/includes/size-analysis/section-ios.mdx new file mode 100644 index 00000000000000..6feb062de7a3f0 --- /dev/null +++ b/includes/size-analysis/section-ios.mdx @@ -0,0 +1,17 @@ +This guide assumes you already use the Sentry Fastlane plugin in GitHub Actions. {/* TODO: Link to setup guide */} + +1. Install the Fastlane plugin (`1.34.0` or higher): + + ```ruby + bundle exec fastlane add_plugin fastlane-plugin-sentry + ``` + +2. Add a lane to your `Fastfile`: + + ```ruby {filename:Fastfile} + sentry_upload_build( + org_slug: 'your-org', + project_slug: 'your-project', + build_configuration: 'Release' # Adjust to your build configuration + ) + ``` diff --git a/includes/size-analysis/supported-formats.mdx b/includes/size-analysis/supported-formats.mdx new file mode 100644 index 00000000000000..daab9bfc6c024a --- /dev/null +++ b/includes/size-analysis/supported-formats.mdx @@ -0,0 +1,6 @@ +| Platform | Name | Extension | +| --- | --- | --- | +| Android | Android App Bundle (preferred) | `.aab` | +| Android | APK | `.apk` | +| iOS | XCArchive (preferred) | `.xcarchive` | +| iOS | IPA | `.ipa` | diff --git a/includes/size-analysis/upload-metadata.mdx b/includes/size-analysis/upload-metadata.mdx new file mode 100644 index 00000000000000..84d465ee96998d --- /dev/null +++ b/includes/size-analysis/upload-metadata.mdx @@ -0,0 +1,11 @@ +| Field | Description | Auto-detected in GitHub Actions | +| --- | --- | --- | +| `org` | Sentry organization slug | ❌ Required | +| `project` | Sentry project slug | ❌ Required | +| `build-configuration` | Build configuration (for example, `Release`, `Debug`). Used to ensure builds with different configurations are not compared. | ❌ Required | +| `head-sha` | Current commit SHA | ✅ Yes | +| `base-sha` | Base commit SHA (for comparison) | ✅ Yes (PR only) | +| `head-repo-name` | Repository name (`org/repo`) | ✅ Yes | +| `pr-number` | Pull request number | ✅ Yes (PR only) | +| `head-ref` | Branch or tag name | ✅ Yes | +| `base-ref` | Base branch name | ✅ Yes (PR only) | From 6c472be0ae5a15d3e6e095498e53aea998ef3578 Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Mon, 20 Oct 2025 16:12:23 -0400 Subject: [PATCH 04/67] comments --- .../size-analysis/uploading-builds/cli.mdx | 14 ++++------ .../uploading-builds/fastlane.mdx | 24 ++++++---------- .../size-analysis/uploading-builds/gradle.mdx | 28 +++++++------------ includes/size-analysis/quickstart-cli.mdx | 6 ++-- .../size-analysis/quickstart-fastlane.mdx | 13 ++++----- includes/size-analysis/quickstart-gradle.mdx | 21 +++++--------- includes/size-analysis/section-android.mdx | 6 ++-- includes/size-analysis/section-cli.mdx | 6 ++-- 8 files changed, 46 insertions(+), 72 deletions(-) diff --git a/docs/product/size-analysis/uploading-builds/cli.mdx b/docs/product/size-analysis/uploading-builds/cli.mdx index ebcc9e7f6d88d5..7e8f87c227da18 100644 --- a/docs/product/size-analysis/uploading-builds/cli.mdx +++ b/docs/product/size-analysis/uploading-builds/cli.mdx @@ -6,13 +6,11 @@ description: Upload builds to Size Analysis with the Sentry CLI. The Sentry CLI can be used to upload any [accepted mobile build type](/product/size-analysis/uploading-builds/#supported-build-formats). -Set your auth token and use the Sentry CLI to upload iOS or Android builds. - -## Set your auth token - -```bash -export SENTRY_AUTH_TOKEN=your-token-here -``` + + This guide assumes `sentry-cli` is already installed and authenticated. See + the [installation guide](/cli/installation/) and [configuration + steps](/cli/configuration/) for initial setup. + ## Upload iOS builds @@ -32,6 +30,6 @@ sentry-cli build upload app.aab \ --build-configuration freeRelease # Adjust to your build flavor ``` -## GitHub Actions +## Required metadata When you run the CLI in GitHub Actions, metadata like `--repo-name`, `--vcs-provider`, `--pr-number`, `--head-sha`, `--base-sha`, `--head-ref`, and `--base-ref` is filled in automatically. Provide the same flags manually if you upload from another environment. diff --git a/docs/product/size-analysis/uploading-builds/fastlane.mdx b/docs/product/size-analysis/uploading-builds/fastlane.mdx index cb0f9c9a72299b..1fc90f6648d08f 100644 --- a/docs/product/size-analysis/uploading-builds/fastlane.mdx +++ b/docs/product/size-analysis/uploading-builds/fastlane.mdx @@ -4,17 +4,16 @@ sidebar_order: 10 description: Configure Size Analysis uploads for iOS projects using Fastlane. --- -This assumes you already have the Sentry Fastlane plugin in your project. See the [Fastlane integration guide](https://docs.sentry.io/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) for the full setup. +The Sentry Fastlane plugin can be used to upload any [accepted iOS mobile build type](/product/size-analysis/uploading-builds/#supported-build-formats). -## Install the plugin + + This guide assumes you already have the Sentry Fastlane plugin in your project + (version `1.34.0` or higher). See the [Fastlane integration + guide](https://docs.sentry.io/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) + for initial setup. + -```ruby -bundle exec fastlane add_plugin fastlane-plugin-sentry -``` - -Ensure the plugin version is `1.34.0` or higher. - -## Add a lane +## Configure a lane ```ruby lane :upload_to_sentry do @@ -28,13 +27,6 @@ end If you already have a lane, add the `sentry_upload_build` action to it. -## Set your auth token in GitHub Actions - -```yaml -env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} -``` - ## Run the lane ```bash diff --git a/docs/product/size-analysis/uploading-builds/gradle.mdx b/docs/product/size-analysis/uploading-builds/gradle.mdx index bb630b65f57514..409ef1101d03ee 100644 --- a/docs/product/size-analysis/uploading-builds/gradle.mdx +++ b/docs/product/size-analysis/uploading-builds/gradle.mdx @@ -4,15 +4,18 @@ sidebar_order: 20 description: Configure Size Analysis uploads for Android projects using the Sentry Gradle plugin. --- -This assumes you already use the Sentry Android Gradle plugin. For full installation instructions, see the [Android Gradle configuration guide](https://docs.sentry.io/platforms/android/configuration/gradle/). +The Sentry Gradle plugin can be used to upload any [accepted Android mobile build type](/product/size-analysis/uploading-builds/#supported-build-formats). -## Apply the plugin + + This guide assumes you already use the Sentry Android Gradle plugin (version + `6.0.0-alpha.5` or higher). See the [Android Gradle configuration + guide](https://docs.sentry.io/platforms/android/configuration/gradle/) for + initial setup + -```kotlin -plugins { - id("io.sentry.android.gradle") version "6.0.0-alpha.4" -} +## Configure the plugin +```kotlin sentry { sizeAnalysis { enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent @@ -21,10 +24,6 @@ sentry { ``` ```groovy -plugins { - id "io.sentry.android.gradle" version "6.0.0-alpha.4" -} - sentry { sizeAnalysis { enabled = providers.environmentVariable("GITHUB_ACTIONS").present @@ -32,14 +31,7 @@ sentry { } ``` -## Set your auth token in GitHub Actions - -```yaml -env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} -``` - -## Build your app +## Building your app will trigger an upload ```bash ./gradlew bundleRelease diff --git a/includes/size-analysis/quickstart-cli.mdx b/includes/size-analysis/quickstart-cli.mdx index cc9575acff17e6..d6aee9351c6222 100644 --- a/includes/size-analysis/quickstart-cli.mdx +++ b/includes/size-analysis/quickstart-cli.mdx @@ -1,8 +1,10 @@ ### Sentry CLI (Any platform) -```bash -export SENTRY_AUTH_TOKEN=your-token-here + + This quick start assumes `sentry-cli` is installed and authenticated. See the [CLI docs](/cli/) for installation and login options. + +```bash # iOS sentry-cli build upload app.xcarchive.zip \ --org your-org \ diff --git a/includes/size-analysis/quickstart-fastlane.mdx b/includes/size-analysis/quickstart-fastlane.mdx index 3cb4527a4b1686..9b6551e0195453 100644 --- a/includes/size-analysis/quickstart-fastlane.mdx +++ b/includes/size-analysis/quickstart-fastlane.mdx @@ -1,5 +1,9 @@ ### iOS (Fastlane + GitHub Actions) + + This quick start assumes you're already running Fastlane in GitHub Actions and have authentication configured (for example, with the `SENTRY_AUTH_TOKEN` secret). If you haven't added the [Sentry Fastlane plugin](/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) yet, follow the integration guide first. + + 1. Install the plugin (version `1.34.0` or higher): ```ruby @@ -18,14 +22,7 @@ end ``` -3. Set your auth token in GitHub Actions: - - ```yaml {filename:.github/workflows/build.yml} - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - ``` - -4. Run the lane: +3. Run the lane: ```bash bundle exec fastlane upload_to_sentry diff --git a/includes/size-analysis/quickstart-gradle.mdx b/includes/size-analysis/quickstart-gradle.mdx index 6c9b3e1f095b83..c33dc446b502e8 100644 --- a/includes/size-analysis/quickstart-gradle.mdx +++ b/includes/size-analysis/quickstart-gradle.mdx @@ -1,10 +1,14 @@ ### Android (Gradle + GitHub Actions) -1. Add the plugin (version `6.0.0-alpha.4` or higher) in your `build.gradle.kts`: + + This quick start assumes you're already using the [Sentry Android Gradle plugin](/platforms/android/configuration/gradle/) and have authentication set up in GitHub Actions (for example, with the `SENTRY_AUTH_TOKEN` secret). + + +1. Bump the plugin to version `6.0.0-alpha.5` or higher in your `build.gradle.kts`: ```kotlin {filename:build.gradle.kts} plugins { - id("io.sentry.android.gradle") version "6.0.0-alpha.4" + id("io.sentry.android.gradle") version "6.0.0-alpha.5" } sentry { @@ -17,10 +21,6 @@ Or for `build.gradle`: ```groovy {filename:build.gradle} - plugins { - id "io.sentry.android.gradle" version "6.0.0-alpha.4" - } - sentry { sizeAnalysis { enabled = providers.environmentVariable("GITHUB_ACTIONS").present @@ -28,14 +28,7 @@ } ``` -2. Set your auth token in GitHub Actions: - - ```yaml {filename:.github/workflows/build.yml} - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - ``` - -3. Build your app: +2. Build your app: ```bash ./gradlew bundleRelease diff --git a/includes/size-analysis/section-android.mdx b/includes/size-analysis/section-android.mdx index 6f2e4ece717327..3ab85700609b7c 100644 --- a/includes/size-analysis/section-android.mdx +++ b/includes/size-analysis/section-android.mdx @@ -1,10 +1,10 @@ This guide assumes you already use the Sentry Android Gradle plugin in GitHub Actions. {/* TODO: Link to setup guide */} -1. Apply or update the plugin (version `6.0.0-alpha.4` or higher): +1. Apply or update the plugin (version `6.0.0-alpha.5` or higher): ```kotlin {filename:build.gradle.kts} plugins { - id("io.sentry.android.gradle") version "6.0.0-alpha.4" + id("io.sentry.android.gradle") version "6.0.0-alpha.5" } sentry { @@ -16,7 +16,7 @@ This guide assumes you already use the Sentry Android Gradle plugin in GitHub Ac ```groovy {filename:build.gradle} plugins { - id "io.sentry.android.gradle" version "6.0.0-alpha.4" + id "io.sentry.android.gradle" version "6.0.0-alpha.5" } sentry { diff --git a/includes/size-analysis/section-cli.mdx b/includes/size-analysis/section-cli.mdx index c74f2e1b58cc8f..f09007380b5d0f 100644 --- a/includes/size-analysis/section-cli.mdx +++ b/includes/size-analysis/section-cli.mdx @@ -1,13 +1,13 @@ -Set the GitHub-provided metadata automatically where possible. When running locally, supply the fields explicitly. +On GitHub Actions, metadata is applied automatically. When running in other environments, the fields must be supplied explicitly. ```bash sentry-cli build upload \ --org \ --project \ --head-sha \ - --base-sha \ + --base-sha \ # only required for PR builds --head-ref \ - --base-ref \ + --base-ref \ # only required for PR builds --head-repo-name \ --pr-number \ --vcs-provider github \ From e136a634a03c87288a9adb113c4588b75df39fd6 Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Tue, 21 Oct 2025 15:50:21 -0400 Subject: [PATCH 05/67] insight --- .../android/size-analysis/insights.mdx | 22 +++++++++++++++ .../guides/ios/size-analysis/insights.mdx | 28 +++++++++++++++++++ docs/product/size-analysis/insights.mdx | 9 ++++++ 3 files changed, 59 insertions(+) create mode 100644 docs/platforms/android/size-analysis/insights.mdx create mode 100644 docs/platforms/apple/guides/ios/size-analysis/insights.mdx create mode 100644 docs/product/size-analysis/insights.mdx diff --git a/docs/platforms/android/size-analysis/insights.mdx b/docs/platforms/android/size-analysis/insights.mdx new file mode 100644 index 00000000000000..a98142481fa3bc --- /dev/null +++ b/docs/platforms/android/size-analysis/insights.mdx @@ -0,0 +1,22 @@ +--- +title: Insights +sidebar_order: 5250 +description: Preview how Size Analysis reports highlight Android build trends. +--- + +TODO: ADD SOME PICS + +Size Analysis Insights point out how Android app can reduce its size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. + +## Android Insights + +Below are a list of available insights for Android builds. + +| Insight | What it catches | +| --------------------------- | --------------------------------------------------------------------- | +| Duplicate files | Flags identical payloads you can keep once and drop the copies. | +| Large images | Surfaces oversized image assets worth recompressing or resizing. | +| Large videos | Highlights video files that are bigger than typical delivery budgets. | +| WebP optimization | Tests bitmap assets to see if WebP would deliver byte savings. | +| Large audio | Surfaces hefty audio tracks that could be recompressed or trimmed. | +| Hermes debug info (RN only) | Points to bundled Hermes bytecode still carrying debuggers' metadata | diff --git a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx new file mode 100644 index 00000000000000..ca25003542f71d --- /dev/null +++ b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx @@ -0,0 +1,28 @@ +--- +title: Insights +sidebar_order: 5250 +description: See how Size Analysis surfaces trends for your iOS builds. +--- + +TODO: ADD SOME PICS + +Size Analysis Insights point out how iOS app can reduce its size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. + +## iOS Insights + +Below are a list of available insights for iOS builds. + +| Insight | What it catches | +| --------------------------- | ------------------------------------------------------------------------------------------- | +| Duplicate files | Flags identical payloads you can keep once and drop the copies. | +| Large videos | Highlights video files that are bigger than typical delivery budgets. | +| Image optimization | Surfaces oversized PNG/JPEG/HEIC assets and recommends recompressing or converting to HEIC. | +| Alternate icon optimization | Checks alternate app icons for downscaling and recompressing. | +| Loose images | Groups @1x/@2x/@3x variants that should move into asset catalogs. | +| Small files | Totals tiny files wasting space because of 4 KB filesystem blocks. | +| Strip binary | Shows binaries that still include removable debug sections or symbols. | +| Localized strings | Estimates savings from shrinking `.strings` payloads. | +| Minify localized strings | Measures wins from stripping comments in `.strings` files. | +| Main binary export metadata | Reports export tries on main binaries that are larger than needed. | +| Unnecessary files | Catches docs, scripts, configs, or other build leftovers in the bundle. | +| Hermes debug info (RN only) | Points to bundled Hermes bytecode still carrying debuggers' metadata | diff --git a/docs/product/size-analysis/insights.mdx b/docs/product/size-analysis/insights.mdx new file mode 100644 index 00000000000000..47be109cbbcb9c --- /dev/null +++ b/docs/product/size-analysis/insights.mdx @@ -0,0 +1,9 @@ +--- +title: Insights +sidebar_order: 60 +description: Explore how Size Analysis highlights trends and comparisons across your builds. +--- + +Size Analysis Insights point out how your app is wasting space. + +For information on the insights available for each platform, see the [Android](/platforms/android/size-analysis/insights/) and [iOS](/platforms/apple/guides/ios/size-analysis/insights/) guides. From 935e91d5dc2ae6c562835b0118117ed2f5e2f495 Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Tue, 21 Oct 2025 16:09:18 -0400 Subject: [PATCH 06/67] cross platform insights --- .../android/size-analysis/insights.mdx | 9 +------- .../guides/ios/size-analysis/insights.mdx | 15 +------------ .../guides/flutter/size-analysis/insights.mdx | 21 +++++++++++++++++++ .../react-native/size-analysis/insights.mdx | 21 +++++++++++++++++++ includes/size-analysis/android-insights.mdx | 8 +++++++ includes/size-analysis/ios-insights.mdx | 14 +++++++++++++ 6 files changed, 66 insertions(+), 22 deletions(-) create mode 100644 docs/platforms/dart/guides/flutter/size-analysis/insights.mdx create mode 100644 docs/platforms/react-native/size-analysis/insights.mdx create mode 100644 includes/size-analysis/android-insights.mdx create mode 100644 includes/size-analysis/ios-insights.mdx diff --git a/docs/platforms/android/size-analysis/insights.mdx b/docs/platforms/android/size-analysis/insights.mdx index a98142481fa3bc..0e4f5ebc8e48b8 100644 --- a/docs/platforms/android/size-analysis/insights.mdx +++ b/docs/platforms/android/size-analysis/insights.mdx @@ -12,11 +12,4 @@ Size Analysis Insights point out how Android app can reduce its size. They spot Below are a list of available insights for Android builds. -| Insight | What it catches | -| --------------------------- | --------------------------------------------------------------------- | -| Duplicate files | Flags identical payloads you can keep once and drop the copies. | -| Large images | Surfaces oversized image assets worth recompressing or resizing. | -| Large videos | Highlights video files that are bigger than typical delivery budgets. | -| WebP optimization | Tests bitmap assets to see if WebP would deliver byte savings. | -| Large audio | Surfaces hefty audio tracks that could be recompressed or trimmed. | -| Hermes debug info (RN only) | Points to bundled Hermes bytecode still carrying debuggers' metadata | + diff --git a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx index ca25003542f71d..5384ddd19ad4ed 100644 --- a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx +++ b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx @@ -12,17 +12,4 @@ Size Analysis Insights point out how iOS app can reduce its size. They spot patt Below are a list of available insights for iOS builds. -| Insight | What it catches | -| --------------------------- | ------------------------------------------------------------------------------------------- | -| Duplicate files | Flags identical payloads you can keep once and drop the copies. | -| Large videos | Highlights video files that are bigger than typical delivery budgets. | -| Image optimization | Surfaces oversized PNG/JPEG/HEIC assets and recommends recompressing or converting to HEIC. | -| Alternate icon optimization | Checks alternate app icons for downscaling and recompressing. | -| Loose images | Groups @1x/@2x/@3x variants that should move into asset catalogs. | -| Small files | Totals tiny files wasting space because of 4 KB filesystem blocks. | -| Strip binary | Shows binaries that still include removable debug sections or symbols. | -| Localized strings | Estimates savings from shrinking `.strings` payloads. | -| Minify localized strings | Measures wins from stripping comments in `.strings` files. | -| Main binary export metadata | Reports export tries on main binaries that are larger than needed. | -| Unnecessary files | Catches docs, scripts, configs, or other build leftovers in the bundle. | -| Hermes debug info (RN only) | Points to bundled Hermes bytecode still carrying debuggers' metadata | + diff --git a/docs/platforms/dart/guides/flutter/size-analysis/insights.mdx b/docs/platforms/dart/guides/flutter/size-analysis/insights.mdx new file mode 100644 index 00000000000000..1b9aab725f1171 --- /dev/null +++ b/docs/platforms/dart/guides/flutter/size-analysis/insights.mdx @@ -0,0 +1,21 @@ +--- +title: Insights +sidebar_order: 5250 +description: Preview how Size Analysis highlights Flutter build trends. +--- + +TODO: ADD SOME PICS + +Size Analysis Insights point out how Flutter apps can reduce their size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. + +## Android Insights + +Below are a list of available insights for Android builds. + + + +## iOS Insights + +Below are a list of available insights for iOS builds. + + diff --git a/docs/platforms/react-native/size-analysis/insights.mdx b/docs/platforms/react-native/size-analysis/insights.mdx new file mode 100644 index 00000000000000..314593abd7553b --- /dev/null +++ b/docs/platforms/react-native/size-analysis/insights.mdx @@ -0,0 +1,21 @@ +--- +title: Insights +sidebar_order: 5250 +description: See how Size Analysis surfaces trends for React Native builds. +--- + +TODO: ADD SOME PICS + +Size Analysis Insights point out how React Native apps can reduce their size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. + +## Android Insights + +Below are a list of available insights for Android builds. + + + +## iOS Insights + +Below are a list of available insights for iOS builds. + + diff --git a/includes/size-analysis/android-insights.mdx b/includes/size-analysis/android-insights.mdx new file mode 100644 index 00000000000000..82bda0e56b1514 --- /dev/null +++ b/includes/size-analysis/android-insights.mdx @@ -0,0 +1,8 @@ +| Insight | What it catches | +| --------------------------- | --------------------------------------------------------------------- | +| Duplicate files | Flags identical payloads you can keep once and drop the copies. | +| Large images | Surfaces oversized image assets worth recompressing or resizing. | +| Large videos | Highlights video files that are bigger than typical delivery budgets. | +| WebP optimization | Tests bitmap assets to see if WebP would deliver byte savings. | +| Large audio | Surfaces hefty audio tracks that could be recompressed or trimmed. | +| Hermes debug info (RN only) | Points to bundled Hermes bytecode still carrying debuggers' metadata | diff --git a/includes/size-analysis/ios-insights.mdx b/includes/size-analysis/ios-insights.mdx new file mode 100644 index 00000000000000..d8750c2d091f6c --- /dev/null +++ b/includes/size-analysis/ios-insights.mdx @@ -0,0 +1,14 @@ +| Insight | What it catches | +| --------------------------- | ------------------------------------------------------------------------------------------- | +| Duplicate files | Flags identical payloads you can keep once and drop the copies. | +| Large videos | Highlights video files that are bigger than typical delivery budgets. | +| Image optimization | Surfaces oversized PNG/JPEG/HEIC assets and recommends recompressing or converting to HEIC. | +| Alternate icon optimization | Checks alternate app icons for downscaling and recompressing. | +| Loose images | Groups @1x/@2x/@3x variants that should move into asset catalogs. | +| Small files | Totals tiny files wasting space because of 4 KB filesystem blocks. | +| Strip binary | Shows binaries that still include removable debug sections or symbols. | +| Localized strings | Estimates savings from shrinking `.strings` payloads. | +| Minify localized strings | Measures wins from stripping comments in `.strings` files. | +| Main binary export metadata | Reports export tries on main binaries that are larger than needed. | +| Unnecessary files | Catches docs, scripts, configs, or other build leftovers in the bundle. | +| Hermes debug info (RN only) | Points to bundled Hermes bytecode still carrying debuggers' metadata | From 84c69b627e184e06cd11e5f3b5d6682af0369f91 Mon Sep 17 00:00:00 2001 From: Trevor Elkins Date: Fri, 24 Oct 2025 18:29:23 -0400 Subject: [PATCH 07/67] iOS changes --- .../apple/guides/ios/size-analysis/index.mdx | 2 +- includes/size-analysis/github-only.mdx | 4 +-- includes/size-analysis/quickstart-cli.mdx | 5 ++-- .../size-analysis/quickstart-fastlane.mdx | 26 ++++++++++++------- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/docs/platforms/apple/guides/ios/size-analysis/index.mdx b/docs/platforms/apple/guides/ios/size-analysis/index.mdx index bc20b35343e6ce..f6bcefeddd884d 100644 --- a/docs/platforms/apple/guides/ios/size-analysis/index.mdx +++ b/docs/platforms/apple/guides/ios/size-analysis/index.mdx @@ -4,7 +4,7 @@ sidebar_order: 5200 description: Upload iOS builds to Sentry for size analysis. --- -Size Analysis uploads your release builds so you can spot app-size regressions before shipping. +With Size Analysis, Sentry detects app size regressions before you ship to the App Store, helping keep your app lean as can be. Aside from being courteous to your users, a smaller app size helps boost conversion and retention rates for the long-tail of customers. diff --git a/includes/size-analysis/github-only.mdx b/includes/size-analysis/github-only.mdx index 4a4b54a8fb4d0c..86c14488099119 100644 --- a/includes/size-analysis/github-only.mdx +++ b/includes/size-analysis/github-only.mdx @@ -1,3 +1 @@ - - GitHub is currently the only supported VCS provider for Size Analysis uploads. - +GitHub is currently the only supported integration for alerts. diff --git a/includes/size-analysis/quickstart-cli.mdx b/includes/size-analysis/quickstart-cli.mdx index d6aee9351c6222..8435605fa75c7e 100644 --- a/includes/size-analysis/quickstart-cli.mdx +++ b/includes/size-analysis/quickstart-cli.mdx @@ -1,12 +1,13 @@ ### Sentry CLI (Any platform) - This quick start assumes `sentry-cli` is installed and authenticated. See the [CLI docs](/cli/) for installation and login options. + This quick start assumes `sentry-cli` is installed and authenticated. See the + [CLI docs](/cli/) for installation and login options. ```bash # iOS -sentry-cli build upload app.xcarchive.zip \ +sentry-cli build upload YourApp.xcarchive \ --org your-org \ --project your-project \ --build-configuration Release diff --git a/includes/size-analysis/quickstart-fastlane.mdx b/includes/size-analysis/quickstart-fastlane.mdx index 9b6551e0195453..7e9167c5650ceb 100644 --- a/includes/size-analysis/quickstart-fastlane.mdx +++ b/includes/size-analysis/quickstart-fastlane.mdx @@ -1,7 +1,11 @@ ### iOS (Fastlane + GitHub Actions) - This quick start assumes you're already running Fastlane in GitHub Actions and have authentication configured (for example, with the `SENTRY_AUTH_TOKEN` secret). If you haven't added the [Sentry Fastlane plugin](/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) yet, follow the integration guide first. + This quick start assumes you're already running Fastlane in GitHub Actions and + have authentication configured (for example, with the `SENTRY_AUTH_TOKEN` + secret). If you haven't added the [Sentry Fastlane + plugin](/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) yet, + follow the integration guide first. 1. Install the plugin (version `1.34.0` or higher): @@ -10,20 +14,24 @@ bundle exec fastlane add_plugin fastlane-plugin-sentry ``` -2. Add to your `Fastfile`: +2. In `FastFile`, add a call to `sentry_upload_build` after your build step: ```ruby {filename:Fastfile} lane :upload_to_sentry do - sentry_upload_build( - org_slug: 'your-org', - project_slug: 'your-project', - build_configuration: 'Release' # Adjust to your configuration - ) + build_ios_app( + scheme: 'YourScheme', + configuration: 'Release', + ) + sentry_upload_build( + org_slug: 'your-org', + project_slug: 'your-project', + build_configuration: 'Release' # Adjust to your configuration + ) end ``` -3. Run the lane: +3. Add the lane after your build step: - ```bash + ```ruby bundle exec fastlane upload_to_sentry ``` From 4bb7e6f5f20d446ed44cad54d21f652d9daa9d0a Mon Sep 17 00:00:00 2001 From: Trevor Elkins Date: Fri, 24 Oct 2025 18:36:36 -0400 Subject: [PATCH 08/67] update insights --- includes/size-analysis/ios-insights.mdx | 28 ++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/includes/size-analysis/ios-insights.mdx b/includes/size-analysis/ios-insights.mdx index d8750c2d091f6c..e5d49ecfa48b46 100644 --- a/includes/size-analysis/ios-insights.mdx +++ b/includes/size-analysis/ios-insights.mdx @@ -1,14 +1,14 @@ -| Insight | What it catches | -| --------------------------- | ------------------------------------------------------------------------------------------- | -| Duplicate files | Flags identical payloads you can keep once and drop the copies. | -| Large videos | Highlights video files that are bigger than typical delivery budgets. | -| Image optimization | Surfaces oversized PNG/JPEG/HEIC assets and recommends recompressing or converting to HEIC. | -| Alternate icon optimization | Checks alternate app icons for downscaling and recompressing. | -| Loose images | Groups @1x/@2x/@3x variants that should move into asset catalogs. | -| Small files | Totals tiny files wasting space because of 4 KB filesystem blocks. | -| Strip binary | Shows binaries that still include removable debug sections or symbols. | -| Localized strings | Estimates savings from shrinking `.strings` payloads. | -| Minify localized strings | Measures wins from stripping comments in `.strings` files. | -| Main binary export metadata | Reports export tries on main binaries that are larger than needed. | -| Unnecessary files | Catches docs, scripts, configs, or other build leftovers in the bundle. | -| Hermes debug info (RN only) | Points to bundled Hermes bytecode still carrying debuggers' metadata | +| Insight | What it catches | +| --------------------------- | -------------------------------------------------------------------------------------------------- | +| Strip debug symbols | Shows binaries that still include removable debug sections or symbols. | +| Duplicate files | Flags identical files where you can keep once and drop the additional copies. | +| Image optimization | Surfaces oversized PNG/JPEG/HEIC assets and recommends recompressing or converting to HEIC. | +| Alternate icon optimization | Checks alternate app icons for downscaling and recompressing. | +| Loose images | Flags @1x/@2x/@3x images that should be move into asset catalogs so they qualify for app thinning. | +| Small files | Totals tiny files wasting space because of 4 KB filesystem blocks. | +| Unnecessary files | Catches docs, scripts, configs, or other build leftovers in the bundle. | +| Large videos | Highlights video files that are bigger than typical delivery budgets. | +| Localized strings | Estimates savings from shrinking `.strings` payloads. | +| Minify localized strings | Measures wins from stripping comments and whitespace in `.strings` files. | +| Main binary export metadata | Reports export tries on main binaries that are not needed. | +| Hermes debug info (RN only) | Show bundled Hermes bytecode with removable debug info. | From 87195c49ead331c7891f2257f5e2a4dcaaa4b1ac Mon Sep 17 00:00:00 2001 From: Trevor Elkins Date: Fri, 24 Oct 2025 18:42:21 -0400 Subject: [PATCH 09/67] oops --- includes/size-analysis/quickstart-fastlane.mdx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/includes/size-analysis/quickstart-fastlane.mdx b/includes/size-analysis/quickstart-fastlane.mdx index 7e9167c5650ceb..a367278bb9e9a9 100644 --- a/includes/size-analysis/quickstart-fastlane.mdx +++ b/includes/size-analysis/quickstart-fastlane.mdx @@ -29,9 +29,3 @@ ) end ``` - -3. Add the lane after your build step: - - ```ruby - bundle exec fastlane upload_to_sentry - ``` From 896c12008b83ef75d90c4d39e2ce86ed9c9e76b5 Mon Sep 17 00:00:00 2001 From: Nelson Osacky Date: Mon, 27 Oct 2025 13:04:12 +0100 Subject: [PATCH 10/67] Update to alpha.6 --- docs/product/size-analysis/uploading-builds/gradle.mdx | 2 +- includes/size-analysis/quickstart-gradle.mdx | 4 ++-- includes/size-analysis/section-android.mdx | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/product/size-analysis/uploading-builds/gradle.mdx b/docs/product/size-analysis/uploading-builds/gradle.mdx index 409ef1101d03ee..e0ceace9b1112a 100644 --- a/docs/product/size-analysis/uploading-builds/gradle.mdx +++ b/docs/product/size-analysis/uploading-builds/gradle.mdx @@ -8,7 +8,7 @@ The Sentry Gradle plugin can be used to upload any [accepted Android mobile buil This guide assumes you already use the Sentry Android Gradle plugin (version - `6.0.0-alpha.5` or higher). See the [Android Gradle configuration + `6.0.0-alpha.6` or higher). See the [Android Gradle configuration guide](https://docs.sentry.io/platforms/android/configuration/gradle/) for initial setup diff --git a/includes/size-analysis/quickstart-gradle.mdx b/includes/size-analysis/quickstart-gradle.mdx index c33dc446b502e8..f673861c8b43ad 100644 --- a/includes/size-analysis/quickstart-gradle.mdx +++ b/includes/size-analysis/quickstart-gradle.mdx @@ -4,11 +4,11 @@ This quick start assumes you're already using the [Sentry Android Gradle plugin](/platforms/android/configuration/gradle/) and have authentication set up in GitHub Actions (for example, with the `SENTRY_AUTH_TOKEN` secret). -1. Bump the plugin to version `6.0.0-alpha.5` or higher in your `build.gradle.kts`: +1. Bump the plugin to version `6.0.0-alpha.6` or higher in your `build.gradle.kts`: ```kotlin {filename:build.gradle.kts} plugins { - id("io.sentry.android.gradle") version "6.0.0-alpha.5" + id("io.sentry.android.gradle") version "6.0.0-alpha.6" } sentry { diff --git a/includes/size-analysis/section-android.mdx b/includes/size-analysis/section-android.mdx index 3ab85700609b7c..08cf1e533a49d0 100644 --- a/includes/size-analysis/section-android.mdx +++ b/includes/size-analysis/section-android.mdx @@ -1,10 +1,10 @@ This guide assumes you already use the Sentry Android Gradle plugin in GitHub Actions. {/* TODO: Link to setup guide */} -1. Apply or update the plugin (version `6.0.0-alpha.5` or higher): +1. Apply or update the plugin (version `6.0.0-alpha.6` or higher): ```kotlin {filename:build.gradle.kts} plugins { - id("io.sentry.android.gradle") version "6.0.0-alpha.5" + id("io.sentry.android.gradle") version "6.0.0-alpha.6" } sentry { @@ -16,7 +16,7 @@ This guide assumes you already use the Sentry Android Gradle plugin in GitHub Ac ```groovy {filename:build.gradle} plugins { - id "io.sentry.android.gradle" version "6.0.0-alpha.5" + id "io.sentry.android.gradle" version "6.0.0-alpha.6" } sentry { From abde4564b17631216481250b428763fad5b7638d Mon Sep 17 00:00:00 2001 From: Nelson Osacky Date: Mon, 27 Oct 2025 13:08:58 +0100 Subject: [PATCH 11/67] Incorporate comments --- .../size-analysis/uploading-builds/gradle.mdx | 2 +- includes/size-analysis/quickstart-gradle.mdx | 10 ++++------ includes/size-analysis/section-android.mdx | 16 ++++++---------- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/docs/product/size-analysis/uploading-builds/gradle.mdx b/docs/product/size-analysis/uploading-builds/gradle.mdx index e0ceace9b1112a..a154f0bb9c333b 100644 --- a/docs/product/size-analysis/uploading-builds/gradle.mdx +++ b/docs/product/size-analysis/uploading-builds/gradle.mdx @@ -31,7 +31,7 @@ sentry { } ``` -## Building your app will trigger an upload +## Building your app on CI will trigger an upload ```bash ./gradlew bundleRelease diff --git a/includes/size-analysis/quickstart-gradle.mdx b/includes/size-analysis/quickstart-gradle.mdx index f673861c8b43ad..f4c5b3bdbab476 100644 --- a/includes/size-analysis/quickstart-gradle.mdx +++ b/includes/size-analysis/quickstart-gradle.mdx @@ -4,13 +4,9 @@ This quick start assumes you're already using the [Sentry Android Gradle plugin](/platforms/android/configuration/gradle/) and have authentication set up in GitHub Actions (for example, with the `SENTRY_AUTH_TOKEN` secret). -1. Bump the plugin to version `6.0.0-alpha.6` or higher in your `build.gradle.kts`: +1. Make sure to use at least version `6.0.0-alpha.6` or higher in your `build.gradle.kts`: ```kotlin {filename:build.gradle.kts} - plugins { - id("io.sentry.android.gradle") version "6.0.0-alpha.6" - } - sentry { sizeAnalysis { enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent @@ -28,8 +24,10 @@ } ``` -2. Build your app: +2. Building on CI will trigger the upload ```bash ./gradlew bundleRelease + # or + ./gradlew assembleRelease ``` diff --git a/includes/size-analysis/section-android.mdx b/includes/size-analysis/section-android.mdx index 08cf1e533a49d0..728b6f8251d5c6 100644 --- a/includes/size-analysis/section-android.mdx +++ b/includes/size-analysis/section-android.mdx @@ -1,12 +1,12 @@ -This guide assumes you already use the Sentry Android Gradle plugin in GitHub Actions. {/* TODO: Link to setup guide */} + + This quick start assumes you're already using the [Sentry Android Gradle plugin](/platforms/android/configuration/gradle/) and have authentication set up in GitHub Actions (for example, with the `SENTRY_AUTH_TOKEN` secret). + -1. Apply or update the plugin (version `6.0.0-alpha.6` or higher): +1. Ensure you are using 6.0.0-alpha.6 or higher of the Sentry Android Gradle Plugin. - ```kotlin {filename:build.gradle.kts} - plugins { - id("io.sentry.android.gradle") version "6.0.0-alpha.6" - } +2. Configure the upload + ```kotlin {filename:build.gradle.kts} sentry { sizeAnalysis { enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent @@ -15,10 +15,6 @@ This guide assumes you already use the Sentry Android Gradle plugin in GitHub Ac ``` ```groovy {filename:build.gradle} - plugins { - id "io.sentry.android.gradle" version "6.0.0-alpha.6" - } - sentry { sizeAnalysis { enabled = providers.environmentVariable("GITHUB_ACTIONS").present From 633261f08b83b53dcc2e9743ddd4728f64f87888 Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Mon, 27 Oct 2025 23:23:30 -0400 Subject: [PATCH 12/67] big refactor to formatting --- .../platforms/android/size-analysis/index.mdx | 34 ++- .../android/size-analysis/insights.mdx | 94 +++++- .../size-analysis/images/exported-symbols.png | Bin 0 -> 36271 bytes .../apple/guides/ios/size-analysis/index.mdx | 32 +- .../guides/ios/size-analysis/insights.mdx | 274 +++++++++++++++++- .../guides/flutter/size-analysis/index.mdx | 42 ++- .../guides/flutter/size-analysis/insights.mdx | 13 +- .../react-native/size-analysis/index.mdx | 42 ++- .../react-native/size-analysis/insights.mdx | 15 +- docs/product/size-analysis/index.mdx | 7 + ...ntegration.mdx => integrating-into-ci.mdx} | 19 +- .../size-analysis/uploading-builds/cli.mdx | 35 --- .../uploading-builds/fastlane.mdx | 39 --- .../size-analysis/uploading-builds/gradle.mdx | 43 --- .../size-analysis/uploading-builds/index.mdx | 35 --- includes/size-analysis/android-insights.mdx | 8 - .../build-configuration-android.mdx | 5 + ...on.mdx => build-configuration-general.mdx} | 0 .../size-analysis/build-configuration-ios.mdx | 5 + includes/size-analysis/ci.mdx | 5 - includes/size-analysis/ios-insights.mdx | 14 - includes/size-analysis/prerequisites.mdx | 4 - includes/size-analysis/quickstart-cli.mdx | 20 -- .../size-analysis/quickstart-fastlane.mdx | 31 -- includes/size-analysis/quickstart-gradle.mdx | 33 --- includes/size-analysis/quickstart-intro.mdx | 1 - includes/size-analysis/section-android.mdx | 23 -- includes/size-analysis/section-cli.mdx | 15 - includes/size-analysis/section-ios.mdx | 17 -- includes/size-analysis/supported-formats.mdx | 6 - includes/size-analysis/upload-cli-android.mdx | 16 + includes/size-analysis/upload-cli-ios.mdx | 16 + includes/size-analysis/upload-fastlane.mdx | 27 ++ includes/size-analysis/upload-gradle.mdx | 41 +++ includes/size-analysis/upload-metadata.mdx | 26 +- 35 files changed, 624 insertions(+), 413 deletions(-) create mode 100644 docs/platforms/apple/guides/ios/size-analysis/images/exported-symbols.png rename docs/product/size-analysis/{github-integration.mdx => integrating-into-ci.mdx} (88%) delete mode 100644 docs/product/size-analysis/uploading-builds/cli.mdx delete mode 100644 docs/product/size-analysis/uploading-builds/fastlane.mdx delete mode 100644 docs/product/size-analysis/uploading-builds/gradle.mdx delete mode 100644 docs/product/size-analysis/uploading-builds/index.mdx delete mode 100644 includes/size-analysis/android-insights.mdx create mode 100644 includes/size-analysis/build-configuration-android.mdx rename includes/size-analysis/{build-configuration.mdx => build-configuration-general.mdx} (100%) create mode 100644 includes/size-analysis/build-configuration-ios.mdx delete mode 100644 includes/size-analysis/ci.mdx delete mode 100644 includes/size-analysis/ios-insights.mdx delete mode 100644 includes/size-analysis/prerequisites.mdx delete mode 100644 includes/size-analysis/quickstart-cli.mdx delete mode 100644 includes/size-analysis/quickstart-fastlane.mdx delete mode 100644 includes/size-analysis/quickstart-gradle.mdx delete mode 100644 includes/size-analysis/quickstart-intro.mdx delete mode 100644 includes/size-analysis/section-android.mdx delete mode 100644 includes/size-analysis/section-cli.mdx delete mode 100644 includes/size-analysis/section-ios.mdx delete mode 100644 includes/size-analysis/supported-formats.mdx create mode 100644 includes/size-analysis/upload-cli-android.mdx create mode 100644 includes/size-analysis/upload-cli-ios.mdx create mode 100644 includes/size-analysis/upload-fastlane.mdx create mode 100644 includes/size-analysis/upload-gradle.mdx diff --git a/docs/platforms/android/size-analysis/index.mdx b/docs/platforms/android/size-analysis/index.mdx index 570552f9772083..65a001bc6dddbf 100644 --- a/docs/platforms/android/size-analysis/index.mdx +++ b/docs/platforms/android/size-analysis/index.mdx @@ -2,21 +2,37 @@ title: Size Analysis sidebar_title: Size Analysis sidebar_order: 5200 -description: Upload Android builds to Sentry for size analysis. +description: Upload Android builds to Sentry for Size Analysis. --- -Size Analysis uploads your Android builds so you can catch size regressions before they reach production. + - +[Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in preprod to prevent size regressions from reaching users. Aside from being courteous to your users, a smaller app size helps boost conversion and retention rates for the long-tail of customers. -## Quick Start +## Getting Started - +**Accepted Formats**: AAB (preferred) | IPA - +**Upload Mechanisms**: [Gradle](#uploading-with-gradle) | [Sentry CLI](#uploading-with-the-sentry-cli) - +### Uploading with Gradle -## More Upload Basics + -See [Uploading Builds](/product/size-analysis/uploading-builds/) for supported formats and required metadata. +### Uploading with the Sentry CLI + + + +## Upload Metadata + + + +### Build Configuration + + + +## Best Practices + +TODO: stuff like upload release builds (anything else) ((maybe this should be in the product section???)) + + diff --git a/docs/platforms/android/size-analysis/insights.mdx b/docs/platforms/android/size-analysis/insights.mdx index 0e4f5ebc8e48b8..6678855418a06d 100644 --- a/docs/platforms/android/size-analysis/insights.mdx +++ b/docs/platforms/android/size-analysis/insights.mdx @@ -12,4 +12,96 @@ Size Analysis Insights point out how Android app can reduce its size. They spot Below are a list of available insights for Android builds. - +| Insight | What it catches | +| --- | --- | +| [Duplicate files](#duplicate-files) | Flags identical payloads you can keep once and drop the copies. | +| [Large images](#large-images) | Surfaces oversized image assets worth recompressing or resizing. | +| [Large videos](#large-videos) | Highlights video files that are bigger than typical delivery budgets. | +| [WebP optimization](#webp-optimization) | Tests PNG/JPEG bitmaps to see if lossless WebP would shrink them. | +| [Large audio](#large-audio) | Surfaces hefty audio tracks that could be recompressed or trimmed. | +| [Hermes debug info (RN only)](#hermes-debug-info-rn-only) | Points to bundled Hermes bytecode still carrying debugger metadata. | + +### Duplicate files + +**What it is**: Finds matching files or directories inside `assets/`, `res/`, or embedded libraries. + +**How to fix**: Keep one copy and remove or dedupe the rest. For resource folders, consolidate the asset into a shared module or asset pack so the APK bundles it once. + +### Large images + +**What it is**: Flags image files larger than 10 MB. + +**How to fix**: Compress them with lossless WebP or resize them before bundling. Options: + +- Use Android Studio: right-click an image → **Convert to WebP** → choose **Lossless**. +- Use the command line: + + ```bash + # Install cwebp + brew install webp + + # Convert PNG to lossless WebP + cwebp -lossless input.png -o output.webp + + # Convert JPEG to lossless WebP + cwebp -lossless input.jpg -o output.webp + ``` + +Large hero images or splash screens may also benefit from serving them over the network instead of bundling them. + +### Large videos + +**What it is**: Highlights bundled video assets above 10 MB. + +**How to fix**: Re-encode them to H.264 or HEVC with a lower bitrate, shorten the clip, or host the video remotely and stream it on demand. To shrink a clip in place, try FFmpeg: + +```bash +ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -c:a copy output.mp4 +``` + +Lower the `-crf` value for higher quality (and larger files) or raise it for smaller files. + +### WebP optimization + +**What it is**: Tests every PNG, BMP, JPG, or JPEG (excluding `.9.png`) against lossless WebP conversion. If the WebP variant saves at least 500 bytes, the insight lists the asset. + +**How to fix**: Convert the listed bitmap to lossless WebP and update its references. Pick one of the paths below. + +#### Option 1: Android Studio + +1. In Android Studio, right-click the image. +2. Choose **Convert to WebP…**. +3. Select **Lossless** (API 18+ supports it) and review the preview. + +#### Option 2: Command line + +```bash +# Install cwebp +brew install webp + +# Convert PNG to lossless WebP +cwebp -lossless input.png -o output.webp + +# Convert JPEG to lossless WebP +cwebp -lossless input.jpg -o output.webp +``` + +> Lossless WebP with alpha requires `minSdkVersion` ≥ 18. For older devices, keep PNG fallbacks for assets that rely on transparency. + +### Large audio + +**What it is**: Surfaces audio files larger than 5 MB across `res/raw`, `assets`, or libraries. + +**How to fix**: Re-encode them at a lower bitrate or modern format using FFmpeg or your DAW, trim unused segments, or stream long-form media instead of bundling it. A quick FFmpeg recompress: + +```bash +ffmpeg -i input.wav -c:a aac -b:a 128k output.m4a +``` + +Tweak the bitrate to balance quality and size. + +### Hermes debug info (RN only) + +**What it is**: Detects Hermes bytecode bundles that still contain debug info sections. + +**How to fix**: Build the React Native bundle in release mode (`react-native bundle --dev false` or the Gradle release task) so Hermes strips debug sections before packaging. diff --git a/docs/platforms/apple/guides/ios/size-analysis/images/exported-symbols.png b/docs/platforms/apple/guides/ios/size-analysis/images/exported-symbols.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0ea6ba0d7cff32bc8e83ec66b302a74f231dcd GIT binary patch literal 36271 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%0AhIWWLu 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 - +[Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in preprod to prevent size regressions from reaching users. Aside from being courteous to your users, a smaller app size helps boost conversion and retention rates for the long-tail of customers. -## Quick Start +## Getting Started - +**Accepted Formats**: XCArchive (preferred) | IPA - +**Upload Mechanisms**: [Fastlane Plugin](#uploading-with-fastlane) | [Sentry CLI](#uploading-with-the-sentry-cli) - +### Uploading with Fastlane -## More Upload Basics + -See [Uploading Builds](/product/size-analysis/uploading-builds/) for supported formats and required metadata. +### Uploading with the Sentry CLI + + + +## Upload Metadata + + + +### Build Configuration + + + +## Best Practices + +TODO: stuff like upload release builds (anything else) ((maybe this should be in the product section???)) + + diff --git a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx index 5384ddd19ad4ed..671ac3d298837c 100644 --- a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx +++ b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx @@ -12,4 +12,276 @@ Size Analysis Insights point out how iOS app can reduce its size. They spot patt Below are a list of available insights for iOS builds. - +| Insight | What it catches | +| ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| [Strip debug symbols](#strip-debug-symbols) | Shows binaries that still include removable debug sections or symbols. | +| [Duplicate files](#duplicate-files) | Flags identical files where you can keep once and drop the additional copies. | +| [Image optimization](#image-optimization) | Surfaces oversized PNG/JPEG/HEIC assets and recommends recompressing or converting to HEIC. | +| [Alternate icon optimization](#alternate-icon-optimization) | Checks alternate app icons for downscaling and recompressing. | +| [Loose images](#loose-images) | Flags @1x/@2x/@3x images that should be move into asset catalogs so they qualify for app thinning. | +| [Small files](#small-files) | Totals tiny files wasting space because of 4 KB filesystem blocks. | +| [Unnecessary files](#unnecessary-files) | Catches docs, scripts, configs, or other build leftovers in the bundle. | +| [Large videos](#large-videos) | Highlights video files that are bigger than typical delivery budgets. | +| [Localized strings](#localized-strings) | Estimates savings from shrinking `.strings` payloads. | +| [Minify localized strings](#minify-localized-strings) | Measures wins from stripping comments and whitespace in `.strings` files. | +| [Main binary export metadata](#main-binary-export-metadata) | Reports export tries on main binaries that are not needed. | +| [Hermes debug info (RN only)](#hermes-debug-info-rn-only) | Show bundled Hermes bytecode with removable debug info. | + +### Strip debug symbols + +**What it is**: Flags Mach-O binaries that still ship debug sections or symbol tables. + +**How to fix**: Strip symbols only when you also upload dSYMs, otherwise crash reports will not resolve. + + + Stripping symbols before uploading dSYMs breaks crash symbolication. Confirm + your release build still produces and uploads dSYMs (or another crash reporter + has them) before stripping. + + +Swift binaries often hold large symbol sets that the dynamic linker uses only during debugging. Xcode’s old bitcode pipeline removed them automatically, but bitcode is deprecated in Xcode 14 and later. + +Strip a single binary with: + +```bash +strip -rSTx AppBinary -o AppBinaryStripped +``` + +`-T` removes Swift symbols; the other flags drop debug and local symbols. + +To automate stripping at the end of the build, add a Run Script phase that skips non-release builds and leaves Apple-signed frameworks untouched: + +```bash +#!/bin/bash +set -e + +if [ "Release" != "${CONFIGURATION}" ]; then + echo "Skipping symbol stripping for ${CONFIGURATION} build." + exit 0 +fi + +APP_DIR_PATH="${BUILT_PRODUCTS_DIR}/${EXECUTABLE_FOLDER_PATH}" +echo "Stripping main binary: ${APP_DIR_PATH}/${EXECUTABLE_NAME}" +strip -rSTx "${APP_DIR_PATH}/${EXECUTABLE_NAME}" + +APP_FRAMEWORKS_DIR="${APP_DIR_PATH}/Frameworks" +if [ -d "${APP_FRAMEWORKS_DIR}" ]; then + find "${APP_FRAMEWORKS_DIR}" -maxdepth 2 -mindepth 2 -type f -perm -111 -exec bash -c ' + codesign -v -R="anchor apple" "$1" &> /dev/null || strip -rSTx "$1" + ' _ {} \; +fi +``` + +Because Xcode generates dSYMs from the unstripped binary, list the dSYM as an Input File so the script runs after Xcode finishes generating it: + +``` +${DWARF_DSYM_FOLDER_PATH}/${EXECUTABLE_NAME}.app.dSYM/\ +Contents/Resources/DWARF/${EXECUTABLE_NAME} +``` + +### Duplicate files + +**What it is**: Finds identical files bundled more than once. + +**How to fix**: Use dynamic frameworks to share assets between multiple targets. Here's an [example a post](https://www.emergetools.com/blog/posts/make-your-ios-app-smaller-with-dynamic-frameworks) walking through how to do this (for SPM projects). + +### Image optimization + +**What it is**: Surfaces PNG, JPEG, or HEIC assets that can be recompressed or converted. + +**How to fix**: Pick one of these workflows, then replace the source asset with the optimized version. If you convert to HEIC, update the asset catalog reference. + +#### Option 1: Use Imagemin (CLI) + +```bash +# Install imagemin-cli +npm install -g imagemin-cli + +# Optimize PNG with quality 85 +imagemin input.png --plugin=pngquant --plugin.quality=[0.85,0.85] > output.png + +# Optimize JPEG with quality 85 +imagemin input.jpg --plugin=mozjpeg --plugin.quality=85 > output.jpg +``` + +#### Option 2: Use ImageOptim (GUI) + +Download ImageOptim for macOS, drag your images into the window, and let it recompress them with lossy settings. + +#### Option 3: Convert to HEIC + +Open the image in Preview, choose `File → Export`, pick `HEIC`, and save. Replace the original file and update any references. + +### Alternate icon optimization + +**What it is**: Checks alternate app icons that are larger than homescreen quality demands. + +**How to fix**: Run one of the scripts below to resize to homescreen quality and save an optimized copy. Then update the alternate icon entry in your `.xcassets` catalog (and Info.plist if you change the filename). + +1. Save the script as `optimize.sh`. +2. Run `source optimize.sh`. +3. Call `optimize_icon YourIcon.png`. + +#### Option: Convert to HEIC + +```bash +#!/bin/bash +optimize_icon() { + local input="$1" + local output="$(basename "$input" | sed 's/\.[^.]*$//')_optimized.heic" + + [ ! -f "$input" ] && echo "❌ File not found: $input" && return 1 + + echo "🔄 Optimizing $(basename "$input")..." + + sips --resampleWidth 180 "$input" \ + --out /tmp/icon.png >/dev/null 2>&1 || return 1 + sips --resampleWidth 1024 /tmp/icon.png \ + -s format heic -s formatOptions 85 \ + --out "$output" >/dev/null 2>&1 + + rm /tmp/icon.png + + if [ -f "$output" ]; then + local saved=$(( ($(stat -f%z "$input") - $(stat -f%z "$output")) / 1024 )) + echo "✅ Saved ${saved}KB → $output" + else + echo "❌ Optimization failed" + return 1 + fi +} +``` + +> Update the Info.plist alternate icon entry to point at the new `.heic` file. + +#### Option: Keep PNG + +```bash +#!/bin/bash +optimize_icon() { + local input="$1" + local output="$(basename "$input" | sed 's/\.[^.]*$//')_optimized.png" + + [ ! -f "$input" ] && echo "❌ File not found: $input" && return 1 + + echo "🔄 Optimizing $(basename "$input")..." + + sips --resampleWidth 180 "$input" \ + --out /tmp/icon.png >/dev/null 2>&1 || return 1 + sips --resampleWidth 1024 /tmp/icon.png \ + --out "$output" >/dev/null 2>&1 + + rm /tmp/icon.png + + if [ -f "$output" ]; then + local saved=$(( ($(stat -f%z "$input") - $(stat -f%z "$output")) / 1024 )) + echo "✅ Saved ${saved}KB → $output" + else + echo "❌ Optimization failed" + return 1 + fi +} +``` + +### Loose images + +**What it is**: Finds @1x/@2x/@3x resources stored outside asset catalogs, so app thinning cannot remove unused scales. + +**How to fix**: Move each image set into an `.xcassets` catalog so Xcode trims unused variants per device download. + +### Small files + +**What it is**: Totals tiny files that each consume a full 4 KB filesystem block. + +**How to fix**: Group related data into asset catalogs, archives, or databases so multiple entries share the same file on disk. + +### Unnecessary files + +**What it is**: Flags docs, scripts, configs, and similar build leftovers in the app bundle. + +**How to fix**: Drop them from the Copy Bundle Resources phase or exclude them with `EXCLUDED_SOURCE_FILE_NAMES` before archiving. + +### Large videos + +**What it is**: Highlights video assets larger than 10 MB. + +**How to fix**: Re-encode them with H.264 or HEVC at a lower bitrate or resolution, or host and stream the content instead of bundling it. + +### Localized strings + +**What it is**: Totals `.strings` payloads whose size suggests room for compression. + +**How to fix**: Deduplicate entries, move long copy to server-delivered content, or adopt a compact format such as Sentry's SmallStrings helper. + +### Minify localized strings + +**What it is**: Measures extra space in `.strings` files caused by binary encodings, translator comments, and other non-runtime text. + +**How to fix**: Start with low-effort cleanup, then automate comment stripping if you still ship large payloads. + +#### Option 1: Keep the format lean + +- Encode localized strings as plain text (`"key" = "value";`), not binary plists. Set **Strings File Output Encoding** (`STRINGS_FILE_OUTPUT_ENCODING`) to **UTF-8** in Xcode. +- Remove translator comments that ship with the bundle. They help during translation but take space in production. A typical comment looks like: + + ```text + /* Title for the expired code alert. */ + "code_expired" = "Code Expired"; + ``` + +#### Option 2: Strip comments automatically + +Add a Run Script build phase that converts each `.strings` file to JSON, rewrites it without comments, and leaves a compact UTF-8 file behind: + +1. In Xcode, open **Build Phases → + → New Run Script Phase** and place it after the localized resources build step. +2. Set the shell to your Python 3 binary (for Homebrew on Apple Silicon: `/opt/homebrew/bin/python3`). +3. Paste the script below. + +```python +#!/usr/bin/env python3 +import json +import os +import subprocess + +def minify(file_path: str) -> None: + subprocess.run(["plutil", "-convert", "json", file_path], check=True) + + with open(file_path, "r", encoding="utf-8") as source: + data = json.load(source) + + with open(file_path, "w", encoding="utf-8") as target: + for key, value in data.items(): + target.write(f'"{key}" = "{value}";\n') + +for root, _, files in os.walk(os.environ["BUILT_PRODUCTS_DIR"], followlinks=True): + for filename in files: + if filename.endswith(".strings"): + path = os.path.join(root, filename) + print(f"Minifying {path}") + minify(path) +``` + +This script strips comments and blank lines after the files are generated, so keep the original annotated copies under version control for translators. + +### Main binary export metadata + +**What it is**: Highlights exported symbols inside your main app binary. The linker includes these identifiers for external consumers, but no other app links against your binary, so they only bloat the export trie. + +**How to fix**: Maintain a minimal allowlist so only required entry points stay exported. + +Since Xcode 16 no longer injects `_main` automatically, avoid the old `-exported_symbols_list /dev/null` workaround (it strips `_main` and crashes on launch). + +1. Create a text file in your project, for example `Config/ExportedSymbols.txt`. +2. Add `_main` on its own line. Add `__mh_execute_header` if you use Crashlytics or other tooling that finds symbols dynamically with `dlsym`. +3. If you rely on other dynamic lookups, list those symbols too. +4. In Xcode, set **Build Settings → Linking → Exported Symbols File** to the new file’s path. + +![Example of Exported Symbols File](./images/exported-symbols.png) + +Xcode now limits the export trie to just that allowlist. + +### Hermes debug info (RN only) + +**What it is**: Finds Hermes bytecode bundles that still contain debug info sections. + +**How to fix**: Generate the bundle in release mode (for example, `react-native bundle --dev false` or the Xcode release task) so Hermes strips debug data before packaging. diff --git a/docs/platforms/dart/guides/flutter/size-analysis/index.mdx b/docs/platforms/dart/guides/flutter/size-analysis/index.mdx index 2fa06f552f73d1..8bdf5544f136ae 100644 --- a/docs/platforms/dart/guides/flutter/size-analysis/index.mdx +++ b/docs/platforms/dart/guides/flutter/size-analysis/index.mdx @@ -4,20 +4,44 @@ sidebar_order: 5200 description: Upload Flutter builds to Sentry for size analysis. --- -Use Size Analysis to monitor how your Flutter app size changes across iOS and Android builds. + - +[Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in preprod to prevent size regressions from reaching users. Aside from being courteous to your users, a smaller app size helps boost conversion and retention rates for the long-tail of customers. -## Quick Start +## Getting Started - iOS - +**Accepted Upload Formats**: XCArchive (preferred) | IPA - +**Upload Mechanisms**: [Sentry CLI](#uploading-ios-builds-with-the-sentry-cli) | [Fastlane](#uploading-ios-builds-with-fastlane) - +### Uploading iOS builds with the Sentry CLI - + -## More Upload Basics +### Uploading iOS builds with Fastlane -See [Uploading Builds](/product/size-analysis/uploading-builds/) for supported formats and required metadata. + + +## Getting Started - Android + +**Accepted Upload Formats**: AAB (preferred) | APK + +**Upload Mechanisms**: [Sentry CLI](#uploading-android-builds-with-the-sentry-cli) | [Gradle](#uploading-android-builds-with-gradle) + +### Uploading Android builds with the Sentry CLI + + + +### Uploading Android builds with Gradle + + + +## Upload Metadata + + + +### Build Configuration + + + + diff --git a/docs/platforms/dart/guides/flutter/size-analysis/insights.mdx b/docs/platforms/dart/guides/flutter/size-analysis/insights.mdx index 1b9aab725f1171..8e1e6f5743ddea 100644 --- a/docs/platforms/dart/guides/flutter/size-analysis/insights.mdx +++ b/docs/platforms/dart/guides/flutter/size-analysis/insights.mdx @@ -8,14 +8,7 @@ TODO: ADD SOME PICS Size Analysis Insights point out how Flutter apps can reduce their size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. -## Android Insights +For insights available for Flutter builds, see the following pages: -Below are a list of available insights for Android builds. - - - -## iOS Insights - -Below are a list of available insights for iOS builds. - - +- [Android insights](/platforms/android/size-analysis/insights/) +- [iOS insights](/platforms/apple/guides/ios/size-analysis/insights/) diff --git a/docs/platforms/react-native/size-analysis/index.mdx b/docs/platforms/react-native/size-analysis/index.mdx index f6a7e9389a158c..6b59307983a33c 100644 --- a/docs/platforms/react-native/size-analysis/index.mdx +++ b/docs/platforms/react-native/size-analysis/index.mdx @@ -5,20 +5,44 @@ sidebar_order: 5200 description: Upload React Native iOS and Android builds to Sentry for size analysis. --- -Size Analysis helps React Native teams compare app size across iOS and Android builds from the same pull request. + - +[Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in preprod to prevent size regressions from reaching users. Aside from being courteous to your users, a smaller app size helps boost conversion and retention rates for the long-tail of customers. -## Quick Start +## Getting Started - iOS - +**Accepted Upload Formats**: XCArchive (preferred) | IPA - +**Upload Mechanisms**: [Sentry CLI](#uploading-ios-builds-with-the-sentry-cli) | [Fastlane](#uploading-ios-builds-with-fastlane) - +### Uploading iOS builds with the Sentry CLI - + -## More Upload Basics +### Uploading iOS builds with Fastlane -See [Uploading Builds](/product/size-analysis/uploading-builds/) for supported formats and required metadata. + + +## Getting Started - Android + +**Accepted Upload Formats**: AAB (preferred) | APK + +**Upload Mechanisms**: [Sentry CLI](#uploading-android-builds-with-the-sentry-cli) | [Gradle](#uploading-android-builds-with-gradle) + +### Uploading Android builds with the Sentry CLI + + + +### Uploading Android builds with Gradle + + + +## Upload Metadata + + + +### Build Configuration + + + + diff --git a/docs/platforms/react-native/size-analysis/insights.mdx b/docs/platforms/react-native/size-analysis/insights.mdx index 314593abd7553b..f9b58f8c3d5d8a 100644 --- a/docs/platforms/react-native/size-analysis/insights.mdx +++ b/docs/platforms/react-native/size-analysis/insights.mdx @@ -4,18 +4,9 @@ sidebar_order: 5250 description: See how Size Analysis surfaces trends for React Native builds. --- -TODO: ADD SOME PICS - Size Analysis Insights point out how React Native apps can reduce their size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. -## Android Insights - -Below are a list of available insights for Android builds. - - - -## iOS Insights - -Below are a list of available insights for iOS builds. +For insights available for React Native builds, see the following pages: - +- [Android insights](/platforms/android/size-analysis/insights/) +- [iOS insights](/platforms/apple/guides/ios/size-analysis/insights/) diff --git a/docs/product/size-analysis/index.mdx b/docs/product/size-analysis/index.mdx index 0c270d4ba82c6f..311b20ae05a219 100644 --- a/docs/product/size-analysis/index.mdx +++ b/docs/product/size-analysis/index.mdx @@ -8,6 +8,13 @@ description: Track and optimize your mobile app's binary size with automated upl Size Analysis helps you monitor and optimize your mobile application's binary size. By tracking your app size across builds and releases, you can catch unexpected size increases, understand what's contributing to your app's footprint, and deliver faster downloads for your users. +To see how to set up Size Analysis for your mobile app, see the following pages: + +- [Android](/platforms/android/size-analysis/) +- [iOS](/platforms/apple/guides/ios/size-analysis/) +- [React Native](/platforms/react-native/size-analysis/) +- [Flutter](/platforms/dart/guides/flutter/size-analysis/) + ## Why Track App Size? Mobile app size directly impacts user acquisition and retention. Smaller apps: diff --git a/docs/product/size-analysis/github-integration.mdx b/docs/product/size-analysis/integrating-into-ci.mdx similarity index 88% rename from docs/product/size-analysis/github-integration.mdx rename to docs/product/size-analysis/integrating-into-ci.mdx index 71e7e0108d0be0..66d5e10d54b876 100644 --- a/docs/product/size-analysis/github-integration.mdx +++ b/docs/product/size-analysis/integrating-into-ci.mdx @@ -1,23 +1,14 @@ --- -title: GitHub Integration +title: Integrating into CI sidebar_order: 40 description: Set up the GitHub integration to receive size change notifications as PR comments and status checks. --- -The GitHub integration brings Size Analysis directly into your pull request workflow by posting size change summaries as PR comments and status checks. - - - GitHub is currently the only supported VCS provider for Size Analysis. - + -## Benefits - -With the GitHub integration enabled, you get: +The GitHub integration brings Size Analysis directly into your pull request workflow by posting size change summaries as PR comments and status checks. -- **PR comments**: Automatic comments on pull requests showing size changes -- **Status checks**: Pass/fail checks based on size thresholds (coming soon) -- **Inline notifications**: See size impacts without leaving GitHub -- **Historical tracking**: Links to detailed comparisons in [sentry.io](https://sentry.io) +TODO: something like a ##benefits? ## Installation @@ -61,7 +52,7 @@ The PR comment includes: - **Component highlights**: The components that changed the most - **Link to details**: A link to view the full comparison in [sentry.io](https://sentry.io) -### Example PR Comment +### Example Status Check ``` ## 📊 Size Analysis diff --git a/docs/product/size-analysis/uploading-builds/cli.mdx b/docs/product/size-analysis/uploading-builds/cli.mdx deleted file mode 100644 index 7e8f87c227da18..00000000000000 --- a/docs/product/size-analysis/uploading-builds/cli.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: CLI Uploads -sidebar_order: 30 -description: Upload builds to Size Analysis with the Sentry CLI. ---- - -The Sentry CLI can be used to upload any [accepted mobile build type](/product/size-analysis/uploading-builds/#supported-build-formats). - - - This guide assumes `sentry-cli` is already installed and authenticated. See - the [installation guide](/cli/installation/) and [configuration - steps](/cli/configuration/) for initial setup. - - -## Upload iOS builds - -```bash -sentry-cli build upload app.xcarchive.zip \ - --org your-org \ - --project your-project \ - --build-configuration Release -``` - -## Upload Android builds - -```bash -sentry-cli build upload app.aab \ - --org your-org \ - --project your-project \ - --build-configuration freeRelease # Adjust to your build flavor -``` - -## Required metadata - -When you run the CLI in GitHub Actions, metadata like `--repo-name`, `--vcs-provider`, `--pr-number`, `--head-sha`, `--base-sha`, `--head-ref`, and `--base-ref` is filled in automatically. Provide the same flags manually if you upload from another environment. diff --git a/docs/product/size-analysis/uploading-builds/fastlane.mdx b/docs/product/size-analysis/uploading-builds/fastlane.mdx deleted file mode 100644 index 1fc90f6648d08f..00000000000000 --- a/docs/product/size-analysis/uploading-builds/fastlane.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Fastlane Uploads -sidebar_order: 10 -description: Configure Size Analysis uploads for iOS projects using Fastlane. ---- - -The Sentry Fastlane plugin can be used to upload any [accepted iOS mobile build type](/product/size-analysis/uploading-builds/#supported-build-formats). - - - This guide assumes you already have the Sentry Fastlane plugin in your project - (version `1.34.0` or higher). See the [Fastlane integration - guide](https://docs.sentry.io/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) - for initial setup. - - -## Configure a lane - -```ruby -lane :upload_to_sentry do - sentry_upload_build( - org_slug: 'your-org', - project_slug: 'your-project', - build_configuration: 'Release' # Adjust to your configuration - ) -end -``` - -If you already have a lane, add the `sentry_upload_build` action to it. - -## Run the lane - -```bash -bundle exec fastlane upload_to_sentry -``` - -## Next steps - -- View the [Sentry Fastlane plugin documentation](https://github.com/getsentry/sentry-fastlane-plugin) for advanced options -- Return to the [Size Analysis upload overview](/product/size-analysis/uploading-builds/) diff --git a/docs/product/size-analysis/uploading-builds/gradle.mdx b/docs/product/size-analysis/uploading-builds/gradle.mdx deleted file mode 100644 index a154f0bb9c333b..00000000000000 --- a/docs/product/size-analysis/uploading-builds/gradle.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Gradle Uploads -sidebar_order: 20 -description: Configure Size Analysis uploads for Android projects using the Sentry Gradle plugin. ---- - -The Sentry Gradle plugin can be used to upload any [accepted Android mobile build type](/product/size-analysis/uploading-builds/#supported-build-formats). - - - This guide assumes you already use the Sentry Android Gradle plugin (version - `6.0.0-alpha.6` or higher). See the [Android Gradle configuration - guide](https://docs.sentry.io/platforms/android/configuration/gradle/) for - initial setup - - -## Configure the plugin - -```kotlin -sentry { - sizeAnalysis { - enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent - } -} -``` - -```groovy -sentry { - sizeAnalysis { - enabled = providers.environmentVariable("GITHUB_ACTIONS").present - } -} -``` - -## Building your app on CI will trigger an upload - -```bash -./gradlew bundleRelease -``` - -## Next steps - -- Review the [Sentry Gradle plugin documentation](https://docs.sentry.io/platforms/android/configuration/gradle/) for additional configuration -- Return to the [Size Analysis upload overview](/product/size-analysis/uploading-builds/) diff --git a/docs/product/size-analysis/uploading-builds/index.mdx b/docs/product/size-analysis/uploading-builds/index.mdx deleted file mode 100644 index 1f98b6cf522201..00000000000000 --- a/docs/product/size-analysis/uploading-builds/index.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Uploading Builds -sidebar_order: 1 -description: Learn which formats and metadata Size Analysis needs when you upload builds. ---- - -Every build uploaded to Size Analysis needs a supported archive format and enough metadata for Sentry to compare releases safely. - -## Prerequisites - - - -## Supported Build Formats - - - -## Upload Tools - -Use any of the following guides to configure uploads for your project: - -- [Fastlane Setup](/product/size-analysis/uploading-builds/fastlane/) -- [Gradle Setup](/product/size-analysis/uploading-builds/gradle/) -- [CLI Setup](/product/size-analysis/uploading-builds/cli/) - -For cross-platform frameworks like React Native or Flutter, you can choose any of the above which work best for your pipeline. - -## Upload Metadata - -The table shows the minimum fields your upload needs and whether GitHub Actions fills them in automatically. Provide the same values when using a different CI system. - - - -### Build Configuration - - diff --git a/includes/size-analysis/android-insights.mdx b/includes/size-analysis/android-insights.mdx deleted file mode 100644 index 82bda0e56b1514..00000000000000 --- a/includes/size-analysis/android-insights.mdx +++ /dev/null @@ -1,8 +0,0 @@ -| Insight | What it catches | -| --------------------------- | --------------------------------------------------------------------- | -| Duplicate files | Flags identical payloads you can keep once and drop the copies. | -| Large images | Surfaces oversized image assets worth recompressing or resizing. | -| Large videos | Highlights video files that are bigger than typical delivery budgets. | -| WebP optimization | Tests bitmap assets to see if WebP would deliver byte savings. | -| Large audio | Surfaces hefty audio tracks that could be recompressed or trimmed. | -| Hermes debug info (RN only) | Points to bundled Hermes bytecode still carrying debuggers' metadata | diff --git a/includes/size-analysis/build-configuration-android.mdx b/includes/size-analysis/build-configuration-android.mdx new file mode 100644 index 00000000000000..218f41b30feec1 --- /dev/null +++ b/includes/size-analysis/build-configuration-android.mdx @@ -0,0 +1,5 @@ +Build configuration metadata keeps comparisons scoped to like-for-like builds. For example, on a PR status check, the comparison will only be made for builds with the same build configuration. + +The Android Gradle plugin sends the build variant (for example, `freeDebug` or `paidRelease`). + +TODO: put more on android build configuration diff --git a/includes/size-analysis/build-configuration.mdx b/includes/size-analysis/build-configuration-general.mdx similarity index 100% rename from includes/size-analysis/build-configuration.mdx rename to includes/size-analysis/build-configuration-general.mdx diff --git a/includes/size-analysis/build-configuration-ios.mdx b/includes/size-analysis/build-configuration-ios.mdx new file mode 100644 index 00000000000000..8fed91061d4c83 --- /dev/null +++ b/includes/size-analysis/build-configuration-ios.mdx @@ -0,0 +1,5 @@ +Build configuration metadata keeps comparisons scoped to like-for-like builds. For example, on a PR status check, the comparison will only be made for builds with the same build configuration. + +The iOS Fastlane plugin sends the build variant (for example, `Release` or `Debug`). + +TODO: put more on iOS build configuration diff --git a/includes/size-analysis/ci.mdx b/includes/size-analysis/ci.mdx deleted file mode 100644 index 10dbd5d7d3f754..00000000000000 --- a/includes/size-analysis/ci.mdx +++ /dev/null @@ -1,5 +0,0 @@ - - GitHub is the only VCS provider that exposes the metadata Size Analysis needs today. Install the GitHub App to receive status checks and PR annotations. - - -[Install the GitHub App →](https://docs.sentry.io/organization/integrations/source-code-mgmt/github/) diff --git a/includes/size-analysis/ios-insights.mdx b/includes/size-analysis/ios-insights.mdx deleted file mode 100644 index e5d49ecfa48b46..00000000000000 --- a/includes/size-analysis/ios-insights.mdx +++ /dev/null @@ -1,14 +0,0 @@ -| Insight | What it catches | -| --------------------------- | -------------------------------------------------------------------------------------------------- | -| Strip debug symbols | Shows binaries that still include removable debug sections or symbols. | -| Duplicate files | Flags identical files where you can keep once and drop the additional copies. | -| Image optimization | Surfaces oversized PNG/JPEG/HEIC assets and recommends recompressing or converting to HEIC. | -| Alternate icon optimization | Checks alternate app icons for downscaling and recompressing. | -| Loose images | Flags @1x/@2x/@3x images that should be move into asset catalogs so they qualify for app thinning. | -| Small files | Totals tiny files wasting space because of 4 KB filesystem blocks. | -| Unnecessary files | Catches docs, scripts, configs, or other build leftovers in the bundle. | -| Large videos | Highlights video files that are bigger than typical delivery budgets. | -| Localized strings | Estimates savings from shrinking `.strings` payloads. | -| Minify localized strings | Measures wins from stripping comments and whitespace in `.strings` files. | -| Main binary export metadata | Reports export tries on main binaries that are not needed. | -| Hermes debug info (RN only) | Show bundled Hermes bytecode with removable debug info. | diff --git a/includes/size-analysis/prerequisites.mdx b/includes/size-analysis/prerequisites.mdx deleted file mode 100644 index d97cf33a532a78..00000000000000 --- a/includes/size-analysis/prerequisites.mdx +++ /dev/null @@ -1,4 +0,0 @@ -To upload builds you'll need: - -1. A Sentry account with access to any [core plan](https://sentry.io/pricing/) -2. A Sentry auth token – [generate one here](https://sentry.sentry.io/settings/auth-tokens/) and set `SENTRY_AUTH_TOKEN` in your environment so the tools can pick it up automatically diff --git a/includes/size-analysis/quickstart-cli.mdx b/includes/size-analysis/quickstart-cli.mdx deleted file mode 100644 index 8435605fa75c7e..00000000000000 --- a/includes/size-analysis/quickstart-cli.mdx +++ /dev/null @@ -1,20 +0,0 @@ -### Sentry CLI (Any platform) - - - This quick start assumes `sentry-cli` is installed and authenticated. See the - [CLI docs](/cli/) for installation and login options. - - -```bash -# iOS -sentry-cli build upload YourApp.xcarchive \ - --org your-org \ - --project your-project \ - --build-configuration Release - -# Android -sentry-cli build upload app.aab \ - --org your-org \ - --project your-project \ - --build-configuration freeRelease -``` diff --git a/includes/size-analysis/quickstart-fastlane.mdx b/includes/size-analysis/quickstart-fastlane.mdx deleted file mode 100644 index a367278bb9e9a9..00000000000000 --- a/includes/size-analysis/quickstart-fastlane.mdx +++ /dev/null @@ -1,31 +0,0 @@ -### iOS (Fastlane + GitHub Actions) - - - This quick start assumes you're already running Fastlane in GitHub Actions and - have authentication configured (for example, with the `SENTRY_AUTH_TOKEN` - secret). If you haven't added the [Sentry Fastlane - plugin](/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) yet, - follow the integration guide first. - - -1. Install the plugin (version `1.34.0` or higher): - - ```ruby - bundle exec fastlane add_plugin fastlane-plugin-sentry - ``` - -2. In `FastFile`, add a call to `sentry_upload_build` after your build step: - - ```ruby {filename:Fastfile} - lane :upload_to_sentry do - build_ios_app( - scheme: 'YourScheme', - configuration: 'Release', - ) - sentry_upload_build( - org_slug: 'your-org', - project_slug: 'your-project', - build_configuration: 'Release' # Adjust to your configuration - ) - end - ``` diff --git a/includes/size-analysis/quickstart-gradle.mdx b/includes/size-analysis/quickstart-gradle.mdx deleted file mode 100644 index f4c5b3bdbab476..00000000000000 --- a/includes/size-analysis/quickstart-gradle.mdx +++ /dev/null @@ -1,33 +0,0 @@ -### Android (Gradle + GitHub Actions) - - - This quick start assumes you're already using the [Sentry Android Gradle plugin](/platforms/android/configuration/gradle/) and have authentication set up in GitHub Actions (for example, with the `SENTRY_AUTH_TOKEN` secret). - - -1. Make sure to use at least version `6.0.0-alpha.6` or higher in your `build.gradle.kts`: - - ```kotlin {filename:build.gradle.kts} - sentry { - sizeAnalysis { - enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent - } - } - ``` - - Or for `build.gradle`: - - ```groovy {filename:build.gradle} - sentry { - sizeAnalysis { - enabled = providers.environmentVariable("GITHUB_ACTIONS").present - } - } - ``` - -2. Building on CI will trigger the upload - - ```bash - ./gradlew bundleRelease - # or - ./gradlew assembleRelease - ``` diff --git a/includes/size-analysis/quickstart-intro.mdx b/includes/size-analysis/quickstart-intro.mdx deleted file mode 100644 index b5cfbaeb8e87cf..00000000000000 --- a/includes/size-analysis/quickstart-intro.mdx +++ /dev/null @@ -1 +0,0 @@ -Get your first build uploaded in under five minutes. diff --git a/includes/size-analysis/section-android.mdx b/includes/size-analysis/section-android.mdx deleted file mode 100644 index 728b6f8251d5c6..00000000000000 --- a/includes/size-analysis/section-android.mdx +++ /dev/null @@ -1,23 +0,0 @@ - - This quick start assumes you're already using the [Sentry Android Gradle plugin](/platforms/android/configuration/gradle/) and have authentication set up in GitHub Actions (for example, with the `SENTRY_AUTH_TOKEN` secret). - - -1. Ensure you are using 6.0.0-alpha.6 or higher of the Sentry Android Gradle Plugin. - -2. Configure the upload - - ```kotlin {filename:build.gradle.kts} - sentry { - sizeAnalysis { - enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent - } - } - ``` - - ```groovy {filename:build.gradle} - sentry { - sizeAnalysis { - enabled = providers.environmentVariable("GITHUB_ACTIONS").present - } - } - ``` diff --git a/includes/size-analysis/section-cli.mdx b/includes/size-analysis/section-cli.mdx deleted file mode 100644 index f09007380b5d0f..00000000000000 --- a/includes/size-analysis/section-cli.mdx +++ /dev/null @@ -1,15 +0,0 @@ -On GitHub Actions, metadata is applied automatically. When running in other environments, the fields must be supplied explicitly. - -```bash -sentry-cli build upload \ - --org \ - --project \ - --head-sha \ - --base-sha \ # only required for PR builds - --head-ref \ - --base-ref \ # only required for PR builds - --head-repo-name \ - --pr-number \ - --vcs-provider github \ - --build-configuration -``` diff --git a/includes/size-analysis/section-ios.mdx b/includes/size-analysis/section-ios.mdx deleted file mode 100644 index 6feb062de7a3f0..00000000000000 --- a/includes/size-analysis/section-ios.mdx +++ /dev/null @@ -1,17 +0,0 @@ -This guide assumes you already use the Sentry Fastlane plugin in GitHub Actions. {/* TODO: Link to setup guide */} - -1. Install the Fastlane plugin (`1.34.0` or higher): - - ```ruby - bundle exec fastlane add_plugin fastlane-plugin-sentry - ``` - -2. Add a lane to your `Fastfile`: - - ```ruby {filename:Fastfile} - sentry_upload_build( - org_slug: 'your-org', - project_slug: 'your-project', - build_configuration: 'Release' # Adjust to your build configuration - ) - ``` diff --git a/includes/size-analysis/supported-formats.mdx b/includes/size-analysis/supported-formats.mdx deleted file mode 100644 index daab9bfc6c024a..00000000000000 --- a/includes/size-analysis/supported-formats.mdx +++ /dev/null @@ -1,6 +0,0 @@ -| Platform | Name | Extension | -| --- | --- | --- | -| Android | Android App Bundle (preferred) | `.aab` | -| Android | APK | `.apk` | -| iOS | XCArchive (preferred) | `.xcarchive` | -| iOS | IPA | `.ipa` | diff --git a/includes/size-analysis/upload-cli-android.mdx b/includes/size-analysis/upload-cli-android.mdx new file mode 100644 index 00000000000000..77db14f0175ba3 --- /dev/null +++ b/includes/size-analysis/upload-cli-android.mdx @@ -0,0 +1,16 @@ +1. Configure the [sentry-cli](/cli/) + +2. Set up `SENTRY_AUTH_TOKEN` in your environment (you can generate a token [here](https://sentry.sentry.io/settings/auth-tokens/)) + +3. Build your app to create an AAB (preferred) or APK + +4. Invoke the following CLI command to trigger the upload. + +```bash +sentry-cli build upload app.aab \ + --org your-org \ + --project your-project \ + --build-configuration Release +``` + +5. Confirm your upload's metadata is correct in the Sentry UI. (TODO: pic of sidebar metadata) diff --git a/includes/size-analysis/upload-cli-ios.mdx b/includes/size-analysis/upload-cli-ios.mdx new file mode 100644 index 00000000000000..3cbe99fa404602 --- /dev/null +++ b/includes/size-analysis/upload-cli-ios.mdx @@ -0,0 +1,16 @@ +1. Configure the [sentry-cli](/cli/) + +2. Set up `SENTRY_AUTH_TOKEN` in your environment (you can generate a token [here](https://sentry.sentry.io/settings/auth-tokens/)) + +3. Build your app to create an XCArchive (preferred) or IPA + +4. Invoke the following CLI command to trigger the upload. + +```bash +sentry-cli build upload app.xcarchive \ + --org your-org \ + --project your-project \ + --build-configuration Release +``` + +5. Confirm your upload's metadata is correct in the Sentry UI. (TODO: pic of sidebar metadata) diff --git a/includes/size-analysis/upload-fastlane.mdx b/includes/size-analysis/upload-fastlane.mdx new file mode 100644 index 00000000000000..1067ab010c3945 --- /dev/null +++ b/includes/size-analysis/upload-fastlane.mdx @@ -0,0 +1,27 @@ +The Fastlane plugin can be used to upload XCArchive or IPA builds to Sentry. Fastlane will automatically detect your [build's metadata](#upload-metadata) and include it in the upload. If for any reason you need to override values, you can... TODO: show fastlane override, maybe at bottom of this? + +1. Configure the [Sentry Fastlane plugin](/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) (version `1.34.0` or higher). + + ```ruby + bundle exec fastlane add_plugin fastlane-plugin-sentry + ``` + +2. Set up `SENTRY_AUTH_TOKEN` in your environment (you can generate a token [here](https://sentry.sentry.io/settings/auth-tokens/)). + +3. In `FastFile`, add a call to `sentry_upload_build` after your build step: + + ```ruby {filename:Fastfile} + lane :upload_to_sentry do + build_ios_app( + scheme: 'YourScheme', + configuration: 'Release', + ) + sentry_upload_build( + org_slug: 'your-org', + project_slug: 'your-project', + build_configuration: 'Release' # Adjust to your configuration + ) + end + ``` + + 4. Confirm your upload's metadata is correct in the Sentry UI. (TODO: pic of sidebar metadata) diff --git a/includes/size-analysis/upload-gradle.mdx b/includes/size-analysis/upload-gradle.mdx new file mode 100644 index 00000000000000..145e56b04873ad --- /dev/null +++ b/includes/size-analysis/upload-gradle.mdx @@ -0,0 +1,41 @@ +The Gradle plugin will automatically detect your [build's metadata](#upload-metadata) and include it in the upload. If for any reason you need to override values, you can... TODO: show gradle override + +1. Configure the [Sentry Android Gradle plugin](/platforms/android/configuration/gradle/) + +2. Set up `SENTRY_AUTH_TOKEN` in your environment (you can generate a token [here](https://sentry.sentry.io/settings/auth-tokens/)) + +3. Make sure to use at least version `6.0.0-alpha.6` or higher in your `build.gradle.kts`: + + ```kotlin {filename:build.gradle.kts} + sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent + } + } + ``` + + Or for `build.gradle`: + + ```groovy {filename:build.gradle} + sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").present + } + } + ``` + +_TODO: the text for #3 doesn't make sense given the code snippet. Shouldn't the version be in #1?_ + +4. Invoke the following Gradle tasks to build your app and trigger the upload. + + ```bash + ./gradlew bundleRelease + # or + ./gradlew assembleRelease + ``` + +5. Confirm your upload's metadata is correct in the Sentry UI. (TODO: pic of sidebar metadata) + +_TODO: do we have difference between bundleRelease and assembleRelease anywhere?_ + +You can see an example of the Gradle plugin in action [here](TODO:LINK). diff --git a/includes/size-analysis/upload-metadata.mdx b/includes/size-analysis/upload-metadata.mdx index 84d465ee96998d..6bb0d08fda887e 100644 --- a/includes/size-analysis/upload-metadata.mdx +++ b/includes/size-analysis/upload-metadata.mdx @@ -1,11 +1,15 @@ -| Field | Description | Auto-detected in GitHub Actions | -| --- | --- | --- | -| `org` | Sentry organization slug | ❌ Required | -| `project` | Sentry project slug | ❌ Required | -| `build-configuration` | Build configuration (for example, `Release`, `Debug`). Used to ensure builds with different configurations are not compared. | ❌ Required | -| `head-sha` | Current commit SHA | ✅ Yes | -| `base-sha` | Base commit SHA (for comparison) | ✅ Yes (PR only) | -| `head-repo-name` | Repository name (`org/repo`) | ✅ Yes | -| `pr-number` | Pull request number | ✅ Yes (PR only) | -| `head-ref` | Branch or tag name | ✅ Yes | -| `base-ref` | Base branch name | ✅ Yes (PR only) | +We use build metadata to organize builds in the UI and ensure correct comparisons. + +| Field | Description | +| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `org`\* | Sentry organization slug | +| `project`\* | Sentry project slug | +| `build-configuration`\* | Build configuration (for example, `Release`, `Debug`). Used to ensure builds with different configurations are not compared. | +| `head-sha` | Current commit SHA | +| `base-sha` | Base commit SHA (for comparison) | +| `head-repo-name` | Repository name (`org/repo`) | +| `pr-number` | Pull request number | +| `head-ref` | Branch or tag name | +| `base-ref` | Base branch name | + +\* _required field_ From b74e73272b845e9aaf4a01b99a6dab702f5183dc Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Mon, 27 Oct 2025 23:25:02 -0400 Subject: [PATCH 13/67] add some todos --- docs/product/size-analysis/index.mdx | 3 +++ docs/product/size-analysis/insights.mdx | 2 ++ docs/product/size-analysis/integrating-into-ci.mdx | 2 ++ 3 files changed, 7 insertions(+) diff --git a/docs/product/size-analysis/index.mdx b/docs/product/size-analysis/index.mdx index 311b20ae05a219..de42103e07530b 100644 --- a/docs/product/size-analysis/index.mdx +++ b/docs/product/size-analysis/index.mdx @@ -4,6 +4,9 @@ sidebar_order: 136 description: Track and optimize your mobile app's binary size with automated uploads, detailed breakdowns, and build comparisons. --- +TODO: THIS IS SLOP +TODO: SOMETHING ABOUT THE BUILD COMPARE PAGE? + Size Analysis helps you monitor and optimize your mobile application's binary size. By tracking your app size across builds and releases, you can catch unexpected size increases, understand what's contributing to your app's footprint, and deliver faster downloads for your users. diff --git a/docs/product/size-analysis/insights.mdx b/docs/product/size-analysis/insights.mdx index 47be109cbbcb9c..854e47a203dafe 100644 --- a/docs/product/size-analysis/insights.mdx +++ b/docs/product/size-analysis/insights.mdx @@ -4,6 +4,8 @@ sidebar_order: 60 description: Explore how Size Analysis highlights trends and comparisons across your builds. --- +TODO: MAKE BETTER OR DELETE + Size Analysis Insights point out how your app is wasting space. For information on the insights available for each platform, see the [Android](/platforms/android/size-analysis/insights/) and [iOS](/platforms/apple/guides/ios/size-analysis/insights/) guides. diff --git a/docs/product/size-analysis/integrating-into-ci.mdx b/docs/product/size-analysis/integrating-into-ci.mdx index 66d5e10d54b876..1119df9166168f 100644 --- a/docs/product/size-analysis/integrating-into-ci.mdx +++ b/docs/product/size-analysis/integrating-into-ci.mdx @@ -4,6 +4,8 @@ sidebar_order: 40 description: Set up the GitHub integration to receive size change notifications as PR comments and status checks. --- +TODO: THIS IS SLOP + The GitHub integration brings Size Analysis directly into your pull request workflow by posting size change summaries as PR comments and status checks. From 97371a359033cefae94a211f9d575fa2041219bd Mon Sep 17 00:00:00 2001 From: Nelson Osacky Date: Tue, 28 Oct 2025 10:41:25 +0100 Subject: [PATCH 14/67] Add links to authenticate --- docs/product/size-analysis/integrating-into-ci.mdx | 4 ++-- includes/size-analysis/upload-cli-android.mdx | 4 ++-- includes/size-analysis/upload-cli-ios.mdx | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/product/size-analysis/integrating-into-ci.mdx b/docs/product/size-analysis/integrating-into-ci.mdx index 1119df9166168f..851fe846087a36 100644 --- a/docs/product/size-analysis/integrating-into-ci.mdx +++ b/docs/product/size-analysis/integrating-into-ci.mdx @@ -87,8 +87,8 @@ Check that: - The Sentry GitHub App is installed and has access to your repository - You're uploading builds from both PR branches and the base branch - Your CI is running on pull request events -- The `SENTRY_AUTH_TOKEN` is set correctly in your CI environment -- Your builds have the same build configuration (for example, both are `Release` builds) +- Ensure that you are authenticated by [following these steps](https://docs.sentry.io/cli/configuration/#to-authenticate-manually). +- Your builds that you want to compare have the same build configuration (for example, both are `Release` builds) ### Comments Not Updating? diff --git a/includes/size-analysis/upload-cli-android.mdx b/includes/size-analysis/upload-cli-android.mdx index 77db14f0175ba3..52f4035e80d312 100644 --- a/includes/size-analysis/upload-cli-android.mdx +++ b/includes/size-analysis/upload-cli-android.mdx @@ -1,6 +1,6 @@ -1. Configure the [sentry-cli](/cli/) +1. Install the [sentry-cli](/cli/) -2. Set up `SENTRY_AUTH_TOKEN` in your environment (you can generate a token [here](https://sentry.sentry.io/settings/auth-tokens/)) +2. Authenticate the sentry-cli by [following these steps](https://docs.sentry.io/cli/configuration/#to-authenticate-manually). 3. Build your app to create an AAB (preferred) or APK diff --git a/includes/size-analysis/upload-cli-ios.mdx b/includes/size-analysis/upload-cli-ios.mdx index 3cbe99fa404602..5eec3aba8b96b0 100644 --- a/includes/size-analysis/upload-cli-ios.mdx +++ b/includes/size-analysis/upload-cli-ios.mdx @@ -1,6 +1,6 @@ 1. Configure the [sentry-cli](/cli/) -2. Set up `SENTRY_AUTH_TOKEN` in your environment (you can generate a token [here](https://sentry.sentry.io/settings/auth-tokens/)) +2. Authenticate the sentry-cli by [following these steps](https://docs.sentry.io/cli/configuration/#to-authenticate-manually). 3. Build your app to create an XCArchive (preferred) or IPA From a447287431dc40174cc6fbe9a1fbfc5a67e8ae3b Mon Sep 17 00:00:00 2001 From: Nelson Osacky Date: Tue, 28 Oct 2025 11:37:20 +0100 Subject: [PATCH 15/67] docs(size-analysis): Add best practices and vcsInfo documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add best practices sections to Android and iOS size analysis pages covering release build uploads, CI integration for main branch and PRs. Document vcsInfo extension for overriding metadata in Gradle plugin, including all available properties and examples for both Kotlin and Groovy DSL. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../platforms/android/size-analysis/index.mdx | 6 +- .../apple/guides/ios/size-analysis/index.mdx | 6 +- includes/size-analysis/upload-gradle.mdx | 61 ++++++++++++++++++- 3 files changed, 69 insertions(+), 4 deletions(-) diff --git a/docs/platforms/android/size-analysis/index.mdx b/docs/platforms/android/size-analysis/index.mdx index 65a001bc6dddbf..b1969596740d82 100644 --- a/docs/platforms/android/size-analysis/index.mdx +++ b/docs/platforms/android/size-analysis/index.mdx @@ -33,6 +33,10 @@ description: Upload Android builds to Sentry for Size Analysis. ## Best Practices -TODO: stuff like upload release builds (anything else) ((maybe this should be in the product section???)) +- **Upload release builds only** - Only upload optimized release builds to get accurate size metrics that represent what users download. Debug builds contain extra symbols and debugging information that inflate the size. + +- **Upload on every commit to main** - Configure your CI pipeline to upload builds for every commit merged to your main branch. This creates a complete historical record of your app's size evolution and helps identify which commits introduced size changes. + +- **Upload on every PR** - Set up CI to upload builds for every pull request. This enables automatic size comparisons between the PR build and the base branch, allowing you to catch size regressions during code review before merging. diff --git a/docs/platforms/apple/guides/ios/size-analysis/index.mdx b/docs/platforms/apple/guides/ios/size-analysis/index.mdx index 5fa2e057e4d752..6369648174bf64 100644 --- a/docs/platforms/apple/guides/ios/size-analysis/index.mdx +++ b/docs/platforms/apple/guides/ios/size-analysis/index.mdx @@ -32,6 +32,10 @@ description: Upload iOS builds to Sentry for size analysis. ## Best Practices -TODO: stuff like upload release builds (anything else) ((maybe this should be in the product section???)) +- **Upload release builds only** - Only upload optimized release builds to get accurate size metrics that represent what users download. Debug builds contain extra symbols and debugging information that inflate the size. + +- **Upload on every commit to main** - Configure your CI pipeline to upload builds for every commit merged to your main branch. This creates a complete historical record of your app's size evolution and helps identify which commits introduced size changes. + +- **Upload on every PR** - Set up CI to upload builds for every pull request. This enables automatic size comparisons between the PR build and the base branch, allowing you to catch size regressions during code review before merging. diff --git a/includes/size-analysis/upload-gradle.mdx b/includes/size-analysis/upload-gradle.mdx index 145e56b04873ad..75f385e18ae784 100644 --- a/includes/size-analysis/upload-gradle.mdx +++ b/includes/size-analysis/upload-gradle.mdx @@ -1,4 +1,4 @@ -The Gradle plugin will automatically detect your [build's metadata](#upload-metadata) and include it in the upload. If for any reason you need to override values, you can... TODO: show gradle override +The Gradle plugin will automatically detect your [build's metadata](#upload-metadata) and include it in the upload. If for any reason you need to override values, you can use the `vcsInfo` extension. 1. Configure the [Sentry Android Gradle plugin](/platforms/android/configuration/gradle/) @@ -38,4 +38,61 @@ _TODO: the text for #3 doesn't make sense given the code snippet. Shouldn't the _TODO: do we have difference between bundleRelease and assembleRelease anywhere?_ -You can see an example of the Gradle plugin in action [here](TODO:LINK). +### Overriding Metadata + +The Gradle plugin automatically detects build metadata from your git repository. On GitHub Actions, all metadata is automatically detected. On other CI systems, you may need to manually set some values using the `vcsInfo` extension. + +Configure overrides in your `build.gradle.kts`: + +```kotlin {filename:build.gradle.kts} +sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").isPresent + } + + vcsInfo { + headSha.set("abc123") + baseSha.set("def456") + vcsProvider.set("github") + headRepoName.set("organization/repository") + baseRepoName.set("organization/repository") + headRef.set("feature-branch") + baseRef.set("main") + prNumber.set(42) + } +} +``` + +Or for `build.gradle`: + +```groovy {filename:build.gradle} +sentry { + sizeAnalysis { + enabled = providers.environmentVariable("GITHUB_ACTIONS").present + } + + vcsInfo { + headSha = 'abc123' + baseSha = 'def456' + vcsProvider = 'github' + headRepoName = 'organization/repository' + baseRepoName = 'organization/repository' + headRef = 'feature-branch' + baseRef = 'main' + prNumber = 42 + } +} +``` + +Available `vcsInfo` properties: + +| Property | Type | Description | +| --- | --- | --- | +| `headSha` | String | Current commit SHA | +| `baseSha` | String | Base commit SHA (for comparison) | +| `vcsProvider` | String | VCS provider (e.g., "github") | +| `headRepoName` | String | Repository name (org/repo format) | +| `baseRepoName` | String | Base repository name | +| `headRef` | String | Branch or tag name | +| `baseRef` | String | Base branch name | +| `prNumber` | Int | Pull request number | From 269f0747a7d6e1ca0442e73623fa7c7ad11b799c Mon Sep 17 00:00:00 2001 From: Nelson Osacky Date: Tue, 28 Oct 2025 11:48:35 +0100 Subject: [PATCH 16/67] docs(size-analysis): Add Fastlane metadata override documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Document how to override build metadata in Fastlane plugin, including all available parameters and environment variables. Clarify that GitHub Actions auto-detects metadata while other CI systems require manual configuration. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- includes/size-analysis/upload-fastlane.mdx | 47 +++++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/includes/size-analysis/upload-fastlane.mdx b/includes/size-analysis/upload-fastlane.mdx index 1067ab010c3945..9e9ab90a494073 100644 --- a/includes/size-analysis/upload-fastlane.mdx +++ b/includes/size-analysis/upload-fastlane.mdx @@ -1,4 +1,4 @@ -The Fastlane plugin can be used to upload XCArchive or IPA builds to Sentry. Fastlane will automatically detect your [build's metadata](#upload-metadata) and include it in the upload. If for any reason you need to override values, you can... TODO: show fastlane override, maybe at bottom of this? +The Fastlane plugin can be used to upload XCArchive or IPA builds to Sentry. On GitHub Actions, Fastlane will automatically detect your [build's metadata](#upload-metadata) and include it in the upload. In other CI environments, you may need to manually set metadata values. 1. Configure the [Sentry Fastlane plugin](/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) (version `1.34.0` or higher). @@ -24,4 +24,47 @@ The Fastlane plugin can be used to upload XCArchive or IPA builds to Sentry. Fas end ``` - 4. Confirm your upload's metadata is correct in the Sentry UI. (TODO: pic of sidebar metadata) +4. Confirm your upload's metadata is correct in the Sentry UI. (TODO: pic of sidebar metadata) + +### Overriding Metadata + +On GitHub Actions, the Fastlane plugin automatically detects all build metadata. On other CI systems, you can manually set metadata values by passing parameters to `sentry_upload_build`: + +```ruby {filename:Fastfile} +lane :upload_to_sentry do + build_ios_app( + scheme: 'YourScheme', + configuration: 'Release', + ) + sentry_upload_build( + org_slug: 'your-org', + project_slug: 'your-project', + build_configuration: 'Release', + # Optional metadata overrides: + head_sha: 'abc123', + base_sha: 'def456', + vcs_provider: 'github', + head_repo_name: 'organization/repository', + base_repo_name: 'organization/repository', + head_ref: 'feature-branch', + base_ref: 'main', + pr_number: '42' + ) +end +``` + +Available metadata parameters: + +| Parameter | Description | +| --- | --- | +| `head_sha` | Current commit SHA | +| `base_sha` | Base commit SHA (for comparison) | +| `vcs_provider` | VCS provider (e.g., "github") | +| `head_repo_name` | Repository name (org/repo format) | +| `base_repo_name` | Base repository name | +| `head_ref` | Branch or tag name | +| `base_ref` | Base branch name | +| `pr_number` | Pull request number | +| `build_configuration` | Build configuration (e.g., "Release", "Debug") | + +You can also set these values via environment variables: `SENTRY_HEAD_SHA`, `SENTRY_BASE_SHA`, `SENTRY_VCS_PROVIDER`, `SENTRY_HEAD_REPO_NAME`, `SENTRY_BASE_REPO_NAME`, `SENTRY_HEAD_REF`, `SENTRY_BASE_REF`, `SENTRY_PR_NUMBER`, and `SENTRY_BUILD_CONFIGURATION`. Explicit parameters take precedence over environment variables. From 589f4844e72ca4e247f39cd94ace73888eee7d5e Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Tue, 28 Oct 2025 09:38:58 -0400 Subject: [PATCH 17/67] noah comments --- .../apple/guides/ios/size-analysis/insights.mdx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx index 671ac3d298837c..d12e23a8ce81a1 100644 --- a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx +++ b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx @@ -29,17 +29,17 @@ Below are a list of available insights for iOS builds. ### Strip debug symbols -**What it is**: Flags Mach-O binaries that still ship debug sections or symbol tables. +**What it is**: Flags binaries that still ship debug sections or symbol tables. -**How to fix**: Strip symbols only when you also upload dSYMs, otherwise crash reports will not resolve. +**How to fix**: Strip symbols in release builds, use symbols in separate dSYM files for crash reporters. - Stripping symbols before uploading dSYMs breaks crash symbolication. Confirm + Stripping symbols before creating a dSYM breaks crash symbolication. Confirm your release build still produces and uploads dSYMs (or another crash reporter has them) before stripping. -Swift binaries often hold large symbol sets that the dynamic linker uses only during debugging. Xcode’s old bitcode pipeline removed them automatically, but bitcode is deprecated in Xcode 14 and later. +Swift binaries often hold large symbol sets that the dynamic linker uses only during debugging. Strip a single binary with: @@ -51,6 +51,12 @@ strip -rSTx AppBinary -o AppBinaryStripped To automate stripping at the end of the build, add a Run Script phase that skips non-release builds and leaves Apple-signed frameworks untouched: + + This script will strip the main app binary along with any binaries in the + `/Frameworks` directory. This is a sample script that **may require + adjustments** for your project. + + ```bash #!/bin/bash set -e @@ -269,8 +275,6 @@ This script strips comments and blank lines after the files are generated, so ke **How to fix**: Maintain a minimal allowlist so only required entry points stay exported. -Since Xcode 16 no longer injects `_main` automatically, avoid the old `-exported_symbols_list /dev/null` workaround (it strips `_main` and crashes on launch). - 1. Create a text file in your project, for example `Config/ExportedSymbols.txt`. 2. Add `_main` on its own line. Add `__mh_execute_header` if you use Crashlytics or other tooling that finds symbols dynamically with `dlsym`. 3. If you rely on other dynamic lookups, list those symbols too. From f5591b1b552a032ac6081366d80413f85645700d Mon Sep 17 00:00:00 2001 From: Trevor Elkins Date: Tue, 28 Oct 2025 10:56:59 -0400 Subject: [PATCH 18/67] ios insights --- .../guides/ios/size-analysis/insights.mdx | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx index d12e23a8ce81a1..e04f4dec5067cb 100644 --- a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx +++ b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx @@ -12,20 +12,20 @@ Size Analysis Insights point out how iOS app can reduce its size. They spot patt Below are a list of available insights for iOS builds. -| Insight | What it catches | -| ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| [Strip debug symbols](#strip-debug-symbols) | Shows binaries that still include removable debug sections or symbols. | -| [Duplicate files](#duplicate-files) | Flags identical files where you can keep once and drop the additional copies. | -| [Image optimization](#image-optimization) | Surfaces oversized PNG/JPEG/HEIC assets and recommends recompressing or converting to HEIC. | -| [Alternate icon optimization](#alternate-icon-optimization) | Checks alternate app icons for downscaling and recompressing. | -| [Loose images](#loose-images) | Flags @1x/@2x/@3x images that should be move into asset catalogs so they qualify for app thinning. | -| [Small files](#small-files) | Totals tiny files wasting space because of 4 KB filesystem blocks. | -| [Unnecessary files](#unnecessary-files) | Catches docs, scripts, configs, or other build leftovers in the bundle. | -| [Large videos](#large-videos) | Highlights video files that are bigger than typical delivery budgets. | -| [Localized strings](#localized-strings) | Estimates savings from shrinking `.strings` payloads. | -| [Minify localized strings](#minify-localized-strings) | Measures wins from stripping comments and whitespace in `.strings` files. | -| [Main binary export metadata](#main-binary-export-metadata) | Reports export tries on main binaries that are not needed. | -| [Hermes debug info (RN only)](#hermes-debug-info-rn-only) | Show bundled Hermes bytecode with removable debug info. | +| Insight | What it catches | +| ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| [Strip debug symbols](#strip-debug-symbols) | Binaries that include removable debug sections or symbols. | +| [Duplicate files](#duplicate-files) | Identical files where the extras can be removed. | +| [Image optimization](#image-optimization) | Oversized PNG/JPEG/HEIC assets and recommends minifying or converting to HEIC. | +| [Alternate icon optimization](#alternate-icon-optimization) | Alternate app icons that can be downscaled and recompressed. | +| [Loose images](#loose-images) | Scaled @1x/@2x/@3x images that should be moved into asset catalogs to qualify for app thinning. | +| [Small files](#small-files) | Tiny files wasting space because of the 4KB filesystem block size. | +| [Unnecessary files](#unnecessary-files) | Docs, scripts, configs, or other build leftovers in the bundle. | +| [Large videos](#large-videos) | Video files that are a good candidate for on-demand delivery. | +| [Localized strings](#localized-strings) | Localized strings that can use a more efficient format. | +| [Minify localized strings](#minify-localized-strings) | Localized string files that contain removable whitespace and comments. | +| [Main binary export metadata](#main-binary-export-metadata) | Binaries that include removable export tries. | +| [Hermes debug info (RN only)](#hermes-debug-info-rn-only) | Hermes bytecode files that include removable debug info. | ### Strip debug symbols From a7827d77e2eeb26a13d894abddfe5674f5a6b12b Mon Sep 17 00:00:00 2001 From: Trevor Elkins Date: Tue, 28 Oct 2025 11:42:07 -0400 Subject: [PATCH 19/67] ios insights --- .../guides/ios/size-analysis/insights.mdx | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx index e04f4dec5067cb..8fe245976bb790 100644 --- a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx +++ b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx @@ -29,9 +29,9 @@ Below are a list of available insights for iOS builds. ### Strip debug symbols -**What it is**: Flags binaries that still ship debug sections or symbol tables. +**What it is**: Debug info and symbols are only used during development and should not be shipped to users. -**How to fix**: Strip symbols in release builds, use symbols in separate dSYM files for crash reporters. +**How to fix**: Strip symbols from release builds and instead use debug symbols in separate dSYM files for crash reporters. Stripping symbols before creating a dSYM breaks crash symbolication. Confirm @@ -39,21 +39,19 @@ Below are a list of available insights for iOS builds. has them) before stripping. -Swift binaries often hold large symbol sets that the dynamic linker uses only during debugging. +In Xcode ensure your release configuration sets the `Debug Information Format` build setting to `DWARF with dSYM`. -Strip a single binary with: +The `strip` command can then remove the extra information: ```bash strip -rSTx AppBinary -o AppBinaryStripped ``` -`-T` removes Swift symbols; the other flags drop debug and local symbols. - -To automate stripping at the end of the build, add a Run Script phase that skips non-release builds and leaves Apple-signed frameworks untouched: +To automate stripping in your project after building, add a Run Script phase that skips non-release builds and leaves Apple-signed frameworks untouched: This script will strip the main app binary along with any binaries in the - `/Frameworks` directory. This is a sample script that **may require + `Frameworks/` directory. This is a sample script that **may require adjustments** for your project. @@ -89,11 +87,11 @@ Contents/Resources/DWARF/${EXECUTABLE_NAME} **What it is**: Finds identical files bundled more than once. -**How to fix**: Use dynamic frameworks to share assets between multiple targets. Here's an [example a post](https://www.emergetools.com/blog/posts/make-your-ios-app-smaller-with-dynamic-frameworks) walking through how to do this (for SPM projects). +**How to fix**: Use dynamic frameworks to share assets between multiple targets. Here's an [example a post](https://www.emergetools.com/blog/posts/make-your-ios-app-smaller-with-dynamic-frameworks) walking through how to do this for an SPM project. ### Image optimization -**What it is**: Surfaces PNG, JPEG, or HEIC assets that can be recompressed or converted. +**What it is**: Surfaces PNG, JPEG, or HEIC assets that can be minified or converted. **How to fix**: Pick one of these workflows, then replace the source asset with the optimized version. If you convert to HEIC, update the asset catalog reference. @@ -120,7 +118,7 @@ Open the image in Preview, choose `File → Export`, pick `HEIC`, and save. Repl ### Alternate icon optimization -**What it is**: Checks alternate app icons that are larger than homescreen quality demands. +**What it is**: Alternate app icons are only ever shown on the home screen which requires 180x180 pixels. These images can be downsized to 180x180 and then upsampled back to 1024x1024 to reduce size. **How to fix**: Run one of the scripts below to resize to homescreen quality and save an optimized copy. Then update the alternate icon entry in your `.xcassets` catalog (and Info.plist if you change the filename). @@ -158,7 +156,7 @@ optimize_icon() { } ``` -> Update the Info.plist alternate icon entry to point at the new `.heic` file. +Update the Info.plist alternate icon entry to point at the new `.heic` file. #### Option: Keep PNG @@ -191,37 +189,37 @@ optimize_icon() { ### Loose images -**What it is**: Finds @1x/@2x/@3x resources stored outside asset catalogs, so app thinning cannot remove unused scales. +**What it is**: Finds scaled @1x/@2x/@3x images stored outside of asset catalogs. This prevents app thinning from removing variants not needed for the user's device. -**How to fix**: Move each image set into an `.xcassets` catalog so Xcode trims unused variants per device download. +**How to fix**: Move each image set into an asset catalog in Xcode. ### Small files -**What it is**: Totals tiny files that each consume a full 4 KB filesystem block. +**What it is**: Each file on iOS takes up a minimum of 4KB due to the filesystem's block size. Files smaller than this limit will take up more storage on disk than expected. Every file inside the app also has code signature overhead which can add up with many files. -**How to fix**: Group related data into asset catalogs, archives, or databases so multiple entries share the same file on disk. +**How to fix**: Group small files into asset catalogs, archives, or databases so multiple entries share the same file on disk. ### Unnecessary files -**What it is**: Flags docs, scripts, configs, and similar build leftovers in the app bundle. +**What it is**: Files such as READMEs, docs, scripts, configs, and similar build leftovers do not need to be included in the app bundle. -**How to fix**: Drop them from the Copy Bundle Resources phase or exclude them with `EXCLUDED_SOURCE_FILE_NAMES` before archiving. +**How to fix**: Drop these files from the Copy Bundle Resources phase or exclude them with `EXCLUDED_SOURCE_FILE_NAMES` before archiving. ### Large videos -**What it is**: Highlights video assets larger than 10 MB. +**What it is**: Video assets larger than 10 MB are not recommended to be bundled in your app. Often times videos are only shown to a subset of users and could instead be shown on-demand. -**How to fix**: Re-encode them with H.264 or HEVC at a lower bitrate or resolution, or host and stream the content instead of bundling it. +**How to fix**: host and stream the content instead of bundling it, or re-encode them with H.264 or HEVC at a lower bitrate or resolution. ### Localized strings -**What it is**: Totals `.strings` payloads whose size suggests room for compression. +**What it is**: Xcode localized strings files use a verbose dictionary format by default. -**How to fix**: Deduplicate entries, move long copy to server-delivered content, or adopt a compact format such as Sentry's SmallStrings helper. +**How to fix**: Sentry's SmallStrings helper library is a more efficient method of encoding translations. ### Minify localized strings -**What it is**: Measures extra space in `.strings` files caused by binary encodings, translator comments, and other non-runtime text. +**What it is**: Xcode localized strings files often include translator comments, whitespace, binary encodings, and other non-runtime text that can be safely stripped. **How to fix**: Start with low-effort cleanup, then automate comment stripping if you still ship large payloads. @@ -271,7 +269,7 @@ This script strips comments and blank lines after the files are generated, so ke ### Main binary export metadata -**What it is**: Highlights exported symbols inside your main app binary. The linker includes these identifiers for external consumers, but no other app links against your binary, so they only bloat the export trie. +**What it is**: Binaries that act as entrypoints for your app, such as your main app binary or watchOS app binary, are not linked against by other binaries. This means the export trie information is unnecessary and can be removed. **How to fix**: Maintain a minimal allowlist so only required entry points stay exported. @@ -284,8 +282,13 @@ This script strips comments and blank lines after the files are generated, so ke Xcode now limits the export trie to just that allowlist. -### Hermes debug info (RN only) +### Hermes debug info (React Native) + +**What it is**: Debug information is only needed during development and should not be shipped to users. -**What it is**: Finds Hermes bytecode bundles that still contain debug info sections. +**How to fix**: Enable [Source maps](https://reactnative.dev/docs/debugging-release-builds) when building your release app. -**How to fix**: Generate the bundle in release mode (for example, `react-native bundle --dev false` or the Xcode release task) so Hermes strips debug data before packaging. + + Stripping debug information breaks crash symbolication. Source maps need to be + uploaded separately to your crash reporter. + From 56947515340924442f3fdc400e96912018305f7c Mon Sep 17 00:00:00 2001 From: Trevor Elkins Date: Tue, 28 Oct 2025 12:04:27 -0400 Subject: [PATCH 20/67] ios setup --- .../size-analysis/build-configuration-ios.mdx | 6 ++--- includes/size-analysis/upload-fastlane.mdx | 20 ++--------------- includes/size-analysis/upload-metadata.mdx | 22 +++++++++---------- 3 files changed, 15 insertions(+), 33 deletions(-) diff --git a/includes/size-analysis/build-configuration-ios.mdx b/includes/size-analysis/build-configuration-ios.mdx index 8fed91061d4c83..fa61543da68f7b 100644 --- a/includes/size-analysis/build-configuration-ios.mdx +++ b/includes/size-analysis/build-configuration-ios.mdx @@ -1,5 +1,3 @@ -Build configuration metadata keeps comparisons scoped to like-for-like builds. For example, on a PR status check, the comparison will only be made for builds with the same build configuration. +Features such as automatically comparing the head build against the base build **will only compare builds of the same build configuration**. This is important to consider when setting up Size Analysis in your CI. For example, `Release` and `Debug` builds can be drastically different depending on the compiler and linker settings used during the build process. Trying to compare the two would give unexpected results. -The iOS Fastlane plugin sends the build variant (for example, `Release` or `Debug`). - -TODO: put more on iOS build configuration +Sometimes this is expected though, say if you want to test the impact of converting your project to use Bazel (e.g. `Release` vs `Release-Bazel`). In this case, it's still possible to perform a manual comparison of builds with different build configurations. diff --git a/includes/size-analysis/upload-fastlane.mdx b/includes/size-analysis/upload-fastlane.mdx index 9e9ab90a494073..438d5784549ee3 100644 --- a/includes/size-analysis/upload-fastlane.mdx +++ b/includes/size-analysis/upload-fastlane.mdx @@ -26,9 +26,7 @@ The Fastlane plugin can be used to upload XCArchive or IPA builds to Sentry. On 4. Confirm your upload's metadata is correct in the Sentry UI. (TODO: pic of sidebar metadata) -### Overriding Metadata - -On GitHub Actions, the Fastlane plugin automatically detects all build metadata. On other CI systems, you can manually set metadata values by passing parameters to `sentry_upload_build`: +The Fastlane plugin automatically detects all build metadata. If needed, the metadata values can be overriden by passing parameters to `sentry_upload_build`: ```ruby {filename:Fastfile} lane :upload_to_sentry do @@ -53,18 +51,4 @@ lane :upload_to_sentry do end ``` -Available metadata parameters: - -| Parameter | Description | -| --- | --- | -| `head_sha` | Current commit SHA | -| `base_sha` | Base commit SHA (for comparison) | -| `vcs_provider` | VCS provider (e.g., "github") | -| `head_repo_name` | Repository name (org/repo format) | -| `base_repo_name` | Base repository name | -| `head_ref` | Branch or tag name | -| `base_ref` | Base branch name | -| `pr_number` | Pull request number | -| `build_configuration` | Build configuration (e.g., "Release", "Debug") | - -You can also set these values via environment variables: `SENTRY_HEAD_SHA`, `SENTRY_BASE_SHA`, `SENTRY_VCS_PROVIDER`, `SENTRY_HEAD_REPO_NAME`, `SENTRY_BASE_REPO_NAME`, `SENTRY_HEAD_REF`, `SENTRY_BASE_REF`, `SENTRY_PR_NUMBER`, and `SENTRY_BUILD_CONFIGURATION`. Explicit parameters take precedence over environment variables. +See the [Fastlane repo](https://github.com/getsentry/sentry-fastlane-plugin) for more information. diff --git a/includes/size-analysis/upload-metadata.mdx b/includes/size-analysis/upload-metadata.mdx index 6bb0d08fda887e..f53841708a4155 100644 --- a/includes/size-analysis/upload-metadata.mdx +++ b/includes/size-analysis/upload-metadata.mdx @@ -1,15 +1,15 @@ We use build metadata to organize builds in the UI and ensure correct comparisons. -| Field | Description | -| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `org`\* | Sentry organization slug | -| `project`\* | Sentry project slug | -| `build-configuration`\* | Build configuration (for example, `Release`, `Debug`). Used to ensure builds with different configurations are not compared. | -| `head-sha` | Current commit SHA | -| `base-sha` | Base commit SHA (for comparison) | -| `head-repo-name` | Repository name (`org/repo`) | -| `pr-number` | Pull request number | -| `head-ref` | Branch or tag name | -| `base-ref` | Base branch name | +| Field | Description | +| ----------------------- | --------------------------------------------------------------------------------------------------------- | +| `org`\* | Sentry organization slug | +| `project`\* | Sentry project slug | +| `build-configuration`\* | Build configuration describing how the app was built, for example `Release` or `Debug` or `Release-Bazel` | +| `head-sha` | Current commit SHA | +| `base-sha` | Base commit SHA (for comparison) | +| `head-repo-name` | Repository name (`org/repo`) | +| `pr-number` | Pull request number | +| `head-ref` | Branch or tag name | +| `base-ref` | Base branch name | \* _required field_ From 07faf8daf9c17eca4196ecc9fcf4788dd81c205d Mon Sep 17 00:00:00 2001 From: Nelson Osacky Date: Wed, 29 Oct 2025 15:59:27 +0000 Subject: [PATCH 21/67] docs(size-analysis): Refine CI integration and upload docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Simplify CI integration documentation by focusing on GitHub status checks and streamlining setup instructions. Update Gradle upload instructions for clarity and fix iOS CLI setup wording. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../size-analysis/integrating-into-ci.mdx | 79 +++---------------- includes/size-analysis/upload-cli-ios.mdx | 2 +- includes/size-analysis/upload-gradle.mdx | 24 +++--- 3 files changed, 26 insertions(+), 79 deletions(-) diff --git a/docs/product/size-analysis/integrating-into-ci.mdx b/docs/product/size-analysis/integrating-into-ci.mdx index 851fe846087a36..dad3ecce591da4 100644 --- a/docs/product/size-analysis/integrating-into-ci.mdx +++ b/docs/product/size-analysis/integrating-into-ci.mdx @@ -1,14 +1,12 @@ --- title: Integrating into CI sidebar_order: 40 -description: Set up the GitHub integration to receive size change notifications as PR comments and status checks. +description: Set up the GitHub integration to receive size change notifications as Github status checks. --- -TODO: THIS IS SLOP - -The GitHub integration brings Size Analysis directly into your pull request workflow by posting size change summaries as PR comments and status checks. +The GitHub integration brings Size Analysis directly into your pull request workflow by adding status checks for size analysis. TODO: something like a ##benefits? @@ -16,23 +14,15 @@ TODO: something like a ##benefits? ### Install the Sentry GitHub App -The GitHub integration requires the Sentry GitHub App to be installed on your repository: - -1. Navigate to **Organization Settings > Integrations** in [sentry.io](https://sentry.io) -2. Find the **GitHub** integration and click **Install** -3. Follow the prompts to authorize the app for your GitHub organization -4. Select the repositories where you want to enable Size Analysis +Install the Sentry Github App by following the installation instructions in the [GitHub integration documentation](https://docs.sentry.io/organization/integrations/source-code-mgmt/github/). -For detailed installation instructions, see the [GitHub integration documentation](https://docs.sentry.io/organization/integrations/source-code-mgmt/github/). +### Upload builds -### Configure Repository Access +1. Set up size analysis by following the guide for [iOS](/platforms/apple/guides/ios/size-analysis/) or [Android](/platforms/android/size-analysis/). -Ensure the Sentry GitHub App has access to the repositories where you're uploading builds: +2. Ensure all base branch builds are uploading builds. -1. Go to your GitHub organization settings -2. Navigate to **Integrations > Applications** -3. Click on **Sentry** -4. Under **Repository access**, grant access to your repositories +3. Ensure all PR builds are uploading builds. ## How It Works @@ -45,56 +35,21 @@ Once the integration is set up and you're uploading builds from your CI: 3. **Comparison**: Sentry compares the two builds 4. **PR comment**: A comment is posted with the size change summary -### Comment Content - -The PR comment includes: - -- **Total size change**: How much the app grew or shrank (for example, `+142 KB` or `-23 KB`) -- **Percentage change**: The relative impact (for example, `+2.3%`) -- **Component highlights**: The components that changed the most -- **Link to details**: A link to view the full comparison in [sentry.io](https://sentry.io) - ### Example Status Check -``` -## 📊 Size Analysis - -**App size changed by +142 KB (+2.3%)** - -### Largest Changes -- `Frameworks/MyFramework.framework`: +98 KB -- `Resources/Assets.car`: +52 KB -- `Binary`: -8 KB - -[View detailed comparison →](https://sentry.io/...) -``` - -## Requirements - -For the GitHub integration to work with Size Analysis: - -1. **GitHub App installed**: The Sentry GitHub App must be installed on your repository -2. **Builds from PRs**: You must upload builds from pull request CI runs -3. **Base branch builds**: You must also upload builds from your main/base branch -4. **Metadata**: Your build uploads must include PR metadata (auto-detected in GitHub Actions) +TODO: Add image here of status check example ## Troubleshooting -### Not Seeing PR Comments? +### Not Seeing status checks ? Check that: - The Sentry GitHub App is installed and has access to your repository -- You're uploading builds from both PR branches and the base branch -- Your CI is running on pull request events -- Ensure that you are authenticated by [following these steps](https://docs.sentry.io/cli/configuration/#to-authenticate-manually). +- You're correctly uploading builds for size analysis from all base branch builds +- You're correctly uploading builds for size analysis from the PR branch. - Your builds that you want to compare have the same build configuration (for example, both are `Release` builds) - -### Comments Not Updating? - -- Make sure you're uploading a new build after each code change -- Check that the build configuration matches between PR and base builds -- Verify that the PR metadata (PR number, base SHA) is being detected correctly +- You're builds contain all the required metadata. TODO link to required metadat ### Missing Base Build? @@ -103,16 +58,6 @@ The first time you set up Size Analysis, your main branch may not have any build 1. Merge a PR or push to your main branch to trigger a build 2. Future PRs will be able to compare against this base build -## Permissions - -The GitHub App requires these permissions: - -- **Read access to code**: To identify the repository and branches -- **Write access to pull requests**: To post comments on PRs -- **Write access to checks**: To create status checks (coming soon) - -These permissions are requested during the GitHub App installation flow. - ## Next Steps - [Upload your first build](/product/size-analysis/uploading-builds/) to start seeing size analysis diff --git a/includes/size-analysis/upload-cli-ios.mdx b/includes/size-analysis/upload-cli-ios.mdx index 5eec3aba8b96b0..d1989af33ff101 100644 --- a/includes/size-analysis/upload-cli-ios.mdx +++ b/includes/size-analysis/upload-cli-ios.mdx @@ -1,4 +1,4 @@ -1. Configure the [sentry-cli](/cli/) +1. Install the [sentry-cli](/cli/) 2. Authenticate the sentry-cli by [following these steps](https://docs.sentry.io/cli/configuration/#to-authenticate-manually). diff --git a/includes/size-analysis/upload-gradle.mdx b/includes/size-analysis/upload-gradle.mdx index 75f385e18ae784..a970a74d4b82b1 100644 --- a/includes/size-analysis/upload-gradle.mdx +++ b/includes/size-analysis/upload-gradle.mdx @@ -1,10 +1,16 @@ The Gradle plugin will automatically detect your [build's metadata](#upload-metadata) and include it in the upload. If for any reason you need to override values, you can use the `vcsInfo` extension. -1. Configure the [Sentry Android Gradle plugin](/platforms/android/configuration/gradle/) +1. Configure the [Sentry Android Gradle plugin](/platforms/android/configuration/gradle/) with at least version `6.0.0-alpha.6` -2. Set up `SENTRY_AUTH_TOKEN` in your environment (you can generate a token [here](https://sentry.sentry.io/settings/auth-tokens/)) +2. Set the auth token as an environment variable to be used when running your release build. -3. Make sure to use at least version `6.0.0-alpha.6` or higher in your `build.gradle.kts`: + + +```bash +export SENTRY_AUTH_TOKEN=___ORG_AUTH_TOKEN___ +``` + +3. Enable uploading for size analysis for CI builds. ```kotlin {filename:build.gradle.kts} sentry { @@ -14,8 +20,6 @@ The Gradle plugin will automatically detect your [build's metadata](#upload-meta } ``` - Or for `build.gradle`: - ```groovy {filename:build.gradle} sentry { sizeAnalysis { @@ -24,13 +28,13 @@ The Gradle plugin will automatically detect your [build's metadata](#upload-meta } ``` -_TODO: the text for #3 doesn't make sense given the code snippet. Shouldn't the version be in #1?_ - 4. Invoke the following Gradle tasks to build your app and trigger the upload. - ```bash + ```bash {filename:aab} ./gradlew bundleRelease - # or + ``` + + ```bash {filename:apk} ./gradlew assembleRelease ``` @@ -63,8 +67,6 @@ sentry { } ``` -Or for `build.gradle`: - ```groovy {filename:build.gradle} sentry { sizeAnalysis { From 9d4d0683902ab7d452bb2e14ae5df4ec2af00e86 Mon Sep 17 00:00:00 2001 From: Nelson Osacky Date: Wed, 29 Oct 2025 16:41:28 +0000 Subject: [PATCH 22/67] docs(size-analysis): Improve installation steps and status check clarity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restructure installation as numbered list, clarify status check behavior, and improve Gradle configuration wording. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- docs/product/size-analysis/integrating-into-ci.mdx | 14 ++++++-------- includes/size-analysis/upload-gradle.mdx | 6 +++--- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/docs/product/size-analysis/integrating-into-ci.mdx b/docs/product/size-analysis/integrating-into-ci.mdx index dad3ecce591da4..5ab24531b76e48 100644 --- a/docs/product/size-analysis/integrating-into-ci.mdx +++ b/docs/product/size-analysis/integrating-into-ci.mdx @@ -12,17 +12,15 @@ TODO: something like a ##benefits? ## Installation -### Install the Sentry GitHub App +1. Install the Sentry Github App by following the installation instructions in the [GitHub integration documentation](https://docs.sentry.io/organization/integrations/source-code-mgmt/github/). -Install the Sentry Github App by following the installation instructions in the [GitHub integration documentation](https://docs.sentry.io/organization/integrations/source-code-mgmt/github/). +2. Set up size analysis by following the guide for [iOS](/platforms/apple/guides/ios/size-analysis/) or [Android](/platforms/android/size-analysis/). -### Upload builds +3. Ensure all base branch builds are uploading builds. -1. Set up size analysis by following the guide for [iOS](/platforms/apple/guides/ios/size-analysis/) or [Android](/platforms/android/size-analysis/). +4. Ensure all PR builds are uploading builds. -2. Ensure all base branch builds are uploading builds. - -3. Ensure all PR builds are uploading builds. +TODO: How much detail should we give in all the above steps or should we just remove them and cite the iOS and Android guides? ## How It Works @@ -33,7 +31,7 @@ Once the integration is set up and you're uploading builds from your CI: 1. **You open a PR**: Your CI builds the app and uploads it to Sentry 2. **Base branch build**: Sentry finds the corresponding build from your base branch 3. **Comparison**: Sentry compares the two builds -4. **PR comment**: A comment is posted with the size change summary +4. **Status check**: A Github status check gives you information about the size of the build and whether or not the build increased in size. ### Example Status Check diff --git a/includes/size-analysis/upload-gradle.mdx b/includes/size-analysis/upload-gradle.mdx index a970a74d4b82b1..147eeda629dd98 100644 --- a/includes/size-analysis/upload-gradle.mdx +++ b/includes/size-analysis/upload-gradle.mdx @@ -30,11 +30,11 @@ export SENTRY_AUTH_TOKEN=___ORG_AUTH_TOKEN___ 4. Invoke the following Gradle tasks to build your app and trigger the upload. - ```bash {filename:aab} + ```aab {filename:aab} ./gradlew bundleRelease ``` - ```bash {filename:apk} + ```apk {filename:apk} ./gradlew assembleRelease ``` @@ -46,7 +46,7 @@ _TODO: do we have difference between bundleRelease and assembleRelease anywhere? The Gradle plugin automatically detects build metadata from your git repository. On GitHub Actions, all metadata is automatically detected. On other CI systems, you may need to manually set some values using the `vcsInfo` extension. -Configure overrides in your `build.gradle.kts`: +Configure overrides in your Gradle build configuration ```kotlin {filename:build.gradle.kts} sentry { From b5759eb71d1e3a627feb6781680d8587e9c2f034 Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Wed, 29 Oct 2025 12:56:38 -0400 Subject: [PATCH 23/67] reword intro paragraphs on sdk pages --- docs/platforms/android/size-analysis/index.mdx | 2 +- docs/platforms/apple/guides/ios/size-analysis/index.mdx | 2 +- docs/platforms/dart/guides/flutter/size-analysis/index.mdx | 2 +- docs/platforms/react-native/size-analysis/index.mdx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/platforms/android/size-analysis/index.mdx b/docs/platforms/android/size-analysis/index.mdx index b1969596740d82..5d58770aba1d17 100644 --- a/docs/platforms/android/size-analysis/index.mdx +++ b/docs/platforms/android/size-analysis/index.mdx @@ -7,7 +7,7 @@ description: Upload Android builds to Sentry for Size Analysis. -[Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in preprod to prevent size regressions from reaching users. Aside from being courteous to your users, a smaller app size helps boost conversion and retention rates for the long-tail of customers. +[Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in pre-production to prevent unexpected size increases (regressions) from reaching users. Aside from being courteous to your users, a smaller app size helps boost installation and retention rates, especially for customers with limited storage or slower connections. ## Getting Started diff --git a/docs/platforms/apple/guides/ios/size-analysis/index.mdx b/docs/platforms/apple/guides/ios/size-analysis/index.mdx index 6369648174bf64..c170dd7e7752bd 100644 --- a/docs/platforms/apple/guides/ios/size-analysis/index.mdx +++ b/docs/platforms/apple/guides/ios/size-analysis/index.mdx @@ -6,7 +6,7 @@ description: Upload iOS builds to Sentry for size analysis. -[Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in preprod to prevent size regressions from reaching users. Aside from being courteous to your users, a smaller app size helps boost conversion and retention rates for the long-tail of customers. +[Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in pre-production to prevent unexpected size increases (regressions) from reaching users. Aside from being courteous to your users, a smaller app size helps boost installation and retention rates, especially for customers with limited storage or slower connections. ## Getting Started diff --git a/docs/platforms/dart/guides/flutter/size-analysis/index.mdx b/docs/platforms/dart/guides/flutter/size-analysis/index.mdx index 8bdf5544f136ae..9922df5cdbfb5d 100644 --- a/docs/platforms/dart/guides/flutter/size-analysis/index.mdx +++ b/docs/platforms/dart/guides/flutter/size-analysis/index.mdx @@ -6,7 +6,7 @@ description: Upload Flutter builds to Sentry for size analysis. -[Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in preprod to prevent size regressions from reaching users. Aside from being courteous to your users, a smaller app size helps boost conversion and retention rates for the long-tail of customers. +[Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in pre-production to prevent unexpected size increases (regressions) from reaching users. Aside from being courteous to your users, a smaller app size helps boost installation and retention rates, especially for customers with limited storage or slower connections. ## Getting Started - iOS diff --git a/docs/platforms/react-native/size-analysis/index.mdx b/docs/platforms/react-native/size-analysis/index.mdx index 6b59307983a33c..7f35919dfbef0f 100644 --- a/docs/platforms/react-native/size-analysis/index.mdx +++ b/docs/platforms/react-native/size-analysis/index.mdx @@ -7,7 +7,7 @@ description: Upload React Native iOS and Android builds to Sentry for size analy -[Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in preprod to prevent size regressions from reaching users. Aside from being courteous to your users, a smaller app size helps boost conversion and retention rates for the long-tail of customers. +[Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in pre-production to prevent unexpected size increases (regressions) from reaching users. Aside from being courteous to your users, a smaller app size helps boost installation and retention rates, especially for customers with limited storage or slower connections. ## Getting Started - iOS From a0d62d73b28a85d3ae67de40c8b816c3e066a10c Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Wed, 29 Oct 2025 13:23:48 -0400 Subject: [PATCH 24/67] alex comments --- .../android/size-analysis/insights.mdx | 44 ++++++++------- .../guides/ios/size-analysis/insights.mdx | 56 +++++++++---------- .../guides/flutter/size-analysis/insights.mdx | 2 +- .../react-native/size-analysis/insights.mdx | 2 +- includes/size-analysis/upload-cli-android.mdx | 4 +- includes/size-analysis/upload-cli-ios.mdx | 4 +- includes/size-analysis/upload-fastlane.mdx | 6 +- includes/size-analysis/upload-gradle.mdx | 2 +- 8 files changed, 62 insertions(+), 58 deletions(-) diff --git a/docs/platforms/android/size-analysis/insights.mdx b/docs/platforms/android/size-analysis/insights.mdx index 6678855418a06d..de53e36ea1f6e2 100644 --- a/docs/platforms/android/size-analysis/insights.mdx +++ b/docs/platforms/android/size-analysis/insights.mdx @@ -6,32 +6,34 @@ description: Preview how Size Analysis reports highlight Android build trends. TODO: ADD SOME PICS -Size Analysis Insights point out how Android app can reduce its size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. +Size Analysis Insights point out how opportunities to reduce your Android app's size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. ## Android Insights -Below are a list of available insights for Android builds. +Below are a list of available insights for Android builds, followed by more details about each insight: -| Insight | What it catches | -| --- | --- | -| [Duplicate files](#duplicate-files) | Flags identical payloads you can keep once and drop the copies. | -| [Large images](#large-images) | Surfaces oversized image assets worth recompressing or resizing. | -| [Large videos](#large-videos) | Highlights video files that are bigger than typical delivery budgets. | -| [WebP optimization](#webp-optimization) | Tests PNG/JPEG bitmaps to see if lossless WebP would shrink them. | -| [Large audio](#large-audio) | Surfaces hefty audio tracks that could be recompressed or trimmed. | -| [Hermes debug info (RN only)](#hermes-debug-info-rn-only) | Points to bundled Hermes bytecode still carrying debugger metadata. | +| Insight | What it flags | +| --------------------------------------------------------- | --------------------------------------------------------------------- | +| [Duplicate Files](#duplicate-files) | Flags identical payloads so you can drop the duplicates | +| [Large Images](#large-images) | Surfaces oversized image assets worth recompressing or resizing. | +| [Large Videos](#large-videos) | Highlights video files that are bigger than typical delivery budgets. | +| [WebP Optimization](#webp-optimization) | Tests PNG/JPEG bitmaps to see if lossless WebP would shrink them. | +| [Large Audio](#large-audio) | Surfaces hefty audio tracks that could be recompressed or trimmed. | +| [Hermes Debug Info (RN Only)](#hermes-debug-info-rn-only) | Points to bundled Hermes bytecode still carrying debugger metadata. | -### Duplicate files +### Duplicate Files **What it is**: Finds matching files or directories inside `assets/`, `res/`, or embedded libraries. -**How to fix**: Keep one copy and remove or dedupe the rest. For resource folders, consolidate the asset into a shared module or asset pack so the APK bundles it once. +**How to fix**: Keep one copy and remove or dedupe the rest. For resource folders, consolidate the asset into a shared module or asset pack so the APK only bundles it once. -### Large images +### Large Images **What it is**: Flags image files larger than 10 MB. -**How to fix**: Compress them with lossless WebP or resize them before bundling. Options: +**How to fix**: Compress images with lossless WebP or resize them before bundling. + +**Options**: - Use Android Studio: right-click an image → **Convert to WebP** → choose **Lossless**. - Use the command line: @@ -47,9 +49,9 @@ Below are a list of available insights for Android builds. cwebp -lossless input.jpg -o output.webp ``` -Large hero images or splash screens may also benefit from serving them over the network instead of bundling them. +Large hero images or splash screens may also load more efficiently if served over the network instead of being bundled with the app. -### Large videos +### Large Videos **What it is**: Highlights bundled video assets above 10 MB. @@ -59,9 +61,9 @@ Large hero images or splash screens may also benefit from serving them over the ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -c:a copy output.mp4 ``` -Lower the `-crf` value for higher quality (and larger files) or raise it for smaller files. +Lower the `-crf` value for higher quality (and larger files), or raise it for smaller files. -### WebP optimization +### WebP Optimization **What it is**: Tests every PNG, BMP, JPG, or JPEG (excluding `.9.png`) against lossless WebP conversion. If the WebP variant saves at least 500 bytes, the insight lists the asset. @@ -88,7 +90,7 @@ cwebp -lossless input.jpg -o output.webp > Lossless WebP with alpha requires `minSdkVersion` ≥ 18. For older devices, keep PNG fallbacks for assets that rely on transparency. -### Large audio +### Large Audio **What it is**: Surfaces audio files larger than 5 MB across `res/raw`, `assets`, or libraries. @@ -100,7 +102,9 @@ ffmpeg -i input.wav -c:a aac -b:a 128k output.m4a Tweak the bitrate to balance quality and size. -### Hermes debug info (RN only) +TODO: be clearer about this bitrate line + +### Hermes Debug Info (RN Only) **What it is**: Detects Hermes bytecode bundles that still contain debug info sections. diff --git a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx index 8fe245976bb790..66b93689ba960a 100644 --- a/docs/platforms/apple/guides/ios/size-analysis/insights.mdx +++ b/docs/platforms/apple/guides/ios/size-analysis/insights.mdx @@ -6,28 +6,28 @@ description: See how Size Analysis surfaces trends for your iOS builds. TODO: ADD SOME PICS -Size Analysis Insights point out how iOS app can reduce its size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. +Size Analysis Insights point out how opportunities to reduce your iOS app's size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. ## iOS Insights -Below are a list of available insights for iOS builds. +Below are a list of available insights for iOS builds, followed by more details about each insight: -| Insight | What it catches | +| Insight | What it flags | | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | -| [Strip debug symbols](#strip-debug-symbols) | Binaries that include removable debug sections or symbols. | -| [Duplicate files](#duplicate-files) | Identical files where the extras can be removed. | -| [Image optimization](#image-optimization) | Oversized PNG/JPEG/HEIC assets and recommends minifying or converting to HEIC. | -| [Alternate icon optimization](#alternate-icon-optimization) | Alternate app icons that can be downscaled and recompressed. | -| [Loose images](#loose-images) | Scaled @1x/@2x/@3x images that should be moved into asset catalogs to qualify for app thinning. | -| [Small files](#small-files) | Tiny files wasting space because of the 4KB filesystem block size. | -| [Unnecessary files](#unnecessary-files) | Docs, scripts, configs, or other build leftovers in the bundle. | -| [Large videos](#large-videos) | Video files that are a good candidate for on-demand delivery. | -| [Localized strings](#localized-strings) | Localized strings that can use a more efficient format. | -| [Minify localized strings](#minify-localized-strings) | Localized string files that contain removable whitespace and comments. | -| [Main binary export metadata](#main-binary-export-metadata) | Binaries that include removable export tries. | -| [Hermes debug info (RN only)](#hermes-debug-info-rn-only) | Hermes bytecode files that include removable debug info. | - -### Strip debug symbols +| [Strip Debug Symbols](#strip-debug-symbols) | Binaries that include removable debug sections or symbols. | +| [Duplicate Files](#duplicate-files) | Identical files where the extras can be removed. | +| [Image Optimization](#image-optimization) | Oversized PNG/JPEG/HEIC assets and recommends minifying or converting to HEIC. | +| [Alternate Icon Optimization](#alternate-icon-optimization) | Alternate app icons that can be downscaled and recompressed. | +| [Loose Images](#loose-images) | Scaled @1x/@2x/@3x images that should be moved into asset catalogs to qualify for app thinning. | +| [Small Files](#small-files) | Tiny files wasting space because of the 4KB filesystem block size. | +| [Unnecessary Files](#unnecessary-files) | Docs, scripts, configs, or other build leftovers in the bundle. | +| [Large Videos](#large-videos) | Video files that are a good candidate for on-demand delivery. | +| [Localized Strings](#localized-strings) | Localized strings that can use a more efficient format. | +| [Minify Localized Strings](#minify-localized-strings) | Localized string files that contain removable whitespace and comments. | +| [Main Binary Export Metadata](#main-binary-export-metadata) | Binaries that include removable export tries. | +| [Hermes Debug Info (RN Only)](#hermes-debug-info-rn-only) | Hermes bytecode files that include removable debug info. | + +### Strip Debug Symbols **What it is**: Debug info and symbols are only used during development and should not be shipped to users. @@ -83,13 +83,13 @@ ${DWARF_DSYM_FOLDER_PATH}/${EXECUTABLE_NAME}.app.dSYM/\ Contents/Resources/DWARF/${EXECUTABLE_NAME} ``` -### Duplicate files +### Duplicate Files **What it is**: Finds identical files bundled more than once. **How to fix**: Use dynamic frameworks to share assets between multiple targets. Here's an [example a post](https://www.emergetools.com/blog/posts/make-your-ios-app-smaller-with-dynamic-frameworks) walking through how to do this for an SPM project. -### Image optimization +### Image Optimization **What it is**: Surfaces PNG, JPEG, or HEIC assets that can be minified or converted. @@ -116,7 +116,7 @@ Download ImageOptim for macOS, drag your images into the window, and let it reco Open the image in Preview, choose `File → Export`, pick `HEIC`, and save. Replace the original file and update any references. -### Alternate icon optimization +### Alternate Icon Optimization **What it is**: Alternate app icons are only ever shown on the home screen which requires 180x180 pixels. These images can be downsized to 180x180 and then upsampled back to 1024x1024 to reduce size. @@ -187,37 +187,37 @@ optimize_icon() { } ``` -### Loose images +### Loose Images **What it is**: Finds scaled @1x/@2x/@3x images stored outside of asset catalogs. This prevents app thinning from removing variants not needed for the user's device. **How to fix**: Move each image set into an asset catalog in Xcode. -### Small files +### Small Files **What it is**: Each file on iOS takes up a minimum of 4KB due to the filesystem's block size. Files smaller than this limit will take up more storage on disk than expected. Every file inside the app also has code signature overhead which can add up with many files. **How to fix**: Group small files into asset catalogs, archives, or databases so multiple entries share the same file on disk. -### Unnecessary files +### Unnecessary Files **What it is**: Files such as READMEs, docs, scripts, configs, and similar build leftovers do not need to be included in the app bundle. **How to fix**: Drop these files from the Copy Bundle Resources phase or exclude them with `EXCLUDED_SOURCE_FILE_NAMES` before archiving. -### Large videos +### Large Videos **What it is**: Video assets larger than 10 MB are not recommended to be bundled in your app. Often times videos are only shown to a subset of users and could instead be shown on-demand. **How to fix**: host and stream the content instead of bundling it, or re-encode them with H.264 or HEVC at a lower bitrate or resolution. -### Localized strings +### Localized Strings **What it is**: Xcode localized strings files use a verbose dictionary format by default. **How to fix**: Sentry's SmallStrings helper library is a more efficient method of encoding translations. -### Minify localized strings +### Minify Localized Strings **What it is**: Xcode localized strings files often include translator comments, whitespace, binary encodings, and other non-runtime text that can be safely stripped. @@ -267,7 +267,7 @@ for root, _, files in os.walk(os.environ["BUILT_PRODUCTS_DIR"], followlinks=True This script strips comments and blank lines after the files are generated, so keep the original annotated copies under version control for translators. -### Main binary export metadata +### Main Binary Export Metadata **What it is**: Binaries that act as entrypoints for your app, such as your main app binary or watchOS app binary, are not linked against by other binaries. This means the export trie information is unnecessary and can be removed. @@ -282,7 +282,7 @@ This script strips comments and blank lines after the files are generated, so ke Xcode now limits the export trie to just that allowlist. -### Hermes debug info (React Native) +### Hermes Debug Info (React Native) **What it is**: Debug information is only needed during development and should not be shipped to users. diff --git a/docs/platforms/dart/guides/flutter/size-analysis/insights.mdx b/docs/platforms/dart/guides/flutter/size-analysis/insights.mdx index 8e1e6f5743ddea..37006c916f4bea 100644 --- a/docs/platforms/dart/guides/flutter/size-analysis/insights.mdx +++ b/docs/platforms/dart/guides/flutter/size-analysis/insights.mdx @@ -6,7 +6,7 @@ description: Preview how Size Analysis highlights Flutter build trends. TODO: ADD SOME PICS -Size Analysis Insights point out how Flutter apps can reduce their size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. +Size Analysis Insights point out how opportunities to reduce your Flutter app's size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. For insights available for Flutter builds, see the following pages: diff --git a/docs/platforms/react-native/size-analysis/insights.mdx b/docs/platforms/react-native/size-analysis/insights.mdx index f9b58f8c3d5d8a..e002040fb398a1 100644 --- a/docs/platforms/react-native/size-analysis/insights.mdx +++ b/docs/platforms/react-native/size-analysis/insights.mdx @@ -4,7 +4,7 @@ sidebar_order: 5250 description: See how Size Analysis surfaces trends for React Native builds. --- -Size Analysis Insights point out how React Native apps can reduce their size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. +Size Analysis Insights point out how opportunities to reduce your React Native app's size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. For insights available for React Native builds, see the following pages: diff --git a/includes/size-analysis/upload-cli-android.mdx b/includes/size-analysis/upload-cli-android.mdx index 52f4035e80d312..8f8e7d1a2adc0d 100644 --- a/includes/size-analysis/upload-cli-android.mdx +++ b/includes/size-analysis/upload-cli-android.mdx @@ -1,10 +1,10 @@ 1. Install the [sentry-cli](/cli/) -2. Authenticate the sentry-cli by [following these steps](https://docs.sentry.io/cli/configuration/#to-authenticate-manually). +2. Authenticate the sentry-cli by [following these steps](https://docs.sentry.io/cli/configuration/#to-authenticate-manually) 3. Build your app to create an AAB (preferred) or APK -4. Invoke the following CLI command to trigger the upload. +4. Invoke the following CLI command to trigger the upload: ```bash sentry-cli build upload app.aab \ diff --git a/includes/size-analysis/upload-cli-ios.mdx b/includes/size-analysis/upload-cli-ios.mdx index d1989af33ff101..35e88ab843e485 100644 --- a/includes/size-analysis/upload-cli-ios.mdx +++ b/includes/size-analysis/upload-cli-ios.mdx @@ -1,10 +1,10 @@ 1. Install the [sentry-cli](/cli/) -2. Authenticate the sentry-cli by [following these steps](https://docs.sentry.io/cli/configuration/#to-authenticate-manually). +2. Authenticate the sentry-cli by [following these steps](https://docs.sentry.io/cli/configuration/#to-authenticate-manually) 3. Build your app to create an XCArchive (preferred) or IPA -4. Invoke the following CLI command to trigger the upload. +4. Invoke the following CLI command to trigger the upload: ```bash sentry-cli build upload app.xcarchive \ diff --git a/includes/size-analysis/upload-fastlane.mdx b/includes/size-analysis/upload-fastlane.mdx index 438d5784549ee3..e8e41932ecede0 100644 --- a/includes/size-analysis/upload-fastlane.mdx +++ b/includes/size-analysis/upload-fastlane.mdx @@ -1,12 +1,12 @@ -The Fastlane plugin can be used to upload XCArchive or IPA builds to Sentry. On GitHub Actions, Fastlane will automatically detect your [build's metadata](#upload-metadata) and include it in the upload. In other CI environments, you may need to manually set metadata values. +The Fastlane plugin can be used to upload XCArchive or IPA builds to Sentry. On GitHub Actions, Fastlane will automatically detect your [build's metadata](#upload-metadata) and include it in the upload. In other Continuous Integration (CI) environments, you may need to manually set metadata values. -1. Configure the [Sentry Fastlane plugin](/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) (version `1.34.0` or higher). +1. Configure the [Sentry Fastlane plugin](/platforms/apple/guides/ios/upload-debug-symbols/fastlane/) (version `1.34.0` or higher): ```ruby bundle exec fastlane add_plugin fastlane-plugin-sentry ``` -2. Set up `SENTRY_AUTH_TOKEN` in your environment (you can generate a token [here](https://sentry.sentry.io/settings/auth-tokens/)). +2. Set up `SENTRY_AUTH_TOKEN` in your environment (you can generate a token [here](https://sentry.sentry.io/settings/auth-tokens/)) 3. In `FastFile`, add a call to `sentry_upload_build` after your build step: diff --git a/includes/size-analysis/upload-gradle.mdx b/includes/size-analysis/upload-gradle.mdx index 147eeda629dd98..5dbaae5f498547 100644 --- a/includes/size-analysis/upload-gradle.mdx +++ b/includes/size-analysis/upload-gradle.mdx @@ -1,4 +1,4 @@ -The Gradle plugin will automatically detect your [build's metadata](#upload-metadata) and include it in the upload. If for any reason you need to override values, you can use the `vcsInfo` extension. +The Gradle plugin automatically detects build metadata from your git repository. On GitHub Actions, all metadata is automatically detected. On other CI systems, you may need to manually set some values using the [`vcsInfo`](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/dsl/VcsInfo) extension. 1. Configure the [Sentry Android Gradle plugin](/platforms/android/configuration/gradle/) with at least version `6.0.0-alpha.6` From 8ca5b1b5cebd22eaad8d02b3e24719211e59e311 Mon Sep 17 00:00:00 2001 From: Max Topolsky <30879163+mtopo27@users.noreply.github.com> Date: Wed, 29 Oct 2025 13:24:12 -0400 Subject: [PATCH 25/67] Apply suggestion from @coolguyzone Co-authored-by: Alex Krawiec --- includes/size-analysis/upload-gradle.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/size-analysis/upload-gradle.mdx b/includes/size-analysis/upload-gradle.mdx index 5dbaae5f498547..e64ca07cd95f92 100644 --- a/includes/size-analysis/upload-gradle.mdx +++ b/includes/size-analysis/upload-gradle.mdx @@ -44,7 +44,7 @@ _TODO: do we have difference between bundleRelease and assembleRelease anywhere? ### Overriding Metadata -The Gradle plugin automatically detects build metadata from your git repository. On GitHub Actions, all metadata is automatically detected. On other CI systems, you may need to manually set some values using the `vcsInfo` extension. +The Gradle plugin automatically detects build metadata from your git repository. On GitHub Actions, all metadata is automatically detected. On other CI systems, you may need to manually set some values using the (`vcsInfo`)[https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/dsl/VcsInfo] extension. Configure overrides in your Gradle build configuration From 64a1819daf979119bc3e8231d33eeafeb03f2f8d Mon Sep 17 00:00:00 2001 From: Trevor Elkins Date: Wed, 29 Oct 2025 19:02:23 -0400 Subject: [PATCH 26/67] app thinning --- .../apple/guides/ios/size-analysis/index.mdx | 4 ++++ includes/size-analysis/app-thinning.mdx | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 includes/size-analysis/app-thinning.mdx diff --git a/docs/platforms/apple/guides/ios/size-analysis/index.mdx b/docs/platforms/apple/guides/ios/size-analysis/index.mdx index c170dd7e7752bd..c3157e320c7f18 100644 --- a/docs/platforms/apple/guides/ios/size-analysis/index.mdx +++ b/docs/platforms/apple/guides/ios/size-analysis/index.mdx @@ -30,6 +30,10 @@ description: Upload iOS builds to Sentry for size analysis. +## App Thinning + + + ## Best Practices - **Upload release builds only** - Only upload optimized release builds to get accurate size metrics that represent what users download. Debug builds contain extra symbols and debugging information that inflate the size. diff --git a/includes/size-analysis/app-thinning.mdx b/includes/size-analysis/app-thinning.mdx new file mode 100644 index 00000000000000..d2fd652d5d3f4c --- /dev/null +++ b/includes/size-analysis/app-thinning.mdx @@ -0,0 +1,22 @@ +App Thinning is Apple's technology that automatically optimizes the delivery of iOS apps to reduce their download size for end users. When your app is uploaded to the App Store, Apple creates device-specific variants that only include the resources needed for each device type. For example, an iPhone SE doesn't need images intended for iPads. + +Sentry Size Analysis **does not perform any app thinning** as part of the analysis, the underlying app is untouched and results shown as-is. + +If you want results targeting a specific device type, apply app thinning **before** uploading to Sentry. This can be configured via Export Options when building the app. First create an `export_options.plist` file with the desired device type: + +```xml {filename:export_options.plist} + + + + +method +ad-hoc +team_id +sentry-team +thinning +iPhone17,1 + + +``` + +And then pass this to `xcodebuild` via the `-exportOptionsPlist export_options.plist` flag when building the app. This will produce a `app-thinning.plist` file in your build directory with information on the app variants created. Pick the appropriate IPA when uploading to Sentry. From 467176b358a58fab60c062cbd295bd081400e4ab Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Wed, 29 Oct 2025 17:27:58 -0400 Subject: [PATCH 27/67] status check image --- .../size-analysis/images/status-check.png | Bin 0 -> 120952 bytes .../size-analysis/integrating-into-ci.mdx | 4 +--- 2 files changed, 1 insertion(+), 3 deletions(-) create mode 100644 docs/product/size-analysis/images/status-check.png diff --git a/docs/product/size-analysis/images/status-check.png b/docs/product/size-analysis/images/status-check.png new file mode 100644 index 0000000000000000000000000000000000000000..763755511a5f40a55446f56c2a0a2087a8531675 GIT binary patch literal 120952 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

  • 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%0A)v$>@Ja473UsNx%5mT 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 literal 0 HcmV?d00001 diff --git a/docs/product/size-analysis/integrating-into-ci.mdx b/docs/product/size-analysis/integrating-into-ci.mdx index 5ab24531b76e48..5502eb1ffbcff8 100644 --- a/docs/product/size-analysis/integrating-into-ci.mdx +++ b/docs/product/size-analysis/integrating-into-ci.mdx @@ -33,9 +33,7 @@ Once the integration is set up and you're uploading builds from your CI: 3. **Comparison**: Sentry compares the two builds 4. **Status check**: A Github status check gives you information about the size of the build and whether or not the build increased in size. -### Example Status Check - -TODO: Add image here of status check example +![Example Status Check](./images/status-check.png) ## Troubleshooting From 4d0d075cd0c5c0fd7af8f52591b36046e4b29255 Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Wed, 29 Oct 2025 17:28:21 -0400 Subject: [PATCH 28/67] compress --- .../size-analysis/images/status-check.png | Bin 120952 -> 29129 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/product/size-analysis/images/status-check.png b/docs/product/size-analysis/images/status-check.png index 763755511a5f40a55446f56c2a0a2087a8531675..d63ad60fe492c0d3326afac40ec7c1ed5694b632 100644 GIT binary patch literal 29129 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

  • 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%0A)v$>@Ja473UsNx%5mT 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 From 80c7a0400e56d3e66efcfa172704733ef95b6025 Mon Sep 17 00:00:00 2001 From: Max Topolsky Date: Wed, 29 Oct 2025 20:26:19 -0400 Subject: [PATCH 29/67] add some pics, delete the insights page --- docs/product/size-analysis/insights.mdx | 11 -------- .../size-analysis/integrating-into-ci.mdx | 1 + .../size-analysis/images/android-metadata.png | Bin 0 -> 125933 bytes .../size-analysis/images/ios-metadata.png | Bin 0 -> 122043 bytes includes/size-analysis/upload-cli-android.mdx | 4 ++- includes/size-analysis/upload-cli-ios.mdx | 4 ++- includes/size-analysis/upload-fastlane.mdx | 4 ++- includes/size-analysis/upload-gradle.mdx | 26 ++++++++++-------- 8 files changed, 24 insertions(+), 26 deletions(-) delete mode 100644 docs/product/size-analysis/insights.mdx create mode 100644 includes/size-analysis/images/android-metadata.png create mode 100644 includes/size-analysis/images/ios-metadata.png diff --git a/docs/product/size-analysis/insights.mdx b/docs/product/size-analysis/insights.mdx deleted file mode 100644 index 854e47a203dafe..00000000000000 --- a/docs/product/size-analysis/insights.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Insights -sidebar_order: 60 -description: Explore how Size Analysis highlights trends and comparisons across your builds. ---- - -TODO: MAKE BETTER OR DELETE - -Size Analysis Insights point out how your app is wasting space. - -For information on the insights available for each platform, see the [Android](/platforms/android/size-analysis/insights/) and [iOS](/platforms/apple/guides/ios/size-analysis/insights/) guides. diff --git a/docs/product/size-analysis/integrating-into-ci.mdx b/docs/product/size-analysis/integrating-into-ci.mdx index 5502eb1ffbcff8..d9a88a3951fb69 100644 --- a/docs/product/size-analysis/integrating-into-ci.mdx +++ b/docs/product/size-analysis/integrating-into-ci.mdx @@ -33,6 +33,7 @@ Once the integration is set up and you're uploading builds from your CI: 3. **Comparison**: Sentry compares the two builds 4. **Status check**: A Github status check gives you information about the size of the build and whether or not the build increased in size. +TODO: this is a real pic, but it says 0s, is that sketch? maybe find better ![Example Status Check](./images/status-check.png) ## Troubleshooting diff --git a/includes/size-analysis/images/android-metadata.png b/includes/size-analysis/images/android-metadata.png new file mode 100644 index 0000000000000000000000000000000000000000..f4a4290b0247f2b182bc59f8a7534228376ea42e GIT binary patch literal 125933 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%0D?w-WcyRW3FNps4CQX5;N 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

    sX8#mxCUN=!< zF%9M~>Qnp!(7bvW&46N6?nIb7ei8&QNjdfbFb!dp_kUqbuO8uJbf!eu2CL(lwZ357 z;OHZkU#XMQXUwECU^t8MX8gmwC}g|>pzVK@F@^+Zz}YI*&l?TKP;of>4Zd6^{29|| z^sBst_j5TXKLV@wPTV84!^?x~s`kF3prD(+k&=A(AQK3LVX^Mx-T zh=N=*@`-8kl7#KPU0b>Szc5s7Ni_fyrTkw^)R#6ifbT(x`hSLwy+CmEjXBZ8Hzp5V z8#P@+lxDt=&LX)aB6$M;%#Iu_8|J%D%5lrWQI{usKZAuV{GKN&`@VetK1sz_wA&#+ z-G0b?z*N~h9#08++-v^mKZF*5YPEtwTYYAf-Xs>~`aG&U(hCrC6bt=#TO`crijCIq zA5Ey=yCm5^sMtNuL;s>)(gj(|7gWU|V;>aBnBo*V(-ViCs80Kht}op^kR4FxwgZLG zNiib|>`yYBtYrBKTzeR{Gnm<;tc3T&Bhso2Vcz%{*_86X;X zfO&}a=Q%qbJ-}G|o;-ZzQd7#1f69e2l6aFCf zMOt8Zn2OBf58AFus8N65zMrGC_}B^WMF|NA`?gTL6TG0J>AMd>bE?fT|BJw(V0Lgl z;FzcIV6z&RsXdSt$O6x}Vg%H|N0~j3SD>O(tb7ba@?( zPCmh*^SYH$mX|Ha(UIyu;Sc|QbHmU8W=~FKlmE|S0ledH+H_o*KveF}l0C=A1dhPy zuR~UUKb({}&^#}b-u27hv-cF(^9+*dQ_uhREd@?vPoTLfNP3s{&zgLB^&H?NWdlUu z|03D{Jp}wypn10Mr)kN*PZv2rPyUSNVi5axN87-~Dtk**7Wnt*qiF#U4s*Ma>F