expo / expo/eas-cli

EAS build error: Authentication with Apple Developer Portal failed! iTunes service key is empty

Open
#4,392 17 comments 14 reactions 1 assignee Claimed by @sswrk View on GitHub
needs review
Dominant language
TypeScript
Stars
1.4k
Forks
236
Avg merge
3d 1h
Merged PRs (30d)
91

Description

### Build/Submit details page URL

_No response_

### Summary

EAS is returning an error when I attempt to login with my Apple Developer account
`eas build` fails at the Apple Developer login step with the following error
```
Authentication with Apple Developer Portal failed!
iTunes service key is empty
```

### Managed or bare?

Managed

### Environment

expo-env-info 2.1.0 environment info:
System:
OS: macOS 26.6.2
Shell: 5.9 - /bin/zsh
Binaries:
Node: 24.12.0 - /Users/cameronchisholm/.nvm/versions/node/v24.12.0/bin/node
Yarn: 1.22.22 - /Users/cameronchisholm/.nvm/versions/node/v24.12.0/bin/yarn
npm: 11.6.2 - /Users/cameronchisholm/.nvm/versions/node/v24.12.0/bin/npm
Managers:
CocoaPods: 1.16.2 - /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 25.5, iOS 26.5, macOS 26.5, tvOS 26.5, visionOS 26.5, watchOS 26.5
IDEs:
Android Studio: 2025.2 AI-252.25557.131.2521.14432022
Xcode: 26.6/17F113 - /usr/bin/xcodebuild
npmPackages:
expo: ~57.0.20 => 57.0.20
react: 19.2.3 => 19.2.3
react-dom: 19.2.3 => 19.2.3
react-native: 0.86.3 => 0.86.3
react-native-web: ^0.21.2 => 0.21.2
npmGlobalPackages:
eas-cli: 23.2.0
Expo Workflow: bare

### Error output

