React Native Windows und macOS: Out-of-Tree-Plattformen einordnen | Mironsoft
AI generated
RN
native
React Native · Desktop-Plattformen
React Native Windows und macOS
Out-of-Tree-Plattformen realistisch einordnen

React Native Windows und React Native macOS docken als Microsoft-gepflegte Out-of-Tree-Plattformen über TurboModules und Fabric an React Native Core an. Dieser Artikel zeigt Architektur, Reifegrad und eine ehrliche Entscheidungshilfe, wann sich der zusätzliche Plattform-Support lohnt.

12 Min. Lesezeit WinUI 3 AppKit Out-of-Tree

1. Was eine Out-of-Tree-Plattform bei React Native bedeutet

React Native Windows und React Native macOS gehören zu einer Kategorie, die Facebook beziehungsweise Meta offiziell als Out-of-Tree-Plattformen bezeichnet: Statt den React-Native-Core-Fork für jede zusätzliche Zielplattform zu forken, definiert React Native seit einigen Jahren stabile Erweiterungspunkte, über die externe Teams eigene Plattform-Implementierungen andocken können, ohne den Kern selbst zu verändern. React Native Windows und React Native macOS werden beide primär von Microsoft gepflegt und nutzen genau diese Architektur, ebenso wie inzwischen auch React Native VisionOS für Apples Vision Pro.

Der entscheidende Unterschied zu einem klassischen Community-Fork ist die Update-Kompatibilität: Weil beide Projekte gegen dieselben offiziellen Erweiterungspunkte wie TurboModules und die Fabric-Renderer-Architektur entwickeln, die auch iOS und Android nutzen, bleiben sie strukturell näher an aktuellen React-Native-Versionen als ein unabhängiger Fork es typischerweise wäre. Das bedeutet allerdings nicht, dass neue React-Native-Core-Versionen sofort auf Windows und macOS verfügbar sind, in der Praxis liegt zwischen einer Core-Version und der entsprechenden Windows- beziehungsweise macOS-Version regelmäßig ein Versatz von mehreren Wochen bis Monaten.

2. React Native Windows: Architektur auf Basis von WinUI 3

React Native Windows rendert Komponenten nicht über eine Web-View oder eine eigene Zeichen-Engine, sondern bildet sie auf echte native Windows-Steuerelemente ab, in aktuellen Versionen über das Windows App SDK mit WinUI 3 als UI-Schicht, in älteren Versionen über UWP-XAML. Native Module werden in C++/WinRT geschrieben, was für Teams mit reiner iOS- und Android-Erfahrung eine echte dritte native Sprache zusätzlich zu Swift und Kotlin bedeutet, sofern plattformspezifische Windows-Funktionalität über den Standardumfang hinaus benötigt wird.

Die Fabric-Renderer-Architektur, die React Native seit den neueren Versionen als Standard-Rendering-Pipeline nutzt, bildet auch unter Windows die Grundlage, wodurch viele der Performance-Verbesserungen aus dem New-Architecture-Umbau von React Native gleichermaßen auf Windows durchschlagen. In der Praxis bedeutet das, dass ein auf Fabric und TurboModules umgestelltes React-Native-Projekt tendenziell reibungsloser auf Windows läuft als ein Projekt, das noch auf der alten Bridge-Architektur basiert.


// windows/MyApp/NativeModules/BatteryModule.h
#pragma once
#include "NativeModules.h"

namespace winrt::MyApp {

REACT_MODULE(BatteryModule)
struct BatteryModule {
  REACT_SYNC_METHOD(GetBatteryLevel)
  double GetBatteryLevel() noexcept {
    return 1.0;
  }
};

}

3. React Native macOS: Näher am iOS-Code als Windows an Android

React Native macOS teilt sich strukturell deutlich mehr Code mit React Native iOS als React Native Windows mit React Native Android, weil beide Apple-Plattformen dieselbe zugrunde liegende Objective-C- und Swift-Toolchain sowie große Teile der Rendering-Infrastruktur nutzen. Statt WinUI oder UWP rendert React Native macOS auf AppKit, dem klassischen macOS-UI-Framework, wodurch viele native iOS-Module mit vergleichsweise geringem Anpassungsaufwand auch unter macOS funktionieren, sofern sie nicht auf reine iOS-spezifische APIs wie Touch-Gesten angewiesen sind.

