# EAS Submit iOS: publicera en Expo-app på App Store

> EAS Submit skickar ditt iOS-bygge till App Store Connect, där det hamnar i TestFlight. Granskningen skickar du själv. Plus eas.json att kopiera och vanliga fel.

Originalsida: [EAS Submit iOS: publicera en Expo-app på App Store](https://devoria.fr/sv/blog/eas-submit-ios-publicera-expo-app-app-store)
Författare: [Mehdi Azizi](https://devoria.fr/sv/mehdi-azizi)
Publicerad: 2026-10-25
Innehållet senast granskat: 2026-10-25


`eas submit --platform ios` skickar ditt iOS-bygge till App Store Connect, där det dyker upp i TestFlight när Apple har bearbetat det. **Kommandot skickar inte in din app för Apples granskning: att välja bygge och skicka till granskning gör du själv i App Store Connect.** För att automatisera det behöver kommandot numret på din app-post (`ascAppId`) och en API-nyckel för App Store Connect.

Jag publicerar mina iOS-appar, bland annat Solys, TradaZen och Nolera, med Expo, EAS Build och EAS Submit. Den här guiden följer [Expos dokumentation om iOS-uppladdning](https://docs.expo.dev/submit/ios/), genomläst den 25 oktober 2026. Utan Mac hittar du hela vägen i [publicera en iOS-app utan Mac](https://devoria.fr/sv/blog/publicera-ios-app-utan-mac-expo-eas). Här fokuserar vi på uppladdningen.

## Det här behöver du före första kommandot

Expo listar tre krav:

- **Ett betalt Apple Developer-konto.** Pris och registrering hittar du i [Apple-utvecklarkonto](https://devoria.fr/sv/blog/apple-utvecklarkonto-pris).
- **Ett bundle-ID** i `ios.bundleIdentifier`. Enligt [referensen för Expos konfiguration](https://docs.expo.dev/versions/latest/config/app/) hittar du på det själv, men det måste vara unikt på App Store.
- **EAS CLI installerat**, och sedan `eas login` med ditt Expo-konto.

Du behöver också ett signerat produktionsbygge. EAS Build skapar det med certifikatet och profilen som det hanterar åt dig, som förklaras i iOS-certifikat och provisioning profile.

### App-posten i App Store Connect: du eller EAS?

EAS Submit skickar en binärfil till en app som måste finnas i App Store Connect.

**Du kan skapa den själv.** [Apples hjälp](https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app) beskriver fönstret New App: plattform, namn, primärt språk, bundle-ID, SKU och användaråtkomst. Du behöver rollen Account Holder, Admin eller App Manager.

**EAS kan också skapa den vid första uppladdningen.** Enligt [Expos sida om TestFlight](https://docs.expo.dev/submit/testflight/) skapar `eas submit` posten när du skickar ditt första bygge. Enligt [referensen för eas.json](https://docs.expo.dev/eas/json/) hoppas det steget över om du anger `ascAppId`. Namnet kommer från `appName`, annars från `name` i din konfiguration. Det primära språket kommer från `language`, som är `en-US` som standard. **Om din app först släpps på franska, ange `language` före den första uppladdningen.**

Kopiera sedan postens nummer till `ascAppId`. Expo visar var du hittar det: öppna din app i App Store Connect, sedan App Information. Det är fältet Apple ID, under General Information. **Det är ett nummer, inte ditt bundle-ID.**

## Varför en API-nyckel i stället för ditt Apple-ID

EAS Submit loggar in hos Apple med ditt Apple-ID eller med en API-nyckel för App Store Connect.

Apple-ID:t stöter på tvåfaktorsautentiseringen, som [Apple kräver](https://developer.apple.com/support/authentication/) av alla App Store Connect-användare: en människa måste bekräfta inloggningen. Ett appspecifikt lösenord, som skickas i `EXPO_APPLE_APP_SPECIFIC_PASSWORD`, slipper det steget, men [Expo anser att det är mindre säkert](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md) än API-nyckeln, som är standardmetoden och den rekommenderade. **Med nyckeln kan du autentisera dig helt utan interaktion, och därmed automatisera uppladdningen.**

Två sätt att få den:

- **Låt EAS hantera den.** Kör `eas credentials --platform ios`, välj profilen `production`, logga in på ditt Apple-konto och välj sedan "App Store Connect: Manage your API Key".
- **Ta med din egen nyckel.** I App Store Connect: Users and Access, fliken Integrations, App Store Connect API, Team Keys, sedan Generate API Key. Du behöver ett Admin-konto, och [Expos guide](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md) ger nyckeln rollen Admin.

I det andra fallet, anteckna Key ID, som visas i listan över aktiva nycklar, och Issuer ID, [högst upp på sidan Integrations](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests). Spara framför allt filen `.p8`: [du kan bara ladda ner den en gång](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api), och Apple sparar ingen kopia.

> En Admin-nyckel kan enligt Apple skapa och ta bort användare i ditt konto. Apple säger att du aldrig ska lägga nyckeln i ett kodrepo.

## Den minimala eas.json-filen att kopiera

Alla värden är påhittade: byt ut dem mot dina egna.

```json
{
  "cli": {
    "appVersionSource": "remote"
  },
  "build": {
    "production": {
      "autoIncrement": true
    }
  },
  "submit": {
    "production": {
      "ios": {
        "ascAppId": "1234567890",
        "appleTeamId": "ABCDE12345",
        "ascApiKeyPath": "./keys/AuthKey_XXXXXXXXXX.p8",
        "ascApiKeyIssuerId": "your-issuer-id",
        "ascApiKeyId": "XXXXXXXXXX"
      }
    }
  }
}
```

- **`appVersionSource` och `autoIncrement`**: EAS servrar håller byggnumret och räknar upp det vid varje produktionsbygge. [Expo rekommenderar det här fjärrläget](https://docs.expo.dev/build-reference/app-versions/) sedan EAS CLI 12.
- **`ascAppId`**: numret på din app-post. Utan det misslyckas det icke-interaktiva läget.
- **`appleTeamId`**: ID:t för ditt Apple Developer-team.
- **`ascApiKeyPath`, `ascApiKeyIssuerId`, `ascApiKeyId`**: din API-nyckel. Alla tre fälten accepterar miljövariabler. Lägg till mappen `keys` i din `.gitignore`.

Fältet `appleId` behövs bara om du loggar in med ditt Apple-ID. Om EAS redan hanterar din nyckel, ta också bort de tre `ascApiKey`-fälten. I mina tre appar, som jag gick igenom den 25 oktober, innehåller produktionsprofilen för uppladdning bara `ascAppId`, plus `appleTeamId` i Solys: ingen nyckel i filen.

## Kör bygget och sedan uppladdningen

```bash
eas build --platform ios --profile production
eas submit --platform ios
```

Utan andra flaggor låter `eas submit` dig välja vilket bygge som ska skickas, och första gången frågar den efter ditt Apple-ID. Uppladdningsprofilen `production` används som standard om den finns. [Referensen för EAS CLI](https://docs.expo.dev/eas/cli/) listar flaggorna som slipper valet:

| Flagga           | Vad den gör                   |
| ---------------- | ----------------------------- |
| `--latest`       | Skickar senaste iOS-bygget    |
| `--id`           | Skickar ett visst EAS-bygge   |
| `--path`         | Skickar en lokal .ipa-fil     |
| `--url`          | Skickar ett arkiv från nätet  |
| `--groups`       | Lägger till i en intern grupp |
| `--what-to-test` | Fyller i "What to test"       |

För att köra allt i ett svep, lägg till `--auto-submit` i byggkommandot. Enligt [Expos sida om automatisk uppladdning](https://docs.expo.dev/build/automate-submissions/) skickas det färdiga bygget till EAS Submit med den uppladdningsprofil som heter samma sak som byggprofilen. För att välja en annan: `--auto-submit-with-profile=namn`. **Bygget går till TestFlight, inte till granskning.**

I CI lägger du till `--non-interactive` och en `EXPO_TOKEN`-token. Kommandot kan då inte fråga dig något: det behöver `ascAppId` i profilen och en API-nyckel, antingen den som EAS kopplat till appen eller din egen i de tre `ascApiKey`-fälten.

## Vad som händer efter uppladdningen

**1. Apple bearbetar bygget.** Det måste gå igenom bearbetningen innan det syns i App Store Connect, och [Apple skickar ett mejl](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds) när det är klart. Expo talar oftast om 10 till 15 minuter innan du ser det i TestFlight.

**2. Exportefterlevnad.** Statusen Missing Compliance betyder att din deklaration om kryptering saknas. App Store Connect ställer frågorna för varje ny version, om inte Info.plist redan svarar på dem. Med Expo heter nyckeln `ios.config.usesNonExemptEncryption`:

```json
{
  "expo": {
    "ios": {
      "config": {
        "usesNonExemptEncryption": false
      }
    }
  }
}
```

Enligt [Apple](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations) passar `false` om din app, inklusive bibliotek, inte använder någon kryptering eller bara undantagen kryptering. Systemets kryptering, som HTTPS via URLSession, är oftast undantagen. **Ange bara `false` om det stämmer för din app: deklarationen är bindande.** Som alla nycklar i Info.plist kräver den ett nytt bygge.

**3. TestFlight.** Med statusen Ready to Submit kan bygget, [enligt Apple](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses), gå till interna testare, gå igenom betagranskningen för externa, eller skickas till App Store-granskning. Fältet `groups` i profilen lägger till det i dina interna grupper. Allt annat finns i [TestFlight för att testa din app](https://devoria.fr/sv/blog/testflight-testa-iphone-app).

## Uppladdning är inte detsamma som att skicka till granskning

[Expo skriver det](https://docs.expo.dev/submit/introduction/): ett TestFlight-bygge publiceras inte automatiskt på App Store. EAS Submit fyller inte i din app-sida eller dina skärmbilder. Det återstår fyra steg i App Store Connect, beskrivna i [Apples hjälp om att skicka till granskning](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app):

1. **Fyll i de obligatoriska metadata** för versionen.
2. **Välj bygget** i versionens Build-sektion.
3. **Klicka på "Add for Review".** Versionen får statusen Ready for Review, men inget har skickats till granskning än.
4. **Klicka på "Submit for Review".** Statusen blir In Review när granskningen börjar.

## Vanliga fel och hur du rättar dem

| Felmeddelande          | Orsak                    | Lösning                   |
| ---------------------- | ------------------------ | ------------------------- |
| ITMS-90189             | Byggnumret redan använt  | `autoIncrement`           |
| ITMS-90062 eller 90186 | Versionen redan stängd   | Höj `version`             |
| "Set ascAppId"         | `ascAppId` saknas i CI   | Lägg till `ascAppId`      |
| "API Keys cannot"      | Ingen nyckel kopplad     | `eas credentials`         |
| ITMS-90683             | Användningstext saknas   | `ios.infoPlist`           |
| ITMS-91053             | Ofullständigt manifest   | `ios.privacyManifests`    |
| ITMS-90725             | För gammalt iOS SDK      | Höj Expo SDK              |
| Missing Compliance     | Kryptering ej deklarerad | `usesNonExemptEncryption` |

Enligt Expo är ett redan använt byggnummer en vanlig orsak till att uppladdningen nekas: allt finns i byggnummer och version. Tre fel har en egen guide: [ITMS-90683 med Expo](https://devoria.fr/sv/blog/itms-90683-missing-purpose-string-expo), [ITMS-91053 med Expo](https://devoria.fr/sv/blog/itms-91053-missing-api-declaration-expo) och ITMS-90725.

De två meddelandena inom citattecken kommer från EAS och rättas i dess konfiguration. Missing Compliance går också att lösa genom att svara på frågorna i App Store Connect. **För alla andra rader påverkar rättningen binärfilen: bygg om och skicka igen.** En fjärruppdatering ändrar varken Info.plist, manifestet eller numren.

## Skicka din första app utan att famla

Kommandot är bara ett steg. [iOS Kit](https://devoria.fr/sv/kits/ios) utgår från startkoden för mina appar, prenumerationer inräknade, och följer fyra steg ända till App Store, i din egen takt.

Om du förbereder din första release, [gör din kostnadsfria diagnos](https://devoria.fr/sv/diagnostic): den visar vad som verkligen stoppar dig och skickar dig min checklista mot avslag från Apple. För app-sidan, skärmbilderna och godkännandet täcker sidan [publicera en app på App Store](https://devoria.fr/sv/expertise/publicera-app-pa-app-store) varje steg.

## Vanliga frågor

### Hur publicerar jag en Expo-app på App Store?

Kör ett produktionsbygge med EAS Build och skicka det sedan med `eas submit --platform ios`. När Apple har bearbetat det syns det i TestFlight. I App Store Connect fyller du sedan i app-sidan, väljer bygget i versionen och klickar på "Add for Review" och "Submit for Review".

### Skickar EAS Submit min app till Apples granskning?

Nej. EAS Submit skickar binärfilen till App Store Connect, och bygget hamnar i TestFlight. Att skicka till granskning gör du manuellt i App Store Connect, när app-sidan är ifylld och bygget valt.

### Var hittar jag min apps ascAppId?

Öppna din app i App Store Connect, sedan App Information. Det är fältet Apple ID, under General Information. Det är ett nummer och ska inte förväxlas med ditt bundle-ID.

### Behöver jag ett Apple-ID för att använda eas submit?

Första gången frågar kommandot efter det. Därefter, med `ascAppId` i profilen och en API-nyckel för App Store Connect, kan det köras utan interaktion, även i CI. API-nyckeln är Expos standardmetod och den rekommenderade.

### Hur lång tid tar det innan bygget syns i TestFlight?

Expo talar oftast om 10 till 15 minuters bearbetning hos Apple, som skickar ett mejl när det är klart. Om bygget fastnar på statusen Missing Compliance, svara på frågorna om kryptering och deklarera det sedan i din konfiguration för kommande byggen.


## Ditt projekt

[Apple Review Kit](https://devoria.fr/sv/kits/review-apple): Checklistan för App Store-granskning som jag använder, mina rättade avslag, anteckningar till granskaren och två Claude Code-skills som granskar din app. 29 €.

[iOS Kit](https://devoria.fr/sv/kits/ios): Bygg din iPhone-app med Claude Code: startkoden till mina appar, skills som kontrollerar arbetet, samt Apple Review Kit, App Store Screenshots Kit och ASO Kit. 129,99 €.