```
EXPO_DEBUG=true eas build --profile development
★ eas-cli@24.3.0 is now available.
To upgrade, run npm install -g eas-cli.
Proceeding with outdated version.

✔ Select platform › iOS
The EAS build profile does not specify a Node.js version. Using the version specified in .nvmrc: 24.12.0
Loaded "env" configuration for the "development" profile: no environment variables specified. Learn more: https://docs.expo.dev/build-reference/variables/
ios.podfileProperties: withIntrospectionBaseMods ➜ withIosBaseMods ➜ withGeneratedBaseMods ➜ withIosPodfilePropertiesBaseMod
ios.podfileProperties: withIosExpoPlugins ➜ withPlugins ➜ withStaticPlugin ➜ withJsEnginePodfileProps ➜ withPodfileProperties
ios.podfileProperties: withStaticPlugin ➜ withRunOnce ➜ withExpoImage ➜ withPodfileProperties
ios.infoPlist: withIntrospectionBaseMods ➜ withIosBaseMods ➜ withGeneratedBaseMods ➜ withIosInfoPlistBaseMod
ios.infoPlist: withIosExpoPlugins ➜ withPlugins ➜ withStaticPlugin ➜ withVersion ➜ withInfoPlist
ios.infoPlist: withIosExpoPlugins ➜ withPlugins ➜ withStaticPlugin ➜ withBuildNumber ➜ withInfoPlist
ios.infoPlist: withIosExpoPlugins ➜ withPlugins ➜ withStaticPlugin ➜ withUsesNonExemptEncryption ➜ withInfoPlist
ios.infoPlist: withIosExpoPlugins ➜ withPlugins ➜ withStaticPlugin ➜ withScheme ➜ withInfoPlist
ios.infoPlist: withIosExpoPlugins ➜ withPlugins ➜ withStaticPlugin ➜ withRequiresFullScreen ➜ withInfoPlist
ios.infoPlist: withIosExpoPlugins ➜ withPlugins ➜ withStaticPlugin ➜ withOrientation ➜ withInfoPlist
ios.infoPlist: withIosExpoPlugins ➜ withPlugins ➜ withStaticPlugin ➜ withDisplayName ➜ withInfoPlist
ios.infoPlist: withIosExpoPlugins ➜ withPlugins ➜ withStaticPlugin ➜ withGoogle ➜ withInfoPlist
ios.infoPlist: withStaticPlugin ➜ withRunOnce ➜ withFileSystem ➜ withInfoPlist
ios.infoPlist: withStaticPlugin ➜ withRunOnce ➜ withDevClient ➜ withGeneratedIosScheme ➜ withInfoPlist
ios.infoPlist: withDevClient ➜ withRunOnce ➜ withLocalNetworkPermission ➜ withInfoPlist
ios.infoPlist: withRunOnce ➜ withDevClient ➜ withRunOnce ➜ withInfoPlist
ios.infoPlist: withStaticPlugin ➜ withIosSplashScreen ➜ withPlugins ➜ withStaticPlugin ➜ withIosSplashInfoPlist ➜ withInfoPlist
ios.infoPlist: withSystemUI ➜ withPlugins ➜ withStaticPlugin ➜ withIosUserInterfaceStyle ➜ withInfoPlist
ios.infoPlist: withSystemUI ➜ withPlugins ➜ withStaticPlugin ➜ withIosRootViewBackgroundColor ➜ withInfoPlist
ios.infoPlist: withFallback ➜ withPlugins ➜ withStaticPlugin ➜ withIosAdMob ➜ withInfoPlist
ios.infoPlist: withFallback ➜ withPlugins ➜ withStaticPlugin ➜ withMaps ➜ withGoogleMapsKey ➜ withInfoPlist
ios.entitlements: withIntrospectionBaseMods ➜ withIosBaseMods ➜ withGeneratedBaseMods ➜ withIosEntitlementsBaseMod
ios.entitlements: withIosExpoPlugins ➜ withPlugins ➜ withStaticPlugin ➜ withAssociatedDomains ➜ withEntitlementsPlist
ios.entitlements: withFallback ➜ withPlugins ➜ withStaticPlugin ➜ withNotificationsEntitlement ➜ withEntitlementsPlist
ios.entitlements: withStaticPlugin ➜ withExpoContacts ➜ withRunOnce ➜ withAccessesContactNotes ➜ withEntitlementsPlist
ios.entitlements: withStaticPlugin ➜ withExpoAppleAuthentication ➜ withRunOnce ➜ withAppleSignInWarning ➜ withEntitlementsPlist
ios.expoPlist: withIntrospectionBaseMods ➜ withIosBaseMods ➜ withGeneratedBaseMods ➜ withIosExpoPlistBaseMod
ios.expoPlist: withStaticPlugin ➜ withRunOnce ➜ withUnversionedUpdates ➜ withUpdates ➜ withExpoPlist
ios.splashScreenStoryboard: withPlugins ➜ withStaticPlugin ➜ withIosSplashScreenStoryboardBaseMod ➜ withGeneratedBaseMods ➜ withIosSplashScreenStoryboardBaseMod
ios.splashScreenStoryboard: withStaticPlugin ➜ withIosSplashScreen ➜ withPlugins ➜ withStaticPlugin ➜ withIosSplashScreenImage ➜ withIosSplashScreenStoryboard
✔ Using remote iOS credentials (Expo server)

If you provide your Apple account credentials we will be able to generate all necessary build credentials and fully validate them.
This is optional, but without Apple account access you will need to provide all the missing values manually and we can only run minimal validation on them.
✔ Do you want to log in to your Apple account? … yes

› Log in to your Apple Developer account to continue
✔ Apple ID: … [redacted]
› Using password for [redacted] from your local Keychain
Learn more: https://docs.expo.dev/distribution/security#keychain
Authentication with Apple Developer Portal failed!
iTunes service key is empty
AssertionError [ERR_ASSERTION]: iTunes service key is empty
at t.getItunesConnectServiceKeyAsync (/Users/cameronchisholm/.bun/install/global/node_modules/@expo/apple-utils/build/index.js:1:715461)
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
at async Object.S [as loginWithUserCredentialsAsync] (/Users/cameronchisholm/.bun/install/global/node_modules/@expo/apple-utils/build/index.js:1:703305)
at async loginWithUserCredentialsAsync (/Users/cameronchisholm/.bun/install/global/node_modules/eas-cli/build/credentials/ios/appstore/authenticate.js:84:24)
at async loginAsync (/Users/cameronchisholm/.bun/install/global/node_modules/eas-cli/build/credentials/ios/appstore/authenticate.js:56:16)
at async authenticateAsUserAsync (/Users/cameronchisholm/.bun/install/global/node_modules/eas-cli/build/credentials/ios/appstore/authenticate.js:129:27)
at async authenticateAsync (/Users/cameronchisholm/.bun/install/global/node_modules/eas-cli/build/credentials/ios/appstore/authenticate.js:101:16)
at async AppStoreApi.ensureAuthenticatedAsync (/Users/cameronchisholm/.bun/install/global/node_modules/eas-cli/build/credentials/ios/appstore/AppStoreApi.js:35:28)
at async CredentialsContext.bestEffortAppStoreAuthenticateAsync (/Users/cameronchisholm/.bun/install/global/node_modules/eas-cli/build/credentials/context.js:67:13)
at async SetUpTargetBuildCredentials.runAsync (/Users/cameronchisholm/.bun/install/global/node_modules/eas-cli/build/credentials/ios/actions/SetUpTargetBuildCredentials.js:16:9) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: undefined,
expected: true,
operator: '==',
diff: 'simple'
}
Error: build command failed.
```

### Reproducible demo or steps to reproduce from a blank project

Must not be logged in to apple account with EAS
Run `eas build` -> platform iOS -> attempt to login with apple account

**Getting the same error on eas-cli/24.3.0 as well**

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.