Lesedauer 4 Minuten

Wer länger mit Xojo arbeitet, kennt das Problem: Ein Projekt im Binärformat .xojo_binary_project ist bequem, solange alles läuft. Sobald Du Code durchsuchen möchtest, die IDE die Xojo Projektdatei plötzlich nicht mehr öffnet oder Du per KI auf eine andere Platform migrieren willst, stehst du vor einem Block aus Bytes. Genau dafür wurde xojo-decompile geschrieben.

Das Tool liest ein Xojo-Binärprojekt und schreibt jedes Element als lesbare Textdatei heraus, nah am Xojo-Textprojektformat. Es ist ein einzelnes Python-Skript, Open Source unter MIT-Lizenz und kommt ohne zusätzliche Pakete aus.

Warum Xojo Decompile?

Das Binärformat von Xojo, intern RbBF genannt, ist nicht dokumentiert. Für drei Situationen hat mir ein Werkzeug gefehlt:

  • Migration alter Xojo-Projekte auf andere Platformen:
    Der Output von Xojo Decompile liefert KI Code-Assistenten alles was sie wissen müssen, maschinell lesbar: Klassen, Funktionen, Controls, Layout etc.
  • Suchen und Lesen außerhalb der Xojo IDE:
    Mal eben mit grep nach einer Methode suchen oder alten Code nachschlagen, ohne Xojo zu starten.
  • Beschädigte Xojo Projekte:
    Eine abgebrochene Speicherung, ein Sync-Fehler oder ein Plattendefekt, und die Xojo IDE verweigert das Öffnen. Dann ist im schlimmsten Fall die Arbeit von Monaten nicht mehr erreichbar.

Xojo Decompiler

So benutzt du Xojo Decompile

Du brauchst nur Python 3. Es gibt keine Abhängigkeiten und nichts zu installieren. Lade xojo_decompile.py herunter und rufe es mit deinem Projekt auf:

Das Skript legt im aktuellen Ordner ein Verzeichnis mit dem Projektnamen an, hier ./My App, und gibt für jedes Element eine Zeile aus: Art, Name, Superklasse und Zielpfad.

Du kannst es auch direkt aus Python verwenden, etwa in eigenen Build- oder Backup-Skripten:

Der Output des Xojo Decompilers

Jedes Projektelement wird extrahiert: Klassen, Module, Interfaces, Fenster, Container und Menüs. Ordner und Module werden zu Unterverzeichnissen, genau wie in einem Xojo-Textprojekt.

Datei Inhalt
<Name>.xojo_code Klassen, Module und Interfaces mit Properties, Computed Properties, Konstanten, Enums, Structures, Methoden, Event-Definitionen, Event-Handlern und Notes
<Name>.xojo_window Fenster und Container: Fenster-Properties, alle Controls mit ihren geänderten Properties, der Fenstercode und die Event-Handler der Controls
<Name>.layout.json Das Control-Layout eines Fensters als JSON: Klasse, Position, Größe, Parent, Panel-Index und die wichtigsten Properties
<Name>.xojo_menu Menüleisten
index.json Alle Elemente mit Art, Superklasse und Pfad, bei beschädigten Elementen zusätzlich eine Fehlerliste
errors.log Nur bei beschädigten Projekten: alle gefundenen Probleme, nach Element sortiert
<Name>.raw.txt Nur bei Elementen, die sich nicht mehr darstellen lassen: ein Rohdump ihrer Daten

Die Ausgabe ist zum Lesen, Durchsuchen und Vergleichen gedacht. Sie folgt dem Xojo-Textformat sehr eng.

Besonders praktissch: layout.json. Damit kannst du Fensterlayouts maschinell auswerten, zum Beispiel um alle Controls einer bestimmten Klasse zu finden oder Layouts zwischen zwei Versionen zu vergleichen.

Beschädigte Xojo-Projekte retten