Microsoft nutzt React Native macOS intern unter anderem für Teile von Office- und Messenger-Anwendungen, was dem Projekt eine ungewöhnlich stabile Produktions-Referenz innerhalb desselben Unternehmens gibt, das auch die Weiterentwicklung finanziert. Das ist ein relevanter Unterschied zu vielen anderen Community-Projekten im React-Native-Ökosystem, bei denen die Wartung von einzelnen Maintainern in der Freizeit abhängt, statt von einem Unternehmen mit eigenem produktivem Interesse an der Stabilität des Projekts.

4. Was zwischen den Plattformen geteilt wird, und was nicht

Der überwiegende Teil der eigentlichen App-Logik lässt sich zwischen Mobile- und Desktop-Zielen teilen: React-Komponenten, State-Management, API-Clients und Geschäftsregeln bleiben plattformunabhängiger JavaScript- beziehungsweise TypeScript-Code, sofern sie nicht direkt auf mobile-spezifische APIs wie Kamera oder GPS zugreifen. Die TurboModule- und Fabric-Architektur sorgt dafür, dass dieselbe Komponentenschnittstelle auf allen unterstützten Plattformen konsistent bleibt, auch wenn die dahinterliegende native Implementierung komplett unterschiedlich ist.

Plattformspezifisch bleiben dagegen praktisch immer die Verpackung und Auslieferung: Unter Windows wird die App typischerweise als MSIX-Paket für den Microsoft Store oder als Sideload-Installation gebaut, unter macOS als klassisches .app-Bundle mit Apple-Notarisierung für die Verteilung außerhalb des Mac App Store. Auch UI-Detailanpassungen wie Tastaturkürzel, Menüleisten-Integration unter macOS oder das native Kontextmenü unter Windows verlangen in der Regel eigenen, plattformspezifischen Code, den es unter iOS oder Android in dieser Form nicht gibt.


{
  "name": "shared-business-logic",
  "main": "src/index.ts",
  "dependencies": {
    "zustand": "^4.5.0"
  }
}

5. Reifegrad und Community-Größe realistisch einschätzen

Die Release-Kadenz von React Native Windows und React Native macOS folgt dem React-Native-Core-Release, liegt aber typischerweise einige Wochen bis Monate dahinter zurück, weil jede neue Core-Version erst gegen die jeweilige Plattform validiert und angepasst werden muss. Für Teams, die stets die allerneueste React-Native-Version nutzen wollen, ist das ein relevanter Planungsfaktor, weil eine brandneue Core-Funktion nicht sofort auf Windows oder macOS verfügbar ist, sondern erst mit zeitlichem Versatz nachgezogen wird.

Die Community-Größe beider Projekte liegt deutlich unter der von iOS und Android, messbar an GitHub-Sternen, Anzahl aktiver Contributor und der Geschwindigkeit, mit der Drittanbieter-Bibliotheken Windows- oder macOS-Unterstützung nachrüsten. Das bedeutet in der Praxis, dass man bei der Auswahl von npm-Paketen aus dem React-Native-Ökosystem regelmäßig prüfen muss, ob eine Bibliothek überhaupt eine Windows- oder macOS-Implementierung mitbringt, statt sich wie bei iOS und Android automatisch darauf verlassen zu können.

6. Praxisbeispiel: Ein internes Desktop-Tool auf Basis der bestehenden App

Ein realistischer Anwendungsfall für React Native Windows ist ein internes Verwaltungswerkzeug, etwa ein Lagerbestand-Dashboard für Mitarbeiter, das denselben API-Client, dieselben Datenmodelle und große Teile der Komponentenbibliothek nutzt, die bereits für die mobile React-Native-App existieren. Statt ein komplett neues Desktop-Projekt in einem anderen Framework aufzusetzen, bindet man React Native Windows als zusätzliches Target in ein bestehendes Monorepo ein und teilt den überwiegenden Teil des Anwendungscodes zwischen mobiler App und Desktop-Tool.

