akyos/ux-native-cli
Bundle Symfony exposant des commandes console pour générer des coques Hotwire Native minimales (Android et iOS) depuis des modèles, puis lancer Gradle et xcodebuild depuis la racine d’un projet PHP. Configuration via native.yaml (URL, application_id, bundle_id, chemins).
symfony/asset-mapper) now serves the bridge Stimulus controllers (@akyos/ux-native-cli) instead of copying them into the project.NotificationTrait, ScanQRTrait) are Symfony UX Live Component constructs.top_bar), extending the server-side contract.native:update:config can inject --notification, --barcode-scanner, and --admob. For Laravel this means the adapter must plan for three bridge families, not one:
akyos/native-push).native:update:config rewrites native.yaml-derived values (URL, name, icon, top bar) into generated native source between markers, and native:build runs this as a pre-build step. Implications:
native.yaml) are still the source of truth; the native.yaml→config/native.php conversion burden from v0.3.0 is unchanged and now feeds a patching step rather than only scaffolding.native:update:config adding missing bridges means existing native projects can be upgraded incrementally without --force re-init. This is a real reduction in migration risk versus v0.3.0.native.icon for both platforms is framework-agnostic (image resampling), low-risk; adds an image-processing dependency (GD/Imagick) and an asset pipeline input.akyos/native-push remains the recommended companion and remains a first-class architectural decision; framework alignment is still unverified.native:init, native:build, native:qr-install, device install, and now native:update:config are shell-out and file-rewrite operations that port cleanly to Artisan.php artisan vendor:publish into resources/js and register through Vite; (b) ship a shim resolving @akyos/ux-native-cli specifiers to Vite aliases; (c) serve controllers as static assets. Option (a) is the pragmatic default and restores a customization escape hatch the package just removed.NotificationTrait/ScanQRTrait must be reimplemented as Livewire traits (or plain controller/service helpers) exposing the same behavioral contract. This is net-new Laravel code, not a port.native:update:config in Laravel: implement as an Artisan command reproducing marker semantics exactly, reading from config/native.php. Must be idempotent, must fail loudly if markers are missing, must be safe to run twice.native:build performs the reinjection (parity with upstream) or whether CI runs native:update:config explicitly and the build verifies cleanliness. The latter is better for reproducible builds.akyos/native-push alignment, Apple signing and push credentials.| Risk Area | Severity | Mitigation Strategy |
|---|---|---|
| Asset Mapper dependency (new) | High | Publish Stimulus controllers to resources/js via vendor:publish; register through Vite; document a fork-and-own path. |
| Live Component traits (new) | High | Reimplement NotificationTrait/ScanQRTrait as Livewire traits; treat as first-party Laravel code with tests. |
| Marker-based config reinjection (new) | Medium | Define and lint the marker contract; forbid manual edits inside markers; fail the command if markers are absent/duplicated. |
| Build mutates source (new) | Medium | Prefer explicit native:update:config in CI, then build; assert git diff --exit-code post-build. |
| Bridge surface x3 (notification, barcode, AdMob) | High | Scope bridges independently; ship one at a time; per-bridge acceptance criteria and kill-switches. |
| AdMob compliance/consent (new) | Medium | Ad unit IDs per env, ATT/consent flow, no ads in debug builds; legal review of data-sharing. |
| Barcode camera permissions (new) | Medium | Permission-denied UX, fallback to manual entry, store scan payload schema. |
| Hotwire Native Bridge | High | Laravel package replicating symfony/ux-native detection, plus notification-token, path config, and now top_bar. |
Push Credentials (APNs .p8, Firebase service account) |
High | Secret manager, CI injection, rotation runbook, never in repo. |
iOS Signing / -allowProvisioningUpdates |
High | Apple Developer account, ios_development_team, App Store Connect API key on macOS CI; profile drift monitoring. |
akyos/native-push Alignment |
High | Verify Laravel support; else wrap kreait/firebase-php + APNs HTTP/2. |
| Notification Token Endpoint Security | Medium | Authenticated registration, user/device binding, stale-token pruning, treat token as PII. |
| Offline/Path Config Version Skew | Medium | Version served config (incl. top_bar), schema validation, cache-invalidation contract. |
| Symfony-Specific Code | High | Abstract config/container/asset concerns behind interfaces. |
| Cross-Platform CLI | Medium | Pin adb, xcrun, devicectl, gradlew versions; test in CI. |
| Dependency Conflicts | Low | composer require --with-all-dependencies; overrides via composer.json. |
| v0.4.0 review gap (new) | Medium | Diff v0.4.0 changelog before committing to v0.5.0. |
NotificationTrait/ScanQRTrait, or is this the point where a fork becomes the cheaper path?akyos/native-push support Laravel, or must it be wrapped/forked?config/native.php remain the source of truth, with native:update:config rendering into markers — or should markers be generated from scratch each build?native:update:config safe to run in CI and idempotent across repeated runs?native:build allowed to mutate the workspace, or do we gate it behind --no-update-config and run the update step explicitly in CI?gradlew/xcodebuild failures to Laravel's exception/log channels with correlation IDs?-allowProvisioningUpdates in CI? What is the rotation and revocation runbook?top_bar served dynamically from Laravel or baked in at build time? What is the versioning contract with tabs/modals?akyos/laravel-native-cli) still sufficient, or is a maintained fork the honest answer?| Component | Laravel 10+ Support | Workaround Needed |
|---|---|---|
| Symfony Console | ✅ (symfony/console) |
Manual Artisan registration. |
| Symfony Config | ✅ (symfony/config) |
Convert YAML to config/native.php. |
| Symfony Process | ✅ (symfony/process) |
None. |
| Symfony FrameworkBundle | ❌ | Replace with Illuminate\Foundation\Application. |
| Symfony UX Native | ❌ | Custom bridge (akyos/laravel-native). |
| Symfony Asset Mapper (new) | ❌ | Publish controllers to resources/js, register via Vite. |
| UX Live Component traits (new) | ❌ | Reimplement as Livewire traits / services. |
akyos/native-push |
⚠️ Unverified | Verify; wrap Firebase Admin SDK / APNs HTTP/2 if needed. |
| Firebase Admin SDK | ✅ (kreait/firebase-php) |
Fallback if native-push is Symfony-only. |
| APNs HTTP/2 | ✅ (edamov/pushok or similar) |
iOS-direct delivery fallback. |
Image generation (native.icon) |
✅ | GD or Imagick; pin in CI image. |
akyos/laravel-native-cli wrapping the Symfony bundle, including: notification-token route, path-config endpoint (including top_bar), marker-aware native:update:config, and a vendor:publish asset path for the Stimulus controllers.akyos/native-push if Laravel-compatible; otherwise kreait/firebase-php + APNs library.config/native.php..p8, Firebase service account in CI secret manager.akyos/ux-native-cli in a Laravel 10 project; register via custom service provider.native:init with path overrides (storage/native/android).native:update:config marker semantics on a scratch project.native.yaml → config/native.php with env vars, including ios_development_team, notification, barcode, AdMob, icon, and top_bar settings.native:update:config with idempotency and dry-run mode.Prompt helper.symfony/ux-native detection and JSON config serving (tabs, modals, top_bar).vendor:publish; wire alias in vite.config.js.NotificationTrait/ScanQRTrait as Livewire traits (or service methods).xcodebuild/devicectl on macOS CI; ios_development_team + App Store Connect API key for -allowProvisioningUpdates.akyos/native-push or wrapper; configure Firebase + APNs .p8.xcodebuild/devicectl, Apple Developer credentials for real-device signing, and icon asset catalog regeneration.top_bar. Debug builds now disable WebView cache — a DX win, no backend impact.config()/env replaces Symfony config; Laravel events/queues replace Symfony lifecycle hooks; vendor:publish + Vite replaces Asset Mapper.symfony/console, symfony/process, endroid/qr-code, GD/Imagick; ANDROID_HOME/JAVA_HOME/ANDROID_SDK_ROOT in .env; Apple Developer account, ios_development_team, APNs .p8, Firebase project.native.php; implement marker-aware native:update:config with --dry-run and idempotency tests.native:update:config explicitly, then native:build --no-update-config, then assert a clean git diff.top_bar), notification-token route, published Stimulus controllers, Livewire trait equivalents.native:qr-install locally; CI builds with --platform=all --no-install, -allowProvisioningUpdates on macOS runners.akyos/ux-native-cli and akyos/native-push — upgrade them together.gradlew, xcodebuild, adb, xcrun) pinned in CI images..p8, Firebase service accounts, Apple provisioning profiles/certs — expiry, rotation, revocation. -allowProvisioningUpdates means build hosts hold Apple account authority.icon, top_bar, barcode, and AdMob keys to the YAML→PHP conversion backlog; v0.4.0 keys may also be missing and must be diffed.gradlew output with correlation IDs; include the post-native:update:config diff hash.-allowProvisioningUpdates failures, and icon-catalog mismatch.BadDeviceToken, Unregistered, expired key in structured logs; distinguish config vs. device-token failures.Unregistered/BadDeviceToken; index by user and token.top_bar alongside tabs/modals.native:update:config (new): missing/duplicated markers → either silent skip (stale app config) or partial file corruption. Fail closed and alert.native:build rewriting files causes CI diff noise, spurious merge conflicts, or committed generated changes..p8 or Firebase account — no user-facing error; requires health checks and delivery metrics.ios_development_team — blocks real-device builds only.top_bar/tabs; installed app caches old config → broken navigation and deep links.akyos/native-push upgrade incompatible with the wrapper — pin and stage upgrades.top_bar), asset-publish upgrade procedure, and a per-bridge enablement checklist.top_bar; validate offline/path config; add barcode and AdMob only after the core pipeline is stable.How can I help you explore Laravel packages today?