# EAS Submit iOS: δημοσίευση εφαρμογής Expo στο App Store

> Το EAS Submit στέλνει το iOS build σου στο App Store Connect και εμφανίζεται στο TestFlight. Την υποβολή για έλεγχο την κάνεις εσύ στο App Store Connect.

Αρχική σελίδα: [EAS Submit iOS: δημοσίευση εφαρμογής Expo στο App Store](https://devoria.fr/el/blog/eas-submit-ios-publish-expo-app-store)
Συγγραφέας: [Mehdi Azizi](https://devoria.fr/el/mehdi-azizi)
Δημοσίευση: 2026-10-25
Τελευταία αναθεώρηση περιεχομένου: 2026-10-25


`eas submit --platform ios` στέλνει το iOS build σου στο App Store Connect, όπου εμφανίζεται στο TestFlight αφού το επεξεργαστεί η Apple. **Η εντολή δεν υποβάλλει την εφαρμογή σου για έλεγχο στην Apple: την επιλογή του build και την υποβολή για έλεγχο τις κάνεις εσύ στο App Store Connect.** Για να το αυτοματοποιήσεις, χρειάζεται τον αριθμό της καρτέλας σου (`ascAppId`) και ένα API key του App Store Connect.

Δημοσιεύω τις iOS εφαρμογές μου, ανάμεσά τους τα Solys, TradaZen και Nolera, με Expo, EAS Build και EAS Submit. Ο οδηγός αυτός ακολουθεί την [τεκμηρίωση του Expo για την αποστολή σε iOS](https://docs.expo.dev/submit/ios/), όπως την ξαναδιάβασα στις 25 Οκτωβρίου 2026. Αν δεν έχεις Mac, όλη η διαδικασία είναι στο [δημοσίευση εφαρμογής iOS χωρίς Mac](https://devoria.fr/el/blog/publish-ios-app-without-mac-expo-eas). Εδώ εστιάζουμε στην αποστολή.

## Τι χρειάζεσαι πριν από την πρώτη εντολή

Το Expo αναφέρει τρεις προϋποθέσεις:

- **Έναν πληρωμένο λογαριασμό Apple Developer.** Την τιμή και την εγγραφή θα τις βρεις στο [λογαριασμός Apple developer](https://devoria.fr/el/blog/apple-developer-account-price-free-or-99).
- **Ένα bundle identifier** στο `ios.bundleIdentifier`. Σύμφωνα με [την αναφορά της διαμόρφωσης του Expo](https://docs.expo.dev/versions/latest/config/app/), το επινοείς εσύ, αλλά πρέπει να είναι μοναδικό στο App Store.
- **Εγκατεστημένο EAS CLI**, και μετά `eas login` με τον λογαριασμό σου στο Expo.

Χρειάζεσαι επίσης ένα υπογεγραμμένο production build. Το EAS Build το φτιάχνει με το πιστοποιητικό και το profile που διαχειρίζεται για σένα, όπως εξηγεί το πιστοποιητικό και provisioning profile iOS.

### Η καρτέλα στο App Store Connect: εσύ ή το EAS;

Το EAS Submit στέλνει ένα binary σε μια εφαρμογή που πρέπει να υπάρχει στο App Store Connect.

**Μπορείς να τη δημιουργήσεις μόνος σου.** [Η βοήθεια της Apple](https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app) περιγράφει το παράθυρο New App: πλατφόρμα, όνομα, κύρια γλώσσα, bundle identifier, SKU και πρόσβαση χρηστών. Χρειάζεσαι τον ρόλο Account Holder, Admin ή App Manager.

**Μπορεί όμως να τη δημιουργήσει και το EAS στην πρώτη αποστολή.** Σύμφωνα με [τη σελίδα του Expo για το TestFlight](https://docs.expo.dev/submit/testflight/), το `eas submit` δημιουργεί την καρτέλα όταν στέλνεις το πρώτο σου build. Σύμφωνα με [την αναφορά του eas.json](https://docs.expo.dev/eas/json/), αν συμπληρώσεις το `ascAppId`, το βήμα αυτό παραλείπεται. Το όνομα προέρχεται από το `appName` ή, αν λείπει, από το `name` της διαμόρφωσής σου. Η κύρια γλώσσα προέρχεται από το `language`, που είναι `en-US` από προεπιλογή. **Αν η εφαρμογή σου βγει πρώτα στα γαλλικά, συμπλήρωσε το `language` πριν από αυτή την πρώτη αποστολή.**

Μετά, αντέγραψε τον αριθμό της καρτέλας στο `ascAppId`. Το Expo λέει πού θα τον βρεις: άνοιξε την εφαρμογή σου στο App Store Connect και μετά App Information. Είναι το πεδίο Apple ID, κάτω από το General Information. **Είναι αριθμός, όχι το bundle identifier σου.**

## Γιατί API key και όχι το Apple ID σου

Το EAS Submit συνδέεται στην Apple με το Apple ID σου ή με ένα API key του App Store Connect.

Το Apple ID σκοντάφτει στον έλεγχο ταυτότητας δύο παραγόντων, που η [Apple απαιτεί](https://developer.apple.com/support/authentication/) από όλους τους χρήστες του App Store Connect: χρειάζεται ένας άνθρωπος να επιβεβαιώσει τη σύνδεση. Ο κωδικός εφαρμογής, που περνάει στο `EXPO_APPLE_APP_SPECIFIC_PASSWORD`, παρακάμπτει αυτό το βήμα, αλλά [το Expo τον θεωρεί λιγότερο ασφαλή](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md) από το API key, την προεπιλεγμένη και προτεινόμενη μέθοδό του. **Το key επιτρέπει πιστοποίηση χωρίς καμία αλληλεπίδραση, άρα και αυτοματοποίηση της αποστολής.**

Δύο τρόποι για να το αποκτήσεις:

- **Άφησε το EAS να το διαχειριστεί.** Τρέξε `eas credentials --platform ios`, διάλεξε το profile `production`, συνδέσου στον λογαριασμό σου στην Apple και μετά διάλεξε «App Store Connect: Manage your API Key».
- **Φέρε το δικό σου key.** Στο App Store Connect: Users and Access, καρτέλα Integrations, App Store Connect API, Team Keys, και μετά Generate API Key. Χρειάζεσαι λογαριασμό Admin, και [ο οδηγός του Expo](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md) δίνει στο key τον ρόλο Admin.

Στη δεύτερη περίπτωση, σημείωσε το Key ID, που εμφανίζεται στη λίστα των ενεργών keys, και το Issuer ID, [στο πάνω μέρος της σελίδας Integrations](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests). Κράτα οπωσδήποτε το αρχείο `.p8`: [μπορείς να το κατεβάσεις μόνο μία φορά](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api), και η Apple δεν κρατά κανένα αντίγραφο.

> Ένα key Admin μπορεί, σύμφωνα με την Apple, να δημιουργεί και να διαγράφει χρήστες του λογαριασμού σου. Η Apple ζητά να μην αποθηκεύεις ποτέ το key σε αποθετήριο κώδικα.

## Το ελάχιστο eas.json για αντιγραφή

Όλες οι τιμές είναι ψεύτικες: αντικατάστησέ τες με τις δικές σου.

```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` και `autoIncrement`**: οι servers του EAS κρατούν τον αριθμό build και τον αυξάνουν σε κάθε production build. [Το Expo προτείνει αυτή την απομακρυσμένη λειτουργία](https://docs.expo.dev/build-reference/app-versions/) από το EAS CLI 12.
- **`ascAppId`**: ο αριθμός της καρτέλας σου. Χωρίς αυτόν, η μη διαδραστική λειτουργία αποτυγχάνει.
- **`appleTeamId`**: το αναγνωριστικό της ομάδας σου στο Apple Developer.
- **`ascApiKeyPath`, `ascApiKeyIssuerId`, `ascApiKeyId`**: το API key σου. Και τα τρία πεδία δέχονται μεταβλητές περιβάλλοντος. Πρόσθεσε τον φάκελο `keys` στο `.gitignore` σου.

Το πεδίο `appleId` χρειάζεται μόνο αν συνδέεσαι με το Apple ID σου. Αν το EAS διαχειρίζεται ήδη το key σου, αφαίρεσε και τα τρία πεδία `ascApiKey`. Στις τρεις εφαρμογές μου, που τις ξαναέλεγξα στις 25 Οκτωβρίου, το production profile αποστολής περιέχει μόνο το `ascAppId`, συν το `appleTeamId` στο Solys: κανένα key μέσα στο αρχείο.

## Τρέξε το build και μετά την αποστολή

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

Χωρίς άλλη επιλογή, το `eas submit` σε βάζει να διαλέξεις ποιο build θα στείλεις και, την πρώτη φορά, σου ζητά το Apple ID σου. Το profile αποστολής `production` χρησιμοποιείται από προεπιλογή αν υπάρχει. Η [αναφορά του EAS CLI](https://docs.expo.dev/eas/cli/) παραθέτει τις επιλογές που παρακάμπτουν την επιλογή:

| Επιλογή          | Τι κάνει                           |
| ---------------- | ---------------------------------- |
| `--latest`       | Στέλνει το τελευταίο iOS build     |
| `--id`           | Στέλνει ένα συγκεκριμένο EAS build |
| `--path`         | Στέλνει ένα τοπικό αρχείο .ipa     |
| `--url`          | Στέλνει ένα online archive         |
| `--groups`       | Προσθέτει σε εσωτερική ομάδα       |
| `--what-to-test` | Συμπληρώνει το «What to test»      |

Για να γίνουν όλα μαζί, πρόσθεσε `--auto-submit` στην εντολή του build. Σύμφωνα με [τη σελίδα του Expo για την αυτόματη αποστολή](https://docs.expo.dev/build/automate-submissions/), το ολοκληρωμένο build πηγαίνει στο EAS Submit με το profile αποστολής που έχει το ίδιο όνομα με το build profile. Για να διαλέξεις άλλο: `--auto-submit-with-profile=name`. **Το build πηγαίνει στο TestFlight, όχι για έλεγχο.**

Σε continuous integration, πρόσθεσε `--non-interactive` και ένα token `EXPO_TOKEN`. Τότε η εντολή δεν μπορεί να σε ρωτήσει τίποτα: χρειάζεται το `ascAppId` στο profile και ένα API key, είτε αυτό που έχει συνδέσει το EAS με την εφαρμογή είτε το δικό σου στα τρία πεδία `ascApiKey`.

## Τι γίνεται μετά την αποστολή

**1. Η Apple επεξεργάζεται το build.** Πρέπει να περάσει από αυτή την επεξεργασία πριν εμφανιστεί στο App Store Connect, και [η Apple σού στέλνει email](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds) στο τέλος. Το Expo μιλά συνήθως για 10 έως 15 λεπτά μέχρι να το δεις στο TestFlight.

**2. Η συμμόρφωση εξαγωγής.** Η κατάσταση Missing Compliance σημαίνει ότι λείπει η δήλωσή σου για την κρυπτογράφηση. Το App Store Connect κάνει αυτές τις ερωτήσεις σε κάθε νέα έκδοση, εκτός αν το Info.plist τις απαντά ήδη. Με το Expo, το κλειδί λέγεται `ios.config.usesNonExemptEncryption`:

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

Σύμφωνα με [την Apple](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations), το `false` ταιριάζει αν η εφαρμογή σου, μαζί με τις βιβλιοθήκες της, δεν χρησιμοποιεί καμία κρυπτογράφηση ή μόνο εξαιρούμενη κρυπτογράφηση. Η κρυπτογράφηση του συστήματος, όπως το HTTPS μέσω URLSession, συνήθως εξαιρείται. **Δήλωσε `false` μόνο αν ισχύει για την εφαρμογή σου: η δήλωση σε δεσμεύει.** Όπως κάθε κλειδί του Info.plist, απαιτεί νέο build.

**3. TestFlight.** Στην κατάσταση Ready to Submit, [σύμφωνα με την Apple](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses), το build μπορεί να πάει στους εσωτερικούς testers, να περάσει beta review για τους εξωτερικούς ή να σταλεί για έλεγχο στο App Store. Το πεδίο `groups` του profile το προσθέτει στις εσωτερικές σου ομάδες. Όλα τα υπόλοιπα είναι στο [TestFlight για να δοκιμάσεις την εφαρμογή σου](https://devoria.fr/el/blog/testflight-dokimi-efarmogis-iphone).

## Η αποστολή δεν είναι υποβολή για έλεγχο

[Το Expo το γράφει](https://docs.expo.dev/submit/introduction/): ένα build του TestFlight δεν δημοσιεύεται αυτόματα στο App Store. Το EAS Submit δεν συμπληρώνει ούτε την καρτέλα σου ούτε τα screenshots σου. Μένουν τέσσερις κινήσεις στο App Store Connect, που περιγράφονται στη [βοήθεια της Apple για την υποβολή για έλεγχο](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app):

1. **Συμπλήρωσε τα υποχρεωτικά metadata** της έκδοσης.
2. **Διάλεξε το build** στην ενότητα Build της έκδοσης.
3. **Πάτα «Add for Review».** Η έκδοση περνά σε Ready for Review, αλλά τίποτα δεν έχει σταλεί ακόμα για έλεγχο.
4. **Πάτα «Submit for Review».** Η κατάσταση γίνεται In Review όταν ξεκινήσει ο έλεγχος.

## Τα συχνά σφάλματα και η διόρθωσή τους

| Σφάλμα που εμφανίζεται | Αιτία                       | Διόρθωση                  |
| ---------------------- | --------------------------- | ------------------------- |
| ITMS-90189             | Ο αριθμός build υπάρχει ήδη | `autoIncrement`           |
| ITMS-90062 ή 90186     | Η έκδοση έχει ήδη κλείσει   | Αύξησε το `version`       |
| «Set ascAppId»         | Λείπει το `ascAppId` στο CI | Πρόσθεσε `ascAppId`       |
| «API Keys cannot»      | Κανένα συνδεδεμένο key      | `eas credentials`         |
| ITMS-90683             | Λείπει το purpose string    | `ios.infoPlist`           |
| ITMS-91053             | Ελλιπές manifest            | `ios.privacyManifests`    |
| ITMS-90725             | Πολύ παλιό iOS SDK          | Αναβάθμισε το Expo SDK    |
| Missing Compliance     | Αδήλωτη κρυπτογράφηση       | `usesNonExemptEncryption` |

Σύμφωνα με το Expo, ο αριθμός build που έχει ήδη χρησιμοποιηθεί είναι συχνή αιτία απόρριψης στην αποστολή: όλα είναι στο αριθμός build και έκδοση. Τρία σφάλματα έχουν δικό τους οδηγό: [ITMS-90683 με Expo](https://devoria.fr/el/blog/itms-90683-missing-purpose-string-expo), [ITMS-91053 με Expo](https://devoria.fr/el/blog/itms-91053-missing-api-declaration-expo) και ITMS-90725.

Τα δύο μηνύματα σε εισαγωγικά προέρχονται από το EAS και διορθώνονται στη διαμόρφωσή του. Το Missing Compliance λύνεται και απαντώντας στις ερωτήσεις στο App Store Connect. **Για όλες τις άλλες γραμμές, η διόρθωση αφορά το binary: κάνε νέο build και στείλ' το ξανά.** Μια απομακρυσμένη ενημέρωση δεν αλλάζει ούτε το Info.plist, ούτε το manifest, ούτε τους αριθμούς.

## Στείλε την πρώτη σου εφαρμογή χωρίς δοκιμή και λάθος

Η εντολή είναι μόνο ένα βήμα. Το [iOS Kit](https://devoria.fr/el/kits/ios) ξεκινά από το Starter Code των εφαρμογών μου, μαζί με τις συνδρομές, και ακολουθεί τέσσερα βήματα μέχρι το App Store, με τον δικό σου ρυθμό.

Αν ετοιμάζεις την πρώτη σου κυκλοφορία, [κάνε τη δωρεάν διάγνωση](https://devoria.fr/el/diagnostic): σου λέει τι σε μπλοκάρει πραγματικά και σου στέλνει τη checklist μου κατά των απορρίψεων της Apple. Για την καρτέλα, τα screenshots και την έγκριση, η σελίδα [δημοσίευση εφαρμογής στο App Store](https://devoria.fr/el/expertise/publish-an-app-on-the-app-store) καλύπτει κάθε βήμα.

## Συχνές ερωτήσεις

### Πώς δημοσιεύω μια εφαρμογή Expo στο App Store;

Τρέξε ένα production build με το EAS Build και μετά στείλ' το με `eas submit --platform ios`. Αφού το επεξεργαστεί η Apple, εμφανίζεται στο TestFlight. Στο App Store Connect, συμπλήρωσε μετά την καρτέλα, διάλεξε αυτό το build στην έκδοση και πάτα «Add for Review» και «Submit for Review».

### Στέλνει το EAS Submit την εφαρμογή μου για έλεγχο στην Apple;

Όχι. Το EAS Submit στέλνει το binary στο App Store Connect και το build φτάνει στο TestFlight. Η υποβολή για έλεγχο γίνεται χειροκίνητα στο App Store Connect, αφού συμπληρώσεις την καρτέλα και διαλέξεις το build.

### Πού βρίσκω το ascAppId της εφαρμογής μου;

Στο App Store Connect, άνοιξε την εφαρμογή σου και μετά App Information. Είναι το πεδίο Apple ID, κάτω από το General Information. Είναι αριθμός και δεν πρέπει να το μπερδέψεις με το bundle identifier σου.

### Χρειάζομαι Apple ID για να χρησιμοποιήσω το eas submit;

Την πρώτη φορά, η εντολή σού το ζητά. Μετά, με το `ascAppId` στο profile και ένα API key του App Store Connect, μπορεί να τρέχει χωρίς αλληλεπίδραση, ακόμα και σε continuous integration. Το API key είναι η προεπιλεγμένη και προτεινόμενη μέθοδος του Expo.

### Πόσο χρόνο παίρνει μέχρι να δω το build στο TestFlight;

Το Expo μιλά συνήθως για 10 έως 15 λεπτά επεξεργασίας από την Apple, που σου στέλνει email στο τέλος. Αν το build μείνει στην κατάσταση Missing Compliance, απάντησε στις ερωτήσεις για την κρυπτογράφηση και μετά δήλωσέ την στη διαμόρφωσή σου για τα επόμενα builds.


## Το project σου

[Apple Review Kit](https://devoria.fr/el/kits/review-apple): Η checklist για το App Store review που χρησιμοποιώ, οι απορρίψεις μου από την Apple διορθωμένες, οι σημειώσεις για τον reviewer και δύο skills του Claude Code που ελέγχουν την app σου. 29 €.

[iOS Kit](https://devoria.fr/el/kits/ios): Φτιάξε την app σου για iPhone με το Claude Code: ο κώδικας εκκίνησης των apps μου, τα skills που ελέγχουν τη δουλειά του, και τα Apple Review Kit, App Store Screenshots Kit και ASO Kit. 129,99 €.
