Teknik

Expo eller React Native CLI? Skillnaden och vad du bör välja.

Expo är inte en förenklad version av React Native — det är verktygskedjan runt omkring. Här är vad EAS, OTA-uppdateringar och development builds innebär i praktiken.

Lästid 7 min

Kort svar

Vad är skillnaden mellan Expo och React Native?

React Native är ramverket som gör att en kodbas i TypeScript kan rendera riktiga native-komponenter. Expo är verktygskedjan runt omkring: byggen i molnet, uppdateringar utan butiksrelease, konfiguration av native-projekten och ett stort bibliotek av färdiga moduler.

Det är alltså inte antingen eller. Frågan är om du bygger React Native med Expos verktyg eller utan dem. Vi använder Expo i så gott som alla projekt.

Den gamla bilden av Expo stämmer inte längre

Fram till 2021 fanns en verklig begränsning: appar som kördes i Expo Go kunde bara använda de native-moduler Expo hade paketerat. Behövdes något annat fick projektet "ejectas", och då förlorade man verktygen. Den bilden lever kvar i mycket som skrivs på nätet.

Med development builds är begränsningen borta. Appen byggs med exakt de native-beroenden projektet behöver, inklusive egna moduler, och Expos verktyg fortsätter fungera. Expo Go används numera bara för snabba experiment.

Vad Expo faktiskt ger

DelVad den görVarför det spelar roll
EAS BuildBygger iOS- och Android-appar i molnetIngen Mac behövs för att göra en iOS-build, och bygget ser likadant ut för alla i teamet
EAS SubmitSkickar bygget till App Store och Google PlaySignering och uppladdning som ett kommando i stället för manuellt pyssel
EAS UpdateSkickar JavaScript-ändringar direkt till installerade apparEn rättning kan nå användarna samma dag utan ny granskning
Config pluginsKonfigurerar native-projekten från en filNative-inställningar hamnar i versionshanteringen i stället för i någons lokala Xcode
Expo-modulernaKamera, notiser, filsystem, haptik, säkert lagringsutrymmeVäl underhållna moduler i stället för en samling halvdöda paket

OTA-uppdateringar — vad som är tillåtet

EAS Update skickar ny JavaScript-kod till redan installerade appar. Både Apple och Google tillåter det så länge appens karaktär och funktion inte ändras i grunden; det är samma regel som gäller för allt kodinnehåll som laddas efter installation. Vad som däremot alltid kräver en ny butiksversion:

  • Ny eller uppdaterad native-kod, till exempel ett nytt bibliotek som pratar med hårdvaran.
  • Nya behörigheter, som kamera eller plats.
  • Ändrade butiksmetadata: ikon, namn, skärmbilder.

I praktiken används OTA mest till det den är bäst på: rätta ett fel snabbt, justera en text, skruva på ett flöde. Större releaser går ändå genom butiken.

När vi väljer bort Expo

Ett native-SDK som inte går att konfigurera från en plugin

Vissa slutna SDK:er — enstaka betalterminaler, äldre integrationer inom vård och bank — kräver manuella ingrepp i Xcode-projektet. Går det inte att uttrycka som en config plugin kan bare workflow vara enklare.

Extremt hårda krav på byggmiljön

Organisationer som inte får bygga i extern molntjänst kör EAS lokalt eller på egen infrastruktur. Det fungerar, men kräver mer uppsättning.

I övrigt är valet enkelt. Skillnaden i tid för att sätta upp ett projekt är dagar, inte timmar, och de dagarna återkommer vid varje release under appens livstid. Så här ser vårt arbetssätt ut i praktiken: React Native- och Expo-utveckling.

Kostnad

Expo har en gratisnivå som räcker för ett projekt med få byggen i månaden. Team som bygger ofta landar oftast på ett abonnemang runt 99 USD i månaden. Det motsvarar mindre än en arbetstimme och sparar betydligt mer än så i byggkö och signeringsstrul.

Frågar en utvecklare "Expo eller React Native?" som om det vore två ramverk — be om ett förtydligande. Det är samma ramverk. Skillnaden ligger i verktygen runt omkring, och de påverkar releasetakten mer än de påverkar appen.

Vad du får med dig

  • Expo är verktygskedjan runt React Native, inte ett konkurrerande ramverk.
  • Development builds tar bort den gamla begränsningen kring native-moduler.
  • OTA-uppdateringar är tillåtna för JavaScript-ändringar, inte för native-kod eller nya behörigheter.
  • Bare workflow är motiverat främst vid slutna SDK:er eller hårda krav på byggmiljön.

Vanliga frågor

Kan man använda vilka native-bibliotek som helst med Expo?
Ja, sedan development builds infördes. Det gamla begränsade läget, Expo Go, används numera bara för snabba experiment.
Får man skicka uppdateringar utan att gå via butikerna?
JavaScript-ändringar får skickas som OTA-uppdateringar och det är tillåtet av både Apple och Google, så länge appens funktion inte ändras i grunden. Ny native-kod kräver alltid en ny butiksversion.

Vill du ha en siffra för just din app?

Testa kalkylatorn för en indikation på några minuter, eller boka ett samtal så går vi igenom förutsättningarna tillsammans.