Issue: EAS CLI keeps asking for Apple Team ID despite environment variables being set
- Dominant language
- TypeScript
- Stars
- 1.4k
- Forks
- 236
- Avg merge
- 3d 1h
- Merged PRs (30d)
- 91
Description
## Summary
`eas build --local --platform ios` continues to prompt for Apple Team ID selection even when the required environment variables (`EXPO_APPLE_TEAM_TYPE` and `EXPO_APPLE_TEAM_ID`) are properly configured in `eas.json`.
## Expected Behavior
When running `eas build --local --platform ios`, the CLI should automatically use the Apple Team ID and Team Type from the environment variables without prompting for manual selection.
## Actual Behavior
The CLI prompts for Apple Team ID and Team Type selection on every local build, ignoring the configured environment variables in `eas.json`.
**Note**: When setting the environment variables directly in the command (e.g., `EXPO_APPLE_TEAM_ID=B9A7V7HR98 eas build --local --platform ios`), the CLI works as expected and does not prompt for manual selection. This confirms that the issue is specifically with environment variable resolution from `eas.json`.
## Visual Comparison
| Environment Variables in `eas.json` | Environment Variables in Command |
|-------------------------------------|-----------------------------------|
| |
|
| ❌ CLI prompts for manual selection | ✅ CLI works automatically |
## Environment Configuration
I have configured the following environment variables in my `eas.json`:
```json
{
"cli": {
"version": ">= 16.19.1",
"appVersionSource": "remote"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"env": {
"EXPO_APPLE_TEAM_TYPE": "COMPANY_OR_ORGANIZATION",
"EXPO_APPLE_TEAM_ID": "B9A7V7HR98"
}
},
"preview": {
"distribution": "internal",
"env": {
"EXPO_APPLE_TEAM_TYPE": "COMPANY_OR_ORGANIZATION",
"EXPO_APPLE_TEAM_ID": "B9A7V7HR98"
}
},
"production": {
"autoIncrement": true,
"env": {
"EXPO_APPLE_TEAM_TYPE": "COMPANY_OR_ORGANIZATION",
"EXPO_APPLE_TEAM_ID": "B9A7V7HR98"
}
}
},
"submit": {
"production": {}
}
}
```
## Technical Analysis
After analyzing the relevant source code:
- [`resolveAppleTeamAsync`](https://github.com/expo/eas-cli/blob/95155681db4ed7666bf7b5a7c5f9873625ac9b17/packages/eas-cli/src/credentials/ios/appstore/resolveCredentials.ts#L171-L184)
- [`getAppleTeamTypeFromEnvironmentOrOptionsAsync`](https://github.com/expo/eas-cli/blob/95155681db4ed7666bf7b5a7c5f9873625ac9b17/packages/eas-cli/src/credentials/ios/appstore/resolveCredentials.ts#L146-L168)
The environment variables should be properly resolved, but the CLI is not recognizing them during local builds e.g `eas build --local`.
## Impact
This issue impacts developer productivity as it requires manual intervention for every local build, defeating the purpose of automated credential management.
## Expected Resolution
The CLI should automatically detect and use the environment variables from `eas.json` without requiring manual selection.
### Managed or bare?
managed
### Environment
npx expo-env-info
```bash
expo-env-info 2.0.7 environment info:
System:
OS: macOS 26.0
Shell: 5.9 - /bin/zsh
Binaries:
Node: 22.18.0 - ~/.nvm/versions/node/v22.18.0/bin/node
Yarn: 4.9.2 - ~/.nvm/versions/node/v22.18.0/bin/yarn
npm: 10.9.3 - ~/.nvm/versions/node/v22.18.0/bin/npm
Managers:
CocoaPods: 1.16.2 - /Users/sultanmyrza/.rvm/gems/ruby-3.4.5/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 24.5, iOS 18.5, macOS 15.5, tvOS 18.5, visionOS 2.5, watchOS 11.5
Android SDK:
API Levels: 28, 29, 31, 32, 33, 34, 35, 36
Build Tools: 30.0.3, 33.0.1, 35.0.0, 36.0.0
System Images: android-36 | Google Play ARM 64 v8a
IDEs:
Xcode: 16.4/16F6 - /usr/bin/xcodebuild
npmPackages:
expo: ~54.0.8 => 54.0.8
expo-router: ~6.0.6 => 6.0.6
react: 19.1.0 => 19.1.0
react-dom: 19.1.0 => 19.1.0
react-native: 0.81.4 => 0.81.4
react-native-web: ~0.21.0 => 0.21.1
npmGlobalPackages:
eas-cli: 16.19.1
Expo Workflow: managed
```
npx expo-doctor
```bash
env: load .env.local
env: export EXPO_APPLE_TEAM_TYPE EXPO_APPLE_TEAM_ID
Running 17 checks on your project...
15/17 checks passed. 2 checks failed. Possible issues detected:
Use the --verbose flag to see more details about passed checks.
✖ Check that required peer dependencies are installed
Missing peer dependency: @expo/metro-runtime
Required by: expo-router
Advice:
Install missing required peer dependency with "npx expo install @expo/metro-runtime"
Your app may crash outside of Expo Go without this dependency. Native module peer dependencies must be installed directly.
✖ Check that packages match versions required by installed Expo SDK
🔧 Patch version mismatches
package expected found
expo-router ~6.0.7 6.0.6
Changelogs:
- expo-router → https://github.com/expo/expo/blob/sdk-54/packages/expo-router/CHANGELOG.md
1 package out of date.
Advice:
Use 'npx expo install --check' to review and upgrade your dependencies.
To ignore specific packages, add them to "expo.install.exclude" in package.json. Learn more: https://expo.fyi/dependency-validation
```
### Error output
_No response_
### Reproducible demo or steps to reproduce from a blank project
- init expo app (sdk 54)
- setup development build
- add environment variables for Apple team configuration in eas.json
or pull this branch [experiment-eas-build-local-auto-select-ios-team-provider](https://github.com/sultanmyrza/noonexperiments-monorepo/tree/experiment-eas-build-local-auto-select-ios-team-provider)
Contributor guide
Assessment
This issue has not been assessed yet.