10 β Mobil ilova asoslari¶
β¬ οΈ Oldingi: 09 β Desktop UI: Blade, Livewire, assets Β· π README Β· Keyingi: 11 β Mobil UI va navigatsiya β‘οΈ
Bu bobda: NativePHP'ning eng hayratlanarli qismiga β mobil ilovalarga o'tamiz. Bu yerda siz
nativephp/mobilepaketini,NATIVEPHP_APP_IDsozlamasini,php artisan native:installvaphp artisan native:runbuyruqlarini o'rganasiz. Eng muhimi β on-device PHP runtime arxitekturasini tushunasiz: PHP server'da emas, balki telefonning o'zida ishlaydi. iOS uchun Swift qobiq, Android uchun Kotlin qobiq qanday farq qilishini, v3 plugin tizimini va facade'lar (Camera, Biometrics, Geolocation, Dialog, System)OnNativeeventlari orqali qanday ishlashini ko'ramiz.HALOL eslatma: NativePHP "sof native widget" yaratmaydi β sizning Laravel ilovangizni native qobiq ichidagi webview'da ishga tushiradi (UI = HTML/CSS/JS = Blade/Livewire/Inertia; biznes-mantiq = qurilmada ishlovchi PHP). Bu bobdagi Laravel/PHP kod sintaksisi tekshirilgan (
php -l+ Laravel boot), lekin emulator/qurilma/build bloklari illustrativ β ularni ishga tushirish macOS+Xcode (iOS) yoki Android SDK (Android) va real qurilma talab qiladi, bu muhitda yo'q. Soxta "qurilmada ishladi" yozilmagan.
Desktop'dan mobilga: nima o'zgaradi?¶
Oldingi boblarda biz nativephp/desktop bilan ishladik. U sizning Laravel ilovangizni Electron qobig'i ichida ishga tushirardi: PHP binar kompyuterda bundle qilinib, Chromium webview UI'ni ko'rsatardi.
Mobil ham xuddi shu falsafaga ega, lekin qobiq boshqacha:
Desktop (nativephp/desktop) |
Mobil (nativephp/mobile) |
|
|---|---|---|
| Qobiq | Electron (Chromium + Node) | iOS: Swift / Android: Kotlin |
| UI qatlami | webview (Chromium) | platforma WebView'i (WKWebView / Android WebView) |
| PHP | kompyuterda bundle qilingan binar | qurilmada bundle qilingan PHP 8.4 binar |
| Bog'liqliklar | Node 22+, Electron | iOS: Xcode (macOS) / Android: Android SDK |
| Tarqatish | .exe, .dmg, .AppImage |
App Store / Google Play / .apk |
Eng katta tushuncha shu: biznes-mantiq qatlamingiz (route'lar, Eloquent, Blade, Livewire) deyarli o'zgarmaydi. Siz yangi til o'rganmaysiz, SwiftUI yoki Jetpack Compose yozmaysiz. Siz allaqachon biladigan Laravel'ni yozasiz β NativePHP uni telefon ichida ishlatadi.
Laravel asoslari bo'yicha eslatma kerak bo'lsa: ../laravel/README.md. PHP sintaksisi uchun: ../php/README.md.
On-device PHP runtime β eng muhim tushuncha¶
An'anaviy mobil PHP yondashuvlari (masalan PWA yoki remote server) PHP'ni uzoq serverda ishlatadi: telefon faqat HTTP so'rov yuboradi. NativePHP mobil esa boshqacha β PHP'ning o'zi qurilmada ishlaydi.
Rasmiy hujjatlarda aytilganidek (nativephp.com/docs/mobile/3): "NativePHP β bu o'z turidagi birinchi kutubxona bo'lib, to'liq PHP ilovalarni mobil qurilmalarda native ishga tushiradi β web server kerak emas."
Bu qanday ishlaydi? Uch qatlam:
- Oldindan kompilyatsiya qilingan PHP (statik binar, PHP 8.4) sizning kodingiz bilan birga Swift/Kotlin qobiq ilovaga bundle qilinadi.
- Swift/Kotlin ko'priklari (bridges) PHP muhitini boshqaradi va sizning PHP kodingizni to'g'ridan-to'g'ri ishga tushiradi.
- Maxsus PHP kengaytma PHP ichiga kompilyatsiya qilinadi va native funksiyalarni (kamera, GPS, barmoq izi) PHP'ga ochib beradi.
UI esa native WebView'da ko'rsatiladi β sizning Blade/Livewire sahifalaringiz HTML sifatida render bo'ladi.
Nega bu muhim?
- Internet kerak emas. Ilova offline ishlaydi β PHP va SQLite qurilmaning o'zida.
- Tezlik. Server bilan tarmoq aloqasi yo'q; mantiq lokal bajariladi.
- Maxfiylik. Ma'lumotlar qurilmada qoladi (agar siz uzoq API'ga yubormasangiz).
HALOL: Bu "PHP telefonda ishlaydi" iborasi to'liq haqiqat. Lekin UI baribir webview ichidagi HTML β sof native SwiftUI/Compose widget emas. Foydalanuvchi farqni sezmasligi mumkin, lekin arxitekturani bilish muhim.
iOS (Swift qobiq) vs Android (Kotlin qobiq)¶
Sizning Laravel kod-bazangiz bitta. Lekin NativePHP uni ikki xil qobiqqa joylaydi:
- iOS: Swift bilan yozilgan qobiq ilova. UI
WKWebView'da. Build qilish uchun macOS + Xcode shart. Jo'natish β App Store (Apple Developer hisobi kerak). - Android: Kotlin bilan yozilgan qobiq ilova. UI Android WebView'da. Build uchun Android SDK kerak (Windows, macOS yoki Linux'da). Jo'natish β Google Play yoki to'g'ridan-to'g'ri
.apk.
Native API'lar (kamera, biometrika) har platformada o'z tabiiy implementatsiyasiga ega, lekin sizga bir xil PHP facade ko'rinadi. Masalan Biometrics::prompt() iOS'da Face ID/Touch ID'ni, Android'da barmoq izi/yuz qulfini chaqiradi β kodingiz bir xil.
O'rnatish: paket, APP_ID va native:install¶
NativePHP mobil β composer paketi. v3 (2026-fevraldan) MIT litsenziyasi ostida, plugin tizimi bilan keladi.
# Yangi Laravel loyiha ichida (NativePHP yangi loyihada o'rnatishni tavsiya qiladi)
composer require nativephp/mobile
Keyin .env faylida ilova identifikatorini belgilang. Bu teskari-domen (reverse-domain) ko'rinishida bo'ladi:
# .env
NATIVEPHP_APP_ID=com.kompaniya.ilova
NATIVEPHP_APP_VERSION="1.0.0"
NATIVEPHP_APP_VERSION_CODE="1"
# iOS uchun (App Store): Apple Developer "Team ID"
NATIVEPHP_DEVELOPMENT_TEAM=ABCDE12345
NATIVEPHP_APP_ID β bu ilovangizning butun dunyo bo'ylab noyob identifikatori (masalan com.ioqil.kundalik). U com. bilan boshlanadi, keyin kompaniya/domen va ilova nomi keladi. App Store/Google Play'da shu ID asosida ilova taniladi.
Endi o'rnatish buyrug'i:
Bu buyruq:
nativephp/papkasini vaconfig/nativephp.phpfaylini yaratadi.- Sizdan ICU-yoqilgan PHP binar haqida so'rashi mumkin (agar
intlkengaytma kerak bo'lsa β masalan Filament uchun).
Muhim:
nativephp/papkasini vaqtinchalik (ephemeral) deb hisoblang va.gitignore'ga qo'shing. U build artifaktlarini saqlaydi, manba kod emas.
native:install foydali bayroqlari (rasmiy commands sahifasidan):
--forceβ qayta o'rnatish/ustiga yozish.--freshβ toza holatdan o'rnatish.--with-icu/--without-icuβ ICU PHP binar tanlovi.--skip-phpβ PHP binarni yuklab olishni o'tkazib yuborish.
Windows eslatmasi: WSL emas, to'g'ridan Windows'da ishlang.
C:\temppapkasini va loyiha papkangizni Windows Defender istisnolariga qo'shing β bu Composer va build tezligini sezilarli oshiradi.HALOL β illustrativ: Bu bobdagi
composer require,native:installvanative:runbuyruqlari rasmiy va to'g'ri, lekin ushbu muhitda ishga tushirilmagan (mobil build muhiti β Xcode/Android SDK + qurilma yo'q). Pastda men ko'rsatadigan terminal natijalari rasmiy hujjatlardagi kabi illustrativ misollardir, soxta "build muvaffaqiyatli" emas.
Ilovani ishga tushirish: native:run¶
Emulator yoki real qurilmada ishga tushirish uchun:
Buyruq sizdan platforma (iOS/Android) va qurilma/emulatorni tanlashni so'raydi. To'g'ridan ko'rsatish ham mumkin (rasmiy commands sahifasi):
# Platforma va qurilma UDID'ini bevosita berish
php artisan native:run android
# Foydali bayroqlar:
# --build=debug debug build (default)
# --watch kod o'zgarganda qayta yuklash
# --start-url=... boshlang'ich URL
# --no-tty interaktiv bo'lmagan rejim
Boshqa foydali buyruqlar:
php artisan native:open # iOS uchun Xcode / Android Studio loyihasini ochadi
php artisan native:tail # qurilmadan (faqat Android) Laravel log oqimini ko'rsatadi
php artisan native:version # NativePHP versiyasi
php artisan native:watch # fayl o'zgarishlarini kuzatish
HALOL β illustrativ: Quyidagi
native:runnatijasi rasmiy hujjatlardagi kabi ko'rinish (illustrativ). Bu muhitda emulator/qurilma yo'q, shuning uchun bu HAQIQATDA ishga tushirilmagan:
# (illustrativ β bu muhitda ishga tushmagan)
$ php artisan native:run android
Building app...
Selecting device: Pixel_7_API_34 (emulator)
Installing com.kompaniya.ilova...
Launching...
v3 plugin tizimi¶
NativePHP mobil v3 plugin asosida qurilgan. "Core" pluginlar (rasmiy ravishda qo'llab-quvvatlanadigan) quyidagilarni qamraydi: Camera, Biometrics, Geolocation, PushNotifications, Dialog, System va boshqalar. Siz o'z pluginlaringizni ham yarata olasiz.
Plugin buyruqlari (rasmiy commands sahifasi):
php artisan native:plugin:create # yangi plugin yaratish
php artisan native:plugin:list # o'rnatilgan pluginlar ro'yxati
php artisan native:plugin:register # plugin ro'yxatga olish
php artisan native:plugin:validate # plugin tekshirish
php artisan native:plugin:uninstall # plugin o'chirish
Har bir native imkoniyat (kamera, GPS, ...) β bu plugin. Ko'pchilik plugin ishlashi uchun config/nativephp.php'da tegishli ruxsat (permission) yoqilishi kerak. Masalan kamera uchun camera ruxsati.
Facade'lar va OnNative event modeli¶
Mana NativePHP mobilning eng muhim naqshi (pattern). Native imkoniyatlar asinxron β siz facade'ni chaqirasiz, lekin natija darhol qaytmaydi. Natija event orqali keladi.
Misol β kamera. Rasmiy hujjatlardagi Native\Mobile\Facades\Camera facade'i:
use Native\Mobile\Facades\Camera;
Camera::getPhoto(); // kamerani ochadi β lekin rasmni QAYTARMAYDI
E'tibor bering: $path = Camera::getPhoto() yozmaysiz. Buning o'rniga, rasm olingach PhotoTaken eventi otiladi va siz uni #[OnNative(...)] atributi bilan tutasiz:
use Native\Mobile\Attributes\OnNative;
use Native\Mobile\Events\Camera\PhotoTaken;
#[OnNative(PhotoTaken::class)]
public function onPhoto(string $path): void
{
// $path β olingan rasm fayli yo'li
$this->photoPath = $path;
}
Bu naqsh Livewire bilan juda yaxshi mos keladi: facade chaqiruvi -> native oyna -> event -> Livewire metodi -> UI yangilanadi.
Tasdiqlangan facade'lar va metodlar¶
Quyidagilar nativephp.com/docs/mobile/3 hujjatlaridan aniq olingan. Aniq imzo va to'liq variantlar uchun har doim rasmiy docs'ni ko'ring.
Camera (Native\Mobile\Facades\Camera):
Camera::getPhoto(); // rasm olish -> PhotoTaken eventi ($path)
Camera::recordVideo(['maxDuration' => 30]); // video -> VideoRecorded ($path, $mimeType)
Camera::pickImages('images', true); // galereyadan tanlash -> MediaSelected
// Diqqat: MediaSelected eventi Gallery papkasida β
// Native\Mobile\Events\Gallery\MediaSelected (Camera emas, Gallery!)
Biometrics (Native\Mobile\Facades\Biometrics):
Geolocation (Native\Mobile\Facades\Geolocation):
Geolocation::getCurrentPosition(); // tarmoq orqali (tezroq, kamroq aniq)
Geolocation::getCurrentPosition(true); // GPS (sekinroq, aniqroq)
Geolocation::checkPermissions();
Geolocation::requestPermissions();
// -> LocationReceived eventi: $success, $latitude, $longitude, $accuracy, $timestamp, $provider, $error
Dialog (Native\Mobile\Facades\Dialog):
Dialog::toast('Saqlandi!', 'short'); // 'short' ~2s, 'long' ~4s
// Apostrofli matnlar uchun DOUBLE-quote (") ishlating β single-quote (')
// ichida literal apostrof string'ni erta tugatib, parse error beradi.
Dialog::alert('Tasdiq', "O'chirilsinmi?", ['Bekor', "O'chirish"])
->id('delete-confirm')
->show();
// -> Alert\ButtonPressed eventi: $index, $label, $id
System (Native\Mobile\Facades\System):
System::isIos(); // bool
System::isAndroid(); // bool
System::isMobile(); // bool β iOS yoki Android
System::appSettings(); // qurilma sozlamalarida ilova sahifasini ochadi
System::flashlight(); // fleshlightni yoqadi/o'chiradi
HALOL: Bu facade'lar faqat qurilmada/emulatorda ishlaydi β chunki native bridge va PHP runtime o'sha yerda. Bu muhitda (oddiy server, mobil runtime yo'q) ular ishga tushmaydi. Lekin yuqoridagi kod sintaktik to'g'ri (php -l bilan tekshirilgan) va imzolar rasmiy hujjatlardan olingan.
To'liq misol: kamera + biometrika + lokatsiya Livewire komponenti¶
Mana barcha tushunchalarni birlashtirgan Livewire komponenti. Bu PHP sintaksisi tekshirilgan (php -l), lekin native qism faqat qurilmada ishlaydi (illustrativ).
<?php
namespace App\Livewire;
use Livewire\Component;
use Native\Mobile\Facades\Camera;
use Native\Mobile\Facades\Biometrics;
use Native\Mobile\Facades\Geolocation;
use Native\Mobile\Facades\Dialog;
use Native\Mobile\Facades\System;
use Native\Mobile\Attributes\OnNative;
use Native\Mobile\Events\Camera\PhotoTaken;
use Native\Mobile\Events\Biometric\Completed;
use Native\Mobile\Events\Geolocation\LocationReceived;
class CameraComponent extends Component
{
public ?string $photoPath = null;
public ?float $latitude = null;
public ?float $longitude = null;
public bool $unlocked = false;
public function takePhoto(): void
{
Camera::getPhoto();
}
#[OnNative(PhotoTaken::class)]
public function onPhoto(string $path): void
{
$this->photoPath = $path;
}
public function authenticate(): void
{
Biometrics::prompt();
}
#[OnNative(Completed::class)]
public function onBiometric(bool $success): void
{
$this->unlocked = $success;
}
public function locate(): void
{
Geolocation::getCurrentPosition(true);
}
#[OnNative(LocationReceived::class)]
public function onLocation(
bool $success,
?float $latitude = null,
?float $longitude = null,
): void {
if ($success) {
$this->latitude = $latitude;
$this->longitude = $longitude;
}
}
public function notify(): void
{
Dialog::toast('Saqlandi!', 'short');
if (System::isAndroid()) {
Dialog::alert('Salom', 'Android qurilmadasiz', ['OK'])->show();
}
}
public function render()
{
return view('livewire.camera-component');
}
}
Blade ko'rinishi (resources/views/livewire/camera-component.blade.php):
<div class="p-4 space-y-4">
<button wire:click="takePhoto" class="btn">Rasm olish</button>
<button wire:click="authenticate" class="btn">Qulfni ochish</button>
<button wire:click="locate" class="btn">Lokatsiyani aniqlash</button>
@if ($photoPath)
<p>Rasm: {{ $photoPath }}</p>
@endif
@if ($unlocked)
<p class="text-green-600">Tasdiqlandi!</p>
@endif
@if ($latitude)
<p>Koordinata: {{ $latitude }}, {{ $longitude }}</p>
@endif
</div>
HALOL: Yuqoridagi PHP komponent
php -lbilan tekshirilib, "No syntax errors detected" natijasini berdi. LekinNative\Mobile\*sinflari faqat qurilmada/nativephp/mobileo'rnatilgan loyihada mavjud. Bu muhitda men sintaksisni tekshirdim, runtime'ni emas.
Host-ilova: oddiy Laravel β har joyda bir xil¶
Eng yaxshi xabar: ilovangizning biznes-mantiq qismi oddiy Laravel. Quyidagi Note modeli, controller va route'lar desktop'da ham, mobilda ham, hatto oddiy web'da ham bir xil ishlaydi. Bu kod Laravel boot bilan tekshirilgan (model + validatsiya ishlaydi).
// app/Models/Note.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Note extends Model
{
protected $fillable = ['title', 'body'];
}
// app/Http/Controllers/NoteController.php
namespace App\Http\Controllers;
use App\Models\Note;
use Illuminate\Http\Request;
class NoteController extends Controller
{
public function index()
{
$notes = Note::query()->latest()->get();
return view('notes.index', ['notes' => $notes]);
}
public function store(Request $request)
{
$data = $request->validate([
'title' => ['required', 'string', 'max:120'],
'body' => ['nullable', 'string'],
]);
Note::create($data);
return redirect()->route('notes.index');
}
}
// routes/web.php
use App\Http\Controllers\NoteController;
Route::get('/notes', [NoteController::class, 'index'])->name('notes.index');
Route::post('/notes', [NoteController::class, 'store'])->name('notes.store');
Mobilda ma'lumotlar lokal SQLite'da (qurilmada) saqlanadi β Eloquent xuddi shu tarzda ishlaydi. SQL haqida chuqurroq: ../sql/README.md.
Build va tarqatish (qisqacha β keyingi boblarda chuqur)¶
To'liq build/release boblari keyinroq, lekin asosiy buyruqlar:
php artisan native:package android # platforma uchun paket (.apk/.aab yoki .ipa)
php artisan native:release <type> # release tayyorlash
php artisan native:credentials # imzolash sertifikatlari
HALOL β illustrativ: Bu buyruqlar macOS+Xcode (iOS) yoki Android SDK (Android) talab qiladi va imzolash sertifikatlarini sozlashni so'raydi. Bu muhitda ularni ishga tushirib bo'lmaydi. Buyruq nomlari rasmiy hujjatlardan.
Mashqlar¶
Oson¶
NATIVEPHP_APP_IDqanday formatda bo'ladi?Kundaliknomli ilova uchunioqil.uzdomenidan foydalanib bitta to'g'ri APP_ID yozing.- Desktop va mobil NativePHP qobiqlari nimasi bilan farq qiladi? Jadval ko'rinishida 3 ta farqni yozing.
- NativePHP mobil paketini o'rnatish va o'rnatuvchini ishga tushirish uchun ikkita buyruqni yozing.
Systemfacade'ining uchta tekshiruv metodini (is...) yozing va har biri nima qaytarishini aytib bering.- Nima uchun
$path = Camera::getPhoto()yozish noto'g'ri? Bir jumlada tushuntiring. php artisan native:runqanday tanlovni so'raydi? Buyruqni Android uchun bevosita ko'rsatadigan variantini yozing.
O'rta¶
- Biometrik autentifikatsiya uchun to'liq oqim yozing:
prompt()chaqiruvi va#[OnNative(Completed::class)]bilan belgilangan handler metod. Handlerbool $successqabul qilsin. - Geolokatsiyani GPS rejimida olib,
LocationReceivedeventidan$latitudeva$longitude'ni Livewire xususiyatlariga yozadigan komponent metodlarini yozing. Dialog::alert(...)bilan "O'chirilsinmi?" tasdiq oynasi ko'rsatib,ButtonPressedeventida foydalanuvchi "O'chirish" tugmasini bosganini tekshiradigan kod yozing (->id()ishlating).- On-device PHP runtime arxitekturasining uch qatlamini (PHP binar, Swift/Kotlin bridge, PHP kengaytma) o'z so'zlaringiz bilan tushuntiring.
- v3 plugin tizimida core pluginni ro'yxatdan o'tkazish, ro'yxatini ko'rish va o'chirish uchun uchta
native:plugin:*buyrug'ini yozing. - Nima uchun bir xil Laravel kod-bazasi iOS va Android'da ishlay oladi?
Biometrics::prompt()misolida tushuntiring.
Qiyin¶
- To'liq Livewire komponenti yozing: u rasm oladi (
Camera), lokatsiyani aniqlaydi (Geolocation) va ularniNotemodeliga lokal SQLite'ga saqlaydi. Event handlerlarniOnNativebilan belgilang. (Faqat PHP qismi; native runtime illustrativ.) - "NativePHP sof native widget yaratadi" degan da'voni rad eting. Arxitektura nuqtai nazaridan UI qaysi qatlamda ekanini va biznes-mantiq qaysi qatlamda ekanini batafsil tushuntiring.
- Bir o'quvchi shikoyat qilmoqda: "Men
native:runni Windows'da iOS uchun ishga tushira olmadim." Nima uchun? To'g'ri javob bering va Android varianti Windows'da nega ishlashini ayting.
Yechimlar
1. Teskari-domen formati: uz.ioqil.kundalik. Domen ioqil.uz teskari yozilib (uz.ioqil), ilova nomi qo'shiladi. Yoki ko'p ishlatiladigan com. bilan: agar .com domeningiz bo'lsa com.ioqil.kundalik. Asosiysi β noyob, kichik harf, teskari-domen.
2. Farqlar:
| Jihat | Desktop | Mobil |
|---|---|---|
| Qobiq | Electron (Chromium+Node) | iOS Swift / Android Kotlin |
| Build talabi | Node 22+ | Xcode (macOS) / Android SDK |
| Tarqatish | .exe/.dmg/.AppImage | App Store / Google Play / .apk |
3.
4. System::isIos() β iOS'da true; System::isAndroid() β Android'da true; System::isMobile() β iOS yoki Android'da true. Hammasi bool qaytaradi.
5. Chunki native facade'lar asinxron β getPhoto() kamerani ochadi, lekin rasm darhol tayyor bo'lmaydi (foydalanuvchi rasm olishi kerak). Natija PhotoTaken eventi orqali keladi, qaytarish qiymati sifatida emas.
6.
php artisan native:run # platforma + qurilma/emulatorni so'raydi
php artisan native:run android # to'g'ridan Android
7.
use Native\Mobile\Facades\Biometrics;
use Native\Mobile\Attributes\OnNative;
use Native\Mobile\Events\Biometric\Completed;
public function authenticate(): void
{
Biometrics::prompt();
}
#[OnNative(Completed::class)]
public function onBiometric(bool $success): void
{
$this->unlocked = $success;
}
8.
use Native\Mobile\Facades\Geolocation;
use Native\Mobile\Attributes\OnNative;
use Native\Mobile\Events\Geolocation\LocationReceived;
public ?float $latitude = null;
public ?float $longitude = null;
public function locate(): void
{
Geolocation::getCurrentPosition(true); // GPS rejimi
}
#[OnNative(LocationReceived::class)]
public function onLocation(bool $success, ?float $latitude = null, ?float $longitude = null): void
{
if ($success) {
$this->latitude = $latitude;
$this->longitude = $longitude;
}
}
9.
use Native\Mobile\Facades\Dialog;
use Native\Mobile\Attributes\OnNative;
use Native\Mobile\Events\Alert\ButtonPressed;
public function confirmDelete(): void
{
// Apostrofli string DOUBLE-quote bilan: "O'chirilsinmi?", "O'chirish"
Dialog::alert('Tasdiq', "O'chirilsinmi?", ['Bekor', "O'chirish"])
->id('delete-confirm')
->show();
}
#[OnNative(ButtonPressed::class)]
public function onButton(int $index, string $label, ?string $id = null): void
{
if ($id === 'delete-confirm' && $label === "O'chirish") {
// o'chirish mantig'i
}
}
10. Uch qatlam: - Bundle PHP binar: statik kompilyatsiya qilingan PHP 8.4 kodingiz bilan birga qobiqqa joylanadi va qurilmada ishlaydi. - Swift/Kotlin bridge: native qobiq PHP muhitini ishga tushiradi va boshqaradi; UI bilan PHP o'rtasida xabar uzatadi. - Maxsus PHP kengaytma: PHP ichiga kompilyatsiya qilinib, native funksiyalarni (kamera, GPS) PHP facade'lariga ochib beradi.
11.
php artisan native:plugin:register
php artisan native:plugin:list
php artisan native:plugin:uninstall
12. Chunki siz facade orqali mavhum interfeysga murojaat qilasiz (Biometrics::prompt()). NativePHP'ning Swift bridge'i iOS'da uni Face ID/Touch ID API'siga, Kotlin bridge'i esa Android'da barmoq izi/yuz qulfi API'siga ulaydi. PHP kodingiz platformani bilmaydi β qobiq tarjima qiladi.
13.
<?php
namespace App\Livewire;
use Livewire\Component;
use App\Models\Note;
use Native\Mobile\Facades\Camera;
use Native\Mobile\Facades\Geolocation;
use Native\Mobile\Attributes\OnNative;
use Native\Mobile\Events\Camera\PhotoTaken;
use Native\Mobile\Events\Geolocation\LocationReceived;
class NoteCapture extends Component
{
public ?string $photoPath = null;
public ?float $latitude = null;
public ?float $longitude = null;
public function takePhoto(): void
{
Camera::getPhoto();
}
#[OnNative(PhotoTaken::class)]
public function onPhoto(string $path): void
{
$this->photoPath = $path;
}
public function locate(): void
{
Geolocation::getCurrentPosition(true);
}
#[OnNative(LocationReceived::class)]
public function onLocation(bool $success, ?float $latitude = null, ?float $longitude = null): void
{
if ($success) {
$this->latitude = $latitude;
$this->longitude = $longitude;
}
}
public function save(): void
{
Note::create([
'title' => 'Joydagi eslatma',
'body' => "Rasm: {$this->photoPath}; Koord: {$this->latitude},{$this->longitude}",
]);
}
public function render()
{
return view('livewire.note-capture');
}
}
Note::create(...) qurilmadagi lokal SQLite'ga yozadi. Native qism (Camera/Geolocation) faqat qurilmada ishlaydi (illustrativ), lekin Note saqlash mantig'i sof Laravel.
14. NativePHP sof native widget yaratmaydi. Arxitektura: - UI qatlam = webview ichidagi HTML/CSS/JS β sizning Blade/Livewire/Inertia sahifalaringiz. Bu SwiftUI yoki Jetpack Compose widgetlari EMAS. - Biznes-mantiq qatlam = PHP, qurilmada ishlovchi bundle PHP runtime (Laravel kodingiz). - Faqat native bridge orqali ayrim qurilma imkoniyatlari (kamera, GPS) native kodga ulanadi. Demak foydalanuvchi ko'radigan tugma yoki ro'yxat β HTML element, native UIButton/Button emas. "Sof native" da'vosi noto'g'ri.
15. iOS ilovasini build qilish Xcode talab qiladi, Xcode esa faqat macOS'da ishlaydi. Windows'da Xcode yo'q, shuning uchun native:run ios Windows'da ishlamaydi β bu Apple cheklovi, NativePHP'ning kamchiligi emas. Android esa Android SDK bilan ishlaydi, u Windows/macOS/Linux'da mavjud β shuning uchun native:run android Windows'da to'g'ri ishlaydi. Demak Windows foydalanuvchisi Android'ni mahalliy build qila oladi, iOS uchun esa macOS (yoki CI/CD'dagi macOS runner) kerak.
β¬ οΈ Oldingi: 09 β Desktop UI: Blade, Livewire, assets Β· π README Β· Keyingi: 11 β Mobil UI va navigatsiya β‘οΈ