Dieses Szenario funktioniert besonders gut, wenn die betroffene Funktionalität überwiegend aus Formularen, Listen und Datenanzeigen besteht, die ohnehin plattformunabhängig gestaltet sind, und wenig auf mobile-exklusive Interaktionsmuster wie Touch-Gesten oder Kamerazugriff angewiesen ist. Für ein reines internes Tool mit überschaubarer Nutzerzahl rechtfertigt sich der zusätzliche Build- und Wartungsaufwand einer weiteren Plattform meist schneller als bei einer öffentlich vertriebenen Consumer-App.

7. Praktische Einschränkungen im Alltag

Nicht jedes React-Native-Drittanbieter-Paket funktioniert automatisch unter Windows oder macOS, selbst wenn es für iOS und Android einwandfrei läuft. Viele Bibliotheken gehen implizit davon aus, dass nur ios- und android-Unterordner existieren, und das Autolinking-System von React Native Windows beziehungsweise macOS erwartet zusätzliche, explizit benannte windows- oder macos-Verzeichnisse mit eigener nativer Implementierung, die viele Paket-Autoren schlicht nie ergänzt haben.

In der Praxis bedeutet das, dass Teams vor der Einführung von React Native Windows oder macOS jede bestehende Abhängigkeit einzeln prüfen müssen, ob eine kompatible Implementierung existiert, ob sich die fehlende Funktionalität einfach durch eine bedingte Plattform-Weiche im eigenen Code umschiffen lässt, oder ob im schlimmsten Fall ein eigenes natives Modul für die fehlende Plattform nachgezogen werden muss, was den ursprünglich erhofften Zeitgewinn durch Code-Wiederverwendung teilweise wieder aufzehrt.

8. Wann sich der zusätzliche Plattform-Support wirklich lohnt

Der zusätzliche Aufwand für Windows- oder macOS-Support rechtfertigt sich vor allem dann, wenn eine bestehende, produktiv genutzte React-Native-Codebasis bereits einen hohen Anteil plattformunabhängiger Geschäftslogik enthält und ein echter Desktop-Anwendungsfall existiert, der einen Großteil dieser Logik wiederverwenden kann. Teams mit tiefer React-Native-Erfahrung im Haus profitieren zusätzlich davon, dass sie keine komplett neue Technologie erlernen müssen, sondern dieselben React-Konzepte und einen Großteil des bestehenden Werkzeugkastens weiterverwenden.

Für ein greenfield-Desktop-Projekt ohne bestehende React-Native-Mobile-App ist die Rechnung dagegen meist anders zu bewerten: Frameworks wie Electron oder Tauri, die explizit für Desktop-only-Anwendungsfälle entworfen wurden, bringen oft eine reifere Desktop-Werkzeugkette und eine größere Auswahl an Desktop-spezifischen Bibliotheken mit, ohne die zusätzliche Komplexität einer Cross-Mobile-Desktop-Architektur, die bei React Native Windows und macOS strukturell mitgeschleppt wird.

9. Einrichtung und Tooling im Entwickleralltag

Der Einstieg läuft über die Kommandos npx react-native-windows-init beziehungsweise npx react-native-macos-init, die einem bestehenden React-Native-Projekt die jeweilige Plattform-Konfiguration und die notwendigen Ordnerstrukturen hinzufügen. Für React Native Windows ist zusätzlich eine vollständige Visual-Studio-Installation mit dem C++-Desktop-Entwicklungsworkload notwendig, für React Native macOS reicht die ohnehin für iOS-Entwicklung vorhandene Xcode-Installation aus, was den Einstieg für bestehende iOS-Teams spürbar erleichtert.

Der eigentliche Build- und Debug-Zyklus läuft über npx react-native run-windows beziehungsweise npx react-native run-macos, jeweils mit demselben Metro-Bundler und Fast-Refresh-Verhalten wie bei iOS und Android, was die Entwicklererfahrung erfreulich konsistent hält. Für plattformspezifisches Debugging von nativen C++/WinRT- oder Objective-C/Swift-Modulen bleibt aber weiterhin ein Wechsel in Visual Studio beziehungsweise Xcode notwendig, genau wie bei nativen Modul-Problemen unter iOS oder Android auch.


