---
# System prepended metadata

title: 'MMOS 2025/26: Vježba 10'
tags: [MMOS_2526]

---

---
title: 'MMOS 2025/26: Vježba 10'
tags: [MMOS_2526]

---
author: Matija Burić
---

### Mrežni i mobilni operacijski sustavi 2025/26


# Mobilne aplikacije

## Operativni sustavi - iPhone vs. Android:

**iPhone (iOS):**
- **Zatvorenost ekosustava:** iOS je poznat po strogo kontroliranom ekosustavu, što pruža dosljednost i visoku sigurnost, ali može ograničavati slobodu razvoja.
- **Unaprijeđeni korisnički doživljaj:** Jednostavan i dosljedan dizajn korisničkog sučelja često je naglašen kao prednost iPhone-a.
- **Optimizacija hardvera i softvera:** Budući da Apple kontrolira i proizvodi hardver i softver, moguće je postići visoku optimizaciju i performanse.

**Android:**
- **Otvorenost ekosustava:** Android pruža veću slobodu razvoja zbog otvorenog ekosustava, omogućujući veću prilagodljivost i pristup različitim funkcijama.
- **Raznolikost uređaja:** Android operativni sustav koristi se na različitim uređajima, što može rezultirati izazovima u održavanju dosljednog korisničkog iskustva.
- **Prilagodljivost korisničkog sučelja:** Različiti proizvođači mogu prilagoditi korisničko sučelje prema vlastitim specifikacijama.





## Razvoj mobilnih aplikacija

Razvoj mobilnih aplikacija postao je ključan aspekt tehnološkog svijeta, omogućavajući korisnicima pristup raznolikim uslugama i informacijama iz udobnosti njihovih mobilnih uređaja. U ovom općenitom uvodu razmotrit ćemo ključne aspekte razvoja mobilnih aplikacija.

1. **Raznolikost Platformi:**
Mobilni ekosustavi su podijeljeni gereralno između iOS-a (za Apple uređaje) i Androida, pružajući raznolikost uređaja i operativnih sustava. Razvojni timovi često moraju prilagoditi svoj pristup kako bi zadovoljili specifičnosti svake platforme, čime se postiže najbolje moguće korisničko iskustvo.

1. **Programski Jezici:**
Različite platforme zahtijevaju upotrebu specifičnih programskih jezika. Primjerice, za iOS se često koristi Swift ili Objective-C, dok se za Android koristi Java ili Kotlin. Razvojni inženjeri moraju biti vješti u tim jezicima kako bi učinkovito razvijali aplikacije za obe platforme.

1. **Dizajn i Korisničko Iskustvo:**
Dizajn mobilnih aplikacija igra ključnu ulogu u privlačenju korisnika. Dosljednost, intuitivnost i privlačan vizualni identitet čine važan dio procesa razvoja. Sučelje se prilagođava specifičnostima svake platforme kako bi se očuvala konzistentnost.

1. **Sigurnost:**
Budući da mobilne aplikacije često obrađuju osjetljive podatke korisnika, implementacija sigurnosnih mjera je od suštinske važnosti. To uključuje enkripciju podataka, upravljanje autentifikacijom i pristupom, te zaštitu od različitih vrsta napada.

1. **Optimizacija Performansi:**
Mobilne aplikacije moraju pružiti glatko iskustvo unatoč ograničenjima resursa mobilnih uređaja. Razvojni inženjeri moraju pažljivo optimizirati performanse kako bi osigurali brzo učitavanje, nisku potrošnju baterije i odzivne korisničke interakcije.

1. **Testiranje i Održavanje:**
Testiranje je ključno tijekom cijelog ciklusa razvoja. Razvojni timovi moraju osigurati funkcionalnost na različitim uređajima, operativnim sustavima i verzijama istih. Održavanje aplikacije također uključuje pravovremeno ažuriranje i rješavanje eventualnih problema.

1. **Distribucija i Monetizacija:**
Nakon uspješnog razvoja, aplikaciju je potrebno distribuirati putem odgovarajućih trgovina aplikacija (App Store za iOS, Google Play za Android). Strategije monetizacije, poput prodaje aplikacije, oglasa ili unutaraplikacijskih kupovina, također su važan faktor.

Ovaj uvod postavlja temelje za razumijevanje ključnih elemenata razvoja mobilnih aplikacija. U sljedećim segmentima možemo detaljnije proučiti alate koji olakšavaju ovaj proces, uspoređujući njihove prednosti i izazove.

### Usporedba pristupa

