Today, any build that ends up on EAS via a local path is forced to: distribution = Internal profile / runtime / channel = None a "Local" chip on the dashboard This happens because packages/eas-cli/src/commands/upload.ts hardcodes distribution: DistributionType.Internal in createLocalBuildAsync , and neither eas upload nor eas build --local accepts --profile , --channel , --distribution , or --runtime-version flags. Use case: I build my production iOS binary locally (to keep signing under my control, to avoid EAS build minutes, or to iterate faster) and then submit it to App Store Connect with eas submit . I would like the resulting row on expo.dev to accurately reflect that this was a "production" profile build, with the correct channel and runtime, so that: The dashboard gives a truthful audit trail of what went to the store. EAS Update channel resolution works correctly against the build. Teammates can tell production binaries apart from dev or preview builds at a glance. Proposed solution: Add the following flags to eas upload (and surface the same metadata on eas build --local ): --profile <name> Build profile from eas.json to tag the upload with --distribution <type> internal | store --channel <name> EAS Update channel --runtime-version <value> Runtime version (or read it from the binary when possible) Internally, this means: Accepting these flags in the oclif command spec. Resolving the profile via EasJsonAccessor the same way eas build does. Passing the resolved values into LocalBuildMutation.createLocalBuildAsync instead of the current hardcoded DistributionType.Internal . Workarounds today: eas build --local --auto-submit submits the binary to App Store Connect correctly, but the EAS dashboard row is still stamped as "Local / Internal / None / None". eas submit --path ./build.ipa --profile production only tags the submission, not the build row. Neither workaround gives a correct production row on the builds page.