Mempercepat development loop dengan hot reload yang bisa dikonfigurasi (termasuk real-device hot reload iOS), native:debug command, log streaming dari PHP runtime, serta integrasi Xcode dan Android Studio untuk debugging yang mendalam.

Setelah di episode 15 kita mengintegrasikan backend Laravel dengan sync patterns, pada episode ini kita optimalkan development loop: bagaimana mengedit kode dan melihat perubahan secara instan tanpa rebuild penuh setiap kali. Hot reload dan debugging tools yang baik adalah produktivitas multiplier — dari edit-ke-view dalam detik, bukan menit.
NativePHP mendukung hot reload — saat kalian mengubah kode PHP/Blade, perubahan tercermin di perangkat secara real-time tanpa restart:
<?php
return [
'development' => [
'hot_reload' => true,
'hot_reload_port' => 8080, // port untuk file watching
'auto_refresh' => true,
],
];Di iOS, hot reload bekerja via WebSocket. Pastikan komputer development dan perangkat berada di jaringan yang sama:
php artisan native:run ios --hotCommand ini memulai file watcher dan WebSocket server. Saat kalian mengedit file PHP/Blade, perubahan dikirim ke perangkat dan WebView/native view di-refresh.
# Terminal 1: Jalankan aplikasi dengan hot reload
php artisan native:run ios --hot
# Terminal 2: Edit kode
# Buka editor, edit resources/views/livewire/task-list.blade.php
# Perubahan muncul di simulator dalam 1-2 detik
# Terminal 3: Jalankan queue worker (opsional)
php artisan queue:workDengan hot reload, kalian tidak perlu menunggu build penuh setiap kali mengubah Blade template atau Livewire component. Perubahan PHP dan Blade di-apply secara instan.
Untuk debugging yang lebih mendalam, gunakan native:debug:
php artisan native:debugDebug mode:
<?php
use Illuminate\Support\Facades\Log;
// Semua Log::info/error/warning akan muncul di terminal
Log::info('Application started');
Log::error('Something failed', ['context' => $data]);
Log::warning('Memory usage high', ['bytes' => memory_get_usage(true)]);Di terminal debug, log muncul secara real-time:
[2026-08-16 10:30:01] local.INFO: Application started
[2026-08-16 10:30:05] local.ERROR: Something failed {"context": {...}}Untuk breakpoint debugging, konfigurasikan Xdebug di NativePHP:
<?php
return [
'xdebug' => [
'enabled' => true,
'host' => env('XDEBUG_HOST', 'host.docker.internal'),
'port' => env('XDEBUG_PORT', 9003),
],
];Buka proyek iOS di Xcode untuk debugging native shell:
open resources/native/ios/NativePHPApp.xcodeprojDi Xcode, kalian bisa:
@objc func handleMessage(_ message: [String: Any]) {
print("[Bridge] Received: \(message)") // Muncul di Xcode console
guard let action = message["action"] as? String else {
print("[Bridge] Invalid message format")
return
}
// Set breakpoint di sini untuk debug bridge
switch action {
case "camera.capture":
handleCameraCapture(message)
case "biometric.authenticate":
handleBiometricAuth(message)
default:
print("[Bridge] Unknown action: \(action)")
}
}open resources/native/android/Di Android Studio, kalian bisa:
class NativeBridge {
companion object {
private const val TAG = "NativePHP"
}
fun handleMessage(message: Map<String, Any>) {
Log.d(TAG, "Received: $message") // Muncul di Logcat
when (message["action"]) {
"camera.capture" -> handleCameraCapture(message)
"biometric.authenticate" -> handleBiometricAuth(message)
else -> Log.w(TAG, "Unknown action: ${message["action"]}")
}
}
}Tip
Gunakan filter Logcat dengan tag NativePHP untuk memfilter hanya log dari aplikasi kalian. Ini mengurangi noise dari log sistem Android.
Hot reload dan debug juga bekerja di perangkat fisik. Pastikan:
php artisan native:run android --device=YOUR_DEVICE_SERIAL --debugInti yang harus dibawa pulang:
native:debug mengaktifkan verbose logging, log streaming, dan remote debugging.Di episode 17 selanjutnya, kita akan membahas Desktop Apps dengan Electron — NativePHP Electron untuk macOS/Windows/Linux, menu & tray, window management, serta strategi satu repo untuk web + desktop + mobile. Sampai jumpa di episode 17!