npx react-native-windows-init --overwrite
npx react-native run-windows

npx react-native-macos-init
npx react-native run-macos
Aspekt React Native Windows React Native macOS
UI-Rendering WinUI 3 über Windows App SDK AppKit
Native Sprache C++/WinRT Objective-C und Swift
Code-Nähe zu Core Eigenständige Windows-spezifische Schicht Hohe Nähe zu React Native iOS
Verpackung MSIX-Paket oder Sideload App-Bundle mit Notarisierung
Primärer Maintainer Microsoft Microsoft

Mironsoft

React-Native-App-Entwicklung und Magento-Anbindung

Eine mobile App zum Magento-Shop, die wirklich rund läuft?

Wir entwickeln React-Native-Apps, die sauber an die Magento REST- oder GraphQL-API angebunden sind, von der ersten Codezeile bis zur Veröffentlichung im App Store und bei Google Play.

App-Konzeption

Architektur und Feature-Umfang einer Magento-angebundenen App gemeinsam planen.

Magento-API-Integration

Produktkatalog, Warenkorb und Checkout sauber an die Shop-API anbinden.

Store-Veröffentlichung

App Store- und Google-Play-Freigabeprozess ohne Stolperfallen begleiten.

10. Zusammenfassung

React Native Windows und macOS: Das Wichtigste auf einen Blick

Konzept

Out-of-Tree-Plattformen docken über TurboModules und Fabric an React-Native-Core an.

Maintainer

Beide Projekte primär von Microsoft gepflegt und intern produktiv eingesetzt.

Reifegrad

Release-Versatz von Wochen bis Monaten gegenüber React-Native-Core-Versionen.

Lohnt sich für

Teams mit bestehender RN-Codebasis und echtem Desktop-Anwendungsfall.

11. FAQ: React Native Windows und macOS: Das Wichtigste auf einen Blick

1Was bedeutet 'Out-of-Tree-Plattform' bei React Native?
Eine Plattform-Implementierung, die über offizielle Erweiterungspunkte wie TurboModules und Fabric an React Native andockt, statt den Core-Quellcode selbst zu forken.
2Wer pflegt React Native Windows und React Native macOS?
Beide Projekte werden primär von Microsoft gepflegt, das sie auch intern in eigenen Produkten wie Office und Messenger einsetzt.
3Auf welches UI-Framework rendert React Native Windows?
Auf WinUI 3 über das Windows App SDK in aktuellen Versionen, ältere Versionen nutzten UWP-XAML.
4Auf welches UI-Framework rendert React Native macOS?
Auf AppKit, das klassische native macOS-UI-Framework.
5Ist React Native macOS näher am iOS-Code als React Native Windows am Android-Code?
Ja, weil beide Apple-Plattformen dieselbe Objective-C- und Swift-Toolchain sowie große Teile der Rendering-Infrastruktur teilen.
6Funktionieren alle React-Native-Drittanbieter-Pakete automatisch unter Windows und macOS?
Nein, viele Pakete gehen implizit nur von ios- und android-Unterordnern aus und brauchen zusätzliche, explizit ergänzte Windows- oder macOS-Implementierungen.
7Welche native Sprache braucht man für eigene Windows-Module?
C++/WinRT, eine dritte native Sprache zusätzlich zu Swift und Kotlin, sofern über den Standardumfang hinausgehende Funktionalität benötigt wird.
8Lohnt sich React Native Windows für ein reines Greenfield-Desktop-Projekt?
Meist eher nicht, Frameworks wie Electron oder Tauri bieten für Desktop-only-Anwendungsfälle eine reifere, speziell dafür gebaute Werkzeugkette.
9Wie richtet man React Native Windows in einem bestehenden Projekt ein?
Über den Befehl npx react-native-windows-init, der die notwendige Plattform-Konfiguration und Ordnerstruktur hinzufügt.
10Liegt die Windows- und macOS-Version immer auf demselben Stand wie die React-Native-Core-Version?
Nein, in der Praxis liegt regelmäßig ein Versatz von einigen Wochen bis Monaten vor, bis eine neue Core-Version für beide Plattformen validiert und nachgezogen ist.