DaWenn Xojo ein Projekt nicht mehr öffnen kann, bricht xojo-decompile nicht ab, sondern holt alles heraus, was noch lesbar ist:

  • Kaputte Dateistruktur: Ein beschädigter Header, Blöcke mit falscher Größe, Datenmüll zwischen den Blöcken oder eine abgeschnittene Datei. Das Tool sucht dann gezielt nach dem nächsten gültigen Blockanfang und liest dort weiter.
  • Beschädigte Elementdaten: Auch nach eingefügten oder fehlenden Bytes setzt das Parsing beim nächsten plausiblen Element wieder auf. Alles vor und nach der Schadstelle bleibt erhalten.
  • Rettung pro Member: Methoden, Properties, Controls und Event-Handler werden einzeln verarbeitet. Lässt sich einer nicht darstellen, landet er als Kommentar mit Rohdaten in der Datei, der Rest des Elements bleibt intakt.
  • Bericht: Beschädigte Elemente bekommen in der index.json eine Fehlerliste, und in errors.log steht jedes Problem. Am Ende siehst du eine Zusammenfassung wie 7 damaged item(s) recovered partially, see errors.log.

Beachte jedoch, daß Daten, die physisch fehlen, etwa das Ende einer abgeschnittenen Datei, kann kein Werkzeug zurückholen. Und beschädigter Text innerhalb von Quellcode wird so übernommen, wie er ist. Prüf geretteten Code deshalb immer, bevor du ihn weiterverwendest.

Unterstützte Xojo-Versionen

Bereich Unterstützung
Projektformat Binärprojekte im RbBF-Format, gespeichert mit Xojo 2019 bis Xojo 2025
Klassische Desktop-UI Window und ContainerControl, ausgegeben als #tag Window
API-2-Desktop-UI (ab Xojo 2021r3) DesktopWindow und DesktopContainer, ausgegeben als #tag DesktopWindow bzw. #tag DesktopContainer
Andere Versionen Funktionieren eventuell, sind aber nicht getestet. Unbekannte Elementtypen meldet das Tool in errors.log

Die Grenzen von Xojo Decompile

  • Verschlüsselte Elemente lassen sich ohne Passwort nicht dekompilieren. Sie tauchen in der index.json mit der Art encrypted auf.
  • Einrückung: Das Binärformat speichert Quellcode ohne Einrückung. Xojo Decompile stellt sie heuristisch wieder her, bei ungewöhnlichem Code kann es daneben liegen.

Fazit

Mit xojo-decompile bekommst du deine Xojo-Binärprojekte in eine Form, mit der Git, Editoren, Suchwerkzeuge und KI’s etwas anfangen können. Und wenn die IDE eine Projektdatei nicht mehr öffnet, hast du eine echte Chance, deinen Code zu retten. Probier es aus, und wenn dir ein Projekt begegnet, das nicht sauber durchläuft, freue ich mich über ein Issue auf GitHub.

Häufige Fragen

Brauche ich Xojo, um xojo-decompile zu nutzen?

Nein. Du brauchst nur Python 3. Das Skript nutzt ausschließlich die Standardbibliothek und läuft unter Windows, macOS und Linux.

Funktioniert das auch mit beschädigten Xojo Projekten?

Ja, dafür ist es ausdrücklich gebaut. Das Tool überspringt Schadstellen, rettet alles Lesbare und dokumentiert jedes Problem in errors.log. Was physisch fehlt, lässt sich aber nicht wiederherstellen.

Werden verschlüsselte Klassen und Module entschlüsselt?

Nein. Verschlüsselte Elemente bleiben verschlüsselt und werden in der index.json nur als encrypted aufgeführt.

Welche Xojo-Versionen werden unterstützt?

Getestet sind Binärprojekte von Xojo 2019 bis Xojo 2025, inklusive der klassischen Desktop-UI und der API-2-Desktop-UI ab Xojo 2021r3. Andere Versionen können funktionieren, sind aber nicht getestet.

 

Den Code findest du auf GitHub: github.com/hschneider/xojo-decompile

Mehr zu Xojo lesen.