![image](https://hackmd.io/_uploads/S1Gqx8186.png)



|                   | Native                    | Cross-platform                | Hybrid                         | PWA                           |
|--------------------------|---------------------------|-------------------------------|--------------------------------|-------------------------------|
| **Tehnologija**          | Platformski specifična    | Jedan koda za više platformi| Web tehnologije u okruženju nativnog koda| Web tehnologije izravno u web preglednik|
| **Distribucija**         | Trgovine aplikacija       | Trgovine aplikacija ili web    | Trgovine aplikacija ili web    | Web preglednik                |
| **Instalacija**          | Potrebna instalacija      | Može biti instalirano, ali i izravno dostupno na webu| Potrebna instalacija          | Može biti instalirano s weba  |
| **Prilagođenost platformama** | Potpuno prilagođeno      | Zahtijeva nešto prilagodbe za svaku platformu| Zahtijeva nešto prilagodbe    | Responsive, prilagođeno svim uređajima|
| **Pristup uređajima**    | Puna funkcionalnost       | Ograničen pristup nekim funkcijama, ovisi o odabranom frameworku| Pristup putem nativnih mostova| Ograničen pristup nekim funkcijama iz sigurnosnih razloga|
| **Offline podrška**      | Ovisi o aplikaciji        | Ovisi o odabranom frameworku   | Ovisi o WebView i dostupnosti resursa| Da, kroz korištenje Service Workers|
| **Performanse**          | Obično najbolje performanse| Dobre performanse, ali mogu biti nešto sporije od nativnih| Ograničene performanse u usporedbi s nativnim| Dobro optimizirane, ali ograničene |
| **Aktualizacije**        | Potrebno ažuriranje za svaku platformu| Jedinstveno ažuriranje koda za sve platforme| Ovisno o nativnom okviru| Automatske aktualizacije kroz web|
| **Troškovi razvoja**     | Visoki troškovi zbog razvoja | Smanjeni troškovi razvoja, ali može zahtijevati dodatni trud za prilagodbu| Smanjeni troškovi, ali mogući dodatni troškovi održavanja| Niski troškovi razvoja i održavanja|
| **Primjeri**             | Swift (iOS), Kotlin (Android)| Flutter, React Native, MAUI | Ionic, Apache Cordova, Capacitor               | X, Washington Post     |

- Ova tablica pruža pregled ključnih razlika između različitih pristupa razvoju mobilnih aplikacija. Važno je napomenuti da izbor pristupa ovisi o specifičnostima projekta, ciljevima i resursima na raspolaganju.

### Cross-platform razvoj mobilnih aplikacija


![image](https://hackmd.io/_uploads/S1ZJtSk8p.png)



|                | Flutter                             | React Native                       | .NET MAUI (Xamarin)                           |
|------------------------|-------------------------------------|------------------------------------|-------------------------------------|
| **Jezik programiranja** | Dart                                | JavaScript (React)                | C#                                  |
| **Arhitektura**        | Skia (rendering engine)            | JavaScript Core (rendering engine)| Skia (rendering engine)             |
| **UI komponente**      | Widgeti (sve je widget)             | Komponente (native)               | XAML komponente (native)            |
| **Performanse**        | Visoke performanse zbog kompilacije u nativni kod| Dobre performanse, ali moguće lagano usporavanje| Visoke performanse zbog kompilacije u nativni kod|
| **Popularnost**        | Rapidno raste, snažna zajednica     | Veoma popularan, velika zajednica | Nov, ali predstavljen od strane Microsofta, stjecanje popularnosti|
| **Održavanje koda**    | Jedinstveni kod za sve platforme    | Dijeljeni kod, ali s prilagodbama za svaku platformu| Dijeljeni kod, prilagođen za različite platforme|
| **Kompleksnost učenja** | Umjereno težak, ali s dobro dokumentiranom dokumentacijom| Relativno lagan za učenje, dobra dokumentacija| Ovisi o predznanju u .NET ekosustavu|
| **Alati za razvoj**    | Flutter CLI, IntelliJ IDEA, VS Code, Android Studio| React Native CLI, VS Code, Expo| VS, VS Code     |
| **Zajednica i podrška** | Raste, s podrškom od strane Googlea  | Velika i aktivna zajednica, podrška od Facebooka| Raste, podrška od Microsofta i .NET zajednice|
| **Integracija s platformama** | Bliska integracija s obje platforme (iOS, Android)| Dobra integracija s obje platforme, ali može zahtijevati dodatne module| Bliska integracija s obje platforme (iOS, Android, Windows)|

- Ova tablica pruža pregled ključnih karakteristika Fluttera, React Nativea i .NET MAUI, a odabir između njih ovisi o specifičnostima projekta, iskustvu tima i preferencijama programera.

### Senzori u mobilnim uređajima:

Ovi ali i drugi senzori koji se dodaju sa svakom novom verzijom mobilnih uređaja, pružaju bogat niz podataka koji se mogu koristiti u mobilnim aplikacijama kako bi poboljšali korisničko iskustvo i funkcionalnosti. Detaljnije informacije o njihovom korištenju mogu se pronaći u raznim programerskim resursima i dokumentacijama specifičnim za određeni senzor.

1. **Akcelerometar:**
Mjeri ubrzanje uređaja u tri dimenzije. Koristi se u igrama, praćenju koraka i orijentaciji zaslona.
2. **Žiroskop:**
Prati orijentaciju uređaja. Koristi se u igrama i aplikacijama za virtualnu stvarnost.
3. **Senzor blizine:**
Detektira koliko je uređaj udaljen od objekta. Koristi se za isključivanje zaslona tijekom poziva.
4. **Senzor svjetlosti:**
Mjeri razinu okolne svjetlosti. Koristi se za automatsko prilagođavanje svjetline zaslona.
5. **Barometar:**
Mjeri atmosferski tlak. Koristi se u aplikacijama za praćenje visine i promjena vremena.
6. **Žiroskop za rotaciju:**
Prati rotaciju uređaja u trodimenzionalnom prostoru. Koristi se u igrama i navigaciji.
7. **Senzor magnetnog polja (kompas):**
Određuje smjer prema Zemljinom magnetskom polju. Koristi se u aplikacijama za navigaciju.
8. **Senzor otiska prsta:**
Omogućava sigurno otključavanje uređaja i autorizaciju transakcija.



## Vježba korištenjem React Native Cross-platform razvojnog alata

- napravite račun na https://expo.dev/
- otvorite https://docs.expo.dev/
- odaberite **Reference** iz lijevog izbornika
- odaberite **Accelerometer**
- u gornjem desnom vrhu primjera koda kliknite na **Open in Snack**
- s desne strane odaberite web
- dešava li se štogod?
- povežite se s mobitelom


https://docs.expo.dev/versions/latest/sdk/sensors/