🔧 AI Nachrichten Major AI platforms go down in unprecedented simultaneous outage(03.09.2026 um 17:34 Uhr)
🔧 AI Nachrichten ChatGPT, Claude, and Grok Down? Users Report Widespread Outages(03.09.2026 um 19:14 Uhr)
🔧 AI Nachrichten OpenAI Launches GPT-6 Astra, Says We May Have Entered the AGI Era(03.09.2026 um 22:08 Uhr)
🔧 AI Nachrichten Claude Comes to CarPlay as Fifth Major AI Chatbot App(05.09.2026 um 05:31 Uhr)
🔧 AI Nachrichten OpenAI’s GPT-6 Astra Is AGI, Says NVIDIA CEO Jensen Huang(07.09.2026 um 06:31 Uhr)
🔧 AI Nachrichten Blame AI companies for Mac mini and Mac Studio shortage(31.08.2026 um 10:32 Uhr)
🔧 AI Nachrichten Major AI platforms go down in unprecedented simultaneous outage(03.09.2026 um 17:34 Uhr)
🔧 AI Nachrichten ChatGPT, Claude, and Grok Down? Users Report Widespread Outages(03.09.2026 um 19:14 Uhr)
🔧 AI Nachrichten OpenAI Launches GPT-6 Astra, Says We May Have Entered the AGI Era(03.09.2026 um 22:08 Uhr)
🔧 AI Nachrichten Claude Comes to CarPlay as Fifth Major AI Chatbot App(05.09.2026 um 05:31 Uhr)
🔧 AI Nachrichten OpenAI’s GPT-6 Astra Is AGI, Says NVIDIA CEO Jensen Huang(07.09.2026 um 06:31 Uhr)
🔧 AI Nachrichten Blame AI companies for Mac mini and Mac Studio shortage(31.08.2026 um 10:32 Uhr)

🔧 Programmierung 🕛 kürzlich 4 Min Lesezeit
0

Your mobile release setup belongs in Terraform: Expo EAS + App Store Connect

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

If you ship a React Native / Expo app to the App Store, you know the ritual. Open the Apple Developer portal, create a bundle identifier, tick the capability checkboxes, generate a provisioning profile, pick the right certificate. Then hop over to the Expo dashboard, create the EAS app, wire up credentials, add your environment variables one screen at a time.



It works, until you have to do it again for a second app, or a second environment, or a teammate needs to know why a capability is enabled. None of it is written down. It drifts. And the usual mobile tooling doesn't help much here: fastlane and the EAS CLI are great, but they're imperative — scripts that do things — not a declarative description of what your release setup should be.



That's the gap these two providers fill:





  • — Expo Application Services (EAS): apps, credentials, environment variables, update channels.



Both are open source (Apache 2.0) and published on the Terraform Registry. Let's use them together to describe a mobile app's release setup as code.






What you'll need




  • Terraform (or OpenTofu)

  • An App Store Connect API key (Users and Access → Integrations → App Store Connect API): the key, its key ID, and your issuer ID

  • An Expo access token (expo.dev → account settings → Access Tokens) and your Expo account name



Export the credentials as environment variables so nothing sensitive lands in your config:




CODE
export APPSTORE_KEY="$(cat AuthKey_XXXX.p8)"
export APPSTORE_KEY_ID="XXXXXXXXXX"
export APPSTORE_KEY_ISSUER_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

export EXPO_TOKEN="your-expo-access-token"
export EXPO_ACCOUNT_NAME="your-account-name"









Wiring up both providers






CODE
terraform {
required_providers {
appstore = {
source = "elevenode/appstore"
}
expo = {
source = "elevenode/expo"
}
}
}

# Reads APPSTORE_KEY / APPSTORE_KEY_ID / APPSTORE_KEY_ISSUER_ID from the env.
provider "appstore" {}

# Reads EXPO_TOKEN / EXPO_ACCOUNT_NAME from the env.
provider "expo" {}






terraform init pulls both providers from the registry.






Part 1 — the Apple side



First, the bundle identifier and the capabilities it needs. This replaces the checkbox screen in the Developer portal:




CODE
resource "appstore_bundle_identifier" "app" {
name = "Acme"
identifier = "com.acme.app"
platform = "IOS"

capabilities = [
"PUSH_NOTIFICATIONS",
"APPLE_ID_AUTH",
"IN_APP_PURCHASE",
]
}






Then a provisioning profile that ties that bundle ID to a signing certificate. Certificate IDs come from your Apple account (you can pass them in as a variable so the config stays portable):




CODE
variable "distribution_certificate_ids" {
type = list(string)
description = "App Store Connect certificate IDs to embed in the profile."
}

resource "appstore_provisioning_profile" "app_store" {
name = "Acme App Store"
type = "IOS_APP_STORE"
bundle_identifier_id = appstore_bundle_identifier.app.id
certificate_ids = var.distribution_certificate_ids
}






Notice the bundle_identifier_id reference — Terraform now knows the profile depends on the bundle ID and will create them in the right order. That dependency was invisible when you did this by hand.






Part 2 — the Expo side



Create the EAS app, then declare its environment variables instead of typing them into the dashboard:




CODE
resource "expo_app" "app" {
name = "Acme"
slug = "acme"
}

resource "expo_app_variable" "api_url" {
app_id = expo_app.app.id
name = "API_URL"
value = "https://api.acme.com"
visibility = "PUBLIC"
environments = ["PRODUCTION"]
}






You can drive EAS Update from here too. Define a branch and a channel that maps updates onto it:




CODE
resource "expo_update_branch" "production" {
app_id = expo_app.app.id
name = "production"
}

resource "expo_update_channel" "production" {
app_id = expo_app.app.id
name = "production"

branch_mapping = jsonencode({
version = 0
data = [{
branchId = expo_update_branch.production.id
branchMappingLogic = "true"
}]
})
}









Apply it






CODE
terraform apply






Terraform shows you the full plan — the bundle ID, its capabilities, the profile, the EAS app, its variables, the update channel — before anything is created. Approve it, and your entire mobile release setup exists, described in one place.



Now the interesting part: run it again against a fresh Apple team and Expo account and you get an identical setup. Change a capability in the config, open a PR, and your teammate can review the diff before it hits Apple. Delete a resource from the config and terraform plan tells you exactly what will be removed. That's the whole point of infrastructure as code, finally applied to the part of mobile that always lived in web consoles.






Try it



Both providers are open source and take issues and pull requests:




  • App Store Connect: )

  • Expo EAS: )



If they save you some clicking, a star helps other people find them. And if there's a resource you wish existed, open an issue — that's exactly the kind of feedback that shapes what gets built next.

Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
3 Quellen
GPT-6 Astra Release Today? OpenAI’s Next Major AI Model Is Almost Here
1 Quelle
Apple accuses OpenAI of destroying evidence as trade-secrets fight intensifies
1 Quelle
Major AI platforms go down in unprecedented simultaneous outage
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Your mobile release setup belongs in Terraform: Expo EAS + App Store Connect

Thematisch verwandte Begriffe: Your, mobile, release, setup · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...