NativePHP v4 ajoute un mode de rendu appelé SuperNative qui transforme les composants Blade en véritables vues natives, SwiftUI sur iOS et Jetpack Compose sur Android, sans aucune WebView ni couche HTML. Simon Hamp et Shane Rosenthal l'ont présenté lors de The Vibes, un événement de 100 personnes organisé à Boston le 30 juillet, au lendemain de la fin de Laracon US. SuperNative est le mode de rendu par défaut dans v4 mais reste en bêta avec la version 4.1.
Le système de composants s'appelle EDGE, pour Element Definition and Generation Engine. Plutôt que de compiler Blade en HTML, NativePHP a construit son propre moteur Blade qui convertit les composants en une représentation binaire de longueur fixe; un interpréteur côté natif lit ces données et construit directement les vues SwiftUI et Compose, en partageant la mémoire avec PHP plutôt que de traverser un pont à chaque interaction. Les composants se comportent comme ceux de Livewire, avec des propriétés publiques, une méthode mount(), des méthodes d'action et des attributs comme #[Poll], #[Computed], #[Lazy] et #[Locked]. Comme les écrans sont de véritables vues SwiftUI et Compose, les fonctions d'accessibilité comme VoiceOver, TalkBack et la taille de texte dynamique fonctionnent automatiquement.
Un écran est désormais une classe PHP qui étend NativeComponent, associée à une vue Blade, enregistrée dans routes/mobile.php via une macro Route::native; les layouts étendent NativeLayout et peuvent être partagés entre plusieurs routes avec Route::nativeGroup. Les templates utilisent des éléments natifs comme <column>, <text> et <pressable> au lieu de balises HTML, stylés avec des classes Tailwind mappées sur la mise en page de la plateforme, et prennent en charge les gestionnaires @tap, @pressDown et @pressUp, ces deux derniers étant nouveaux dans v4 pour les interactions d'appui prolongé. Les développeurs peuvent prévisualiser un écran sur un vrai appareil sans Xcode ni Android Studio grâce à php artisan native:jump, qui affiche un QR code pour l'application compagne gratuite Jump sur iOS et Android.
Les applications v3 existantes n'ont pas besoin d'être entièrement converties: une WebView est désormais simplement un composant <webview php url="/" fullscreen /> que l'on peut placer dans un écran natif, chacune disposant de son propre runtime PHP dédié, et v4 ne démarre plus de WebView tant qu'une route web n'est pas réellement rendue. Les tests passent par Pest avec un FakeBridge qui capture les arbres d'éléments publiés et les appels natifs; Native::visit() et Native::test() montent les composants, et tap() simule des pressions.
Quatre plugins auparavant séparés, Device, Dialog, File et System, sont désormais intégrés au paquet cœur nativephp/mobile, seul changement cassant de cette version; Composer refuse de résoudre les dépendances tant qu'ils ne sont pas supprimés via php artisan native:plugin:uninstall --core-v4. La version 4.1, publiée le 7 août, ajoute l'attribut #[Locked] pour bloquer les écritures sur les propriétés liées, les TreeObservers ainsi qu'un utilitaire de test TreeSpy pour inspecter les arbres d'éléments publiés, un NativeRouteFallback pour les navigateurs qui atteignent des routes réservées au natif, et des avertissements de validation des classes Tailwind au lieu d'un simple ignorage silencieux. Les facades et événements restent inchangés, le serveur de développement Vite devient optionnel via un indicateur --vite, et NativePHP fournit une compétence Boost destinée à aider les agents à automatiser la migration de v3 vers v4.
Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.