Skip to content

Support custom/incremental iOS build numbers for TestFlight in cached resign workflows #688

@lukas-preply

Description

@lukas-preply

Problem Statement

When using TestFlight, re-uploading an .ipa or .app binary with the same version (CFBundleShortVersionString) and build number (CFBundleVersion) is not allowed. However, workflows that cache native app builds and only inject a new JS bundle (using resign or similar commands), currently do not offer an easy or automatic way to increment the build number. As a result, teams leveraging build caching cannot efficiently upload iterative builds to TestFlight without manual intervention or a full native rebuild.

Current Behavior

  • Most workflows with rock allow re-signing with a new JS bundle, but do not provide a mechanism to update the iOS build number.
  • TestFlight blocks uploading the IPA unless the version/build pair is unique.
  • Manually patching Info.plist (CFBundleVersion) before resigning is error-prone and not integrated into the toolchain.

Proposal

Add support in rock to automatically, or via explicit CLI option, set or increment the iOS build number (CFBundleVersion) during the cached resign/inject process. This will allow users to:

  • Seamlessly reuse cached native builds and upload new releases to TestFlight.
  • Avoid unnecessary full native rebuilds just to change the build number.
  • Integrate a build number update as part of the resign and JS bundle injection pipeline.

Possible Solutions

  • Add a flag to rock ios resign or related commands, e.g. --build-number <value> and --version <value>.
  • Option for automated build number increment (e.g., from CI run number, timestamp, or git commit count).
  • Patch CFBundleVersion in Info.plist before resigning, including in all embedded extensions if present.
  • Document best practices for this workflow in the README.

Impact

  • Enables much faster JS updates and iteration cycles.
  • Reduces required compute/build time in CI/CD pipelines for apps with frequent JS-only changes.
  • Makes rock a better fit for teams working on high-velocity React Native projects with TestFlight delivery.

References


Happy to discuss further or help prototype a PR!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions