iOS, Android
i cross-platform aplikacije
Razvijamo mobilne aplikacije od izbora platforme i arhitekture do objave na App Store-u i Google Play-u.
Aplikacija koja radi u uslovima koje web ne poznaje
Razvoj mobilnih aplikacija obuhvata projektovanje, dizajn i razvoj aplikacija za iOS i Android, kao native ili cross-platform rešenja.
Mobilna aplikacija ima ograničenja koja web nema: radi na uređajima različitih mogućnosti, mora da funkcioniše uz slabu ili prekinutu vezu, a svaka nova verzija prolazi pregled prodavnice pre nego što stigne do korisnika.
Zato izbor platforme, arhitekture i načina objave donosimo na početku projekta. Tehnologiju biramo prema zahtevima aplikacije, a tim formiramo prema izabranom pristupu.
Tehnički list usluge
- Platforme
- iOS · Android · Cross-platform aplikacije za obe platforme iz jedne osnove koda
- Isporuke
- Dizajn ključnih ekrana u Figmi · Razvijena i testirana aplikacija · Backend i admin panel, kada su potrebni · Objava na App Store-u i Google Play-u
- Tehnološka osnova
- Native ili cross-platform, prema zahtevima aplikacije · Laravel ili Node.js za backend
- Objava
- Priprema za pregled prodavnica i podrška kroz ceo proces objave
- Posle lansiranja
- Podrška kroz HiStack portal · Nove verzije aplikacije, po dogovoru
- Model ponude
- Ponuda bez obaveze nakon konsultacija · Plaćanje u ratama za veće projekte
Šta obuhvata razvoj mobilne aplikacije
Obuhvat zavisi od toga da li aplikacija radi samostalno ili je deo šireg sistema sa sopstvenim backendom. Matrica prikazuje šta je standardni deo svakog nivoa, a šta uključujemo kada projekat to zahteva.
| Aktivnost / isporuka | Osnovna aplikacija | Aplikacija sa backendom | Kompleksna aplikacija |
|---|---|---|---|
| Definisanje i dizajn | |||
| Ciljevi, korisnici i ključni tokovi | |||
| Izbor platforme i pristupa razvoju | |||
| Dizajn ključnih ekrana u Figmi, prema smernicama platformi | |||
| Dizajn sistem i biblioteka komponenti | |||
| Razvoj aplikacije | |||
| Aplikacija za iOS i Android | |||
| Navigacija, stanje aplikacije i lokalno skladištenje | |||
| Registracija i prijava | |||
| Push obaveštenja | |||
| Rad bez internet veze i sinhronizacija | |||
| Funkcije uređaja (kamera, lokacija, biometrija) | |||
| Backend | |||
| API i baza podataka | |||
| Admin panel | |||
| Plaćanja | |||
| Ažuriranje podataka u realnom vremenu | |||
| Kvalitet i objava | |||
| Testiranje na fizičkim uređajima i emulatorima | |||
| Interno testiranje pre objave (TestFlight, Google Play) | |||
| Priprema materijala i objava u prodavnicama | |||
| Analitika i praćenje grešaka | |||
| Posle lansiranja | |||
| Podrška kroz HiStack portal | |||
| Prilagođavanje novim verzijama iOS-a i Androida | |||
| Nove funkcionalnosti kroz nove verzije | |||
Nivoi obima
Osnovna aplikacija
Bez sopstvenog backenda
Sadržaj, informacije ili alati koji rade na uređaju ili koriste postojeće servise.
Pogodno za informativne aplikacije i jednostavne alate.
Aplikacija sa backendom
Korisnički nalozi i sopstveni podaci
API, baza podataka, admin panel i push obaveštenja.
Pogodno kada aplikacija služi korisnicima vašeg poslovanja.
Kompleksna aplikacija
Napredne funkcije i integracije
Rad bez veze, plaćanja, funkcije uređaja i složena poslovna logika.
Pogodno kada je aplikacija ključni proizvod ili kanal poslovanja.
Obim određuju funkcionalnosti, a ne broj ekrana. Ponudu pripremamo nakon konsultacija, a za veće projekte moguće je plaćanje u ratama.
Native, cross-platform ili PWA
Izbor pristupa je najvažnija tehnička odluka u razvoju mobilne aplikacije. On određuje trošak razvoja i održavanja, mogućnosti aplikacije i to koliko lako prati nove verzije operativnih sistema. Matrica poredi pet pristupa prema 17 kriterijuma grupisanih u pet oblasti.
| Kriterijum | Native iOSSwift, SwiftUI | Native AndroidKotlin, Jetpack Compose | FlutterCross-platform, Dart | React NativeCross-platform, JavaScript | PWAProgresivna web aplikacija |
|---|---|---|---|---|---|
| Pokrivenost i troškovi | |||||
| Pokrivenost platformi | Samo iOS | Samo Android | iOS i Android iz jedne osnove | iOS i Android iz jedne osnove | Svaki uređaj sa pregledačem |
| Trošak razvoja za obe platforme | Dve odvojene aplikacije | Dve odvojene aplikacije | |||
| Trošak dugoročnog održavanja | Dve osnove koda | Dve osnove koda | |||
| Vreme do objave | Bez pregleda prodavnice | ||||
| Iskustvo i performanse | |||||
| Performanse | Blizu native nivoa | ||||
| Doslednost sa izgledom platforme | Sopstveno iscrtavanje komponenti | Koristi native komponente | |||
| Animacije i složeni interfejsi | Precizna kontrola iscrtavanja | ||||
| Rad bez internet veze | U okviru mogućnosti pregledača | ||||
| Pristup uređaju | |||||
| Funkcije uređaja (kamera, biometrija, senzori) | Putem dodataka ili native koda | Putem dodataka ili native koda | Ograničeno pregledačem | ||
| Push obaveštenja | Na iOS-u samo za aplikaciju dodatu na početni ekran | ||||
| Nove funkcije operativnog sistema | Dostupne odmah | Dostupne odmah | Uz kašnjenje do podrške u alatu | Uz kašnjenje do podrške u alatu | |
| Widgeti, sat i druga proširenja | Zahtevaju native kod | Zahtevaju native kod | Nisu podržani | ||
| Distribucija | |||||
| Prisustvo u prodavnicama | Instalacija iz pregledača | ||||
| Izmene bez nove verzije u prodavnici | Moguće za deo izmena, u okviru pravila prodavnica | Odmah po objavi | |||
| Rizik i održavanje | |||||
| Zavisnost od alata treće strane | Zvanični alati platforme | Zvanični alati platforme | Zavisnost od alata i dodataka | Zavisnost od alata i dodataka | Web standardi |
| Usklađivanje sa novim verzijama OS-a | Čeka se podrška alata | Čeka se podrška alata | |||
| Dostupnost biblioteka i dodataka | Veliki JavaScript ekosistem | ||||
| Primena | |||||
| Tipična primena | Aplikacije koje maksimalno koriste mogućnosti iOS-a | Aplikacije koje maksimalno koriste mogućnosti Androida | Aplikacije za obe platforme sa prilagođenim dizajnom | Aplikacije za obe platforme, posebno uz postojeći React web | Jednostavni alati i sadržaj bez potrebe za prodavnicom |
| Odgovarajući nivo obima | Sa backendomKompleksna | Sa backendomKompleksna | OsnovnaSa backendomKompleksna | OsnovnaSa backendomKompleksna | Osnovna |
NajpovoljnijeUmerenoNajmanje povoljno
Ocena izražava povoljnost za dati kriterijum. Ocene su relativne i odnose se na tipičan projekat. Za aplikaciju koja treba da postoji na obe platforme, native pristup znači dve odvojene aplikacije. Konačnu preporuku dajemo nakon analize zahteva.
Aplikacija kao deo sistema
Većina poslovnih aplikacija nije samostalna: oslanja se na backend, platformske servise za obaveštenja i prijavu i alate za praćenje grešaka. Dijagram prikazuje tipičnu arhitekturu, a tabela pristupe i tehnologije za svaki sloj.
Arhitektura sistema
01Aplikacija
iOS i Android aplikacija
Interfejs, lokalno skladištenje i keš za rad bez veze
Backend
02API
Ulazna tačka
Autentifikacija, validacija i verzije API-ja
03Logika
Laravel ili Node.js
Poslovna pravila i pozadinski poslovi
04Podaci
Baza i fajlovi
Korisnici, sadržaj i mediji
Platformski servisi
Povezani sa slojevima 01 i 03
- APNs (Apple)
- FCM (Google)
- Prijava preko Apple i Google naloga
- Kupovine u aplikaciji
Administracija i analitika
Admin panel pristupa sloju 03, analitika prikuplja podatke iz sloja 01
- Admin panel
- Analitika korišćenja
- Praćenje grešaka i padova
Tok objave nove verzije
Razvoj
Izrada i provera koda
Interno testiranje
TestFlight i Google Play testiranje
Pregled prodavnice
Provera prema pravilima prodavnice
Objava
Postepeno uvođenje kod korisnika
Pristupi i tehnologije po slojevima
Dizajn i prototip
Figma
Dizajn ključnih ekrana prema smernicama Apple Human Interface Guidelines i Material Design.
Native iOS
- Swift
- SwiftUI
Zvanični jezik i okvir za iOS, kada aplikacija treba da maksimalno iskoristi mogućnosti platforme.
Native Android
- Kotlin
- Jetpack Compose
Zvanični jezik i savremeni okvir za izradu interfejsa na Androidu.
Cross-platform
- Flutter
React Native
Jedna osnova koda za iOS i Android. React Native ima prednost kada već postoji web u React-u.
Backend
Laravel
Node.js
API, autentifikacija, poslovna logika i admin panel, zajednički za aplikaciju i eventualni web.
Verzionisanje i isporuka
GitHub
Kontrola verzija, pregled koda i probne verzije pre svakog slanja na pregled prodavnice.
Konkretne tehnologije biramo prema izabranom pristupu, a tim formiramo prema zahtevima projekta.
Katalog funkcionalnih modula
Pregled modula koje mobilne aplikacije najčešće zahtevaju. Složenost pokazuje relativan obim implementacije i direktno utiče na rok i cenu projekta.
| Modul | Šta obuhvata | Implementacija | Složenost |
|---|---|---|---|
| Korisnici i pristup | |||
| Registracija i prijava | Email prijava, prijava preko Apple i Google naloga i oporavak lozinke | Backend autentifikacija i platformski servisi | |
| Biometrijska prijava | Prijava otiskom prsta ili prepoznavanjem lica | Face ID i Touch ID, Android biometrija | |
| Komunikacija | |||
| Push obaveštenja | Ciljana obaveštenja, podešavanja po korisniku i otvaranje odgovarajućeg ekrana | APNs i FCM | |
| Obaveštenja u aplikaciji | Centar obaveštenja i oznake nepročitanog | Backend i lokalno skladištenje | |
| Chat u realnom vremenu | Razmena poruka, status isporuke i istorija razgovora | WebSocket servis | |
| Podaci | |||
| Rad bez veze i sinhronizacija | Rad bez interneta i usklađivanje podataka po povratku veze | Lokalna baza i razrešavanje konflikata | |
| Keširanje sadržaja | Brže učitavanje i prikaz poslednjih podataka bez veze | Lokalni keš | |
| Funkcije uređaja | |||
| Kamera i skeniranje | Fotografisanje, otpremanje slika i skeniranje QR kodova | Platformski API i dodaci | |
| Lokacija i mape | Prikaz na mapi, praćenje lokacije i obaveštenja po lokaciji | Platformski API, uz dozvole | |
| Duboki linkovi | Otvaranje određenog ekrana aplikacije iz linka ili emaila | Universal Links i App Links | |
| Plaćanja | |||
| Kupovine u aplikaciji i pretplate | Digitalni sadržaj i pretplate kroz sistem prodavnice | StoreKit i Google Play Billing | |
| Plaćanje proizvoda i usluga | Plaćanje fizičkih proizvoda i usluga van sistema prodavnice | Integracija platnog procesora | |
| Analitika i održavanje | |||
| Analitika korišćenja | Praćenje ključnih događaja i korišćenja funkcija | Analitički alat | |
| Praćenje grešaka i padova | Izveštaji o padovima aplikacije sa podacima o uređaju i verziji | Alat za izveštavanje o padovima | |
| Daljinska konfiguracija | Uključivanje funkcija i izmena podešavanja bez nove verzije | Servis za daljinsku konfiguraciju | |
| Lokalizacija | Više jezika i formata datuma, brojeva i valuta | Platformski mehanizmi lokalizacije | |
Ako aplikacija nudi prijavu preko servisa trećih strana, Apple-ove smernice zahtevaju i dodatnu opciju prijave koja ispunjava njihove zahteve privatnosti. Granicu između kupovine u aplikaciji i plaćanja van prodavnice određuju pravila prodavnica, koja se razlikuju po tržištima.
App Store i Google Play
Objava nije formalnost. Obe prodavnice pregledaju aplikaciju i mogu da je odbiju ili zatraže izmene. Zato zahteve prodavnica uključujemo u dizajn i razvoj od početka, a ne tek pred objavu.
| Oblast | App Store | Google Play |
|---|---|---|
| Nalozi | ||
| Nalog programera | Apple Developer Program, uz godišnju članarinu | Google Play Console, uz jednokratnu registraciju |
| Nalog organizacije | Zahteva D-U-N-S broj pravnog subjekta | Zahteva D-U-N-S broj pravnog subjekta |
| Vlasnik naloga | Preporučujemo nalog na ime vaše firme | Preporučujemo nalog na ime vaše firme |
| Testiranje pre objave | ||
| Kanali testiranja | TestFlight, za interne i eksterne testere | Interno, zatvoreno i otvoreno testiranje |
| Posebni uslovi | Verzija za eksterne testere prolazi kratak pregled | Novi lični nalozi moraju proći zatvoreno testiranje pre objave |
| Pregled i objava | ||
| Pregled aplikacije | Pregled prema App Review smernicama | Pregled prema pravilima programa Google Play |
| Postepena objava | Fazna objava ažuriranja | Postepeno uvođenje po procentu korisnika |
| Privatnost | Oznake privatnosti (App Privacy) | Odeljak o bezbednosti podataka (Data safety) |
| Digitalni sadržaj | U pravilu kupovina u aplikaciji, uz razlike po tržištima | U pravilu Google Play Billing, uz razlike po tržištima |
Nalozi programera na ime vaše firme znače da aplikacija i njeni korisnici ostaju vaši i kada se promeni izvođač. Pravila prodavnica se redovno menjaju, pa aktuelne zahteve proveravamo pre slanja svake verzije na pregled.
Parametri koje proveravamo pre objave
Mobilna aplikacija čuva podatke na uređaju koji korisnik nosi sa sobom, pa su bezbednost i privatnost važniji nego kod većine sajtova. Tamo gde postoje javno definisani standardi, oslanjamo se na njih.
| Parametar | Ciljna vrednost | Metod provere |
|---|---|---|
| Bezbednost | ||
| Referentni okvir | OWASP MASVS | Pregled ključnih rizika |
| Tajne i tokeni | Keychain na iOS-u i Keystore na Androidu, bez tajni u kodu aplikacije | Pregled koda |
| Mrežna komunikacija | HTTPS za svu komunikaciju sa backendom | Provera konfiguracije |
| Dozvole | Samo dozvole neophodne za funkcije aplikacije, uz objašnjenje korisniku | Pregled zatraženih dozvola |
| Privatnost | ||
| Lični podaci | Usklađenost sa ZZPL, a sa GDPR-om kada je primenljiv | Pregled obrade podataka |
| Prijave u prodavnicama | Tačne oznake privatnosti i podaci o bezbednosti | Pregled pre slanja na pregled |
| Pristupačnost | ||
| Čitači ekrana | Podrška za VoiceOver i TalkBack | Ručni test na uređaju |
| Veličina teksta | Podrška za sistemsku veličinu teksta | Test na uređaju |
| Kontrast teksta | Najmanje 4,5:1 za osnovni tekst | Provera kontrasta |
| Kompatibilnost | ||
| Verzije operativnog sistema | Minimalne verzije iOS-a i Androida definišu se u ponudi | Testiranje na podržanim verzijama |
| Uređaji | Telefoni različitih veličina ekrana, tableti kada su u obuhvatu | Fizički uređaji i emulatori |
| Slaba ili prekinuta veza | Jasno stanje greške i mogućnost ponovnog pokušaja | Test sa ograničenom mrežom |
| Kvalitet isporuke | ||
| Verzionisanje i pregled koda | Sav kod u repozitorijumu, izmene se pregledaju pre spajanja | GitHub |
| Probne verzije | Svaka verzija prolazi interno testiranje pre slanja na pregled | TestFlight i Google Play testiranje |
OWASP MASVS: Mobile Application Security Verification Standard, javni standard za bezbednost mobilnih aplikacija. ZZPL: Zakon o zaštiti podataka o ličnosti Republike Srbije.
Proces rada po fazama
Svaka faza ima jasnu isporuku i kontrolnu tačku. Tokom razvoja dobijate probne verzije koje instalirate na sopstveni uređaj, tako da aplikaciju isprobavate dok nastaje. Detaljan vodič kroz saradnju dostupan je na stranici Proces saradnje.
| Faza | Aktivnosti | Isporuka | Vaše učešće | Kontrolna tačka |
|---|---|---|---|---|
| 01Definisanje i izbor platforme | Ciljevi, korisnici i ključni tokovi, izbor pristupa i minimalnih verzija operativnih sistema | Dogovoren obim i izbor platforme | Materijali, informacije o korisnicima i poslovnim pravilima | Odobrenje obima i ponude |
| 02Dizajn | Dizajn ključnih ekrana u Figmi, prema smernicama iOS i Android platformi | Odobren dizajn | Povratne informacije i usmeravanje dizajna | Odobrenje dizajna |
| 03Razvoj u etapama | Razvoj aplikacije i backenda, uz probne verzije nakon svake etape | Probna verzija za instalaciju | Testiranje na sopstvenom uređaju | Prihvatanje etape |
| 04Testiranje i objava | Testiranje na uređajima, priprema opisa i snimaka ekrana, slanje na pregled prodavnica | Aplikacija objavljena u prodavnicama | Nalozi programera i materijali za prodavnice | Odobrenje za slanje na pregled |
| 05Podrška i nove verzije | Podrška kroz HiStack portal i nove verzije, po dogovoru | Praćenje prijava kroz portal | Prijava problema uz jedinstveni ID | Kontinuirano |