Razvoj mobilnih aplikacija je mnogo više od toga da web stranicu stavite u ikonicu na početnom ekranu. Dobra aplikacija se otvara odmah, radi i na slabom signalu, šalje pravu notifikaciju u pravi trenutak, prolazi Appleovu i Googleovu recenziju iz prvog pokušaja i nastavlja da radi i poslije sljedećeg izdanja iOS-a i Androida. Da bi sve to stajalo na mjestu, treba razmišljati o proizvodu, solidno napisati frontend i izgraditi backend koji podnosi klijente koji su offline, zastarjeli ili na drugom kraju svijeta.
Sadržaj
U CodeWizu razvoj mobilnih aplikacija pokriva cross-platform aplikacije u React Nativeu i Flutteru, nativne aplikacije u Swiftu i Kotlinu kada proizvod to traži, te API-je, baze podataka i infrastrukturu iza njih. Pošto smo full-stack tim, aplikacija, backend i deployment pipeline nastaju zajedno, a ne tako što ih tri različita dobavljača naknadno spajaju.
Usluga razvoja mobilnih aplikacija namijenjena je startupima koji provjeravaju proizvod, kompanijama koje uz postojeći web shop ili platformu žele aplikaciju za kupce, i timovima kojima treba interna aplikacija za teren, dostavu ili inspekcije. Ako već imate aplikaciju koja puca, kasni ili stalno biva odbijena na recenziji, možemo je preuzeti, stabilizovati i nastaviti dalje.

React Native i Flutter aplikacije: jedan kod za iOS i Android
Cross-platform frameworki omogućavaju jednom timu da iz jedne baze koda objavi aplikaciju u obje prodavnice. Za većinu poslovnih aplikacija – kataloge, rezervacije, programe lojalnosti, kontrolne table, marketplace i alate za teren – to je najisplativiji put, jer se funkcionalnosti, ispravke i testovi pišu jednom.
React Native uz Expo
React Native crta prave nativne komponente interfejsa i piše se u TypeScriptu, pa se mogu iskoristiti web programeri i postojeći React kod. Otkad je New Architecture (Fabric renderer, TurboModules i JSI) postala podrazumijevana, staro usko grlo bridgea više ne postoji, a nativni moduli se pozivaju brže. React Native aplikacije gradimo na Expo platformi, koja daje EAS Build za buildove u oblaku i potpisivanje, EAS Submit za slanje u prodavnice i EAS Update za over-the-air ispravke JavaScript sloja, bez čekanja na novo izdanje u prodavnici.
Flutter
Flutter koristi Dart i sam crta svaki piksel preko Impeller rendering enginea. Zato interfejs izgleda isto na svakom uređaju, a jako animirani ili posebno brendirani ekrani postaju jednostavniji. Flutter je dobar izbor kada je dizajn daleko od podrazumijevanog izgleda platforme, kada želite i desktop ili ugrađene mete, ili kada vaš tim već zna Dart.
Šta dobijate
- Bazu koda u TypeScriptu ili Dartu sa jasnom strukturom: navigacija, upravljanje stanjem (Zustand, TanStack Query, Riverpod ili Bloc), sloj za API i design tokeni.
- Nativne detalje tamo gdje su bitni: sistemski share sheet, haptika, biometrijska prijava, deep linkovi i widgeti.
- Automatske testove (Jest, React Native Testing Library, Flutter widget testovi, Maestro za end-to-end tokove) koji rade u CI-ju.
- Izvještavanje o padovima i praćenje performansi preko Sentryja ili Firebase Crashlyticsa, od prvog builda.
Nativni iOS i Android razvoj u Swiftu i Kotlinu
Nativni razvoj znači dvije baze koda: Swift sa SwiftUI na iOS-u i Kotlin sa Jetpack Composeom na Androidu. Košta više, ali je i dalje pravi odgovor u nekoliko situacija:
- Dubok pristup hardveru: Bluetooth Low Energy uređaji, NFC, lokacija u pozadini, obrada kamere i zvuka.
- Proširenja platforme kao što su Apple Watch aplikacije, widgeti, App Clips, CarPlay, Android Auto ili Wear OS.
- Aplikacije kod kojih je bitna svaka milisekunda pokretanja i svaki kadar animacije.
- Proizvodi kod kojih je izgled i osjećaj platforme prodajna prednost, a nove mogućnosti operativnog sistema treba uvesti istog dana.
Postoji i srednji put: Kotlin Multiplatform dijeli poslovnu logiku između iOS-a i Androida, a interfejs ostaje potpuno nativan. Postojeća nativna aplikacija može ugraditi React Native ili Flutter ekrane za nove funkcionalnosti. Pišemo i nativne module za cross-platform aplikacije kada ne postoji biblioteka za konkretan SDK ili uređaj.
Poređenje opcija za razvoj mobilnih aplikacija
Ne postoji framework koji je najbolji za sve. Tabela ispod sažima kompromise o kojima razgovaramo sa klijentima prije nego što napišemo ijednu liniju koda:
| Pristup | Jezik | Dijeljenje koda | Performanse | Najbolje za | Na šta paziti |
|---|---|---|---|---|---|
| React Native (Expo) | TypeScript | Visoko, uz ponovnu upotrebu web logike | Blizu nativnih za uobičajene poslovne aplikacije | Timove sa React znanjem i aplikacije koje se brzo mijenjaju | Kvalitet nativnih biblioteka trećih strana varira |
| Flutter | Dart | Vrlo visoko, uključujući UI | Blizu nativnih, glatke prilagođene animacije | Jako brendirani UI i više platformi | UI ne prati podrazumijevani izgled platforme sam od sebe |
| Nativno (Swift, Kotlin) | Swift, Kotlin | Nema (dvije baze koda) | Najbolje moguće | Aplikacije vezane za hardver i proširenja platforme | Otprilike dvostruko više posla za funkcionalnosti i testove |
| Kotlin Multiplatform | Kotlin, Swift za iOS UI | Dijeljena poslovna logika | Nativni UI | Nativne timove koji žele manje dupliranja | Manji ekosistem, iOS alati još sazrijevaju |
| Progressive Web App | JavaScript | Dijeljeno sa web stranicom | Dobre, uz ograničene API-je uređaja | Sadržaj i jednostavne alate bez prisustva u prodavnici | Ograničen rad u pozadini, posebno na iOS-u |
Za novu poslovnu aplikaciju najčešće preporučujemo React Native uz Expo, osim kada dizajn, hardver ili vaš postojeći tim jasno vode u drugom pravcu.
Objava u App Storeu i Google Playu bez iznenađenja
Mnogi koji prvi put objavljuju aplikaciju prekasno otkriju da je objava projekat za sebe. Mi vodimo cijeli proces i naloge otvaramo na ime vaše kompanije, tako da vi posjedujete listing, ključeve za potpisivanje i recenzije.
Apple App Store
- Članstvo u Apple Developer Programu (99 USD godišnje) i, za kompanije, D-U-N-S broj za organizacioni nalog.
- Oznake privatnosti (privacy nutrition labels), privacy manifest za aplikacije i SDK-ove koji koriste osjetljive API-je, te brisanje naloga unutar aplikacije ako korisnici mogu da otvore nalog.
- Beta testiranje preko TestFlighta, zatim recenzija prema App Store Review Guidelines. Većina recenzija se završi za dan-dva. Odbijanja se najčešće tiču nedostajućih podataka za prijavu recenzenta, nedovršenih funkcionalnosti ili digitalne robe koja se prodaje mimo in-app purchasea.
Google Play
- Jednokratna registracija programera od 25 USD, provjera identiteta i popunjen Data safety obrazac.
- Novi lični nalozi programera moraju odraditi zatvoreni test sa najmanje 12 testera tokom 14 dana prije pristupa produkciji. Organizacioni nalozi su izuzeti.
- Android App Bundle potpisan preko Play App Signinga, target API nivo koji Google podiže svake godine, i postepeno puštanje koje kreće od malog procenta korisnika.
Listing u prodavnici i upravljanje izdanjima
Pripremamo snimke ekrana za svaku traženu veličinu uređaja, opise sa ključnim riječima (app store optimizacija), lokalizovane listinge i napomene uz izdanje. CI šalje buildove kroz interni, beta i produkcijski kanal preko Fastlanea ili EAS Submita.
Mobilni backend i API-ji napravljeni za aplikacije
Mobilni backend ima zahtjeve koje backend web stranice često nema. Stare verzije aplikacije ostaju instalirane mjesecima, mreža prekine zahtjev na pola, a svaki ekran treba da se učita uz što manje krugova do servera. Mobilne backende gradimo u Laravelu ili Node.js-u, na PostgreSQL-u ili MySQL-u, uz Redis za keširanje i redove.
- Verzionisani API-ji: REST ili GraphQL endpointi koji ostaju unazad kompatibilni, plus provjera minimalne verzije koja može zamoliti korisnika da ažurira aplikaciju kada stari build mora da se povuče.
- Autentifikacija: OAuth 2.0 sa PKCE, kratkotrajni access tokeni i refresh tokeni u iOS Keychainu ili Android Keystoreu, te Sign in with Apple i Google tamo gdje olakšavaju registraciju.
- Odgovori krojeni za ekrane: paginacija, izbor polja i promjena veličine slika preko CDN-a, da lista proizvoda ne skida fotografije u desktop veličini.
- Zaštita: rate limiting, validacija zahtjeva i otkrivanje zloupotrebe – isti principi kao u našem vodiču za API rate limiting.
- Plaćanja: Apple i Google in-app purchase za digitalnu robu, te Stripe ili PayPal za fizičku robu i usluge, po istoj praksi kao naš rad na integraciji payment gatewaya.
Firebase ili Supabase mogu ubrzati MVP i koristimo ih kada odgovaraju. Kada su poslovna pravila složena, kada treba povezati postojeće sisteme ili kada podaci moraju ostati u određenoj zemlji, prilagođeni API je vremenom obično jeftiniji i fleksibilniji.

Push notifikacije i offline sync na koji se korisnik može osloniti
Push notifikacije koje ljudi ostave uključene
Svaka notifikacija ide preko Apple Push Notification service (APNs) na iOS-u ili Firebase Cloud Messaginga (FCM) na Androidu. I iOS i, od Androida 13, Android traže dozvolu korisnika, pa je tražimo u trenutku koji ima smisla, a ne na prvom pokretanju. Na iOS-u razmatramo i provisional notifikacije. Tipična FCM HTTP v1 poruka nosi i vidljivu notifikaciju i podatke za deep link:
{
"message": {
"token": "DEVICE_TOKEN",
"notification": { "title": "Order shipped", "body": "Your order #1042 is on its way" },
"data": { "type": "order", "orderId": "1042" },
"android": { "priority": "high", "notification": { "channel_id": "orders" } },
"apns": { "payload": { "aps": { "sound": "default", "badge": 1 } } }
}
}Na backendu čuvamo tokene uređaja po korisniku i platformi, nevažeće automatski uklanjamo, slanje ide kroz red da kampanje nikada ne blokiraju API, a korisnik bira kategorije (narudžbe, poruke, promocije).
Offline-first podaci i sinhronizacija
Offline podrška je odluka u dizajnu, a ne biblioteka koja se doda na kraju. Na uređaju držimo lokalnu bazu (SQLite preko Expo SQLite, op-sqlite ili Drift, WatermelonDB, Room ili SwiftData) i mrežu tretiramo kao način sinhronizacije, a ne kao uslov da se podaci uopšte prikažu. Izmjene idu u outbox i šalju se uz idempotency ključ, tako da ponovljeni zahtjev nikada ne pravi duplikat:
async function flushOutbox() {
for (const job of await db.outbox.all()) {
const res = await fetch(`${API_URL}/sync`, {
method: "POST",
headers: { "Content-Type": "application/json", "Idempotency-Key": job.id },
body: JSON.stringify(job.payload),
});
if (res.ok) await db.outbox.remove(job.id);
else if (res.status === 409) await resolveConflict(job, await res.json());
else break;
}
}Konflikte rješavamo pravilima dogovorenim sa vama: posljednji upis pobjeđuje za jednostavna polja, server je mjerodavan za cijene i zalihe, a za zajedničke podatke ide spajanje. Sinhronizacija u pozadini ide preko WorkManagera na Androidu i BGTaskSchedulera na iOS-u. Sync engine poput PowerSynca je opcija kada je model podataka velik.
Sigurnost mobilne aplikacije
Binarni fajl aplikacije je u rukama svakog korisnika, pa i onih radoznalih. Kao kontrolnu listu pratimo OWASP Mobile Application Security Verification Standard (MASVS):
- Nema API tajni u paketu aplikacije – sve što je u binarnom fajlu može se izvući, pa osjetljive operacije ostaju na serveru.
- Tokeni u sigurnom skladištu, TLS svuda, a certificate pinning za aplikacije visokog rizika kao što su finansije ili zdravstvo.
- Play Integrity API i Apple App Attest da automatska zloupotreba vašeg API-ja bude teža.
- Obfuskacija preko R8 na Androidu, skeniranje zavisnosti u CI-ju i minimalne dozvole, svaka obrazložena u listingu prodavnice.
Česte greške u mobilnim aplikacijama koje ispravljamo
- Traženje dozvola za notifikacije, lokaciju i praćenje na prvom pokretanju, prije nego što korisnik vidi bilo kakvu vrijednost.
- API-ji koji lome stare verzije aplikacije, pa korisnici koji nisu ažurirali odjednom vide greške.
- Nema izvještaja o padovima ni analitike, pa se problemi otkrivaju kroz recenzije sa jednom zvjezdicom.
- Ključevi za potpisivanje i nalozi prodavnice na ime bivšeg frilansera, umjesto na kompaniju.
- Učitavanje slika u punoj veličini i lista bez paginacije, što troši bateriju i mobilne podatke.
- Testiranje samo na najnovijem vrhunskom telefonu, nikada na starijem Androidu srednje klase.
Razvoj mobilnih aplikacija: šta utječe na cijenu
Procjenu dajemo poslije kratke faze upoznavanja, a ne samo na osnovu liste funkcionalnosti. Glavni faktori su:
- Broj ekrana, uloga korisnika i tokova, te koliko je dizajn prilagođen.
- Cross-platform ili nativno, i da li su u obimu tableti, satovi ili widgeti.
- Da li backend već postoji ili ga treba izgraditi, i koji sistemi (ERP, CRM, provajderi plaćanja) moraju biti povezani.
- Zahtjevi za offline rad i funkcionalnosti u realnom vremenu, kao što su chat ili praćenje uživo.
- Potrebe za sigurnošću i usklađenošću, te nivo održavanja poslije objave.
Aplikacije zapravo nikada nisu gotove: Apple i Google svake godine izdaju velika izdanja operativnog sistema, a zahtjevi prodavnica se mijenjaju zajedno sa njima. Održavanje planiramo od prvog dana, a naš pristup vrhunskom razvoju bez vrhunskih cijena drži to održivim.

