# EAS Submit iOS: Expo-sovellus App Storeen

> EAS Submit lähettää iOS-buildisi App Store Connectiin ja TestFlightiin. Arviointiin lähetät itse App Store Connectissa. Mukana eas.json ja yleiset virheet.

Alkuperäinen sivu: [EAS Submit iOS: Expo-sovellus App Storeen](https://devoria.fr/fi/blog/eas-submit-ios-expo-sovellus-app-store)
Kirjoittaja: [Mehdi Azizi](https://devoria.fr/fi/mehdi-azizi)
Julkaistu: 2026-10-25
Sisältö tarkistettu viimeksi: 2026-10-25


`eas submit --platform ios` lähettää iOS-buildisi App Store Connectiin, jossa se näkyy TestFlightissa, kun Apple on käsitellyt sen. **Komento ei lähetä sovellustasi Applen arviointiin: buildin valinta ja arviointiin lähettäminen tehdään edelleen App Store Connectissa.** Automatisointiin se tarvitsee sovellussivusi numeron (`ascAppId`) ja App Store Connect -API-avaimen.

Julkaisen iOS-sovellukseni, muun muassa Solysin, TradaZenin ja Noleran, Expolla, EAS Buildilla ja EAS Submitilla. Tämä opas noudattaa [Expon dokumentaatiota iOS-lähetyksestä](https://docs.expo.dev/submit/ios/), jonka tarkistin 25. lokakuuta 2026. Jos sinulla ei ole Macia, koko polku on oppaassa [iOS-sovelluksen julkaisu ilman Macia](https://devoria.fr/fi/blog/ios-sovellus-julkaisu-ilman-macia-expo-eas). Tässä keskitytään lähetykseen.

## Mitä tarvitset ennen ensimmäistä komentoa

Expo listaa kolme edellytystä:

- **Maksullinen Apple Developer -tili.** Hinta ja rekisteröityminen löytyvät oppaasta [Applen kehittäjätili](https://devoria.fr/fi/blog/apple-kehittajatili-hinta-ilmainen).
- **Bundle-tunniste** kentässä `ios.bundleIdentifier`. [Expon konfiguraatioreferenssin](https://docs.expo.dev/versions/latest/config/app/) mukaan keksit sen itse, mutta sen täytyy olla App Storessa yksilöllinen.
- **EAS CLI asennettuna**, ja sen jälkeen `eas login` Expo-tililläsi.

Tarvitset myös allekirjoitetun tuotantobuildin. EAS Build tekee sen sertifikaatilla ja profiililla, joita se hallinnoi puolestasi, kuten oppaassa iOS-sertifikaatti ja provisioning profile kerrotaan.

### App Store Connectin sovellussivu: sinä vai EAS?

EAS Submit lähettää binäärin sovellukselle, jonka täytyy olla olemassa App Store Connectissa.

**Voit luoda sen itse.** [Applen ohje](https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app) kuvaa New App -ikkunan: alusta, nimi, ensisijainen kieli, bundle-tunniste, SKU ja käyttäjien pääsy. Tarvitset roolin Account Holder, Admin tai App Manager.

**EAS voi myös luoda sen ensimmäisellä lähetyksellä.** [Expon TestFlight-sivun](https://docs.expo.dev/submit/testflight/) mukaan `eas submit` luo sovellussivun, kun lähetät ensimmäisen buildisi. [eas.json-referenssin](https://docs.expo.dev/eas/json/) mukaan `ascAppId`:n täyttäminen ohittaa tämän vaiheen. Nimi tulee kentästä `appName` tai, jos sitä ei ole, konfiguraatiosi `name`-kentästä. Ensisijainen kieli tulee kentästä `language`, jonka oletusarvo on `en-US`. **Jos sovelluksesi julkaistaan ensin ranskaksi, täytä `language` ennen tätä ensimmäistä lähetystä.**

Kopioi sen jälkeen sovellussivun numero kenttään `ascAppId`. Expo kertoo, mistä sen löytää: avaa sovelluksesi App Store Connectissa ja sitten App Information. Se on Apple ID -kenttä kohdassa General Information. **Se on numero, ei bundle-tunnisteesi.**

## Miksi API-avain eikä Apple ID

EAS Submit kirjautuu Applelle joko Apple ID:lläsi tai App Store Connect -API-avaimella.

Apple ID kompastuu kaksivaiheiseen tunnistautumiseen, jota [Apple vaatii](https://developer.apple.com/support/authentication/) kaikilta App Store Connectin käyttäjiltä: kirjautuminen pitää vahvistaa ihmisen toimesta. Sovelluskohtainen salasana, joka annetaan muuttujassa `EXPO_APPLE_APP_SPECIFIC_PASSWORD`, ohittaa tämän vaiheen, mutta [Expo pitää sitä vähemmän turvallisena](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md) kuin API-avainta, joka on sen oletus ja suositeltu tapa. **Avaimella tunnistautuminen onnistuu ilman mitään vuorovaikutusta, joten lähetyksen voi automatisoida.**

Kaksi tapaa saada avain:

- **Anna EAS:n hoitaa se.** Aja `eas credentials --platform ios`, valitse profiili `production`, kirjaudu Apple-tilillesi ja valitse ”App Store Connect: Manage your API Key”.
- **Tuo oma avaimesi.** App Store Connectissa: Users and Access, välilehti Integrations, App Store Connect API, Team Keys ja sitten Generate API Key. Tarvitset Admin-tilin, ja [Expon ohje](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md) antaa avaimelle Admin-roolin.

Jälkimmäisessä tapauksessa ota talteen Key ID, joka näkyy aktiivisten avainten listassa, ja Issuer ID, joka on [Integrations-sivun yläosassa](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests). Säilytä ennen kaikkea `.p8`-tiedosto: [voit ladata sen vain kerran](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api), eikä Apple säilytä siitä kopiota.

> Applen mukaan Admin-avain voi luoda ja poistaa tilisi käyttäjiä. Apple kehottaa olemaan koskaan tallentamatta avainta koodivarastoon.

## Minimaalinen eas.json kopioitavaksi

Kaikki arvot ovat keksittyjä: vaihda tilalle omasi.

```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` ja `autoIncrement`**: EAS:n palvelimet säilyttävät build-numeron ja kasvattavat sitä jokaisella tuotantobuildilla. [Expo suosittelee tätä etätilaa](https://docs.expo.dev/build-reference/app-versions/) EAS CLI 12:sta lähtien.
- **`ascAppId`**: sovellussivusi numero. Ilman sitä ei-interaktiivinen tila epäonnistuu.
- **`appleTeamId`**: Apple Developer -tiimisi tunniste.
- **`ascApiKeyPath`, `ascApiKeyIssuerId`, `ascApiKeyId`**: API-avaimesi. Kaikki kolme kenttää hyväksyvät ympäristömuuttujia. Lisää `keys`-kansio `.gitignore`-tiedostoosi.

Kenttää `appleId` tarvitaan vain, jos kirjaudut Apple ID:lläsi. Jos EAS hallinnoi jo avaintasi, poista myös kolme `ascApiKey`-kenttää. Kolmessa sovelluksessani, jotka tarkistin 25. lokakuuta, tuotannon lähetysprofiilissa on vain `ascAppId`, ja Solysissa lisäksi `appleTeamId`: tiedostossa ei ole yhtään avainta.

## Käynnistä build ja sitten lähetys

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

Ilman muita valitsimia `eas submit` pyytää sinua valitsemaan lähetettävän buildin ja kysyy ensimmäisellä kerralla Apple ID:täsi. Lähetysprofiili `production` valitaan oletuksena, jos se on olemassa. [EAS CLI -referenssi](https://docs.expo.dev/eas/cli/) listaa valitsimet, joilla valinnan voi ohittaa:

| Valitsin         | Mitä se tekee                       |
| ---------------- | ----------------------------------- |
| `--latest`       | Lähettää viimeisimmän iOS-buildin   |
| `--id`           | Lähettää tietyn EAS-buildin         |
| `--path`         | Lähettää paikallisen .ipa-tiedoston |
| `--url`          | Lähettää verkossa olevan arkiston   |
| `--groups`       | Lisää sisäiseen ryhmään             |
| `--what-to-test` | Täyttää kentän ”What to test”       |

Jos haluat ketjuttaa kaiken, lisää build-komentoon `--auto-submit`. [Expon automaattisen lähetyksen sivun](https://docs.expo.dev/build/automate-submissions/) mukaan valmis build lähtee EAS Submitiin build-profiilin kanssa samannimisellä lähetysprofiililla. Toisen valitset näin: `--auto-submit-with-profile=nimi`. **Build menee TestFlightiin, ei arviointiin.**

Jatkuvassa integraatiossa lisää `--non-interactive` ja `EXPO_TOKEN`-tunnus. Komento ei silloin voi kysyä sinulta mitään: se tarvitsee profiiliin `ascAppId`:n ja API-avaimen, joko sen, jonka EAS on liittänyt sovellukseen, tai omasi kolmessa `ascApiKey`-kentässä.

## Mitä lähetyksen jälkeen tapahtuu

**1. Apple käsittelee buildin.** Sen täytyy käydä läpi tämä käsittely ennen kuin se näkyy App Store Connectissa, ja [Apple lähettää sinulle sähköpostin](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds), kun se on valmis. Expon mukaan buildin näkemiseen TestFlightissa menee yleensä 10-15 minuuttia.

**2. Vientivaatimustenmukaisuus.** Tila Missing Compliance tarkoittaa, että salausta koskeva ilmoituksesi puuttuu. App Store Connect esittää nämä kysymykset jokaisesta uudesta versiosta, ellei Info.plist jo vastaa niihin. Expossa avain on `ios.config.usesNonExemptEncryption`:

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

[Applen](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations) mukaan `false` sopii, jos sovelluksesi kirjastoineen ei käytä lainkaan salausta tai käyttää vain vapautettua salausta. Järjestelmän salaus, kuten URLSessionin HTTPS, on yleensä vapautettu. **Ilmoita `false` vain, jos se pitää paikkansa sovelluksesi kohdalla: ilmoitus sitoo sinua.** Kuten mikä tahansa Info.plistin avain, se vaatii uuden buildin.

**3. TestFlight.** Tilassa Ready to Submit build voi [Applen mukaan](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses) mennä sisäisille testaajille, läpäistä beta-arvioinnin ulkoisia testaajia varten tai lähteä App Store -arviointiin. Profiilin `groups`-kenttä lisää sen sisäisiin ryhmiisi. Kaikki muu on oppaassa [TestFlight sovelluksen testaamiseen](https://devoria.fr/fi/blog/testflight-testaa-iphone-sovellus-ennen-lahetysta).

## Lähetys ei ole arviointiin lähettämistä

[Expo sanoo sen suoraan](https://docs.expo.dev/submit/introduction/): TestFlight-buildia ei julkaista App Storessa automaattisesti. EAS Submit ei täytä sovellussivuasi eikä kuvakaappauksiasi. App Store Connectissa on jäljellä neljä toimenpidettä, jotka kuvataan [Applen ohjeessa arviointiin lähettämisestä](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app):

1. **Täytä version pakolliset metatiedot.**
2. **Valitse build** version Build-osiossa.
3. **Klikkaa ”Add for Review”.** Versio siirtyy tilaan Ready for Review, mutta mitään ei ole vielä lähetetty arviointiin.
4. **Klikkaa ”Submit for Review”.** Tila muuttuu muotoon In Review, kun arviointi alkaa.

## Yleiset virheet ja niiden korjaus

| Näytetty virhe       | Syy                           | Korjaus                   |
| -------------------- | ----------------------------- | ------------------------- |
| ITMS-90189           | Build-numero jo käytössä      | `autoIncrement`           |
| ITMS-90062 tai 90186 | Versio jo suljettu            | Nosta `version`           |
| ”Set ascAppId”       | `ascAppId` puuttuu CI:ssä     | Lisää `ascAppId`          |
| ”API Keys cannot”    | Avainta ei ole liitetty       | `eas credentials`         |
| ITMS-90683           | Käyttötarkoitusteksti puuttuu | `ios.infoPlist`           |
| ITMS-91053           | Puutteellinen manifesti       | `ios.privacyManifests`    |
| ITMS-90725           | Liian vanha iOS SDK           | Nosta Expo SDK:ta         |
| Missing Compliance   | Salausta ei ilmoitettu        | `usesNonExemptEncryption` |

Expon mukaan jo käytetty build-numero on yleinen syy lähetyksen hylkäämiseen: kaikki siitä on oppaassa build-numero ja versio. Kolmella virheellä on oma oppaansa: [ITMS-90683 Expolla](https://devoria.fr/fi/blog/itms-90683-missing-purpose-string-expo), [ITMS-91053 Expolla](https://devoria.fr/fi/blog/itms-91053-missing-api-declaration-expo) ja ITMS-90725.

Lainausmerkeissä olevat kaksi viestiä tulevat EAS:ltä ja korjataan sen konfiguraatiossa. Missing Compliance ratkeaa myös vastaamalla kysymyksiin App Store Connectissa. **Kaikilla muilla riveillä korjaus koskee binääriä: tee uusi build ja lähetä se uudelleen.** Etäpäivitys ei muuta Info.plistiä, manifestia eikä numeroita.

## Lähetä ensimmäinen sovelluksesi ilman arvailua

Komento on vain yksi vaihe. [iOS Kit](https://devoria.fr/fi/kits/ios) lähtee liikkeelle sovellusteni aloituskoodista tilauksineen ja etenee neljässä vaiheessa App Storeen asti, omaan tahtiisi.

Jos valmistelet ensimmäistä julkaisuasi, [tee ilmainen diagnoosi](https://devoria.fr/fi/diagnostic): se kertoo, mikä sinua oikeasti jarruttaa, ja lähettää sinulle tarkistuslistani Applen hylkäysten välttämiseen. Sovellussivua, kuvakaappauksia ja hyväksyntää varten sivu [sovelluksen julkaisu App Storessa](https://devoria.fr/fi/expertise/julkaise-sovellus-app-storeen) käy läpi jokaisen vaiheen.

## Usein kysytyt kysymykset

### Miten Expo-sovellus julkaistaan App Storessa?

Tee tuotantobuild EAS Buildilla ja lähetä se komennolla `eas submit --platform ios`. Kun Apple on käsitellyt sen, se näkyy TestFlightissa. Täytä sitten App Store Connectissa sovellussivu, valitse tämä build versioon ja klikkaa ”Add for Review” ja ”Submit for Review”.

### Lähettääkö EAS Submit sovellukseni Applen arviointiin?

Ei. EAS Submit lähettää binäärin App Store Connectiin, ja build päätyy TestFlightiin. Arviointiin lähetetään käsin App Store Connectissa, kun sovellussivu on täytetty ja build valittu.

### Mistä löydän sovellukseni ascAppId:n?

Avaa sovelluksesi App Store Connectissa ja sitten App Information. Se on Apple ID -kenttä kohdassa General Information. Se on numero, jota ei pidä sekoittaa bundle-tunnisteeseesi.

### Tarvitaanko eas submitin käyttöön Apple ID?

Ensimmäisellä kerralla komento kysyy sitä. Sen jälkeen, kun profiilissa on `ascAppId` ja käytössä on App Store Connect -API-avain, se voi toimia ilman vuorovaikutusta, myös jatkuvassa integraatiossa. API-avain on Expon oletus ja suosittelema tapa.

### Kauanko kestää, ennen kuin build näkyy TestFlightissa?

Expon mukaan Applen käsittely kestää yleensä 10-15 minuuttia, ja Apple lähettää sinulle sähköpostin, kun se on valmis. Jos build jää tilaan Missing Compliance, vastaa salausta koskeviin kysymyksiin ja ilmoita asia konfiguraatiossasi seuraavia buildeja varten.


## Projektisi

[Apple Review Kit](https://devoria.fr/fi/kits/review-apple): Käyttämäni App Store -reviewn tarkistuslista, korjatut Applen hylkäykseni, muistiinpanot testaajalle ja kaksi Claude Code -skilliä, jotka tarkistavat appisi. 29 €.

[iOS Kit](https://devoria.fr/fi/kits/ios): Tee iPhone-appisi Claude Coden avulla: omien appieni aloituskoodi, työn tarkistavat skillit sekä Apple Review Kit, App Store Screenshots Kit ja ASO Kit. 129,99 €.
