{
"cli": {
"version": ">= 12.0.0"
},
"build": {
"production": {
"ios": {
"simulator": false
},
"env": {
"APP_ENV": "production"
}
}
},
"submit": {
"production": {
"ios": {
"appleId": "dev@firma-ta.ro",
"ascApiKeyId": "ABC123XYZ",
"ascApiKeyIssuerId": "69a6de70-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
}
}
}Dacă ai lansat vreodată o aplicație iOS clasică acum 5-6 ani, știi coșmarul: descărcat certificate .p12 din Apple Developer Portal, instalat în Keychain, exportat provisioning profiles, erori criptice în Xcode la arhivare. La ultimul proiect (o aplicație B2B cu vreo 4.000 de utilizatori activi), am refuzat să mai deschid Xcode pentru signing și am lăsat EAS CLI să gestioneze totul.
Rezultatul? De la repository gol la primul build urcat în TestFlight am făcut fix 25 de minute.
1. Pregătirea contului Apple Developer
Înainte să dai vreo comandă în terminal, ai nevoie de două lucruri din Apple Developer Portal:
- Cont activ de Apple Developer (da, taxa aia de 99$/an nu dispare).
- O cheie API de App Store Connect. Mergi la Users and Access -> Integrations -> App Store Connect API, generezi o cheie cu rol de Admin sau App Manager, descarci fișierul
.p8și notezi Key ID și Issuer ID.
Recomand cheia API în loc de login cu contul de Apple ID și 2FA. Cu cheia API nu-ți mai expiră sesiunea la jumătatea build-ului în cloud.
2. Configurarea inițială și prima comandă
Instalează CLI-ul dacă nu-l ai deja (npm install -g eas-cli) și loghează-te în contul tău Expo. În rădăcina proiectului, inițializezi configurarea:
eas build:configure
Asta îți va genera un fișier eas.json. Pentru prima rulare de producție, comanda este directă:
eas build --platform ios --profile production
Aici intervine magia: EAS te va întreba Do you want Expo to handle your iOS credentials?. Răspunzi cu Yes.
EAS CLI se va autentifica prin contul tău Apple (sau direct prin API Key dacă l-ai configurat deja) și va genera automat în contul tău Apple: Distribution Certificate, Bundle Identifier (dacă nu exista deja) și Provisioning Profile-ul de App Store Distribution. Nu trebuie să descarci nimic local.
3. Trade-off-uri: când merge brici și când te încurcă
Sistemul de auto-manage de la Expo este fantastic pentru 90% din proiecte, dar are și limitări:
- Unde excelează: Proiecte Expo managed sau bare React Native standard. Dacă un certificat expiră peste un an, EAS îl regenerează la următorul build fără intervenție manuală.
- Unde apar probleme: Dacă ai iOS App Extensions (Share Extension, WidgetKit, Push Notification Service Extensions). Fiecare extensie are nevoie de propriul Bundle ID și Provisioning Profile. În cazul ăsta, auto-manage-ul default va crăpa dacă nu configurezi explicit
target-urile suplimentare încredentials.json.
Ca timp de așteptare, un build în cloud pe queue-ul gratuit durează undeva la 15-20 de minute (sau prinzi coadă în orele de vârf din SUA). Pe planul plătit (Production), același build iese în 6-8 minute.
4. Trimiterea automată în TestFlight
După ce build-ul e verde în dashboard-ul Expo, nu descărca fișierul .ipa ca să-l urci cu Transporter. Folosește direct:
eas submit --platform ios --latest
Dacă ai completat secțiunea de submit din eas.json cu cheia de ASC, build-ul ajunge direct în TestFlight în 5-10 minute (după ce trece de procesarea automată Apple).
Voi mai folosiți Fastlane pe mașini locale / GitHub Actions sau ați mutat complet procesul de build și signing în EAS?