tvOS, Cross-Compile für iOS von Linux und Perry Login
Fünf Tage, 120 Commits, und Perry springt von v0.4.0 auf v0.4.24. Die Highlights: tvOS wird das 10. Kompilierungsziel, iOS- und macOS-Apps können jetzt vollständig unter Linux gebaut werden, perry login bringt nutzungsbasierte Abrechnung, und die Windows-UI erhält eine komplette Überarbeitung. Hier ist alles, was ausgeliefert wurde.
tvOS: Das 10. Kompilierungsziel
Perry kompiliert jetzt für Apple TV. Das tvOS-Ziel verwendet denselben SwiftUI-Renderer wie watchOS und teilt die datengesteuerte Architektur, bei der Perry einen UI-Baum erstellt und eine mitgelieferte Swift-Host-App diesen nativ rendert. Kombiniert mit der bestehenden @perry/threads WASM-Integration können tvOS-Apps rechenintensive Arbeitslasten im Hintergrund ausführen, während die Benutzeroberfläche reaktionsfähig bleibt.
# Für Apple TV kompilieren
perry compile main.ts --target tvos
# Auf tvOS-Simulator ausführen
perry run tvosDamit steigt die Gesamtzahl der Ziele auf 10: macOS, iOS, iPadOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly und Web/JavaScript. Eine TypeScript-Codebasis, zehn native Ausgaben.
Cross-Kompilierung von iOS und macOS unter Linux
Perry kann jetzt iOS- und macOS-Binärdateien vollständig auf einem Linux-Rechner mit ld64.lld als Mach-O-Linker erstellen. Dies ist das fehlende Puzzlestück für vollautomatisiertes CI/CD — TypeScript auf einen Linux-Server pushen und signierte native Binärdateien für jede Apple-Plattform erhalten, ohne eine macOS-Build-Maschine.
Um hierhin zu gelangen, musste eine Kaskade von Linker-Problemen gelöst werden:
- Mach-O-Codegen-Triple —
aarch64-apple-macosundaarch64-apple-iosZiel-Triples für Cranelift hinzugefügt - Framework-Verlinkung — CoreGraphics, Metal, IOKit, DiskArbitration Framework-Suchpfade für Cross-Kompilierung
-lobjc— ObjC-Runtime-Symbole werden für alle Apple-Ziele benötigt- SDK-Version —
sdk_version 26.0in ld64.lld (Apple erfordert iOS 18+) - Dead Stripping —
-dead_stripstatt-Wl,-dead_stripfür den Mach-O-Linker - Runtime-Deduplizierung — doppelte
perry_runtimeaus UI-Static-Libs entfernen, um Link-Fehler zu vermeiden
Kombiniert mit der bestehenden Linux → Windows Cross-Kompilierung (v0.2.195+) kann Perry jetzt von Linux aus zu jeder Plattform cross-kompilieren — iOS, macOS, Windows, Android, WASM und Web.
iOS App Store-Bereitschaft
Ein Hauptfokus dieses Zyklus lag darauf, Perry-kompilierte iOS-Apps vollständig App Store-konform zu machen:
- Vollständige Info.plist — alle von Apple geforderten Schlüssel:
CFBundleIdentifier,CFBundleName,CFBundleShortVersionString,CFBundleVersion,UIDeviceFamily,UIRequiredDeviceCapabilities - CFBundleIcons — Standard-iOS-Icon-Benennung (
AppIcon60x60@2x, etc.) mit Fallback-Auflösung - Version aus perry.toml —
version- undbuild_number-Felder fließen direkt in die Info.plist - UILaunchScreen — verwendet den modernen Schlüssel statt
UILaunchStoryboardName(keine Storyboard-Datei nötig) - Provisioning-Profile — macOS-Provisioning-Profile-Unterstützung für App Store und TestFlight-Distribution
Perry Login und Abrechnung
Perry hat jetzt Benutzerkonten und nutzungsbasierte Abrechnung, angetrieben durch einen neuen perry login CLI-Befehl und ein Dashboard unter app.perryts.com.
So funktioniert es
perry login— GitHub OAuth Device Flow, öffnet den Browser, fragt den Abschluss ab- Kostenlose Stufe — 15 Builds/Monat, unbegrenzte Projekte mit einem GitHub-Konto
- Pro-Stufe — unbegrenzte Builds über Polar.sh-Abonnement
- API-Tokens — Tokens im Dashboard für CI/CD generieren und verwalten
- Nutzungsverfolgung — monatliche Publish- und Verify-Zähler mit Echtzeit-Nutzungsbalken
Das Dashboard selbst ist ein Perry-kompilierter Fastify-Server mit Next.js-Static-Export — gebaut mit Perry, für Perry-Nutzer.
macOS-Notarisierung und Code-Signierung
Zwei neue Signierungsfähigkeiten:
perry publish macos --notarize— wechselt automatisch zum Developer ID-Zertifikat (statt App Store-Zertifikat), reicht bei Apples Notarisierungsdienst ein und heftet das Ergebnis an- GCloud KMS Code-Signierung — Windows-Builds können jetzt mit Google Cloud KMS-Schlüsseln signiert werden, was automatisierte Signierung im CI ermöglicht, ohne private Schlüssel preiszugeben
Windows-UI-Überarbeitung
Das Windows-UI-Backend erhielt sein bisher umfassendstes Update:
- DPI-bewusste Skalierung — Fenstergröße, Schriften und Widget-Dimensionen skalieren korrekt auf High-DPI-Displays
- Launcher-Fenster-APIs — rahmenlose Fenster mit benutzerdefinierter Positionierung für Launcher-/Spotlight-artige UIs
- Globale Hotkeys — systemweite Tastenkombinationen, die auch funktionieren, wenn die App nicht fokussiert ist
- App-Icons —
getAppIcon-API zum Anzeigen von Anwendungssymbolen in Launcher-UIs - Reentrancy-sicheres Layout —
RefCell-basiertes Painting wurde durchSetPropWHWND-Speicher ersetzt, um Panics bei verschachtelten WM_PAINT-Nachrichten zu verhindern - Geisterhand-Integration — alle Widget-Typen beim UI-Testing-Framework registriert,
/typeverwendetSendMessageWüber HWND-Map - Android-Kamera-Unterstützung — Kamera-Capture-API auf Android über JNI erweitert
Performance
v0.4.14 lieferte ein umfassendes Performance-Audit:
- Native
fcmp— Gleitkommavergleiche verwenden native CPU-Instruktionen statt Runtime-Funktionsaufrufe. Mandelbrot-Benchmark 30 % schneller. - In-Place String-Append —
str += "text"modifiziert den Puffer direkt, statt einen neuen String zu allokieren. 125x schneller für wiederholte Verkettung. - Kurzschluss-AND/OR —
&&und||überspringen die Auswertung des rechten Operanden, wenn das Ergebnis bereits feststeht. - Negatives Literal-Folding —
-1,-0.5usw. werden auf HIR-Ebene zu Konstanten gefaltet, anstatt eine Negationsinstruktion auszugeben.
Hub Parallele Builds
Der Build-Orchestrierungsserver unterstützt jetzt parallele Builds pro Worker:
- Slot-basierte Verteilung — Worker melden
max_concurrent-Kapazität, Hub verfolgt aktive Jobs pro Worker - Keine 429er mehr — Jobs werden in eine Warteschlange gestellt, anstatt abgelehnt zu werden, wenn alle Worker beschäftigt sind
- Base64-Artefakt-Downloads — binäre Artefakte werden als Base64 bereitgestellt, wenn die Perry-Runtime keine rohen binären HTTP-Antworten verarbeiten kann
- Auto-Reconnect WebSocket — Build-Monitoring-Verbindungen verbinden sich automatisch bei Unterbrechung wieder
Neues Paket: perry/appstorereview
Ein neues First-Party-Paket zum Anfordern von App Store-Bewertungen:
import { requestReview } from "perry/appstorereview";
// Öffnet den nativen Bewertungsdialog
// iOS: SKStoreReviewController
// Android: Play In-App Review API
requestReview();Eine Funktion, zwei Plattformen, native Bewertungs-UI. Timing und Anzeigelogik bleiben vollständig dem Entwickler überlassen.
Codegen-Fixes
120 Commits bedeuten viele Bugfixes. Die wichtigsten:
- Strikte Gleichheit (===) — drei separate Bugs in v0.4.2 behoben: Type-Tag-Vergleich, NaN-Behandlung und null/undefined-Unterscheidung
- String-Vergleich für verkettete Strings —
===schlug fehl beim Vergleich von durch Verkettung erstellten Strings aufgrund von Pointer-Vergleich statt Inhaltsvergleich - Konstruktor-Auflösung —
new X(args)löst jetzt korrekt modulübergreifend importierte Konstruktoren und Closure-basierte Konstruktorfunktionen auf - Modul-Level Array-Push — Werte, die in verschachtelten Funktionsaufrufen in Schleifen an Modul-Level-Arrays gepusht wurden, gingen aufgrund veralteter Pointer nach Reallokierung verloren
- Null-Arithmetik-Koercion —
null + 1ergibt jetzt korrekt1überjs_number_coerce - Bitweises NOT-Wrapping —
~xwird jetzt gemäß ECMAScript-Semantik auf i32 gewrappt - fetch().then() — Callbacks wurden in nativen UI-Apps nie ausgelöst, weil die Event-Loop-Abarbeitung fehlte (v0.4.3)
- WASM Modulo und Exponent —
%und**Operatoren verursachten WASM-Validierungsfehler (v0.4.5)
In Zahlen
- ~120 Commits zum Haupt-Perry-Compiler in 5 Tagen
- 24 Patch-Releases: v0.4.1 → v0.4.24
- Kompilierungsziele: 9 → 10 (tvOS hinzugefügt)
- Cross-Compile-Ziele von Linux: Windows → Windows, iOS, macOS (alle Apple + Windows)
- Neue Pakete: perry/appstorereview
- Neue Infrastruktur: app.perryts.com Dashboard, perry login CLI, Polar.sh-Abrechnung
- Performance-Gewinne: 30 % schnellerer Mandelbrot (natives fcmp), 125x schnellere String-Verkettung
Was kommt als Nächstes
Cross-Kompilierung von iOS und macOS unter Linux bedeutet, dass der Hub jetzt für jede Plattform von einem einzigen Linux-Server aus bauen kann — keine dedizierten macOS-Build-Maschinen mehr für die Kompilierung (nur noch für die Signierung). Die Abrechnungsinfrastruktur ebnet den Weg zur öffentlichen Hub-Beta. Und mit tvOS deckt Perry jede Apple-Plattform ab: macOS, iOS, iPadOS, watchOS und tvOS.
- Öffentliche Hub-Beta — externe Nutzer können TypeScript pushen und native Binärdateien erhalten
- Vollständige Regex-Unterstützung — die letzte große Sprachlücke
- perry/ui-Erweiterung — Drag and Drop, Barrierefreiheit, DatePicker
- Source Maps & Debug-Info — DWARF Debug-Informationen für natives Debugging
Verfolge den Fortschritt auf GitHub, lies die Dokumentation auf docs.perryts.com, oder sieh dir die Roadmap für das vollständige Bild an.
Gefällt dir dieser Beitrag? Hol dir den nächsten.
Kurze Notizen zu Perry-Releases und woran wir als Nächstes arbeiten.
Ein paar E-Mails im Monat. Jederzeit abbestellbar.