# EAS Submit iOS: terbitkan app Expo di App Store

> EAS Submit menghantar build iOS anda ke App Store Connect dan ia muncul dalam TestFlight. Penghantaran untuk semakan tetap dibuat dalam App Store Connect.

Halaman asal: [EAS Submit iOS: terbitkan app Expo di App Store](https://devoria.fr/ms/blog/eas-submit-ios-terbitkan-app-expo-app-store)
Pengarang: [Mehdi Azizi](https://devoria.fr/ms/mehdi-azizi)
Diterbitkan: 2026-10-25
Semakan kandungan terakhir: 2026-10-25


`eas submit --platform ios` menghantar build iOS anda ke App Store Connect, dan ia muncul dalam TestFlight selepas diproses oleh Apple. **Arahan ini tidak menghantar app anda untuk semakan Apple: pemilihan build dan penghantaran untuk semakan masih perlu dibuat dalam App Store Connect.** Untuk mengautomasikannya, ia memerlukan nombor rekod app anda (`ascAppId`) dan kunci API App Store Connect.

Saya menerbitkan app iOS saya, termasuk Solys, TradaZen dan Nolera, dengan Expo, EAS Build dan EAS Submit. Panduan ini mengikut [dokumentasi Expo tentang penghantaran iOS](https://docs.expo.dev/submit/ios/), yang saya semak pada 25 Oktober 2026. Tanpa Mac, laluan penuhnya ada dalam [menerbitkan app iOS tanpa Mac](https://devoria.fr/ms/blog/terbitkan-aplikasi-ios-tanpa-mac-expo-eas). Di sini, kita fokus pada penghantaran.

## Apa yang anda perlukan sebelum arahan pertama

Expo menyenaraikan tiga prasyarat:

- **Akaun Apple Developer berbayar.** Harga dan pendaftaran ada dalam [akaun pembangun Apple](https://devoria.fr/ms/blog/akaun-pembangun-apple-harga-percuma-atau-berbayar).
- **Pengecam bundle** dalam `ios.bundleIdentifier`. Menurut [rujukan konfigurasi Expo](https://docs.expo.dev/versions/latest/config/app/), anda yang menciptanya, tetapi ia mesti unik di App Store.
- **EAS CLI dipasang**, kemudian `eas login` dengan akaun Expo anda.

Anda juga perlukan build production yang ditandatangani. EAS Build menghasilkannya dengan sijil dan profil yang diuruskannya untuk anda, seperti yang diterangkan dalam sijil dan provisioning profile iOS.

### Rekod App Store Connect: anda atau EAS?

EAS Submit menghantar binari ke app yang mesti sudah wujud dalam App Store Connect.

**Anda boleh menciptanya sendiri.** [Bantuan Apple](https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app) menerangkan tetingkap New App: platform, nama, bahasa utama, pengecam bundle, SKU dan akses pengguna. Anda perlukan peranan Account Holder, Admin atau App Manager.

**EAS juga boleh menciptanya pada penghantaran pertama.** Menurut [halaman Expo tentang TestFlight](https://docs.expo.dev/submit/testflight/), `eas submit` mencipta rekod itu apabila anda menghantar build pertama. Menurut [rujukan eas.json](https://docs.expo.dev/eas/json/), mengisi `ascAppId` melangkau langkah ini. Nama diambil daripada `appName`, atau jika tiada, daripada `name` dalam konfigurasi anda. Bahasa utama diambil daripada `language`, yang lalainya `en-US`. **Jika app anda dilancarkan dalam bahasa Perancis dahulu, isi `language` sebelum penghantaran pertama ini.**

Selepas itu, salin nombor rekod ke dalam `ascAppId`. Expo menunjukkan di mana untuk mencarinya: buka app anda dalam App Store Connect, kemudian App Information. Ia ialah medan Apple ID, di bawah General Information. **Ia ialah nombor, bukan pengecam bundle anda.**

## Mengapa kunci API dan bukan Apple ID anda

EAS Submit menyambung ke Apple dengan Apple ID anda atau dengan kunci API App Store Connect.

Apple ID tersekat pada pengesahan dua faktor, yang [diwajibkan oleh Apple](https://developer.apple.com/support/authentication/) untuk semua pengguna App Store Connect: perlu ada orang untuk mengesahkan log masuk. Kata laluan khusus app, yang dihantar melalui `EXPO_APPLE_APP_SPECIFIC_PASSWORD`, mengelakkan langkah ini, tetapi [Expo menganggapnya kurang selamat](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md) berbanding kunci API, kaedah lalai dan disyorkannya. **Kunci ini membolehkan pengesahan tanpa sebarang interaksi, jadi penghantaran boleh diautomasikan.**

Dua cara untuk mendapatkannya:

- **Biar EAS menguruskannya.** Jalankan `eas credentials --platform ios`, pilih profil `production`, log masuk ke akaun Apple anda, kemudian pilih "App Store Connect: Manage your API Key".
- **Bawa kunci anda sendiri.** Dalam App Store Connect: Users and Access, tab Integrations, App Store Connect API, Team Keys, kemudian Generate API Key. Anda perlukan akaun Admin, dan [panduan Expo](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md) memberi peranan Admin kepada kunci itu.

Untuk cara kedua, catat Key ID, yang dipaparkan dalam senarai kunci aktif, dan Issuer ID, [di bahagian atas halaman Integrations](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests). Paling penting, simpan fail `.p8`: [anda hanya boleh memuat turunnya sekali](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api), dan Apple tidak menyimpan sebarang salinan.

> Menurut Apple, kunci Admin boleh mencipta dan memadam pengguna akaun anda. Apple meminta anda supaya tidak sekali-kali menyimpan kunci itu dalam repositori kod.

## Fail eas.json minimum untuk disalin

Semua nilai ialah contoh palsu: gantikan dengan nilai anda sendiri.

```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` dan `autoIncrement`**: pelayan EAS menyimpan nombor build dan menaikkannya pada setiap build production. [Expo mengesyorkan mod jauh ini](https://docs.expo.dev/build-reference/app-versions/) sejak EAS CLI 12.
- **`ascAppId`**: nombor rekod app anda. Tanpanya, mod bukan interaktif gagal.
- **`appleTeamId`**: pengecam pasukan Apple Developer anda.
- **`ascApiKeyPath`, `ascApiKeyIssuerId`, `ascApiKeyId`**: kunci API anda. Ketiga-tiga medan menerima pemboleh ubah persekitaran. Tambah folder `keys` ke dalam `.gitignore` anda.

Medan `appleId` hanya berguna jika anda log masuk dengan Apple ID. Jika EAS sudah menguruskan kunci anda, buang juga tiga medan `ascApiKey`. Pada tiga app saya, yang disemak pada 25 Oktober, profil penghantaran production hanya mengandungi `ascAppId`, serta `appleTeamId` untuk Solys: tiada kunci dalam fail.

## Jalankan build, kemudian penghantaran

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

Tanpa pilihan lain, `eas submit` meminta anda memilih build untuk dihantar dan, pada larian pertama, meminta Apple ID anda. Profil penghantaran `production` digunakan secara lalai jika ia wujud. [Rujukan EAS CLI](https://docs.expo.dev/eas/cli/) menyenaraikan pilihan yang mengelakkan langkah memilih:

| Pilihan          | Fungsinya                  |
| ---------------- | -------------------------- |
| `--latest`       | Hantar build iOS terkini   |
| `--id`           | Hantar build EAS tertentu  |
| `--path`         | Hantar fail .ipa tempatan  |
| `--url`          | Hantar arkib dalam talian  |
| `--groups`       | Tambah ke kumpulan dalaman |
| `--what-to-test` | Isi "What to test"         |

Untuk menjalankan semuanya berturut-turut, tambah `--auto-submit` pada arahan build. Menurut [halaman Expo tentang penghantaran automatik](https://docs.expo.dev/build/automate-submissions/), build yang siap dihantar ke EAS Submit dengan profil penghantaran yang sama nama dengan profil build. Untuk memilih profil lain: `--auto-submit-with-profile=nama`. **Build dihantar ke TestFlight, bukan untuk semakan.**

Dalam integrasi berterusan, tambah `--non-interactive` dan token `EXPO_TOKEN`. Arahan itu tidak boleh bertanya apa-apa kepada anda: ia memerlukan `ascAppId` dalam profil dan kunci API, sama ada yang dipautkan oleh EAS pada app atau kunci anda sendiri dalam tiga medan `ascApiKey`.

## Apa yang berlaku selepas penghantaran

**1. Apple memproses build.** Ia mesti melalui pemprosesan ini sebelum muncul dalam App Store Connect, dan [Apple menghantar e-mel kepada anda](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds) apabila selesai. Expo biasanya menyebut 10 hingga 15 minit sebelum anda melihatnya dalam TestFlight.

**2. Pematuhan eksport.** Status Missing Compliance bermaksud pengisytiharan anda tentang penyulitan masih tiada. App Store Connect bertanya soalan ini untuk setiap versi baharu, kecuali jika Info.plist sudah menjawabnya. Dengan Expo, kuncinya ialah `ios.config.usesNonExemptEncryption`:

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

Menurut [Apple](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations), `false` sesuai jika app anda, termasuk pustakanya, tidak menggunakan sebarang penyulitan atau hanya penyulitan yang dikecualikan. Penyulitan sistem, seperti HTTPS melalui URLSession, biasanya dikecualikan. **Hanya isytiharkan `false` jika ia benar untuk app anda: pengisytiharan ini mengikat anda.** Seperti mana-mana kunci Info.plist, ia memerlukan build baharu.

**3. TestFlight.** Pada status Ready to Submit, [menurut Apple](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses), build boleh diberikan kepada penguji dalaman, melalui semakan beta untuk penguji luar, atau dihantar untuk semakan App Store. Medan `groups` dalam profil menambahnya ke kumpulan dalaman anda. Selebihnya ada dalam [TestFlight untuk menguji app anda](https://devoria.fr/ms/blog/testflight-uji-aplikasi-iphone-sebelum-hantar).

## Penghantaran bukan penyerahan untuk semakan

[Expo menulisnya](https://docs.expo.dev/submit/introduction/): build TestFlight tidak diterbitkan secara automatik di App Store. EAS Submit tidak mengisi rekod app anda, mahupun tangkapan skrin anda. Masih ada empat langkah dalam App Store Connect, yang diterangkan dalam [bantuan Apple tentang penghantaran untuk semakan](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app):

1. **Isi metadata wajib** untuk versi itu.
2. **Pilih build** dalam bahagian Build versi itu.
3. **Klik "Add for Review".** Versi bertukar ke Ready for Review, tetapi belum ada apa-apa yang dihantar untuk semakan.
4. **Klik "Submit for Review".** Status bertukar ke In Review apabila semakan bermula.

## Ralat biasa dan pembetulannya

| Ralat dipaparkan      | Punca                        | Pembetulan                |
| --------------------- | ---------------------------- | ------------------------- |
| ITMS-90189            | Nombor build sudah digunakan | `autoIncrement`           |
| ITMS-90062 atau 90186 | Versi sudah ditutup          | Naikkan `version`         |
| "Set ascAppId"        | `ascAppId` tiada dalam CI    | Tambah `ascAppId`         |
| "API Keys cannot"     | Tiada kunci dipautkan        | `eas credentials`         |
| ITMS-90683            | Purpose string tiada         | `ios.infoPlist`           |
| ITMS-91053            | Manifest tidak lengkap       | `ios.privacyManifests`    |
| ITMS-90725            | SDK iOS terlalu lama         | Naikkan SDK Expo          |
| Missing Compliance    | Penyulitan tidak diisytihar  | `usesNonExemptEncryption` |

Menurut Expo, nombor build yang sudah digunakan ialah punca biasa penolakan semasa penghantaran: semuanya ada dalam nombor build dan versi. Tiga ralat mempunyai panduan tersendiri: [ITMS-90683 dengan Expo](https://devoria.fr/ms/blog/itms-90683-missing-purpose-string-expo), [ITMS-91053 dengan Expo](https://devoria.fr/ms/blog/itms-91053-missing-api-declaration-expo) dan ITMS-90725.

Dua mesej dalam tanda petik datang daripada EAS dan dibetulkan dalam konfigurasinya. Missing Compliance juga boleh diselesaikan dengan menjawab soalan dalam App Store Connect. **Untuk semua baris lain, pembetulan melibatkan binari: buat build semula, kemudian hantar semula.** Kemas kini jauh tidak mengubah Info.plist, manifest, mahupun nombor-nombor itu.

## Hantar app pertama anda tanpa meraba-raba

Arahan itu hanyalah satu langkah. [iOS Kit](https://devoria.fr/ms/kits/ios) bermula daripada Starter Code app saya, termasuk langganan, dan mengikut empat langkah sehingga ke App Store, mengikut rentak anda.

Jika anda sedang bersedia untuk pelancaran pertama, [buat diagnostik percuma anda](https://devoria.fr/ms/diagnostic): ia memberitahu apa yang benar-benar menyekat anda dan menghantar senarai semak anti-penolakan Apple saya. Untuk rekod app, tangkapan skrin dan pengesahan, halaman [menerbitkan aplikasi di App Store](https://devoria.fr/ms/expertise/terbitkan-aplikasi-di-app-store) merangkumi setiap langkah.

## Soalan lazim

### Bagaimana untuk menerbitkan app Expo di App Store?

Jalankan build production dengan EAS Build, kemudian hantar dengan `eas submit --platform ios`. Selepas diproses oleh Apple, ia muncul dalam TestFlight. Dalam App Store Connect, isi rekod app, pilih build itu dalam versi, kemudian klik "Add for Review" dan "Submit for Review".

### Adakah EAS Submit menghantar app saya untuk semakan Apple?

Tidak. EAS Submit menghantar binari ke App Store Connect, dan build tiba dalam TestFlight. Penghantaran untuk semakan dibuat secara manual dalam App Store Connect, selepas rekod app diisi dan build dipilih.

### Di mana untuk mencari ascAppId app saya?

Dalam App Store Connect, buka app anda, kemudian App Information. Ia ialah medan Apple ID, di bawah General Information. Ia ialah nombor, jangan keliru dengan pengecam bundle anda.

### Adakah Apple ID diperlukan untuk menggunakan eas submit?

Pada larian pertama, arahan itu memintanya. Selepas itu, dengan `ascAppId` dalam profil dan kunci API App Store Connect, ia boleh berjalan tanpa interaksi, malah dalam integrasi berterusan. Kunci API ialah kaedah lalai dan disyorkan oleh Expo.

### Berapa lama sebelum build kelihatan dalam TestFlight?

Expo biasanya menyebut 10 hingga 15 minit pemprosesan oleh Apple, yang akan menghantar e-mel kepada anda apabila selesai. Jika build kekal pada status Missing Compliance, jawab soalan tentang penyulitan, kemudian isytiharkannya dalam konfigurasi anda untuk build seterusnya.


## Projek anda

[Apple Review Kit](https://devoria.fr/ms/kits/review-apple): Senarai semak review App Store yang saya guna, penolakan Apple yang saya betulkan, nota untuk penguji dan dua skill Claude Code yang menyemak aplikasi anda. 29 €.

[iOS Kit](https://devoria.fr/ms/kits/ios): Bina aplikasi iPhone anda dengan Claude Code: kod permulaan aplikasi saya, skill yang menyemak kerjanya, serta Apple Review Kit, App Store Screenshots Kit dan ASO Kit. 129,99 €.
