Expo oder Vanilla React Native: Was Sie für Ihr Projekt wählen sollten

Mit oder ohne Expo? Das ist ein altbekanntes Problem für alle, die vorhaben, mit React Native Apps zu entwickeln.

Basierend auf meiner Erfahrung werde ich Ihnen von den Vor-und Nachteilen beider Versionen erzählen.

Legen wir sofort los.

Projektanfang mit Expo

Expo ist eine für React Native entwickelte Werkzeugkette, die Ihnen einen Schnellstart in Ihre App ermöglicht. Sie liefert eine Reihe an Werkzeugen, die die Entwicklung und das Testen Ihrer React Native-App vereinfachen und rüstet Sie mit Komponenten einer Benutzeroberfläche als auch mit Services aus, die normalerweise in React Native-Komponenten von Drittanbietern zu finden sind. Mit Expo können Sie all das im Expo-Software Development Kit (SDK) finden.

Sie können hier darüber lesen, wie Sie Ihr Projekt einrichten können (Installation-Abschnitt)

Expo-Vorzüge

  • Schnelle und einfache Installation ins Projekt (innerhalb von Minuten)
  • Ein bequemes Befehlszeilen-Dienstprogramm, das in einem Browser öffnet und dabei hilft, den App-Status zu überprüfen, auf welchen Geräten sie funktioniert. Scannen Sie den QR-Code verschicken Sie den Link per E-Mail, um die App im Expo-Client zu öffnen, wechseln sie in Produktions-/Entwicklungsmodus und veröffentlichen Sie ihre App auf dem Expo-Server
  • Der Expo-Client ist eine App, die über Google Play und den Apple Store auf Ihrem Smartphone installierbar ist. Es erlaubt das Öffnen von Projekten während der Entwicklung ohne Build per XCode oder Android Studio. Mit dem Expo-Client können Sie Ihre App an Andere für Rezensionen schicken, was für das Testen sehr nützlich ist, da sie alle Veränderungen im Code im Expo-Client sehen können, ohne apk-oder ipa-Dateien zu erstellen
  • Das Expo-SDK bietet eine Sammlung vorbereiteter Lösungen an, so zum Beispiel wie man mit dem Beschleunigungsmesser arbeiten kann, mit der Kamera, Benachrichtigungen, Geolokalisierung, etc. Sie können sie im Abschnitt SDK-API-Referenz sehen. Das Expo-Team aktualisiert das SDK regelmäßig mit neuen Lösungen.
  • Over-the-Air - eine sehr nützliche Expo-Funktion zur Aktualisierung ihrer App “over the air”, also ohne wiederholte Nutzung von Google Play oder Apple Store. Wenn Nutzer ihre App öffnen, aktualisiert es die Veränderungen im Java-Code automatisch. Das App-Symbol, der Name und andere Einstellungen lassen sich jedoch nicht “over the air” aktualisieren. Sie können darüber Genaueres im Abschnitt “Einschränkungen” lesen
  • Sie können Apps für das iOS ohne macOS entwickeln und mit Expo-Client testen
  • Automatische Verwaltung der Zertifikate und App-Signaturen

Expo-Nachteile

  • Sie können keine systemeigene Module, die in Objective-C, Swift, Java oder Kotlin geschrieben sind, hinzufügen
  • Sie können keine Pakete mit systemeigenen Sprachen nutzen, die Verlinkung benötigen
  • Die App braucht viel Platz, da sie alle Expo-SDK-Lösungen hat, auch die, die Sie nicht brauchen. Eine App mit Hello World braucht 25 MB
  • Häufig funktioniert alles beim Testen der App mit dem Expo-Client, doch dann tauchen Probleme im Alleingang auf

Warum Ich nicht empfehle, momentan Expo zu benutzen

Die oben genannten Nachteile sind nur die Spitze des Eisberges. Die meisten Probleme passieren am Ende des Entwicklungsprozesses. Ich werde einige der Schwierigkeiten beschreiben, die unser React Native-Team erlebt hat.

  • Einschränkungen

Unsere Möglichkeiten mit Expo sind beschränkt. Wir können nur die SDK und Pakete, die in JavaScript verfasst und keine Verlinkung brauchen, benutzen. Falls Sie Expo gewählt haben, werden Sie eines Tages dessen Einschränkungen begegnen und versuchen, systemeigene Module zu nutzen (Bedenken Sie, dass Sie dafür Expo loslösen müssen). Die Erfahrung unseres React Native-Teams zeigt, dass die Entfernungsmöglichkeit nicht ideal entwickelt wurde und einige Fehler enthält. Diese Fehler fressen Zeit und Zeit ist Geld.

Wenn Sie Expo von Ihrem Projekt lösen, bleibt der Part namens ExpoKit. Das ist die Sammlung der Module des Expo-SDK, wo Sie systemeigene Module hinzufügen können.

Allerdings empfehle ich nicht, das ExpoKit zu hinterlassen, da es schwierig mit dem systemeigenen Code zu debuggen ist, was eine Menge Probleme verursacht. Falls Sie wirklich systemeigene Module verwenden wollen, ist es besser, Expo zu vergessen und alternative Pakete zu nutzen.

Mit dem ExpoKit können Sie Ihr Projekt nicht per QR-Code teilen, ihre App über Expo entwickeln und Over-The-Air-Aktualisierungen nutzen. Um Benachrichtigungen einzuschalten, werden Sie ein Zertifikat benötigen.

  • Abhängigkeit von Exp-Infrastruktur

Häufig waren Expo-Server unverfügbar aufgrund von Überlastung und wir hatten keine Chance, eine App zu entwickeln. Manchmal funktionieren Benachrichtigungen nicht wegen Problemen mit den Servern. Expo plant, diese Abhängigkeit in zukünftigen Aktualisierungen loszuwerden, aber für den Moment ist es noch vorhanden.

  • Abhängigkeit von einer bestimmten React Native-Version

In Expo sind Sie an eine bestimmte React Native-Version gebunden, die sie zurzeit verwenden. Häufig, wenn einige Fehler in der React Native-Bibliothek auftauchen, verbessern Sie sie und veröffentlichen eine neue Aktualisierung. Expo entscheidet, welche React Native-Version man nutzt und wir müssen manchmal bis zu mehrere Monate auf eine Aktualisierung warten. Das Gleiche gilt für Bugs in Expo, welches Releases üblicherweise einmal pro Monat oder gar mehreren Monaten herausbringt.

Meiner Meinung nach ist Expo die richtige Wahl, falls Sie eine App ohne Funktionen, für die Sie Pakete verlinken müssten, entwickeln wollen.

Tatsache ist, dass Expo aktiv danach strebt, seine Funktionalität zu verbessern und hat viele Pläne für die Zukunft. Wir können also annehmen, dass sich die Situation bessern wird. Sie können über die Ziele von Expo hier lesen.

React Native ohne Expo

Sie können darüber lesen, wie man ein Projekt ohne Expo in React Native-Dokumentationen anfängt im Abschnitt Erste Schritte (Projekte aufbauen mit systemeigenen Code)

Vorteile

  • Sie können systemeigene Module, die in Objective-C, Swift, Java, Kotlin geschrieben sind, hinzufügen als auch Pakete, die Verlinkung benötigen.
  • Sie können selbst entscheiden, welche React native-Version Sie nutzen wollen.

Nachteile

  • Sie werden keine Möglichkeit haben, für iOS ohne macOS zu entwickeln, da sie XCode für einige Einstellungen benötigen
  • Falls Sie erst vor Kurzem angefangen haben mit React Native zu arbeiten oder von Expo auf Vanilla gewechselt haben, wird die Einrichtung des Projekts eine Weile dauern

Warum es besser ist, Ihr Projekt mit Vanilla React Native anzufangen

  • Systemeigene Module

Der größte Vorteil von React Native ohne Expo ist, dass Sie Pakete verlinken können, die systemeigene Module nutzen und Ihre systemeigene Module, die in der systemeigenen Sprache geschrieben sind, auch verbinden können. Sie haben auch eine Möglichkeit, um, zum Beispiel, eine Geolokalisierung im Hintergrund zu implementieren. Sie können das Paket hinzufügen, um Bilder oder Videos zu komprimieren und viele andere Pakete, die Ihre App verbessern.

Sie können diese React Native-Version verwenden, auf eine aktuellere Version wechseln und neue Möglichkeiten erhalten. Außerdem können sie die Codebasis abspalten Ihre eigenen Verbesserungen hinzufügen (wie es Airbnb und Microsoft gemacht haben).

  • React Native-Netzwerkarchitektur

Das ist ein weiterer Grund, warum ich React Native ohne Expo empfehle. Sie können mehr darüber in diesem Video erfahren.

Da Expo bestimmt, welche React Native-Version man nutzt, braucht es häufig viel Zeit, alles zu aktualisieren. Ich schätze, wenn React Native eine neue Version mit neuer Architektur veröffentlicht, wird Expo seine React Native-Version nicht so schnell aktualisieren.

  • OTA-Alternative

Was mir am meisten an Expo gefällt, ist die Over-the-Air (OTA)-Funktion - Aktualisierungen ohne weitere Nutzung von Google Play oder Apple Store.

Ich habe eine bessere Alternative dazu gefunden - ein Service namens CodePush (es hat sogar noch mehr Möglichkeiten und Einstellungen). Für die Arbeit mit Benachrichtigungen nutzt man die Bibliothek Onesignal, sie gibt noch mehr Möglichkeiten als Expo.

Sollte Ich mein Projekt mit oder ohne Expo anfangen?

In diesem Fall gibt es leider keine Universallösung. Es hängt alles von den Anforderungen und Funktionalitäten ab, die Sie in Ihrer App implementieren wollen. In diesem Artikel habe ich die Hauptnachteile von Expo beschrieben. Falls diese für Sie nicht von Belang sind, dann ist Expo eventuell die richtige Wahl für Sie.

Falls jedoch ihre App bestimmte Funktionen und Pakete mit systemeigenen Modulen (geschrieben in der systemeigenen Sprache) benötigt, ist es besser, Vanilla React Native zu nutzen. Was mich betrifft, so ist der einzige Nachteil ohne Expo die zeitintensive Projekteinrichtung, aber falls Sie wissen, wie Paketeverlinkung funktioniert und wie man eine App über Android Studio und XCode einrichtet, dann werden Sie mit Leichtigkeit ihre App über React Native ohne Expo entwickeln.