Kako radimo
- Upoznavanje: razjašnjavamo korisnike, glavne tokove, poslovne ciljeve i sisteme na koje se aplikacija mora povezati, i preporučujemo framework.
- Dizajn i prototip: wireframeovi i prototip na koji se može kliknuti, koji možete isprobati na svom telefonu prije nego što krene razvoj.
- Izgradnja: razvoj u kratkim iteracijama, uz redovne TestFlight i Play interne buildove, zajedno sa backendom i API-jima.
- Testiranje: automatski testovi, end-to-end tokovi u Maestru i ručno testiranje na pravim iOS i Android uređajima, uključujući starije modele.
- Objava: listing u prodavnici, slanje na recenziju i postepeno puštanje uz praćenje padova i performansi.
- Podrška: ažuriranja operativnog sistema i SDK-ova, promjene zahtjeva prodavnice, nove funkcionalnosti i over-the-air ispravke tamo gdje su dozvoljene.
Zašto CodeWiz
- Aplikacija i backend u jednom timu: gradimo mobilnu aplikaciju, API, bazu podataka i servere, tako da se ništa ne izgubi između dobavljača.
- Iskren izbor tehnologije: React Native, Flutter, nativno ili čak PWA – preporučujemo ono što odgovara vašem proizvodu, a ne ono što nama slučajno više leži.
- Open-source na prvom mjestu: Expo, Laravel, Node.js i PostgreSQL vas ne vežu za dobavljača, a vi posjedujete sav kod, naloge i ključeve.
- Performanse i sigurnost od početka: isti tim koji web stranice dovozi do 100/100 na PageSpeedu i ojačava servere radi i na vašoj aplikaciji.
- Poštene cijene: vrhunski razvoj bez vrhunskih cijena, iz Banje Luke, na daljinu sa klijentima lokalno i međunarodno – više pročitajte o CodeWizu.
Često postavljana pitanja
Koliko košta razvoj mobilnih aplikacija?
Zavisi od broja funkcionalnosti, dizajna, backenda i integracija. Fokusirani MVP sa nekoliko glavnih ekrana je sasvim drugi projekat od marketplacea sa plaćanjima, chatom i offline režimom. Poslije upoznavanja dajemo jasnu procjenu, raščlanjenu po funkcionalnostima, da možete odlučiti šta ulazi u prvo izdanje.
Koliko traje izrada aplikacije?
Fokusirani MVP obično traje nekoliko mjeseci od upoznavanja do objave u prodavnici, dok se veći proizvodi isporučuju u fazama. Sama recenzija prodavnice je brza, ali novi lični Google Play nalog dodaje period zatvorenog testiranja.
Da li izabrati React Native ili Flutter?
Oba su zrela i spremna za produkciju. React Native odgovara timovima sa JavaScript ili React iskustvom i aplikacijama koje dijele logiku sa web platformom. Flutter odgovara jako prilagođenim interfejsima bogatim animacijama. Za većinu poslovnih aplikacija oba rade dobro, a kompromise objašnjavamo na vašem konkretnom slučaju.
Da li mi treba nativna aplikacija ili je dovoljan PWA?
Ako vam treba prisustvo u prodavnici, pouzdane push notifikacije na iOS-u, zadaci u pozadini ili mogućnosti uređaja kao što je Bluetooth, bolji izbor je nativna ili cross-platform aplikacija. Za sadržaj i jednostavne alate, progressive web app može biti jeftiniji i brži za objavu.
Ko je vlasnik aplikacije i izvornog koda?
Vlasnik ste vi. Objavljujemo pod vašim nalozima programera, predajemo repozitorijum, ključeve za potpisivanje i dokumentaciju, a vi možete nastaviti sa nama ili sa bilo kojim drugim timom.
Možete li preuzeti postojeću aplikaciju?
Da. Krećemo od audita koda i infrastrukture, ispravljamo padove i zastarjele zavisnosti, ažuriramo aplikaciju na trenutne zahtjeve prodavnice, a zatim nastavljamo sa novim funkcionalnostima.
Spremni da izgradite mobilnu aplikaciju?
Recite nam šta aplikacija treba da radi i ko će je koristiti, a mi ćemo predložiti tehnologiju, obim i rok. Javite nam se da razgovaramo o ideji, ili pogledajte sve naše usluge razvoja.