Top Banner
22

Kako Programirati Za Android 1

May 11, 2017

Download

Documents

bosnianmind
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Kako Programirati Za Android 1

To je tek jedan od izazova koji stoje ispred razvojnih inzenjera koji se upustaju u razvoj mobilnih aplikacija Namjerno kazemo rashyzvojni inzenjer umjesto programer jer iako je programiranje sastavni dio razvijanja aplikacije cijeli taj proces zahtjeva daleko vise vjestina i drugih tehnickih znanja

Upravo je to ono sto totaine pocetnike one koji nemaju bas nikakvog iskustva u programiranju nerijetko odbija jer ne samo da ee se morati upustlti u ucenje proshygramskih jezika i programiranja kao takvog nego ee morati poceti usvajati za pocetak apstraktne koncepte te brojne druge tehshynoloske i manje tehnoloske vjdtine Sve to nairne sacinjava profesionalnog razvojnog inzenjera mobilnih aplikacija ali i razlog zashysto iza najuspjdnijih aplikacija najcesee ne stoji individualac (iako ima i mnogo takvih primjera) nego cijeU tim koji ne sacinjavaju sarno programeri nego I dlzajneri poslovni stratezi i svi oni koji mogu nekako doprinljeshyti razvoju i kasnijem sazrijevanju aplikacije

Razvoj je sacinjen od izbora No sto zapravo znaci razvijat aplikacije za

mobilne platforme Prije svega kombinirati viSe razlicitih tehnologija Poznavanje bashyrem jednog programskog jezika svakako je preduvjet no to ne znaci nuzno da to mora

1middotmiddotlIp~~lI 13itltt1[j~1Mt1 iI~~ petb~ (QIII lt~rrtw1utdf

~(GM~d~11 i+Ppor-tjltU~t ~U ~It 1nMtUltoUfftionl

middot~middotR~~~$0~middotO~middotI~~X i C- 7

f3e amp ~-- = egt 0

m (omtqmp~centWjt it e NLoinAdigt1tf

~+ ~hh ~IIdIt)-d ~~jItio(I~utMMl)gt~~

IddIMt~~tlt~

i lti _~-o_l g

L_--_raquo---

~~TIgttllt ~amp -

lit_ ThlJpmdltilt1~~J~J[1TCOT(MfGEFnclWTP

allQI hid~~(~Et~ItoIIwmfll ~ shy

__ _---_ -__shy

IlkiJljfljJ~~~lilliJ~j ~

bull reg~~J ~~~iiii~_~niOi(iiiii)Irm~~ _j1ijiI~~~_~ igt ~

1etvNttrae

Za programiranje apUkacija za Android nije potrebno mnogo - racunalo s Windowsima linuxom ili Mac OS-om X te viseplatformsko razvojno suceLje Eclipse s dodatkom ADT i Android SDK-om

74 I BUG STUDENI 2013

biti Java Hi Objective-Co Svijet razvoja doista je sacinjen od izbora i to je ono sto one koji tek ulaze u taj svijet nerijetko zbunjuje Ne sarno da je moguee mobilne aplikacije raditi HTML-om CSS-om i JavaScriptom te drugim tehnologijama nego se cak moguee osioniti na rjesenja kOja omogueuju izradu aplikacija bez programiranja PreviSe izbora za one bez iskustva i cvrste tehnicke pozadine nije dobro kao ni premalo izbora

Istodobno kako su razvojne platforme iznimno dinamicne a tehnoloski napredak kako operacijskih sustava tako i uredaja iznimno brz tdko je bit jednako vjest na svim platformama Stoga se pred buduee razvojne inzenJere postavija osnovni izbor za koju platformu raditi Dati jednoznacan odgovor na to pitanje iznimno je nezahvalshyno Ipak postoje odredene smjernice kOje takvu odluku cine laksom Nairne buduei da Android kao programski jezik koristi Javu onima bez Iskustva u programiranju kao i onima koji ga nesto imaju ulazak u programski sVijet trebao bi biti nesto Iaksi nego kada bi se suocavali s jezikom Objecshytive-C koji odlikuju odredene specificnosti I barem isprva tde citljivu sintaksu (iako se i 0 tome moze diskutlrati)

Medutlm tehnoloska podloga najcesee nema veze s odabirom platforme za koju

Za razvoj iPhone aplikacija neophodno je Mac racunalo pa se mnogi odlucuju za Apple Mac Mini jer se za cijenu od pet i pol do sedam tisuca kuna moze dobiti prilicno snaino racunalo idealno za razvoj

ee se razvijati to je prije - zarada Dileme u ovom slucaju doista nema ako se zeU zaraditi od prodaje aplikacija sarno je jedna platforma kOja to omogueuje iOS Iako se i s aplikacijama za Android moze nesto zaraditl velik dio korisnika smartfona s Androidom jednostavno nije spreman platiti aplikaciju Korisnici iPhonea i iPada najcesee ne razmiddot misljaju mnogo 0 tome nego jednostavno izdvoje pokoju sustavu novcanicu kako bi kupili aplikaciju iIi igru koja 1m se svida Osim toga trenutno na Google Playu i nlje moguee iz Hrvatske prodavati aplikacije Da bi se na njima zaradilo moraju prikazivati oglase - iako postoje i druge metode No to je vee druga tema

Vjdtine kOje bi svaki ozbiljan razvojni inzenjer mobilnih aplikacija trebao imati mogu se svrstati u cetiri kategorije (valja samo imati na umu da se strucnjaci s tim vjestinama mogu i outsourceati) S jedne je strane tu sposobnost izrade intuitivnib graflckih sucelja Stilsko oblikovanje moze se prepustiti dizajnerima no dobro poznamiddot vanje usability koncepata (UX User eXpemiddot rience) pogotovo za mobilne platforme neizbjezno je Opeenito tehnicko iskustvc I poznavanje racunalstva rad s bazama podataka i upravljanje njima upravljanje memorijom sigurnost te interakcija s har dverom takoder su vjestine kOje itekakc doprinose razvoju Th se ukljucuje i dobrc poznavanje programskih jezika (Java Objective-C C++ JavaScript HTML5) te dubinsko poznavanje platformskih SDK-ova (Software Development Kit) Konacno tu

RAlVIJANJE APLIKACIJA BEl PROGRAMIRANJA

lako je za stvaranje nativnih i profesioshynalnih aplikacija ipak potrebno zavrnuti rukave posegnuti za preporucenim razvoj nim suce[jem te se upustiti u puni razvojni proces aplikacije je moguce izradivati i bez programiranja Da dobro ste procitali mobilne je apUkacije moguce izradivati ada ne napisete prakticki ni Uniju koda Doduse ne treba ocekivati cuda jer su takva rjesenje po svojoj prirodi prilicno ogranicena (vecinom se sve svodi na premiddot zentiranje podataka) i mogu posluziti kao dodatna potvrda da je jed ina puna slobod1 u razvoju moguca kada pred sobom imate punokrvno razvojno sucelje Ipak radoshyznalost mozete uta ziti sacicom najpopu- larnijih servisa - a diljem Interneta moze Ih se pronaci neobicno mnogo

Kako programirati za Android iii iOS

ta cbull

lako Android ima yeti dio trzisnog kolaca zarada od Za pocetak to nije nuzno no ako se pocnete razvojem baviti profesionalno bit te potrebni i aplikacija veea je s Appleovom platformom pa se fizicki uredaji na kojima tete moei testirati aplikacije (unatoc simulatorima i emulatorima) mnogi odlucuju razvijati upravo za nju

su i osnovne poslovne strategije jer ako budete nastupali individualno trebat cete napraviti i jasnu marketinsku strategiju te se potruditi da aplikacija na kojoj zelite zaraditi bude videna

Tema za pocetnike Drugim rijeCima postaje jasno da je razvoj

mobilnih aplikacija iznimno opsezno podshyrucje a jednom kada se doista u njega i upushystite to postane naglaseno jasno Srecom za sam pocetak programiranja nije potrebno mnogo U slucajll Androida dovoljno je neko racunalo na kojemu se nalaze bilo Windows Linux iii Mac as x Eclipse s prosirenjem ADT i Android SDK-om te malo volje za

Mobile App Maker ~lgt ~~U ~~q -

f~X~middot~~V~

iiiHfiitMM

Rijec je 0 domacem servisu koji se orijentira na inozemno triiSte Odlicno je koncipiran i doista omogueava relativno lagan razvoj mobilnih aplikacija za iOS i Android Za razvoj tete morati platati mjesecnu naknadu dok je u besplatnoj inacici mogute izradivati HTMLS aplikacije Svejedno oni koji ne iele investirati u programersko znanje mogu se posluziti ovim servisom kako bi ostvarili neku od svojih zamishysU Zapravo teie eete ostvariti sve svoje zamishysli ali moei cete napraviti klasicnu apUkaciju za prezentaciju svoje tvrtke ShoutEm je dobro potkovan pa omogueuje kreiranje viSe tipova aplikacija ali kako je vee istaknuto ne treba oeekivati cuda jer je zapravo rijee 0 konceptushyalno slicnim rjesenjima

Web wwwshoutemcom

citanje vrlo opsezne i dobro koncipirane dokumentacije te vodfca na Googleovu porshytalu za razvojne inzenjere U slueaju izrade apHkacije za iOS obavezno je potreban Mac instaliran Xcode koji se dobiva besplatno i nalazi se na App Storeu te pracenje jednako tako solidne dokumentacije na iOS Deveshyloper portalu Prvi koraci ne bi trebali biti preteski a sto vise budete razvijali tim ce stvari postajati jasnije

SHeno je koncipirana i ova tema koja je prije svega namijenjena onima koji nemaju iskustva u programiraju iIi imaju tek neke osnove Naime ciIj nije bio napraviti klasicshynu skolu programiranja To bi uostalom na ogranieenom broju stranica bilo nemoguce

- wr -~ bullbull lt

_MhiP

AppArchitect AppArchitect je jos jedna platforma za kreiranje kako sami autori kazu prekrasnih mobilnih aplikacija Doista AppArchitect lijeshypo izgleda omogucuje iznimno jednostavnu izradu aplikacija bez tipkanja programskog koda i sve se svodi na povlacenje elemenata Zapravo dobiva se osjeeaj kao da se radi prezentacija u PowerPointu no u konacnici se umjesto prezentacije dobiva aplikacija 1 to nativna Zasad je moguee izradivati aplikacije za iOS a dok je u beti servis je besplatan i tako ee ostati do veljaee iduee godine kada se namjerava poceti s naplatom Cijene nisu forshymirane no procjena je da bi koristenje servisa moglo stajati 40 dolara mjesecno za osnovni paket i 100 dolara za profesionalni paket

Web wwwapparchitectcom

Stoga se tema nece baviti detaljima kao sto su razlike izmedu programskih jezika ni programskim konceptima opcenito No zato ce ponuditi izvore kako ih se i gdje moze savladati i nauciti eilj je ove teme pruZiti uvid u to sto je potrebno kako bi se pocelo programirati za mobilne platforme te ponuditi korisne informacije i konaeno demonstrirati kako je to napraviti prvu aplishykaciju Drugim rijecima pomoCi u prvim koracima svima koji se po prvi put susrecu s programiranjem za mobilne platforme Stoga zelite Ii da se pocnete baviti razvojem aplikacija a ne znate odakle biste poceU ovo je tema koja bi yam trebala pomoci da krenete na pravi put ll

GameSalad Ako biste umjesto klasicnih aplikacija radije razvijali mobilne igre i pritom biste rado izbjegli programiranje onda je GameSalad nesto sto biste mogli isprobati Nije rijec 0 online servisu vee eete morati viseplatformski alat za izradu mobilnih igara preuzeti na raeunalo i ipak ponesto zavrnuti rukave kako biste ovladalinacinom na koji GameSalad radi Igre je doista mogute napraviti ali bas kao i kod svih drugih generiekih rjesenja i aplikacija koje zapravo rade na principu predlozaka nemojte oeekivati cuda

Web wwwgamesaladcom

2013 STUDENI BUG 115

UCENJE

Svijet razvojnih inzenjera ispunjen je neprestanim ucenjem jer je svijet mobilnog (i klasicnog)

programiranja iznimno dinamican Stovise jednom napisane metode nece uvijek vrijediti jer se i Sam

programski jezik razvija i mijenja No da bi se uopce zapocelo s programiranjem potrebno je

svladati osnove a tek onda svladavati specificnosti svake platforme i jezika s kojima se suocavate

~dukqltija lJcenje11strazlVanJe

N auciti programirati i zatim se time doista i baviti zivotni je poziv bas kao i brojna druga zanimanja Danas

nikada nije bilo Iakse uCiti programirati i to ne samo zahvaljujuCi golemom broju edukativnih materijala koji se mogu proshynaCi diljem Interneta te brojnim forumima na kojima iskusni programeri i oni koji tek pocinju mogu raspravljati 0 temama kOje ih muce i ponuditi rjesenja nego i cinjenkom da su razvojne okoline prilicno uznapreshydovale pa razvoj cine daleko laksim SVijet programiranja nikad nije bio zanimljiviji ali ni opsezniji

Ono s cime se programeri-pocetnici kojima je ova tema i namijenjena obicno suocavaju jest potreba za svladavanjem samih osnova Krenuti u svijet programiranja nije lako i kao i u brojniro drugim djelatnostima nekima ce Zivot razvojnog inzenjera daleko vise odgovashyrati nego drugima Koncepti kOje treba svlashydati nekima ce biti neshvatijivi nekima ce se upornost isplatiti dok ce drugi kroz taj svijet proIaziti elegantnije i bezbolnije No u koju god skupinu pripadali jedna je od najvaznijih odlika razvojnog inzenjera upornost i velika stvaraIacka zelja zbog kOje neee odustati Cak i kada rezultati naizgled izostanu ne treba posustati jer ee rezultati neizostavno postati vidljivi iako se to u nekom trenutku ne cini vjerojatnim

Koji je najbolji naCin za ucenje programicashynja vrlo je individualno Medutim ucenje i istrazivanje sastavni su dio tog puta a razvojshyni inzenjeri neprestano moraju iznova uciti - cak i one vee stecene vjestine jer je razvoj jezika prilicno dinamican pogotovo sto se tice mobil nih platformi Za razvoj aplikacija nije dovoljno nauciti tek osnovne programske koncepte i jedan jezik Stovise programski je jezik tu zapravo najmanje bitan Vjestine kOje se traze mnogobrojne su pa vee i samo to predsravlja velik izazov no ako se steknu kvashylitetni temelji sustinski razumiju podatkovne i kontrolne strukture stvari ee biti sve lakse sa svakim novim korakom

76 I BUG STUDEM 2013

Uciti je moguce na nekoliko naCina studiranjem pohadanjem tecajeva mukotrpnim citanjem knjiga i

brojnih tutorijala te kombinacijom svega spomenutog

Java ili Objective-C Programski jezici (ukljushy

cujuCi i skriptne) naime koriste slicne elemente i principe koji se onda mogu iznova koristiti kod ucenja novoga jezika njeshygove sintakse i specificshynosti zata su tipicna poshycetnicka pitanja je Ii lakse programirati uJavi iIi jezishykom Objective-C bespredshymetna To pak samo znaci da zivot razvojnog inzenjeshyra svakako potpada pod poznatu i cesto spominjashynu sintagmu cjelozivotshynog ucenja no s jednom sustinskom prednoseu amp0 je veee iskustvo to ee biti lakse nauciti programirati za druge platforme Samo uvijek treba imati na umu specificnosti odredene platforme Npr kod razvoja mobilnih aplishykacija uvijek na umu treba imati da ee se one izvrSavati na uredajima s ogranicenim kapacitetom baterije pa su optimizacije vrio vazne

Jedna od strategija na putu do postanka rashyzvojnim inzenjerom jest upisati odgovarajuCi studij Domaea sveucilista nude programe koji su vezani uz samo programiranje i racunalstvo Medutim studijski programi nisu usko specijalizirani nego imaju za cilj ponuditi kvalitetan (i prilicno sirok) temelj za daljnje samostalno ucenje specificnih jezika i tehnologija Ono sto ee se studijem svakako dobiti jesu jasne osnove programishyranja iako se na studijima previse inzistira

It I)Mlope

t~ i lOS Dev Center ~ - - ~ 1 ~

_Al_~ ~~ ltON t~~rbull

~____ C-MWIl t$JltibIQI

ra___ nezaobilazno je odrediste za sve one koji tek tele

nautiti izradivati aplikacije za iOS ali i koji vee dulje vrijeme rade na njihovu razvoju (httpsIdeyeloper apple cQmideycenterios)

na algoritamskom programiranju te rjesashyvanju zadatka koji ee rijetko imati stvarnu primjenu (na stranu izuzeci koji kroz razne seminare zainteresiranim studenima zele pribHziti stvarni razvojni ciklus aplikacija) No sve je to dio akademskog obrazovanja te samo poticaj da svatko tko se zeli baviti razvojem mobilnih aplikacija takvo sto S

dobivenim temeljima zapocne samostalno Formalno obrazovanje za one koji zele

naueiti stvarati aplikacije u kracem roku svashykako je predugacko a mnogima i nedostizno jer su vee s formalnim obrazovanjem zavrshysilL No i tada se moze obrazovati i stvarati temetje kroz razne teeajeve bez obzira na studij U Hrvatskoj ih je u ponudi nekoliko

- -

Kako programirati za Android iU iOS

i svi se veCinom fokusiraju na Android sto je otprilike razumljivo Nairne za razvoj iOS aplikacija potreban je Mac te je pritom potrebno platiti i 99 dolara godisnje za iOS Developer Program a takva investicija u danasnje vrijeme nije bas za svaciji dzep Kako bi se pocelo programirati za Android potrebno je bilo kakvo racunalo (moze biti instaliran i Linux) te besplatni razvojni alatL Za isprobavanje aplikacija na fizickim uredajima nije se potrebno registrirati kao razvojni inzenjer (time se dobiva mogucnost objave aplikacije u sluzbenoj trgovini) pa je i to jedna od prednostL

--1--- I ~-----~ __ootItltItI~ _~ -----~----------

=~ j =-~u~==-t-shy~--middot-I e~VOlltFItSI~

-~ qn ====~ ~-~

~tIetcllQo9v

~f]===~f==~_ 2~H

~~tshy__ ~I Mttlt

~l

~It -IS~Cff~Dldccl - =9 rn- -- shy

1 - _hOljbigt ~ a_~~

~futAdDilyttl~

Jt9

51100 kao Apple i Googb~ ima vlasmi centar namijenjen razvojnim inzenjerima ali i totalnim pocetnicima Tu je stvarno sjajna dokumentacija ali i hrpica pocetnickih tutorijala (bttp developer android comtraining)

Samoucenje kao paradigma Tecajevi su dakle svakako dobar pocetak

jer ce nakon zavrsenog tecaja neki koncepshyti koji se na prvi pogled doimaju suvise slozenima biti demistificirani jednako kao i nacin na kOJi se koristi sarno razvoJno sushycelje te cete sted ispravnu metodiku rada U samoj sustini nauciti programirati nije teSko no nauciti da pisete kvalitetan kOd jest Upravo tu ldi zamka za pocetnike koji nerijetko umjesto da programski kOd u raznim materijalima prepisuju s razumishyjevanjem sarno kopiraju ne razmiSIjajuci previse 0 tome sto iz njihove perspektive svojevrsni snippet zapravo radi i kako utjece na same performanse aplikacije te njezine druge aspekte Zato je iznimno vazno dobro se upoznati sa svime 5tO odredena razvojna platforma nudi ukljucujuci njezine biblioteshyke te doista dubinski poznavati platformu za koju razvijate

To pak podrazumijeva mnogo istrazivanja i eksperimentiranja ali sugerira i da je za programiranje najbolje jednostavno s njime krenuti Od samih osnova pa sve do najsloshyzenijih koncepata te barem djelomice uciti kroz pokusaje i promasaje Na tom putu svakako pomazu knjige pa se valja prirediti na tu investiciju Srecom mreZa svih mreZa sarna po sebi je nepresuSan izvor za prograshymere-pocetnike gladne znanja Od sluzbene dokumentacije preko specificnih tutorijala pa sve do videotutorijala Izbora doista ima mnogo Stoga ce yam naredne stranice kao buducem razvojnom inzenjeru za jednu iIi obje platforme sigurno biti vrlo korisne_

Tecajevi i edukacije

UCENJE UUCIONICI Nauciti osnovno stvaranje aplikacija za mobilne platforme moguce je i kroz nekoliko tecajeva Za sada ih nema mnogo i vecina se fokusira na Android no evo nekoliko korisnih tecajeva (i edukacija) koji ce yam itekako dati dobru osnovu za daljnji napredak i stvarni rad na razvoju apUkacija

ALGEBRA

gt Cilj Algebrina programa jest pruianje znanja i vjestina za samostalno izradivanje aplikacija za mobilnu platformu Android te njihovo plasiranje na trziste Pro laze se osnove programiranja u Javi uvod u programiranje za Android te SQL Zatim se edukacija usredotocuje na osnovnu izradu aplikacije te na druge aspekte platforme Android Cijeli se tecaj zakljucuje procesom objave aplikacije u sluzbenoj trgovini

CIJENAAkcijska cijena 590000 kn redovna cijena 791800 kn URL httplaLgebra hrledukacjjal razyoj-a plikaci japrogramershymobilnjb-aplikacija-androjdl

NETAKADEMIJA

gt Tehnicko veleuciliste u Zagrebu organizira edukaciju u trajanju od 110 sati podijeljenih na predavanja i primjere vjezbe zadatke za samostalno rjesavanje izvan nastave

projektni zadatak i zavrsni zadatak koji valja samostalno rijesiti Prolazi se cijeli niz specificnosti vezanib uz platformu Android a od polaznika se trati zavrsen tecaj objektno orijentiranog programiranja ili poznavanje tema obradenih u tom tecaju

CIJENA 812500 kn Cijena za studente 609375 kn URL httpaLgebra hrledukacjjal razyQj-aplikacijaprogramershymobilnih-aplikacija-androjdl

CRUZ

~j OSaplikaclja iPhIUI

---~ ---- ~-~ - -j~~-~~ bullbull

--~ __ _---- ~_~ ~ cWlt~~___ bull__ bullbull -~---- =~Uolt -gt

gt Kratki tecaj u trajanju tri ili pet dana koji organizira CROZ nudi osnove u programiranju mobilnih aplikacija za Apple iOS Upoznaje se s razvojnom okolinom Xcode te programskim jezikom Objective-C i njegovim konceptima zatim je tu pregled programskog okvira CocoaTouch koji se koristi u razvoju iOS aplikacija pregled naprednih koncepata te se konacno govori o razvojnom ciklusu testiranju aplikacija i procesu objavljivanja aplikacija u App Storeu

CIJENA Na upit URL httpwwwcroznetlrazyoj-iosshyaplikacija-ipbone-jpad

2013 STUDENI BUG I 77

I

Razvoj AntJroid aplikacija

gtSUeno kao i kod teeaja za razvoj apUkacija za iPhone CROZ nudi i kratke tecajeve za razvoj Android aplikacija (p05toje i tecajevi za 5amu Javu) Tecaj traje pet dana a prolaze 5e najvazniji aspekti razvoja od postavLjanja razvojnog sueeLja preko izrade korisniekog sucelja pokretanja novih aktivnosti te komunikacije medu aktivnostima do spremanja podataka te pozadinskih aplikacija 1 lokacijskih usluga

CIJENA Na upit URL bttplIwww croz netrazyojshyandroid-apUkacijal

GAUSS INFORMATIKA iPhone Developmenti Android Development

gt Domaca tvrtka koja se naLazi u Osijeku vet neko vrijeme organizira edukaciju za one koji tele razvijati za 105 ali iza Android Naravno edukacije st razdvojene iako su u odredenim segmentima sUene Npr oba se teeaja provode u grupama od po iest polaznika a za ciLj imaju polaznicima pribliziti principe objektnog programiranja te jezike za svaku od pLatformi (Java za Android i Objective-C za iOS) Osim toga poucava se cijeli niz drugih specifienosti potrebnih za razvoj za svaku od platformi

CIJENA Na upit URL hmrllgau55-informatikacoml programi-obrazovanjal

EDUKACENTAR Uvod u razvojAndroid aplilltacija

gtSemina r u trajanju 20 skolskih sati namijenjen je svima koji se zeLe upoznati s razvojem mobiLnih aplikacija na platformi Android Govori se 0 sueelju Eclipse 5 ADT-om i Android 5DK-u 0 izradi grafickih sucelja upoznaje se 5 programskim jezikom Java tu je i rad sa zvukom i drugim elementima te niz jednostavnih primjera apLikacija

CIJENA Na upit URL httplIwwwedukacentar hrl Sem ina rilRazvoj-mobiln ib-a p lj kadja

-SKULA NA INTERNETU Osim kLasicnih tecajeva moze se pronaci niz eesto kvalitetnih predavanja putem kojih je moguce usvajati vjestine potrebne za uspjesno programiranje Evo nekoLiko najzanimljivijih e-ueionica

MIT OPEN COURSEWARE

gtUz brojne druge seminare na ovom se svjetski poznatom sveucilistu mogu pronaci predavanja i seminari vezanih uz programiranje Zapravo cilj je ponuditi sve 5to se moze cuti i vidjeti na MIT-u i to sasvim besplatno Stoga 5e dobiva djeli niz materijala od udzbenika preko multimedijskih sadrzaja pa sve do zadataka projekata i primjera Ovo je obavezna stanica za sve one koji tek pocinju s programiranjem ali i one koje zanimaju i naprednija predavanja

URL bttpllocwmitedu(

COURSERA -Take the worlds best courses online for free ~ - -- - - - shy

gt Rijec je 0 Stanfordovu projektu za e-ucenje koji je u kratkom roku stekao vetik broj korisnika jer svima zainteresiranima omogucuje pohadanje tecaja koji predaje sveueitisni profesor 5 toga sveuciLista sasvim besplatno i online Predavanja ima mnogo pa se uz teme usko vezanih uz racunalstvo mogu p05lusati (i pogledati) brojna druga zanimljiva predavanja

URL bttplwww coursera ori

TREEHOUSE Take the worlds best courses online fOI fIee ~-~~ ~~~~ laquozt~~ gtlt~o~~gt _j~ ~

Jos jedna sve popularnija e-ucionica putem koje je moguce nauciti programirati u razlicitim jezicima i za razlieite platforme Dakako pokriveno je programiranje za iOS i za Android Na raspolaganju je vise od ti5uCU videozapi5a a tijekom ucenja valja rjesavati niz zadataka cime cete zasluziti znackice P05toji i sadrzaj za koji 5e mora placati pa su dostupna dva modela pretplate Silver koji stoji 25 dolara mjesecno te Gold koji 5toji 50 dolara

URL httpteamtreehouse com

UDACITY

78 I BUG STUDENI 2013

__

Kako programirati za Android iii iOS

gt lako nudi jedva tridesetak raznih tecajeva (najvise ih je iz podrucja racunalstva) ovo odrediste za online ucenje sve je popularnije Nije ni cudo jer mijenja nacin na koji se odvijaju klasiena predavanja naglasavajuci interaktivnost - neprestano se trazi rjesavanje zadataka i problema Upravo je zato ovo idealno odrediste za stjecanje osnovnih vjestina u programiranju

URL www udacitycom

GOOGLE DEVELOPERS UNIVERSITY CONSORTIUM

]jillliii ~r-shy1lt_ ~--O__I-_

~_~___ _tftWl_~_~__-l~tioIa_

-__ __ ~- shy

gt I sam Google radi na poucavanju pa je dostupan Google Developers University Consortium putem kojega je moguce pronaci niz predavanja iz razliWih podrucja no svih vezanih uz Googleove tehnologije Stoga je ova odlicno mjesto za ucenje razvoja za Android

URL httpsUdevelopers google comi university

-

~Internetski resursi

PROGRAMERSKA VRELA Premda su dva sluzbena portala za razvojne inzenjere (ona za iDS i onaj za Android) i vise nego dovoljna da pronadete odgovore na prakticki sve sto vas moze zanimati dok programirate (osim toga tu je i nezaobilazni Google) dostupno je i nekoUko drugih web stranica koje ee dobro doti pri ucenju ali i razvoju aplikacija

STACK OVERFLOW

bull

~ G ~~-j~y---- shyltc _middot11_1_ ----l~Jgt

C gt ~ toIoIto~__ lI~-

- - _ bull ~_f_ ~ _ ) -tc-rIo-WlluttgttllOl-

gtVelika zajednica koja radi na principu postavi pitanje i dobij odgovor To liko je popularna medu programerima da je gotovo sigurno da eete trazeci savjet putem Googlea medu prvim ponudenim rezultatima pronaci upravo odgovor sa Stack Overflowa

URL bttpstackoverflowcoml

MOBILETUTS+

Creatit Web$lte QII ~ GOtIgle f)J~middot~ --~1-----1M

9

gtJos jedna Envatova web stranica no koja se bavi iskljueivo raznovrsnim tutorijalima za mobilne platforme ponajvise iDS i Android Tu eete pronaci niz raznovrsni h kvalitetnih clanaka neki su informativne prirode i za cilj imaju upoznati eitatelje 5

odredenim segmentima razvoja a neki vode korak po korak pri izradi primjera aplikacije

URL bttplmobiletutspluscoml

JAVA CODE GEEKS gt Ako ste se odlucili programiratl uJavi i za Android avo je jedna od web stranica (mozda bolje receno

zajednica) koju definitivno ne biste smjeli propustiti Tu cete pronaCi doslovce sve 5tO vam padne na pamet od zanimljivih elanaka preko tutorijala do primjera koda Dakle sve 5tO jednom programeru koji uti moze zatrebati

URL wwwJavacodegeekscom

ICODEBLOG

gt Premda se iz naziva ovoga bloga moze zakljueiti da se fokusira iskYucivo na Appleovu platformu zapravo cete ovdje pronaci hrpicu zgodnih (i nerijetko korisnih) tutorijala koji su ponekad popraeeni i videoisjeccima Osim toga tu je i niz primjera gotovog koda (snippeti) te drugi zgodni resursi

URL www icodeblog com

BUG ONLINE FORUM

~~~- 7~~h -

-Programiranie za mofiilne plaftorme

gt I nas je forum izvrsno mjesto za komentiranje i trazenje savjeta ali i pruzanje pomoei manje iskusnima Tim viSe sto je dostupna i kategorija upravo namijenjena programiranju za mobilne platforme Forum moze posluziti i kao mjesto za testiranje aplikacija - clanovi nerijetko znaju ponuditi svoje iskreno misljenje a apUkaciji za koju to zatrazite

URL bttpmiddotwwwbug hrlforum

2013 STUDENI BUG 119

UZ KNJlGE DO SAVRSENSTVA Osim internetskih resursa jedan od vrlo vaznih elemenata pri ucenju razvoja za mobilne platforme (ali i opcenito za programiranje) svakako su knjige Srecom knjiga ima napretek no nisu sve prikladne za pocetnike i one koji nemaju bas nikakva iskustva u programiranju Evo nekoliko naslova (tiskanih i e-knjiga) za Android i iOS uz koje ce pocetak u programiranju biti nesto laksi a koje mozete pronaci na Amazonu

lHf~~~taJ~-1 EDBURNmE Zgodna knjiga koja vodi od samih osnova pa do slozenijih koncepata prateci razvoj igre Sudoku Ova knjiga kroz prakticni primjer doista pomaze pri ucenju razvijanja za Android i stjecanja vaznih vjestina

Knjige za iOS

lOS Prgramming The Big Nerd Ranltlh Guidemiddot JOE CONWAY AARON HILUGASS Sjajna knjiga koja vodi i pokazuje kroz osnovne koncepte za razvoj aptikacija za iOS Ritam obrade materijala je dobar navedeni primjeri aplikacija nisu suhoparni i ovo je knjiga koju vrijedi procitati

Sams Teach Yourself iOS 6 Application Development in 24 Houus lDHN RAY

l~regelcopyp~lent in LAUREN DARCEY lako je i ova knjiga itekako pogodna za pocetnika na trenutke moze Jos jedna knjiga iz iznimno poznate serije instrukcijskih knjiga koja ce biti nerazumljiva onima koji nisu ovladali konceptima objektno itekako dobro doti pri svladavanju prvih koraka u razvoju za Android orijentiranog programiranja Stoga to treba imati na umu dok ju citate i

uz nju vjezbate

IAN F DARWIN iOS() Cookbeok VANDAD NAHAVANDIPOOR OReilly je dobro poznata izdavacka kuta cije su programerske Slicno kao i za Android dostupne su j kuharice za iOS (stoga znak kuharice dobro prihvacene jer nude konkretna (i vecinom kvalitetna) zamijenite inacicom i~S-a) Aktualna je kuharica za iOS 6 no moze se rjesenja za mnoge programerske probleme uskoro ocekivati i za iOS 7

Beginning iOS 6 Development Expioring the iOS SDKmiddot DAVID MARK JACK NUTTING JEFF LAMARCHE FRmRIK OLSSON

lako knjige iz serije za neznalice obicno imaju negativnu konotaciju Dobro poznavanje iOS SDK-a vrlo je vazno za uspjesno programiranje a zapravo su prilicno korisne Nacin na koji obraduju temu programiranja ova ga knjiga prilicno dobro rasclanjuje i objasnjava Doduse ovo je tek prikladan je upravo pocetnicima jedna od mnogih knjige iz iste serije

80 I BUG STUDENI 2013

Effedive ObjfiCthle~C 20 - MATI GALLOWAY Mozda i najbolja knjiga koja se bavi programskim jezikom Objective-C i nudi konkretne (i odlicne) savjete No ovo nije knjiga za one koji nimalo

Android no za totalne pocetnike Stoga ovu knjigu u ruke uzmite ne poznaju jezik Objective-C te Cocoa i Cocoa Touch tek nakon sto ste stekli odredeno iskustvo

nudi doista iscrpan pogled na razvoj aplikacija za

ALATI Kako programirati za Android iii iOS

Bez alata nema zanata Kako svaka platforma za koju se programira donosi i svoje specificnosti ne cudi da i za svaku platformu postoje i specijalizirani razvojni alatilzuzetak tu nisu ni Android i iOS a osim sto postoje sluZbeni alati i razvojna sucelja koji su i vise nego dostatni za razvoj dostupni su i drugi viseplatformski alati koji olakSavaju istodobni razvoj za vise platformi No uz njih tu su i druge aplikacije ali i nezaobilazni te mocni SDK-ovi

~1i~11-shy100t ~il15_ 2~ai~_

~ ~-shyi~~01( ~-lt

gtb b ~-shyshy~--shy~~shy_shy~

flj~tjIfIHltIU_

~ 1 Ilt~ w tOlIltlA tth a~shy~~ ~__~1iIowI

~=-lii ~shy

Profesionalne tvrtke koje se bave razvoshyjem mobilnih aplikaeija obicavaju stroshygo razdvajati programere koji se specishyjaliziraju za Objeetive-C i za Android

Javu Ne samo da su ta dva jezika razlitita nego je i pristup razvoju drukciji Razlitite su i dizajnerske smjemiee cijeli je ekosustav drukciji premda je rezultat u konacniei isti stvara se mobilna aplikacija ali za razlicite platforme Ipak te razlike slieno kao i kod drugih tema znaju neobicno utjecati na sve one koji se bave razvojem pa se neprestano iznova ponavljaju debate oko toga sto Je bolje - Appleov iDS iii Googleov Android

Dio tog debatiranja nerijetko obuhvaca i razvojne alate S jedne je strane tu Eclipse poznato integrirano razvojno sucelje za Jashyvu a s druge rclativno ugladeni Xcode Ono sto je svakako nesporno jest einjenica da ce pocetnici pa i oni iskusniji daleko bde prishyhvatiti nacin na koji radi Xcode a daleko ce tde nauciti da se snalaze u Eclipseu kojl je po svojoj prirodi prilieno kompleksan Isto vrijedi i kada se razvojno okruzenje prvi put postavlja Kod razvoja aplikacija za iPhone I iPad sve se svodi na to da se nabavi raeunalo s Mac OS-om X instalira Xcode I moze se poeeti s programiranjem Bez mnogo petshyIjaneije za pocetak

U slucaju Androida stvan bas i nisu takve no uz nekoliko pocetnih koraka te dodatshynog preuzimanja neizostavnih dodataka u rukama cete imati prilicno mocno razvojno

sueelje U njemu se doista isprva ponesto teze snaci no jednom kada se na njega navishyknete eak nl najzapetljanlje radnje viSe nece predstavljati problem iako ce i dalje uzimati viSe vremena nego sto bi trebale Jedna od kljuenih prednostl Androlda pred i~S-om definitivno je einjenica da sluzbeno razvoino sueelje radi na vise platformi ukljucujuci Linux i Mac OS X

Jednostavnije receno za razliku od Appleshyove metodologlje razvoj za Android moze biti sasvim besplatan iii ako nista drugo daleko jeftiniji cak i kada se u obzir uzme

Xamarin Studio rjesenje je za izradu viseplatformskih aplikacija ito pisuci k6d u programskom jeziku C pri cemu se mogu koristiti nativni API-ji sto je idealno rjesenje za NET programere (~

i naknada koju je potrebno platlti da bi se aplikaeije objavljlvale u sluzbenim trgovishynama U slucaju iDS-a obavezno se mora uclaniti u iDS Developer Program sto stoji 99 dolara potrebna je kupovina Appleova racunala a valja imati i iPhone Clanarina za razvojne inzenjere Android aplikacija za objavu uradaka na Google Playu stojl 25 doshylara no s adresom iz Hrvatske nije moguce prodavati apUkacije No zato je testiranje aplikacija na fizickim uredajima s Android OS-om jednostavno dok je procedura za iDS daleko slozenija

Tlta(jl~m Studio rftlJ(IItI~tMuIIIIIu_-

Titanium Studio jos je jedan moderni IDE koji omogucuje brzl razvoj nativnih mobilnih aplikacija Razvojno sucelje temelji se na Eclipseu a uz Titanium dolazi i njegov vlastiti SDK koji omogucuje razvoj s pomocu HTML-a PHP-a JavaScripta Rubyja i pythona (yJwwappceleratQuQm)

2013 STUDENI BUG I SJ

Android Studio novi je Googleov poku~aj da napravi razvojno 5ucelje Temelji 5e na razvojnom sucelju IntelliJ IDEA a nudi vise mogucnosti od Eclipsea sADT-om kao sto su GradLe refaktoriranje koda specifieno za Android ugradenu podrsku za Google Cloud ProGuard i drugo (httpgoo gllUEvL)

Nerijetko najveci problem s razvojnim suceljima neovisno 0 tome za koju su platshyfomlU obicavaju imati svi oni kOji su navikli raditi u Microsoftovu razvojnom sucelju Visual Studio Tome je tako pogotovo ako je rijec 0 Eclipseu koji bi se iskusnom razvojshynom inzenjeru za Microsoftove tehnologije mogao uciniti kao posvemaSnji metez SHcno vrijedi i za Xcode jer se treba naviknuti i na drukcije sucelje i principe samoga Mac OSshya X Srecom tehnologija nikada ne miruje i ako neSto stalno doista jest onda je to konstantan razvoJ

Tako su nastali alternativni alati kao sto je Xamarin koli se dobro integrira u Visual Studio cineci viseplatformsko programiranje tim jednostavnijim Ne samo da je Xamarishynom moguce istodobno razvijati aplikacije za vise platformi nego ih je moguce pisati u sasvim drugom jeziku - C-sharpu (C) Doduse takva alternativna viseplatformska rjdenja ipak nisu bez nedostatka Prije sveshyga tako napravljene aplikacije u sustini nisu nativne aplikacije (uvijek se mora dogoditi prevodenje sto moze rezultirati novim bushygovima i problemima) a to se reflektira i na performanse i na same mogucnosti Tu je i problem velikih razlika u sucelju aplikacija za razHcite platforme nekonzistentnosti kOje se zbog toga pojavljuju te brojni drugi proshyblemi To ne znaci da se takva rjesenja mora eliminirati nego samo da treba biti svjestan njihovih ogranicenja

No sto je zapravo potrebno za programirashynje U samoj sustini uz racunalo dovoljno je neko kompatibilno razvojno sucelje sluzbeni SDK (Sotware Development Kit) a uputno je imati i mobilni uredaj s OS-om za koji namjeravate razvijati budud da je to jedini konkretan nacin za istinsko testirashynje aplikacija Sto se sucelja tice bas kao i preferirane platforme iIi izbora uredaja sve je stvar osobne preferencije i formiranja navike (iako Xcode prednjaci sto se tice izrade grafickog sucelja) Naravno kada se prevladaju osnove i krene u razvoj konkretshynijih projekata bilo samostalno Hi u timu svijet mobilnog programiranja pokazat ce se cak i 0pseZnijim nego sto je to u slucaju izrade klasicnog softvera Iz te perspektive razvojno sucelje kole koristite postat ce one cime ga se od pocetka i trebalo smatratl tek jedan od alata u nizu potrebnih za uspjesan razvoj aplikacija

82 I BUG STUDENI 2013

Viieplatformske i druge alternative

ALTERNATIVNO PROGRAMIRANJE Osim sluzbenih razvojnih suceLja te osnovnih SDK-ova tijekom je vremena nastao i zavidan niz drugih alternativnih razvojnih sucelja dodatnih alata te hrpa nezavisnih SDK-ova koji razvoj aplikacija na ovaj ili anal nacin cine drukcijim i fLeksibilnijim

PHONEGAP

gtPhoneGapje besplatnorjesenje otvorenog koda (FOSS) namijenjeno

izradi aplikacija za Android iPhone i iPad uredaje (aliidruge) pri (emu se koriste standardni web jezici (HTML CSSi JaitaScript)Za one koji nekim Iudom prepozriaju slilnost 5 Apache Cordovom - u praVll5u PhoneGap je svojevrsna distribucija Apache Cordove u sustini su oboje namijenjeni viseplatformskom razvijanju mdbilriih aplikacija pri cemu omogucuju piistup nativnim funkcijama smartfona kaosto su kamera cikcelerometar i kompas Upravo je stoga avo sjajan SDK za one koji imaju ikustva 5 JavaScriptom i zele napraviti nesto naprednije mobilne aplikacije i to istodobno za vise platformi a uz minimalne ili nikakve intervencije

URL www phonegapcom

MOSYNC gtJos jedno besplatno rjesenje otvorenog koda koje omogucuje izradu nativnih mobilnih aplikacija koristeci jedan te isti programski kod Oslanja se na CC++ ili HTMlSI JavaScript te kombinaciju svega a

omogucuje kompiLiranje aplikacija za do devet razlicitih platformi istodobno To dakako ukljucuje iOS i Android Naravno tu su aplikacijska programska sulelja (API) potrebna za pristup specificnim mogucnostima smartfona i tableta a tu je i MoSync Reload koji omogucuje izradu viseplatformskih aplikacija koristeCi iskljulivo HTMlS i JavaScript (slicno kao PhoneGap)

URL www mosync com

RHOMOBILE

gt RhoMobile Suite zapravo je paket koji se sastoji ad RhoElementsa Rhodesa RhoConnecta RhoStudia RhoHuba i alata RhoGaLLery koji zdruzeno (bolje receno tu je Rhodes framework otvorenog koda koji se temelji na Rubyju) omogucuju eLegantan razvoj aplikacija bez obzira na ciljanu platformu Prednost je ito programski kad treba pisati samo jednom a on ce se kompilirati za praktiCki svaku mobilnu platformu koja je trenutno dostupna Iza ovoga rjesenja stoji Motorola a pohvalno je ito Rhodes nudi princip rada Model View Controler te brojne druge moguCnosti Rijec je dakle a rjesenju koje svakako treba iskusati

URL httpRgQQgllm9xt2

Kako programirati za Android iii iOS

RAZVOJIGARA

UMJESTO APLIKACIJA middot IGRE gt Razvijanje igara prilicno je kompleksan posao a osim samoga programiranja potrebnoje imati rjesenja za cijeli niz drugih aspekata koji su potrebni kada zeLite izraditi kvalitetnu igru Stoga i ne cudi da se dobrim igrama obicno bave timovi a vrlo rijetko individualci No Clanovi takvoga tima svakako moraju biti upuceni u programiranje i dobro se koristiti razvojnim alatima - i ne sarno onima koji sluze za razvoj klasicnih aplikacija Nairne stvaranje igara bas kao i aplikacija otezavaju velike razlike medu platformama a to je dodatno naglaseno upravo kod izrade igara Srecom postoje viseplatformska rjesenja koja takvo sto ipak cine manje bolnim nego sto doista jesUedno od najpoznatijih viSeplatformskih rjeshysenja upravo je Unity 3D Ono je dovoljno kompleksno za razvoj zbilja fantasticnih igracih naslova a istodobno dovoljno jednostavno da njime mogu ovladati i totalni pocetnici Ono sto mnoge iznenaduje svakako je cinjenica da je inicijalno ovaj engine sasvim besplatan a specifican je i po tome sto podrzava tri programska jezika (UnityScript C i Boo) Doduse besplatna inacica ima i odredenih nedostataka no puna Ushycenca stoji 1500 dolara sto i nije mnogo s obzirom na ono sto se nudi Uz Unity 3D dostupna su i druga rjesenja kao sto je Marmalade SDK Rijec je 0 moenom viseplatformskom SDK-u koji omogucuje izradu mobilnih igara za smartfone i tablete Dakako za rad s ovim SDK-om

Vrhunsko rjesenje za izradu atraktivnih viseplatformskih mobilnih (i drugih) igara moguee je dobiti sasvim besplatno 0Jww unity3d com)

potrebno je znanie programskog jezika C++ te odredeno programersko iskustvo Sam SDK moguee ie iskusati besplatno 30 dana sto je dovoljshyno vremena da se prode kroz hrpicu tutorijala a nakon toga ovaj SDK valja kupiti i to prema razlicitim modelima Najjeftinija inacica stoji 150 dolara godisnje po racunalu (Community) nju slijedi ona za 499 dolara godisnje po racunalu (lndie) zatim je tu model Plus koji stoji 1499 dolara godisnje po racunalu (s ovime se dobiva podrska i za rashyzvoj igara za pametne televizore) dok profesionalna i najopremljenija inacica stoji 3499 dolara godisnje po racunalu II

PODESAVANJE RAZVOJNOG OKRUZENJA ZAANDROID

SVE UJEDNOM PAKETU gt Eclipse kao standardno razvojno sucelje za Android nekada je trebalo rucno podesavati dodajuei mu Android SDK Tools te ADT Plugin (instalirani se JDK podrazumijeva) Sreeom otkad se pojavio ADT Bundle ko]i u jednom paketu donosi sve sto je potrebno podesavanje samoga sucelja prakticki je nepotrebno osim ako vee koristite Eclipse za programiranje u Javi i namjeravate prosiriti razvoj apUkacija na Android Tada treba proei dobro dokumentirani proces podesavanja sucelja koji cete pronaei na Googleovu portalu za razvojne inzenjere ADT Bundle dakle pocetak programiranja za Android cini doista lakim Treba samo na zeljenu lokaciju dekomprimirati sadrzaj Zip arhive (cijeU eete paket pronaei na DVD-u koji ste dobili uz ova] broi) otvoriti mapu eclipse i pokrenuti izvrsnu datoteku eclipseexe Sve ostalo vee je spremno Doduse medu vaznijim koracima svakako je definiranje virtualnog uredaja (emulatora) za testiranje aplikacija a po potrebi ee se kasnije morati dodavati i drugi paketi ADT Bundle i to cini jednostavnim

Kreiranje simulatora Android Virtual Device Manager najlaksi je nacin za kreiranje virtualnog uredaja Stoga ga valia pokrenuti tako da se u Eclipseu klikne na Window i zatim na AVD Manager U prozoru koji ee se otvoriti valia kliknuti na New Zatim valja unijeti ime virtualnog uredaja iizabrati vrstu uredaja

(veCinom je dovoljno izabrati uredaj prema velicini njegova ekrana) prema cemu ee biti definirane i druge postavke Parametre je moguee podesavati prema vlastitim preferencijama pri cemu ne treba pretjerivati (npr kod definiranja kolicine radne memorije) a svakako je uputno kvacicom oznaciti opciju Use Host GPU Jednom kada je sve definirano ostaje sarno kliknuti na gumb OK Virtualni uredaj pokreee se tipkom Start nakon cega valja biti strpljiv jer se emulator tradicionalno pokreee prilicno sporo

Upravljanje paketima Android SDK alate platforme i druge komponente organizira kao pakete koje je moguce preuzimati i instalirati Android SDK Managerom Pronaci cete ga u rnapi gdje je dekomprimiran ADT Bundle u obliku izvrsne datoteke (SDK Managerexe) Instalacija paketa maksimalno je jednostavna potrebno je sarno kvaCicom oznaciti zeljeni paket i zatim kliknuti na gumb koji ee pokrenuti instalaciju Medutim svakako treba instalirati SDK Tools SDK Platform-tools i SDK Platform System Image Android Support i primjeri koda preporucljivi su iako nisu nuzni No za pocetnike (i druge) svakako su to dobrodosli dodaci No kako razvijanje aplikacija bude postajalo ozbiljnije tako ce i potreba za paketima porast pa cete nerijetko svracati upravo u Android SDK Manager po nove pakete i azuriranja sect

PODESAVANJE RAZVOJNOG OKRUZENJA ZAiOS

fi ~srJH un~~~mer l ~i ~_ j ~ g~~l-1lt ~ ~J ~Iit~

Xcode

gt Xcode vise nije jedino razvojno sucelje za izradu apUkacija za iOS no dugo je to prakticki bio (vee je neko vrijeme dostupan JetBrainsov AppCode dok viSeplatformska rjesenja neeemo usporedivati) Posebnih koraka za postavljanje zapravo i nema a sve sto je potrebno uciniti jest na Appleovu racunalu pokrenuti App Store u polje za pretrazivanje utipkati Xcode j pokrenuti instalaciju Svakako je potrebno imati aktivnu vezu s Internetom i biti strpljiv jer ce se preuzeti gotovo 2 GB podataka Jednom kada je Xcode spreman s programiranjem s moze zapoceti odmah a jednako je tako spre~an i simulator Ono sto mnoge muci jest da Je za Xcode potrebno imati Appleovo racunalo Doduse moguee je posluziti se trikom virtualizacije te instalirati Mac OS X 108 Il~ visi u virtualnu masinu Medutim takvo Je sto nelegalno premda moze posluziti iskljucivo u edukativne svrhe - samo kao svojevrsno eksperimentiranje prije nego odlucite kupiti barem Apple Mac Mini

2013 STUDENI BUG I 13

ltW

ZIVOT APliKACIJE -

Od testiranja do objave

Jednom kada je onaj osnovni razvojni dio zavrsen i aplikacija se cini spremnom valja ju testirati Osim testiranja usimulatoru uvijek je prije objave uputno aptikacije provjeriti i na fizickim uredajima najbolje na vise od jednog Dok 5 jedne strane u slucaju Androida testiranje aplikacije nije problem jer je vrto jednostavno iskoristiti gotov APK ustucaju iOS-a stvari su znacajno stozenije i skupLje Isto vrijedi i ustucaju konacne objave aplikacije na stuzbenih trgovinama Evo sto morate znati

estiranje aplikacija Android USB debugging definitivno je neizshy opcija je koju svakako bjezno a premda se treba ukljuciti na uredaju zapravo odvija i tijeshy koji ce postuziti za testiranje kom samog razvojshy aplikacije (pronaci tete ju

nog procesa ono konacno u Settings pa Developer testiranje prije same objave options) aplikadje uvijek je pozeljshyno odraditi na fizickim uredajima Iz perspektive tadja uredaja za Android razvojnog inrenjera za Anshy ogromna pa je samim droid takvo sto uopce ne time razvojnim inzenjerishypredstavlja problem Dapashy ma tesko uzeti u obzir sve ee vee je tijekom samog rashy vrste uredaja koji se nalashyzvoja umjesto u emulatoru ze u opticaju Isto vrijedi testne primjerke aplikadje i predvidanje ponasanja moguee pokretati na jedshy aplikadje na raznim vershynom iii viSe fizickih ureshy zijama platforme premda daja Dovoljno ih je sarno SDK tu poprilicno pomashyUSB kablom prikljueiti na ze Kako bi smartfon s raeunalo a onda aplikaciju Android OS-om posluzio

je ovisno 0 platformi na kojo se razvija (na Mac OS-u X stvari ee raditi bez ikakve inmiddot tervencije dok je i za Windowse i za Linux potrebno odraditi nekoliko koraka pri eemu je Linux ponesto sozeniji)

Nakon toga na samom uredaju valja ukljushyeiti USB debugging te ee iduci put kada se u Eclipseu pokrene debugiranje apHkacije medu ponudenim uredajima biti i onai prishykljueen na raeunalo Zelite Ii pak provjeriti je Ii uredaj dostupan to je moguce napraviti naredbom adb devices 8to se testiranja apHkacija na iPhoneu iIi iPadu tice stvari

The easiest way to get feedback on your mobile application

Sign up free -7

~~ ~~-~ BETA FAMILY IN NUMBERS WIW MCRE THAN III=

Testiranje aplikacije moguce je prepustiti i drugima putem servisa kao 5tO je The Beta Family Rijec je 0 crowdsourcing platformi koja omogucuje da drugi testiraju j daju misljenje 0

aplikaciji na kojoj radite wwwthebetafamilycom

su daleko sloznije Iako se veCina razvojnih inzenjera grozi postupka kroz koji treba proei on ee ih ipak na kraju docekati Zasto Apple nije pojednostavio proceduru pitanje je 0 kojemu se moze debatirati no stvari Sil

takve kakve jesu Sreeom tu je okvir koji ee vas kroz nekoliko koraka sprovesti do uspjeha a pozitivno je 5tO jednom kada proshyZivite ovaj proces bit ee jednostavnije proCi kroz proces pripreme aplikacije za objavu u sluzbenoj trgovini Procedura za Google Play opet je nesto jednostavnija

No kljucna je razlika 8to se od prodaje aplishykacija putem App Storea moze zaradivati dok to nije moguce putem Google Playa sve dok ste registrirani 5 racunom u Hrvatskoj jer se ona ne nalazi na popisu poddanih zeshymalja Sreeom zarada je i daje moguca kroz reklame 110 aplikacija mora biti naznacena kao besplatna

pokretati izravno iz Eclipshysea iIi iz naredbenog retka (ADB)

Dakako fizieki uredaj u tom slucaju ipak ne moze zamijeniti emulator jer je fragmenshy

84 I BUG STUDENI 2013

za testiranje dovoljno ga je dakle prikljueiti na raeunalo Ako vee nisu svakako valja instalirati i potrebne upravljacke programe i ostale dodatke lito

Kako programirati za Android iii iOS

KakD te~tiratiiOS ~ aplikacJe na IPhoneu

APPLEOV RAZVOJNI PROGRAM Apple proceduru registracije uredaja za testiranje aplikacija nije ucinio jednostavnom pa i ne cudi da mnogi pribjegavajujailbreaku kao jeftinom i zacudo jednostavnijem rjesenju No sLuzbeni je nacin jedini podrzan a za njega cete se morati uclaniti u iDS Developer Program sto ce vas stajati 99 dolara godisnje Stoga pripremite kreditnu karticu i cvrste zivce za igru pokusaja i promasaja

lOS DeveIotgter Inlgram UUclraquoJgtIyltWklltU(I--shybull

ICorak-2 -

Generiranje certifikata 1

rA_~-Clt----shyOIGrmoollIl1ltG4

~16illttlt wt(tltjf1tlO4~_ulOll_

- ~

Kmiddotmiddotbullmiddotorakmiddot4_

_

bull _ _ n_~

Nakon ~to je certifikat spreman potrebno je registrl~ati uredaj koji ce sluziti za testiranje Ponovno se valja vratiti na iDS Provisioning Portal te pronaci poveznicu Devices i zatim kliknuti na Add Devices Dovoljno je upisati proizvoljan naziv te dodati Device ID ili UDID Rijecje 0

jedinstvenoj vrijednosti od 40 znamenki kojom se uredaj identificira UDID je moguce doznati ili putem iTunesa ili

- ---shy-shy

-~-~~-~-- - ~~~- ~

putemscodeaj uhutarQrgani~fa AkocetekoristitiJtuneskakobiste bull kQpirali ovugolemuvi-iJednost prvo ju l)ior~M (jllokUknoJiitiltiilptitjsriuti kOO1QinadjutipkicqrnmandifCNqkori tQgq uXci)deu yafjauOrgaljzerllPQ1J DeviqesproniitIsR9JejiiiPtJOlletEL bull kli~llutiriagumb Us~JQr[)eVetoPrnentmiddot

middotSretom ovo jenQjoezJQlnij(trenutjlk middotbull jerceXcQde~clltdegrllat~kiprlJetisye potrebn siOSPJQvi~iQJiing Portala st9seprljavit~sect c odgOl(araiLitimkOrisnikimPQdgcimmiddot bull

- -~~ ~~ ~~ -~-~- ~ ~-~--

2013 STUDENI BUG I 85

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 2: Kako Programirati Za Android 1

Kako programirati za Android iii iOS

ta cbull

lako Android ima yeti dio trzisnog kolaca zarada od Za pocetak to nije nuzno no ako se pocnete razvojem baviti profesionalno bit te potrebni i aplikacija veea je s Appleovom platformom pa se fizicki uredaji na kojima tete moei testirati aplikacije (unatoc simulatorima i emulatorima) mnogi odlucuju razvijati upravo za nju

su i osnovne poslovne strategije jer ako budete nastupali individualno trebat cete napraviti i jasnu marketinsku strategiju te se potruditi da aplikacija na kojoj zelite zaraditi bude videna

Tema za pocetnike Drugim rijeCima postaje jasno da je razvoj

mobilnih aplikacija iznimno opsezno podshyrucje a jednom kada se doista u njega i upushystite to postane naglaseno jasno Srecom za sam pocetak programiranja nije potrebno mnogo U slucajll Androida dovoljno je neko racunalo na kojemu se nalaze bilo Windows Linux iii Mac as x Eclipse s prosirenjem ADT i Android SDK-om te malo volje za

Mobile App Maker ~lgt ~~U ~~q -

f~X~middot~~V~

iiiHfiitMM

Rijec je 0 domacem servisu koji se orijentira na inozemno triiSte Odlicno je koncipiran i doista omogueava relativno lagan razvoj mobilnih aplikacija za iOS i Android Za razvoj tete morati platati mjesecnu naknadu dok je u besplatnoj inacici mogute izradivati HTMLS aplikacije Svejedno oni koji ne iele investirati u programersko znanje mogu se posluziti ovim servisom kako bi ostvarili neku od svojih zamishysU Zapravo teie eete ostvariti sve svoje zamishysli ali moei cete napraviti klasicnu apUkaciju za prezentaciju svoje tvrtke ShoutEm je dobro potkovan pa omogueuje kreiranje viSe tipova aplikacija ali kako je vee istaknuto ne treba oeekivati cuda jer je zapravo rijee 0 konceptushyalno slicnim rjesenjima

Web wwwshoutemcom

citanje vrlo opsezne i dobro koncipirane dokumentacije te vodfca na Googleovu porshytalu za razvojne inzenjere U slueaju izrade apHkacije za iOS obavezno je potreban Mac instaliran Xcode koji se dobiva besplatno i nalazi se na App Storeu te pracenje jednako tako solidne dokumentacije na iOS Deveshyloper portalu Prvi koraci ne bi trebali biti preteski a sto vise budete razvijali tim ce stvari postajati jasnije

SHeno je koncipirana i ova tema koja je prije svega namijenjena onima koji nemaju iskustva u programiraju iIi imaju tek neke osnove Naime ciIj nije bio napraviti klasicshynu skolu programiranja To bi uostalom na ogranieenom broju stranica bilo nemoguce

- wr -~ bullbull lt

_MhiP

AppArchitect AppArchitect je jos jedna platforma za kreiranje kako sami autori kazu prekrasnih mobilnih aplikacija Doista AppArchitect lijeshypo izgleda omogucuje iznimno jednostavnu izradu aplikacija bez tipkanja programskog koda i sve se svodi na povlacenje elemenata Zapravo dobiva se osjeeaj kao da se radi prezentacija u PowerPointu no u konacnici se umjesto prezentacije dobiva aplikacija 1 to nativna Zasad je moguee izradivati aplikacije za iOS a dok je u beti servis je besplatan i tako ee ostati do veljaee iduee godine kada se namjerava poceti s naplatom Cijene nisu forshymirane no procjena je da bi koristenje servisa moglo stajati 40 dolara mjesecno za osnovni paket i 100 dolara za profesionalni paket

Web wwwapparchitectcom

Stoga se tema nece baviti detaljima kao sto su razlike izmedu programskih jezika ni programskim konceptima opcenito No zato ce ponuditi izvore kako ih se i gdje moze savladati i nauciti eilj je ove teme pruZiti uvid u to sto je potrebno kako bi se pocelo programirati za mobilne platforme te ponuditi korisne informacije i konaeno demonstrirati kako je to napraviti prvu aplishykaciju Drugim rijecima pomoCi u prvim koracima svima koji se po prvi put susrecu s programiranjem za mobilne platforme Stoga zelite Ii da se pocnete baviti razvojem aplikacija a ne znate odakle biste poceU ovo je tema koja bi yam trebala pomoci da krenete na pravi put ll

GameSalad Ako biste umjesto klasicnih aplikacija radije razvijali mobilne igre i pritom biste rado izbjegli programiranje onda je GameSalad nesto sto biste mogli isprobati Nije rijec 0 online servisu vee eete morati viseplatformski alat za izradu mobilnih igara preuzeti na raeunalo i ipak ponesto zavrnuti rukave kako biste ovladalinacinom na koji GameSalad radi Igre je doista mogute napraviti ali bas kao i kod svih drugih generiekih rjesenja i aplikacija koje zapravo rade na principu predlozaka nemojte oeekivati cuda

Web wwwgamesaladcom

2013 STUDENI BUG 115

UCENJE

Svijet razvojnih inzenjera ispunjen je neprestanim ucenjem jer je svijet mobilnog (i klasicnog)

programiranja iznimno dinamican Stovise jednom napisane metode nece uvijek vrijediti jer se i Sam

programski jezik razvija i mijenja No da bi se uopce zapocelo s programiranjem potrebno je

svladati osnove a tek onda svladavati specificnosti svake platforme i jezika s kojima se suocavate

~dukqltija lJcenje11strazlVanJe

N auciti programirati i zatim se time doista i baviti zivotni je poziv bas kao i brojna druga zanimanja Danas

nikada nije bilo Iakse uCiti programirati i to ne samo zahvaljujuCi golemom broju edukativnih materijala koji se mogu proshynaCi diljem Interneta te brojnim forumima na kojima iskusni programeri i oni koji tek pocinju mogu raspravljati 0 temama kOje ih muce i ponuditi rjesenja nego i cinjenkom da su razvojne okoline prilicno uznapreshydovale pa razvoj cine daleko laksim SVijet programiranja nikad nije bio zanimljiviji ali ni opsezniji

Ono s cime se programeri-pocetnici kojima je ova tema i namijenjena obicno suocavaju jest potreba za svladavanjem samih osnova Krenuti u svijet programiranja nije lako i kao i u brojniro drugim djelatnostima nekima ce Zivot razvojnog inzenjera daleko vise odgovashyrati nego drugima Koncepti kOje treba svlashydati nekima ce biti neshvatijivi nekima ce se upornost isplatiti dok ce drugi kroz taj svijet proIaziti elegantnije i bezbolnije No u koju god skupinu pripadali jedna je od najvaznijih odlika razvojnog inzenjera upornost i velika stvaraIacka zelja zbog kOje neee odustati Cak i kada rezultati naizgled izostanu ne treba posustati jer ee rezultati neizostavno postati vidljivi iako se to u nekom trenutku ne cini vjerojatnim

Koji je najbolji naCin za ucenje programicashynja vrlo je individualno Medutim ucenje i istrazivanje sastavni su dio tog puta a razvojshyni inzenjeri neprestano moraju iznova uciti - cak i one vee stecene vjestine jer je razvoj jezika prilicno dinamican pogotovo sto se tice mobil nih platformi Za razvoj aplikacija nije dovoljno nauciti tek osnovne programske koncepte i jedan jezik Stovise programski je jezik tu zapravo najmanje bitan Vjestine kOje se traze mnogobrojne su pa vee i samo to predsravlja velik izazov no ako se steknu kvashylitetni temelji sustinski razumiju podatkovne i kontrolne strukture stvari ee biti sve lakse sa svakim novim korakom

76 I BUG STUDEM 2013

Uciti je moguce na nekoliko naCina studiranjem pohadanjem tecajeva mukotrpnim citanjem knjiga i

brojnih tutorijala te kombinacijom svega spomenutog

Java ili Objective-C Programski jezici (ukljushy

cujuCi i skriptne) naime koriste slicne elemente i principe koji se onda mogu iznova koristiti kod ucenja novoga jezika njeshygove sintakse i specificshynosti zata su tipicna poshycetnicka pitanja je Ii lakse programirati uJavi iIi jezishykom Objective-C bespredshymetna To pak samo znaci da zivot razvojnog inzenjeshyra svakako potpada pod poznatu i cesto spominjashynu sintagmu cjelozivotshynog ucenja no s jednom sustinskom prednoseu amp0 je veee iskustvo to ee biti lakse nauciti programirati za druge platforme Samo uvijek treba imati na umu specificnosti odredene platforme Npr kod razvoja mobilnih aplishykacija uvijek na umu treba imati da ee se one izvrSavati na uredajima s ogranicenim kapacitetom baterije pa su optimizacije vrio vazne

Jedna od strategija na putu do postanka rashyzvojnim inzenjerom jest upisati odgovarajuCi studij Domaea sveucilista nude programe koji su vezani uz samo programiranje i racunalstvo Medutim studijski programi nisu usko specijalizirani nego imaju za cilj ponuditi kvalitetan (i prilicno sirok) temelj za daljnje samostalno ucenje specificnih jezika i tehnologija Ono sto ee se studijem svakako dobiti jesu jasne osnove programishyranja iako se na studijima previse inzistira

It I)Mlope

t~ i lOS Dev Center ~ - - ~ 1 ~

_Al_~ ~~ ltON t~~rbull

~____ C-MWIl t$JltibIQI

ra___ nezaobilazno je odrediste za sve one koji tek tele

nautiti izradivati aplikacije za iOS ali i koji vee dulje vrijeme rade na njihovu razvoju (httpsIdeyeloper apple cQmideycenterios)

na algoritamskom programiranju te rjesashyvanju zadatka koji ee rijetko imati stvarnu primjenu (na stranu izuzeci koji kroz razne seminare zainteresiranim studenima zele pribHziti stvarni razvojni ciklus aplikacija) No sve je to dio akademskog obrazovanja te samo poticaj da svatko tko se zeli baviti razvojem mobilnih aplikacija takvo sto S

dobivenim temeljima zapocne samostalno Formalno obrazovanje za one koji zele

naueiti stvarati aplikacije u kracem roku svashykako je predugacko a mnogima i nedostizno jer su vee s formalnim obrazovanjem zavrshysilL No i tada se moze obrazovati i stvarati temetje kroz razne teeajeve bez obzira na studij U Hrvatskoj ih je u ponudi nekoliko

- -

Kako programirati za Android iU iOS

i svi se veCinom fokusiraju na Android sto je otprilike razumljivo Nairne za razvoj iOS aplikacija potreban je Mac te je pritom potrebno platiti i 99 dolara godisnje za iOS Developer Program a takva investicija u danasnje vrijeme nije bas za svaciji dzep Kako bi se pocelo programirati za Android potrebno je bilo kakvo racunalo (moze biti instaliran i Linux) te besplatni razvojni alatL Za isprobavanje aplikacija na fizickim uredajima nije se potrebno registrirati kao razvojni inzenjer (time se dobiva mogucnost objave aplikacije u sluzbenoj trgovini) pa je i to jedna od prednostL

--1--- I ~-----~ __ootItltItI~ _~ -----~----------

=~ j =-~u~==-t-shy~--middot-I e~VOlltFItSI~

-~ qn ====~ ~-~

~tIetcllQo9v

~f]===~f==~_ 2~H

~~tshy__ ~I Mttlt

~l

~It -IS~Cff~Dldccl - =9 rn- -- shy

1 - _hOljbigt ~ a_~~

~futAdDilyttl~

Jt9

51100 kao Apple i Googb~ ima vlasmi centar namijenjen razvojnim inzenjerima ali i totalnim pocetnicima Tu je stvarno sjajna dokumentacija ali i hrpica pocetnickih tutorijala (bttp developer android comtraining)

Samoucenje kao paradigma Tecajevi su dakle svakako dobar pocetak

jer ce nakon zavrsenog tecaja neki koncepshyti koji se na prvi pogled doimaju suvise slozenima biti demistificirani jednako kao i nacin na kOJi se koristi sarno razvoJno sushycelje te cete sted ispravnu metodiku rada U samoj sustini nauciti programirati nije teSko no nauciti da pisete kvalitetan kOd jest Upravo tu ldi zamka za pocetnike koji nerijetko umjesto da programski kOd u raznim materijalima prepisuju s razumishyjevanjem sarno kopiraju ne razmiSIjajuci previse 0 tome sto iz njihove perspektive svojevrsni snippet zapravo radi i kako utjece na same performanse aplikacije te njezine druge aspekte Zato je iznimno vazno dobro se upoznati sa svime 5tO odredena razvojna platforma nudi ukljucujuci njezine biblioteshyke te doista dubinski poznavati platformu za koju razvijate

To pak podrazumijeva mnogo istrazivanja i eksperimentiranja ali sugerira i da je za programiranje najbolje jednostavno s njime krenuti Od samih osnova pa sve do najsloshyzenijih koncepata te barem djelomice uciti kroz pokusaje i promasaje Na tom putu svakako pomazu knjige pa se valja prirediti na tu investiciju Srecom mreZa svih mreZa sarna po sebi je nepresuSan izvor za prograshymere-pocetnike gladne znanja Od sluzbene dokumentacije preko specificnih tutorijala pa sve do videotutorijala Izbora doista ima mnogo Stoga ce yam naredne stranice kao buducem razvojnom inzenjeru za jednu iIi obje platforme sigurno biti vrlo korisne_

Tecajevi i edukacije

UCENJE UUCIONICI Nauciti osnovno stvaranje aplikacija za mobilne platforme moguce je i kroz nekoliko tecajeva Za sada ih nema mnogo i vecina se fokusira na Android no evo nekoliko korisnih tecajeva (i edukacija) koji ce yam itekako dati dobru osnovu za daljnji napredak i stvarni rad na razvoju apUkacija

ALGEBRA

gt Cilj Algebrina programa jest pruianje znanja i vjestina za samostalno izradivanje aplikacija za mobilnu platformu Android te njihovo plasiranje na trziste Pro laze se osnove programiranja u Javi uvod u programiranje za Android te SQL Zatim se edukacija usredotocuje na osnovnu izradu aplikacije te na druge aspekte platforme Android Cijeli se tecaj zakljucuje procesom objave aplikacije u sluzbenoj trgovini

CIJENAAkcijska cijena 590000 kn redovna cijena 791800 kn URL httplaLgebra hrledukacjjal razyoj-a plikaci japrogramershymobilnjb-aplikacija-androjdl

NETAKADEMIJA

gt Tehnicko veleuciliste u Zagrebu organizira edukaciju u trajanju od 110 sati podijeljenih na predavanja i primjere vjezbe zadatke za samostalno rjesavanje izvan nastave

projektni zadatak i zavrsni zadatak koji valja samostalno rijesiti Prolazi se cijeli niz specificnosti vezanib uz platformu Android a od polaznika se trati zavrsen tecaj objektno orijentiranog programiranja ili poznavanje tema obradenih u tom tecaju

CIJENA 812500 kn Cijena za studente 609375 kn URL httpaLgebra hrledukacjjal razyQj-aplikacijaprogramershymobilnih-aplikacija-androjdl

CRUZ

~j OSaplikaclja iPhIUI

---~ ---- ~-~ - -j~~-~~ bullbull

--~ __ _---- ~_~ ~ cWlt~~___ bull__ bullbull -~---- =~Uolt -gt

gt Kratki tecaj u trajanju tri ili pet dana koji organizira CROZ nudi osnove u programiranju mobilnih aplikacija za Apple iOS Upoznaje se s razvojnom okolinom Xcode te programskim jezikom Objective-C i njegovim konceptima zatim je tu pregled programskog okvira CocoaTouch koji se koristi u razvoju iOS aplikacija pregled naprednih koncepata te se konacno govori o razvojnom ciklusu testiranju aplikacija i procesu objavljivanja aplikacija u App Storeu

CIJENA Na upit URL httpwwwcroznetlrazyoj-iosshyaplikacija-ipbone-jpad

2013 STUDENI BUG I 77

I

Razvoj AntJroid aplikacija

gtSUeno kao i kod teeaja za razvoj apUkacija za iPhone CROZ nudi i kratke tecajeve za razvoj Android aplikacija (p05toje i tecajevi za 5amu Javu) Tecaj traje pet dana a prolaze 5e najvazniji aspekti razvoja od postavLjanja razvojnog sueeLja preko izrade korisniekog sucelja pokretanja novih aktivnosti te komunikacije medu aktivnostima do spremanja podataka te pozadinskih aplikacija 1 lokacijskih usluga

CIJENA Na upit URL bttplIwww croz netrazyojshyandroid-apUkacijal

GAUSS INFORMATIKA iPhone Developmenti Android Development

gt Domaca tvrtka koja se naLazi u Osijeku vet neko vrijeme organizira edukaciju za one koji tele razvijati za 105 ali iza Android Naravno edukacije st razdvojene iako su u odredenim segmentima sUene Npr oba se teeaja provode u grupama od po iest polaznika a za ciLj imaju polaznicima pribliziti principe objektnog programiranja te jezike za svaku od pLatformi (Java za Android i Objective-C za iOS) Osim toga poucava se cijeli niz drugih specifienosti potrebnih za razvoj za svaku od platformi

CIJENA Na upit URL hmrllgau55-informatikacoml programi-obrazovanjal

EDUKACENTAR Uvod u razvojAndroid aplilltacija

gtSemina r u trajanju 20 skolskih sati namijenjen je svima koji se zeLe upoznati s razvojem mobiLnih aplikacija na platformi Android Govori se 0 sueelju Eclipse 5 ADT-om i Android 5DK-u 0 izradi grafickih sucelja upoznaje se 5 programskim jezikom Java tu je i rad sa zvukom i drugim elementima te niz jednostavnih primjera apLikacija

CIJENA Na upit URL httplIwwwedukacentar hrl Sem ina rilRazvoj-mobiln ib-a p lj kadja

-SKULA NA INTERNETU Osim kLasicnih tecajeva moze se pronaci niz eesto kvalitetnih predavanja putem kojih je moguce usvajati vjestine potrebne za uspjesno programiranje Evo nekoLiko najzanimljivijih e-ueionica

MIT OPEN COURSEWARE

gtUz brojne druge seminare na ovom se svjetski poznatom sveucilistu mogu pronaci predavanja i seminari vezanih uz programiranje Zapravo cilj je ponuditi sve 5to se moze cuti i vidjeti na MIT-u i to sasvim besplatno Stoga 5e dobiva djeli niz materijala od udzbenika preko multimedijskih sadrzaja pa sve do zadataka projekata i primjera Ovo je obavezna stanica za sve one koji tek pocinju s programiranjem ali i one koje zanimaju i naprednija predavanja

URL bttpllocwmitedu(

COURSERA -Take the worlds best courses online for free ~ - -- - - - shy

gt Rijec je 0 Stanfordovu projektu za e-ucenje koji je u kratkom roku stekao vetik broj korisnika jer svima zainteresiranima omogucuje pohadanje tecaja koji predaje sveueitisni profesor 5 toga sveuciLista sasvim besplatno i online Predavanja ima mnogo pa se uz teme usko vezanih uz racunalstvo mogu p05lusati (i pogledati) brojna druga zanimljiva predavanja

URL bttplwww coursera ori

TREEHOUSE Take the worlds best courses online fOI fIee ~-~~ ~~~~ laquozt~~ gtlt~o~~gt _j~ ~

Jos jedna sve popularnija e-ucionica putem koje je moguce nauciti programirati u razlicitim jezicima i za razlieite platforme Dakako pokriveno je programiranje za iOS i za Android Na raspolaganju je vise od ti5uCU videozapi5a a tijekom ucenja valja rjesavati niz zadataka cime cete zasluziti znackice P05toji i sadrzaj za koji 5e mora placati pa su dostupna dva modela pretplate Silver koji stoji 25 dolara mjesecno te Gold koji 5toji 50 dolara

URL httpteamtreehouse com

UDACITY

78 I BUG STUDENI 2013

__

Kako programirati za Android iii iOS

gt lako nudi jedva tridesetak raznih tecajeva (najvise ih je iz podrucja racunalstva) ovo odrediste za online ucenje sve je popularnije Nije ni cudo jer mijenja nacin na koji se odvijaju klasiena predavanja naglasavajuci interaktivnost - neprestano se trazi rjesavanje zadataka i problema Upravo je zato ovo idealno odrediste za stjecanje osnovnih vjestina u programiranju

URL www udacitycom

GOOGLE DEVELOPERS UNIVERSITY CONSORTIUM

]jillliii ~r-shy1lt_ ~--O__I-_

~_~___ _tftWl_~_~__-l~tioIa_

-__ __ ~- shy

gt I sam Google radi na poucavanju pa je dostupan Google Developers University Consortium putem kojega je moguce pronaci niz predavanja iz razliWih podrucja no svih vezanih uz Googleove tehnologije Stoga je ova odlicno mjesto za ucenje razvoja za Android

URL httpsUdevelopers google comi university

-

~Internetski resursi

PROGRAMERSKA VRELA Premda su dva sluzbena portala za razvojne inzenjere (ona za iDS i onaj za Android) i vise nego dovoljna da pronadete odgovore na prakticki sve sto vas moze zanimati dok programirate (osim toga tu je i nezaobilazni Google) dostupno je i nekoUko drugih web stranica koje ee dobro doti pri ucenju ali i razvoju aplikacija

STACK OVERFLOW

bull

~ G ~~-j~y---- shyltc _middot11_1_ ----l~Jgt

C gt ~ toIoIto~__ lI~-

- - _ bull ~_f_ ~ _ ) -tc-rIo-WlluttgttllOl-

gtVelika zajednica koja radi na principu postavi pitanje i dobij odgovor To liko je popularna medu programerima da je gotovo sigurno da eete trazeci savjet putem Googlea medu prvim ponudenim rezultatima pronaci upravo odgovor sa Stack Overflowa

URL bttpstackoverflowcoml

MOBILETUTS+

Creatit Web$lte QII ~ GOtIgle f)J~middot~ --~1-----1M

9

gtJos jedna Envatova web stranica no koja se bavi iskljueivo raznovrsnim tutorijalima za mobilne platforme ponajvise iDS i Android Tu eete pronaci niz raznovrsni h kvalitetnih clanaka neki su informativne prirode i za cilj imaju upoznati eitatelje 5

odredenim segmentima razvoja a neki vode korak po korak pri izradi primjera aplikacije

URL bttplmobiletutspluscoml

JAVA CODE GEEKS gt Ako ste se odlucili programiratl uJavi i za Android avo je jedna od web stranica (mozda bolje receno

zajednica) koju definitivno ne biste smjeli propustiti Tu cete pronaCi doslovce sve 5tO vam padne na pamet od zanimljivih elanaka preko tutorijala do primjera koda Dakle sve 5tO jednom programeru koji uti moze zatrebati

URL wwwJavacodegeekscom

ICODEBLOG

gt Premda se iz naziva ovoga bloga moze zakljueiti da se fokusira iskYucivo na Appleovu platformu zapravo cete ovdje pronaci hrpicu zgodnih (i nerijetko korisnih) tutorijala koji su ponekad popraeeni i videoisjeccima Osim toga tu je i niz primjera gotovog koda (snippeti) te drugi zgodni resursi

URL www icodeblog com

BUG ONLINE FORUM

~~~- 7~~h -

-Programiranie za mofiilne plaftorme

gt I nas je forum izvrsno mjesto za komentiranje i trazenje savjeta ali i pruzanje pomoei manje iskusnima Tim viSe sto je dostupna i kategorija upravo namijenjena programiranju za mobilne platforme Forum moze posluziti i kao mjesto za testiranje aplikacija - clanovi nerijetko znaju ponuditi svoje iskreno misljenje a apUkaciji za koju to zatrazite

URL bttpmiddotwwwbug hrlforum

2013 STUDENI BUG 119

UZ KNJlGE DO SAVRSENSTVA Osim internetskih resursa jedan od vrlo vaznih elemenata pri ucenju razvoja za mobilne platforme (ali i opcenito za programiranje) svakako su knjige Srecom knjiga ima napretek no nisu sve prikladne za pocetnike i one koji nemaju bas nikakva iskustva u programiranju Evo nekoliko naslova (tiskanih i e-knjiga) za Android i iOS uz koje ce pocetak u programiranju biti nesto laksi a koje mozete pronaci na Amazonu

lHf~~~taJ~-1 EDBURNmE Zgodna knjiga koja vodi od samih osnova pa do slozenijih koncepata prateci razvoj igre Sudoku Ova knjiga kroz prakticni primjer doista pomaze pri ucenju razvijanja za Android i stjecanja vaznih vjestina

Knjige za iOS

lOS Prgramming The Big Nerd Ranltlh Guidemiddot JOE CONWAY AARON HILUGASS Sjajna knjiga koja vodi i pokazuje kroz osnovne koncepte za razvoj aptikacija za iOS Ritam obrade materijala je dobar navedeni primjeri aplikacija nisu suhoparni i ovo je knjiga koju vrijedi procitati

Sams Teach Yourself iOS 6 Application Development in 24 Houus lDHN RAY

l~regelcopyp~lent in LAUREN DARCEY lako je i ova knjiga itekako pogodna za pocetnika na trenutke moze Jos jedna knjiga iz iznimno poznate serije instrukcijskih knjiga koja ce biti nerazumljiva onima koji nisu ovladali konceptima objektno itekako dobro doti pri svladavanju prvih koraka u razvoju za Android orijentiranog programiranja Stoga to treba imati na umu dok ju citate i

uz nju vjezbate

IAN F DARWIN iOS() Cookbeok VANDAD NAHAVANDIPOOR OReilly je dobro poznata izdavacka kuta cije su programerske Slicno kao i za Android dostupne su j kuharice za iOS (stoga znak kuharice dobro prihvacene jer nude konkretna (i vecinom kvalitetna) zamijenite inacicom i~S-a) Aktualna je kuharica za iOS 6 no moze se rjesenja za mnoge programerske probleme uskoro ocekivati i za iOS 7

Beginning iOS 6 Development Expioring the iOS SDKmiddot DAVID MARK JACK NUTTING JEFF LAMARCHE FRmRIK OLSSON

lako knjige iz serije za neznalice obicno imaju negativnu konotaciju Dobro poznavanje iOS SDK-a vrlo je vazno za uspjesno programiranje a zapravo su prilicno korisne Nacin na koji obraduju temu programiranja ova ga knjiga prilicno dobro rasclanjuje i objasnjava Doduse ovo je tek prikladan je upravo pocetnicima jedna od mnogih knjige iz iste serije

80 I BUG STUDENI 2013

Effedive ObjfiCthle~C 20 - MATI GALLOWAY Mozda i najbolja knjiga koja se bavi programskim jezikom Objective-C i nudi konkretne (i odlicne) savjete No ovo nije knjiga za one koji nimalo

Android no za totalne pocetnike Stoga ovu knjigu u ruke uzmite ne poznaju jezik Objective-C te Cocoa i Cocoa Touch tek nakon sto ste stekli odredeno iskustvo

nudi doista iscrpan pogled na razvoj aplikacija za

ALATI Kako programirati za Android iii iOS

Bez alata nema zanata Kako svaka platforma za koju se programira donosi i svoje specificnosti ne cudi da i za svaku platformu postoje i specijalizirani razvojni alatilzuzetak tu nisu ni Android i iOS a osim sto postoje sluZbeni alati i razvojna sucelja koji su i vise nego dostatni za razvoj dostupni su i drugi viseplatformski alati koji olakSavaju istodobni razvoj za vise platformi No uz njih tu su i druge aplikacije ali i nezaobilazni te mocni SDK-ovi

~1i~11-shy100t ~il15_ 2~ai~_

~ ~-shyi~~01( ~-lt

gtb b ~-shyshy~--shy~~shy_shy~

flj~tjIfIHltIU_

~ 1 Ilt~ w tOlIltlA tth a~shy~~ ~__~1iIowI

~=-lii ~shy

Profesionalne tvrtke koje se bave razvoshyjem mobilnih aplikaeija obicavaju stroshygo razdvajati programere koji se specishyjaliziraju za Objeetive-C i za Android

Javu Ne samo da su ta dva jezika razlitita nego je i pristup razvoju drukciji Razlitite su i dizajnerske smjemiee cijeli je ekosustav drukciji premda je rezultat u konacniei isti stvara se mobilna aplikacija ali za razlicite platforme Ipak te razlike slieno kao i kod drugih tema znaju neobicno utjecati na sve one koji se bave razvojem pa se neprestano iznova ponavljaju debate oko toga sto Je bolje - Appleov iDS iii Googleov Android

Dio tog debatiranja nerijetko obuhvaca i razvojne alate S jedne je strane tu Eclipse poznato integrirano razvojno sucelje za Jashyvu a s druge rclativno ugladeni Xcode Ono sto je svakako nesporno jest einjenica da ce pocetnici pa i oni iskusniji daleko bde prishyhvatiti nacin na koji radi Xcode a daleko ce tde nauciti da se snalaze u Eclipseu kojl je po svojoj prirodi prilieno kompleksan Isto vrijedi i kada se razvojno okruzenje prvi put postavlja Kod razvoja aplikacija za iPhone I iPad sve se svodi na to da se nabavi raeunalo s Mac OS-om X instalira Xcode I moze se poeeti s programiranjem Bez mnogo petshyIjaneije za pocetak

U slucaju Androida stvan bas i nisu takve no uz nekoliko pocetnih koraka te dodatshynog preuzimanja neizostavnih dodataka u rukama cete imati prilicno mocno razvojno

sueelje U njemu se doista isprva ponesto teze snaci no jednom kada se na njega navishyknete eak nl najzapetljanlje radnje viSe nece predstavljati problem iako ce i dalje uzimati viSe vremena nego sto bi trebale Jedna od kljuenih prednostl Androlda pred i~S-om definitivno je einjenica da sluzbeno razvoino sueelje radi na vise platformi ukljucujuci Linux i Mac OS X

Jednostavnije receno za razliku od Appleshyove metodologlje razvoj za Android moze biti sasvim besplatan iii ako nista drugo daleko jeftiniji cak i kada se u obzir uzme

Xamarin Studio rjesenje je za izradu viseplatformskih aplikacija ito pisuci k6d u programskom jeziku C pri cemu se mogu koristiti nativni API-ji sto je idealno rjesenje za NET programere (~

i naknada koju je potrebno platlti da bi se aplikaeije objavljlvale u sluzbenim trgovishynama U slucaju iDS-a obavezno se mora uclaniti u iDS Developer Program sto stoji 99 dolara potrebna je kupovina Appleova racunala a valja imati i iPhone Clanarina za razvojne inzenjere Android aplikacija za objavu uradaka na Google Playu stojl 25 doshylara no s adresom iz Hrvatske nije moguce prodavati apUkacije No zato je testiranje aplikacija na fizickim uredajima s Android OS-om jednostavno dok je procedura za iDS daleko slozenija

Tlta(jl~m Studio rftlJ(IItI~tMuIIIIIu_-

Titanium Studio jos je jedan moderni IDE koji omogucuje brzl razvoj nativnih mobilnih aplikacija Razvojno sucelje temelji se na Eclipseu a uz Titanium dolazi i njegov vlastiti SDK koji omogucuje razvoj s pomocu HTML-a PHP-a JavaScripta Rubyja i pythona (yJwwappceleratQuQm)

2013 STUDENI BUG I SJ

Android Studio novi je Googleov poku~aj da napravi razvojno 5ucelje Temelji 5e na razvojnom sucelju IntelliJ IDEA a nudi vise mogucnosti od Eclipsea sADT-om kao sto su GradLe refaktoriranje koda specifieno za Android ugradenu podrsku za Google Cloud ProGuard i drugo (httpgoo gllUEvL)

Nerijetko najveci problem s razvojnim suceljima neovisno 0 tome za koju su platshyfomlU obicavaju imati svi oni kOji su navikli raditi u Microsoftovu razvojnom sucelju Visual Studio Tome je tako pogotovo ako je rijec 0 Eclipseu koji bi se iskusnom razvojshynom inzenjeru za Microsoftove tehnologije mogao uciniti kao posvemaSnji metez SHcno vrijedi i za Xcode jer se treba naviknuti i na drukcije sucelje i principe samoga Mac OSshya X Srecom tehnologija nikada ne miruje i ako neSto stalno doista jest onda je to konstantan razvoJ

Tako su nastali alternativni alati kao sto je Xamarin koli se dobro integrira u Visual Studio cineci viseplatformsko programiranje tim jednostavnijim Ne samo da je Xamarishynom moguce istodobno razvijati aplikacije za vise platformi nego ih je moguce pisati u sasvim drugom jeziku - C-sharpu (C) Doduse takva alternativna viseplatformska rjdenja ipak nisu bez nedostatka Prije sveshyga tako napravljene aplikacije u sustini nisu nativne aplikacije (uvijek se mora dogoditi prevodenje sto moze rezultirati novim bushygovima i problemima) a to se reflektira i na performanse i na same mogucnosti Tu je i problem velikih razlika u sucelju aplikacija za razHcite platforme nekonzistentnosti kOje se zbog toga pojavljuju te brojni drugi proshyblemi To ne znaci da se takva rjesenja mora eliminirati nego samo da treba biti svjestan njihovih ogranicenja

No sto je zapravo potrebno za programirashynje U samoj sustini uz racunalo dovoljno je neko kompatibilno razvojno sucelje sluzbeni SDK (Sotware Development Kit) a uputno je imati i mobilni uredaj s OS-om za koji namjeravate razvijati budud da je to jedini konkretan nacin za istinsko testirashynje aplikacija Sto se sucelja tice bas kao i preferirane platforme iIi izbora uredaja sve je stvar osobne preferencije i formiranja navike (iako Xcode prednjaci sto se tice izrade grafickog sucelja) Naravno kada se prevladaju osnove i krene u razvoj konkretshynijih projekata bilo samostalno Hi u timu svijet mobilnog programiranja pokazat ce se cak i 0pseZnijim nego sto je to u slucaju izrade klasicnog softvera Iz te perspektive razvojno sucelje kole koristite postat ce one cime ga se od pocetka i trebalo smatratl tek jedan od alata u nizu potrebnih za uspjesan razvoj aplikacija

82 I BUG STUDENI 2013

Viieplatformske i druge alternative

ALTERNATIVNO PROGRAMIRANJE Osim sluzbenih razvojnih suceLja te osnovnih SDK-ova tijekom je vremena nastao i zavidan niz drugih alternativnih razvojnih sucelja dodatnih alata te hrpa nezavisnih SDK-ova koji razvoj aplikacija na ovaj ili anal nacin cine drukcijim i fLeksibilnijim

PHONEGAP

gtPhoneGapje besplatnorjesenje otvorenog koda (FOSS) namijenjeno

izradi aplikacija za Android iPhone i iPad uredaje (aliidruge) pri (emu se koriste standardni web jezici (HTML CSSi JaitaScript)Za one koji nekim Iudom prepozriaju slilnost 5 Apache Cordovom - u praVll5u PhoneGap je svojevrsna distribucija Apache Cordove u sustini su oboje namijenjeni viseplatformskom razvijanju mdbilriih aplikacija pri cemu omogucuju piistup nativnim funkcijama smartfona kaosto su kamera cikcelerometar i kompas Upravo je stoga avo sjajan SDK za one koji imaju ikustva 5 JavaScriptom i zele napraviti nesto naprednije mobilne aplikacije i to istodobno za vise platformi a uz minimalne ili nikakve intervencije

URL www phonegapcom

MOSYNC gtJos jedno besplatno rjesenje otvorenog koda koje omogucuje izradu nativnih mobilnih aplikacija koristeci jedan te isti programski kod Oslanja se na CC++ ili HTMlSI JavaScript te kombinaciju svega a

omogucuje kompiLiranje aplikacija za do devet razlicitih platformi istodobno To dakako ukljucuje iOS i Android Naravno tu su aplikacijska programska sulelja (API) potrebna za pristup specificnim mogucnostima smartfona i tableta a tu je i MoSync Reload koji omogucuje izradu viseplatformskih aplikacija koristeCi iskljulivo HTMlS i JavaScript (slicno kao PhoneGap)

URL www mosync com

RHOMOBILE

gt RhoMobile Suite zapravo je paket koji se sastoji ad RhoElementsa Rhodesa RhoConnecta RhoStudia RhoHuba i alata RhoGaLLery koji zdruzeno (bolje receno tu je Rhodes framework otvorenog koda koji se temelji na Rubyju) omogucuju eLegantan razvoj aplikacija bez obzira na ciljanu platformu Prednost je ito programski kad treba pisati samo jednom a on ce se kompilirati za praktiCki svaku mobilnu platformu koja je trenutno dostupna Iza ovoga rjesenja stoji Motorola a pohvalno je ito Rhodes nudi princip rada Model View Controler te brojne druge moguCnosti Rijec je dakle a rjesenju koje svakako treba iskusati

URL httpRgQQgllm9xt2

Kako programirati za Android iii iOS

RAZVOJIGARA

UMJESTO APLIKACIJA middot IGRE gt Razvijanje igara prilicno je kompleksan posao a osim samoga programiranja potrebnoje imati rjesenja za cijeli niz drugih aspekata koji su potrebni kada zeLite izraditi kvalitetnu igru Stoga i ne cudi da se dobrim igrama obicno bave timovi a vrlo rijetko individualci No Clanovi takvoga tima svakako moraju biti upuceni u programiranje i dobro se koristiti razvojnim alatima - i ne sarno onima koji sluze za razvoj klasicnih aplikacija Nairne stvaranje igara bas kao i aplikacija otezavaju velike razlike medu platformama a to je dodatno naglaseno upravo kod izrade igara Srecom postoje viseplatformska rjesenja koja takvo sto ipak cine manje bolnim nego sto doista jesUedno od najpoznatijih viSeplatformskih rjeshysenja upravo je Unity 3D Ono je dovoljno kompleksno za razvoj zbilja fantasticnih igracih naslova a istodobno dovoljno jednostavno da njime mogu ovladati i totalni pocetnici Ono sto mnoge iznenaduje svakako je cinjenica da je inicijalno ovaj engine sasvim besplatan a specifican je i po tome sto podrzava tri programska jezika (UnityScript C i Boo) Doduse besplatna inacica ima i odredenih nedostataka no puna Ushycenca stoji 1500 dolara sto i nije mnogo s obzirom na ono sto se nudi Uz Unity 3D dostupna su i druga rjesenja kao sto je Marmalade SDK Rijec je 0 moenom viseplatformskom SDK-u koji omogucuje izradu mobilnih igara za smartfone i tablete Dakako za rad s ovim SDK-om

Vrhunsko rjesenje za izradu atraktivnih viseplatformskih mobilnih (i drugih) igara moguee je dobiti sasvim besplatno 0Jww unity3d com)

potrebno je znanie programskog jezika C++ te odredeno programersko iskustvo Sam SDK moguee ie iskusati besplatno 30 dana sto je dovoljshyno vremena da se prode kroz hrpicu tutorijala a nakon toga ovaj SDK valja kupiti i to prema razlicitim modelima Najjeftinija inacica stoji 150 dolara godisnje po racunalu (Community) nju slijedi ona za 499 dolara godisnje po racunalu (lndie) zatim je tu model Plus koji stoji 1499 dolara godisnje po racunalu (s ovime se dobiva podrska i za rashyzvoj igara za pametne televizore) dok profesionalna i najopremljenija inacica stoji 3499 dolara godisnje po racunalu II

PODESAVANJE RAZVOJNOG OKRUZENJA ZAANDROID

SVE UJEDNOM PAKETU gt Eclipse kao standardno razvojno sucelje za Android nekada je trebalo rucno podesavati dodajuei mu Android SDK Tools te ADT Plugin (instalirani se JDK podrazumijeva) Sreeom otkad se pojavio ADT Bundle ko]i u jednom paketu donosi sve sto je potrebno podesavanje samoga sucelja prakticki je nepotrebno osim ako vee koristite Eclipse za programiranje u Javi i namjeravate prosiriti razvoj apUkacija na Android Tada treba proei dobro dokumentirani proces podesavanja sucelja koji cete pronaei na Googleovu portalu za razvojne inzenjere ADT Bundle dakle pocetak programiranja za Android cini doista lakim Treba samo na zeljenu lokaciju dekomprimirati sadrzaj Zip arhive (cijeU eete paket pronaei na DVD-u koji ste dobili uz ova] broi) otvoriti mapu eclipse i pokrenuti izvrsnu datoteku eclipseexe Sve ostalo vee je spremno Doduse medu vaznijim koracima svakako je definiranje virtualnog uredaja (emulatora) za testiranje aplikacija a po potrebi ee se kasnije morati dodavati i drugi paketi ADT Bundle i to cini jednostavnim

Kreiranje simulatora Android Virtual Device Manager najlaksi je nacin za kreiranje virtualnog uredaja Stoga ga valia pokrenuti tako da se u Eclipseu klikne na Window i zatim na AVD Manager U prozoru koji ee se otvoriti valia kliknuti na New Zatim valja unijeti ime virtualnog uredaja iizabrati vrstu uredaja

(veCinom je dovoljno izabrati uredaj prema velicini njegova ekrana) prema cemu ee biti definirane i druge postavke Parametre je moguee podesavati prema vlastitim preferencijama pri cemu ne treba pretjerivati (npr kod definiranja kolicine radne memorije) a svakako je uputno kvacicom oznaciti opciju Use Host GPU Jednom kada je sve definirano ostaje sarno kliknuti na gumb OK Virtualni uredaj pokreee se tipkom Start nakon cega valja biti strpljiv jer se emulator tradicionalno pokreee prilicno sporo

Upravljanje paketima Android SDK alate platforme i druge komponente organizira kao pakete koje je moguce preuzimati i instalirati Android SDK Managerom Pronaci cete ga u rnapi gdje je dekomprimiran ADT Bundle u obliku izvrsne datoteke (SDK Managerexe) Instalacija paketa maksimalno je jednostavna potrebno je sarno kvaCicom oznaciti zeljeni paket i zatim kliknuti na gumb koji ee pokrenuti instalaciju Medutim svakako treba instalirati SDK Tools SDK Platform-tools i SDK Platform System Image Android Support i primjeri koda preporucljivi su iako nisu nuzni No za pocetnike (i druge) svakako su to dobrodosli dodaci No kako razvijanje aplikacija bude postajalo ozbiljnije tako ce i potreba za paketima porast pa cete nerijetko svracati upravo u Android SDK Manager po nove pakete i azuriranja sect

PODESAVANJE RAZVOJNOG OKRUZENJA ZAiOS

fi ~srJH un~~~mer l ~i ~_ j ~ g~~l-1lt ~ ~J ~Iit~

Xcode

gt Xcode vise nije jedino razvojno sucelje za izradu apUkacija za iOS no dugo je to prakticki bio (vee je neko vrijeme dostupan JetBrainsov AppCode dok viSeplatformska rjesenja neeemo usporedivati) Posebnih koraka za postavljanje zapravo i nema a sve sto je potrebno uciniti jest na Appleovu racunalu pokrenuti App Store u polje za pretrazivanje utipkati Xcode j pokrenuti instalaciju Svakako je potrebno imati aktivnu vezu s Internetom i biti strpljiv jer ce se preuzeti gotovo 2 GB podataka Jednom kada je Xcode spreman s programiranjem s moze zapoceti odmah a jednako je tako spre~an i simulator Ono sto mnoge muci jest da Je za Xcode potrebno imati Appleovo racunalo Doduse moguee je posluziti se trikom virtualizacije te instalirati Mac OS X 108 Il~ visi u virtualnu masinu Medutim takvo Je sto nelegalno premda moze posluziti iskljucivo u edukativne svrhe - samo kao svojevrsno eksperimentiranje prije nego odlucite kupiti barem Apple Mac Mini

2013 STUDENI BUG I 13

ltW

ZIVOT APliKACIJE -

Od testiranja do objave

Jednom kada je onaj osnovni razvojni dio zavrsen i aplikacija se cini spremnom valja ju testirati Osim testiranja usimulatoru uvijek je prije objave uputno aptikacije provjeriti i na fizickim uredajima najbolje na vise od jednog Dok 5 jedne strane u slucaju Androida testiranje aplikacije nije problem jer je vrto jednostavno iskoristiti gotov APK ustucaju iOS-a stvari su znacajno stozenije i skupLje Isto vrijedi i ustucaju konacne objave aplikacije na stuzbenih trgovinama Evo sto morate znati

estiranje aplikacija Android USB debugging definitivno je neizshy opcija je koju svakako bjezno a premda se treba ukljuciti na uredaju zapravo odvija i tijeshy koji ce postuziti za testiranje kom samog razvojshy aplikacije (pronaci tete ju

nog procesa ono konacno u Settings pa Developer testiranje prije same objave options) aplikadje uvijek je pozeljshyno odraditi na fizickim uredajima Iz perspektive tadja uredaja za Android razvojnog inrenjera za Anshy ogromna pa je samim droid takvo sto uopce ne time razvojnim inzenjerishypredstavlja problem Dapashy ma tesko uzeti u obzir sve ee vee je tijekom samog rashy vrste uredaja koji se nalashyzvoja umjesto u emulatoru ze u opticaju Isto vrijedi testne primjerke aplikadje i predvidanje ponasanja moguee pokretati na jedshy aplikadje na raznim vershynom iii viSe fizickih ureshy zijama platforme premda daja Dovoljno ih je sarno SDK tu poprilicno pomashyUSB kablom prikljueiti na ze Kako bi smartfon s raeunalo a onda aplikaciju Android OS-om posluzio

je ovisno 0 platformi na kojo se razvija (na Mac OS-u X stvari ee raditi bez ikakve inmiddot tervencije dok je i za Windowse i za Linux potrebno odraditi nekoliko koraka pri eemu je Linux ponesto sozeniji)

Nakon toga na samom uredaju valja ukljushyeiti USB debugging te ee iduci put kada se u Eclipseu pokrene debugiranje apHkacije medu ponudenim uredajima biti i onai prishykljueen na raeunalo Zelite Ii pak provjeriti je Ii uredaj dostupan to je moguce napraviti naredbom adb devices 8to se testiranja apHkacija na iPhoneu iIi iPadu tice stvari

The easiest way to get feedback on your mobile application

Sign up free -7

~~ ~~-~ BETA FAMILY IN NUMBERS WIW MCRE THAN III=

Testiranje aplikacije moguce je prepustiti i drugima putem servisa kao 5tO je The Beta Family Rijec je 0 crowdsourcing platformi koja omogucuje da drugi testiraju j daju misljenje 0

aplikaciji na kojoj radite wwwthebetafamilycom

su daleko sloznije Iako se veCina razvojnih inzenjera grozi postupka kroz koji treba proei on ee ih ipak na kraju docekati Zasto Apple nije pojednostavio proceduru pitanje je 0 kojemu se moze debatirati no stvari Sil

takve kakve jesu Sreeom tu je okvir koji ee vas kroz nekoliko koraka sprovesti do uspjeha a pozitivno je 5tO jednom kada proshyZivite ovaj proces bit ee jednostavnije proCi kroz proces pripreme aplikacije za objavu u sluzbenoj trgovini Procedura za Google Play opet je nesto jednostavnija

No kljucna je razlika 8to se od prodaje aplishykacija putem App Storea moze zaradivati dok to nije moguce putem Google Playa sve dok ste registrirani 5 racunom u Hrvatskoj jer se ona ne nalazi na popisu poddanih zeshymalja Sreeom zarada je i daje moguca kroz reklame 110 aplikacija mora biti naznacena kao besplatna

pokretati izravno iz Eclipshysea iIi iz naredbenog retka (ADB)

Dakako fizieki uredaj u tom slucaju ipak ne moze zamijeniti emulator jer je fragmenshy

84 I BUG STUDENI 2013

za testiranje dovoljno ga je dakle prikljueiti na raeunalo Ako vee nisu svakako valja instalirati i potrebne upravljacke programe i ostale dodatke lito

Kako programirati za Android iii iOS

KakD te~tiratiiOS ~ aplikacJe na IPhoneu

APPLEOV RAZVOJNI PROGRAM Apple proceduru registracije uredaja za testiranje aplikacija nije ucinio jednostavnom pa i ne cudi da mnogi pribjegavajujailbreaku kao jeftinom i zacudo jednostavnijem rjesenju No sLuzbeni je nacin jedini podrzan a za njega cete se morati uclaniti u iDS Developer Program sto ce vas stajati 99 dolara godisnje Stoga pripremite kreditnu karticu i cvrste zivce za igru pokusaja i promasaja

lOS DeveIotgter Inlgram UUclraquoJgtIyltWklltU(I--shybull

ICorak-2 -

Generiranje certifikata 1

rA_~-Clt----shyOIGrmoollIl1ltG4

~16illttlt wt(tltjf1tlO4~_ulOll_

- ~

Kmiddotmiddotbullmiddotorakmiddot4_

_

bull _ _ n_~

Nakon ~to je certifikat spreman potrebno je registrl~ati uredaj koji ce sluziti za testiranje Ponovno se valja vratiti na iDS Provisioning Portal te pronaci poveznicu Devices i zatim kliknuti na Add Devices Dovoljno je upisati proizvoljan naziv te dodati Device ID ili UDID Rijecje 0

jedinstvenoj vrijednosti od 40 znamenki kojom se uredaj identificira UDID je moguce doznati ili putem iTunesa ili

- ---shy-shy

-~-~~-~-- - ~~~- ~

putemscodeaj uhutarQrgani~fa AkocetekoristitiJtuneskakobiste bull kQpirali ovugolemuvi-iJednost prvo ju l)ior~M (jllokUknoJiitiltiilptitjsriuti kOO1QinadjutipkicqrnmandifCNqkori tQgq uXci)deu yafjauOrgaljzerllPQ1J DeviqesproniitIsR9JejiiiPtJOlletEL bull kli~llutiriagumb Us~JQr[)eVetoPrnentmiddot

middotSretom ovo jenQjoezJQlnij(trenutjlk middotbull jerceXcQde~clltdegrllat~kiprlJetisye potrebn siOSPJQvi~iQJiing Portala st9seprljavit~sect c odgOl(araiLitimkOrisnikimPQdgcimmiddot bull

- -~~ ~~ ~~ -~-~- ~ ~-~--

2013 STUDENI BUG I 85

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 3: Kako Programirati Za Android 1

UCENJE

Svijet razvojnih inzenjera ispunjen je neprestanim ucenjem jer je svijet mobilnog (i klasicnog)

programiranja iznimno dinamican Stovise jednom napisane metode nece uvijek vrijediti jer se i Sam

programski jezik razvija i mijenja No da bi se uopce zapocelo s programiranjem potrebno je

svladati osnove a tek onda svladavati specificnosti svake platforme i jezika s kojima se suocavate

~dukqltija lJcenje11strazlVanJe

N auciti programirati i zatim se time doista i baviti zivotni je poziv bas kao i brojna druga zanimanja Danas

nikada nije bilo Iakse uCiti programirati i to ne samo zahvaljujuCi golemom broju edukativnih materijala koji se mogu proshynaCi diljem Interneta te brojnim forumima na kojima iskusni programeri i oni koji tek pocinju mogu raspravljati 0 temama kOje ih muce i ponuditi rjesenja nego i cinjenkom da su razvojne okoline prilicno uznapreshydovale pa razvoj cine daleko laksim SVijet programiranja nikad nije bio zanimljiviji ali ni opsezniji

Ono s cime se programeri-pocetnici kojima je ova tema i namijenjena obicno suocavaju jest potreba za svladavanjem samih osnova Krenuti u svijet programiranja nije lako i kao i u brojniro drugim djelatnostima nekima ce Zivot razvojnog inzenjera daleko vise odgovashyrati nego drugima Koncepti kOje treba svlashydati nekima ce biti neshvatijivi nekima ce se upornost isplatiti dok ce drugi kroz taj svijet proIaziti elegantnije i bezbolnije No u koju god skupinu pripadali jedna je od najvaznijih odlika razvojnog inzenjera upornost i velika stvaraIacka zelja zbog kOje neee odustati Cak i kada rezultati naizgled izostanu ne treba posustati jer ee rezultati neizostavno postati vidljivi iako se to u nekom trenutku ne cini vjerojatnim

Koji je najbolji naCin za ucenje programicashynja vrlo je individualno Medutim ucenje i istrazivanje sastavni su dio tog puta a razvojshyni inzenjeri neprestano moraju iznova uciti - cak i one vee stecene vjestine jer je razvoj jezika prilicno dinamican pogotovo sto se tice mobil nih platformi Za razvoj aplikacija nije dovoljno nauciti tek osnovne programske koncepte i jedan jezik Stovise programski je jezik tu zapravo najmanje bitan Vjestine kOje se traze mnogobrojne su pa vee i samo to predsravlja velik izazov no ako se steknu kvashylitetni temelji sustinski razumiju podatkovne i kontrolne strukture stvari ee biti sve lakse sa svakim novim korakom

76 I BUG STUDEM 2013

Uciti je moguce na nekoliko naCina studiranjem pohadanjem tecajeva mukotrpnim citanjem knjiga i

brojnih tutorijala te kombinacijom svega spomenutog

Java ili Objective-C Programski jezici (ukljushy

cujuCi i skriptne) naime koriste slicne elemente i principe koji se onda mogu iznova koristiti kod ucenja novoga jezika njeshygove sintakse i specificshynosti zata su tipicna poshycetnicka pitanja je Ii lakse programirati uJavi iIi jezishykom Objective-C bespredshymetna To pak samo znaci da zivot razvojnog inzenjeshyra svakako potpada pod poznatu i cesto spominjashynu sintagmu cjelozivotshynog ucenja no s jednom sustinskom prednoseu amp0 je veee iskustvo to ee biti lakse nauciti programirati za druge platforme Samo uvijek treba imati na umu specificnosti odredene platforme Npr kod razvoja mobilnih aplishykacija uvijek na umu treba imati da ee se one izvrSavati na uredajima s ogranicenim kapacitetom baterije pa su optimizacije vrio vazne

Jedna od strategija na putu do postanka rashyzvojnim inzenjerom jest upisati odgovarajuCi studij Domaea sveucilista nude programe koji su vezani uz samo programiranje i racunalstvo Medutim studijski programi nisu usko specijalizirani nego imaju za cilj ponuditi kvalitetan (i prilicno sirok) temelj za daljnje samostalno ucenje specificnih jezika i tehnologija Ono sto ee se studijem svakako dobiti jesu jasne osnove programishyranja iako se na studijima previse inzistira

It I)Mlope

t~ i lOS Dev Center ~ - - ~ 1 ~

_Al_~ ~~ ltON t~~rbull

~____ C-MWIl t$JltibIQI

ra___ nezaobilazno je odrediste za sve one koji tek tele

nautiti izradivati aplikacije za iOS ali i koji vee dulje vrijeme rade na njihovu razvoju (httpsIdeyeloper apple cQmideycenterios)

na algoritamskom programiranju te rjesashyvanju zadatka koji ee rijetko imati stvarnu primjenu (na stranu izuzeci koji kroz razne seminare zainteresiranim studenima zele pribHziti stvarni razvojni ciklus aplikacija) No sve je to dio akademskog obrazovanja te samo poticaj da svatko tko se zeli baviti razvojem mobilnih aplikacija takvo sto S

dobivenim temeljima zapocne samostalno Formalno obrazovanje za one koji zele

naueiti stvarati aplikacije u kracem roku svashykako je predugacko a mnogima i nedostizno jer su vee s formalnim obrazovanjem zavrshysilL No i tada se moze obrazovati i stvarati temetje kroz razne teeajeve bez obzira na studij U Hrvatskoj ih je u ponudi nekoliko

- -

Kako programirati za Android iU iOS

i svi se veCinom fokusiraju na Android sto je otprilike razumljivo Nairne za razvoj iOS aplikacija potreban je Mac te je pritom potrebno platiti i 99 dolara godisnje za iOS Developer Program a takva investicija u danasnje vrijeme nije bas za svaciji dzep Kako bi se pocelo programirati za Android potrebno je bilo kakvo racunalo (moze biti instaliran i Linux) te besplatni razvojni alatL Za isprobavanje aplikacija na fizickim uredajima nije se potrebno registrirati kao razvojni inzenjer (time se dobiva mogucnost objave aplikacije u sluzbenoj trgovini) pa je i to jedna od prednostL

--1--- I ~-----~ __ootItltItI~ _~ -----~----------

=~ j =-~u~==-t-shy~--middot-I e~VOlltFItSI~

-~ qn ====~ ~-~

~tIetcllQo9v

~f]===~f==~_ 2~H

~~tshy__ ~I Mttlt

~l

~It -IS~Cff~Dldccl - =9 rn- -- shy

1 - _hOljbigt ~ a_~~

~futAdDilyttl~

Jt9

51100 kao Apple i Googb~ ima vlasmi centar namijenjen razvojnim inzenjerima ali i totalnim pocetnicima Tu je stvarno sjajna dokumentacija ali i hrpica pocetnickih tutorijala (bttp developer android comtraining)

Samoucenje kao paradigma Tecajevi su dakle svakako dobar pocetak

jer ce nakon zavrsenog tecaja neki koncepshyti koji se na prvi pogled doimaju suvise slozenima biti demistificirani jednako kao i nacin na kOJi se koristi sarno razvoJno sushycelje te cete sted ispravnu metodiku rada U samoj sustini nauciti programirati nije teSko no nauciti da pisete kvalitetan kOd jest Upravo tu ldi zamka za pocetnike koji nerijetko umjesto da programski kOd u raznim materijalima prepisuju s razumishyjevanjem sarno kopiraju ne razmiSIjajuci previse 0 tome sto iz njihove perspektive svojevrsni snippet zapravo radi i kako utjece na same performanse aplikacije te njezine druge aspekte Zato je iznimno vazno dobro se upoznati sa svime 5tO odredena razvojna platforma nudi ukljucujuci njezine biblioteshyke te doista dubinski poznavati platformu za koju razvijate

To pak podrazumijeva mnogo istrazivanja i eksperimentiranja ali sugerira i da je za programiranje najbolje jednostavno s njime krenuti Od samih osnova pa sve do najsloshyzenijih koncepata te barem djelomice uciti kroz pokusaje i promasaje Na tom putu svakako pomazu knjige pa se valja prirediti na tu investiciju Srecom mreZa svih mreZa sarna po sebi je nepresuSan izvor za prograshymere-pocetnike gladne znanja Od sluzbene dokumentacije preko specificnih tutorijala pa sve do videotutorijala Izbora doista ima mnogo Stoga ce yam naredne stranice kao buducem razvojnom inzenjeru za jednu iIi obje platforme sigurno biti vrlo korisne_

Tecajevi i edukacije

UCENJE UUCIONICI Nauciti osnovno stvaranje aplikacija za mobilne platforme moguce je i kroz nekoliko tecajeva Za sada ih nema mnogo i vecina se fokusira na Android no evo nekoliko korisnih tecajeva (i edukacija) koji ce yam itekako dati dobru osnovu za daljnji napredak i stvarni rad na razvoju apUkacija

ALGEBRA

gt Cilj Algebrina programa jest pruianje znanja i vjestina za samostalno izradivanje aplikacija za mobilnu platformu Android te njihovo plasiranje na trziste Pro laze se osnove programiranja u Javi uvod u programiranje za Android te SQL Zatim se edukacija usredotocuje na osnovnu izradu aplikacije te na druge aspekte platforme Android Cijeli se tecaj zakljucuje procesom objave aplikacije u sluzbenoj trgovini

CIJENAAkcijska cijena 590000 kn redovna cijena 791800 kn URL httplaLgebra hrledukacjjal razyoj-a plikaci japrogramershymobilnjb-aplikacija-androjdl

NETAKADEMIJA

gt Tehnicko veleuciliste u Zagrebu organizira edukaciju u trajanju od 110 sati podijeljenih na predavanja i primjere vjezbe zadatke za samostalno rjesavanje izvan nastave

projektni zadatak i zavrsni zadatak koji valja samostalno rijesiti Prolazi se cijeli niz specificnosti vezanib uz platformu Android a od polaznika se trati zavrsen tecaj objektno orijentiranog programiranja ili poznavanje tema obradenih u tom tecaju

CIJENA 812500 kn Cijena za studente 609375 kn URL httpaLgebra hrledukacjjal razyQj-aplikacijaprogramershymobilnih-aplikacija-androjdl

CRUZ

~j OSaplikaclja iPhIUI

---~ ---- ~-~ - -j~~-~~ bullbull

--~ __ _---- ~_~ ~ cWlt~~___ bull__ bullbull -~---- =~Uolt -gt

gt Kratki tecaj u trajanju tri ili pet dana koji organizira CROZ nudi osnove u programiranju mobilnih aplikacija za Apple iOS Upoznaje se s razvojnom okolinom Xcode te programskim jezikom Objective-C i njegovim konceptima zatim je tu pregled programskog okvira CocoaTouch koji se koristi u razvoju iOS aplikacija pregled naprednih koncepata te se konacno govori o razvojnom ciklusu testiranju aplikacija i procesu objavljivanja aplikacija u App Storeu

CIJENA Na upit URL httpwwwcroznetlrazyoj-iosshyaplikacija-ipbone-jpad

2013 STUDENI BUG I 77

I

Razvoj AntJroid aplikacija

gtSUeno kao i kod teeaja za razvoj apUkacija za iPhone CROZ nudi i kratke tecajeve za razvoj Android aplikacija (p05toje i tecajevi za 5amu Javu) Tecaj traje pet dana a prolaze 5e najvazniji aspekti razvoja od postavLjanja razvojnog sueeLja preko izrade korisniekog sucelja pokretanja novih aktivnosti te komunikacije medu aktivnostima do spremanja podataka te pozadinskih aplikacija 1 lokacijskih usluga

CIJENA Na upit URL bttplIwww croz netrazyojshyandroid-apUkacijal

GAUSS INFORMATIKA iPhone Developmenti Android Development

gt Domaca tvrtka koja se naLazi u Osijeku vet neko vrijeme organizira edukaciju za one koji tele razvijati za 105 ali iza Android Naravno edukacije st razdvojene iako su u odredenim segmentima sUene Npr oba se teeaja provode u grupama od po iest polaznika a za ciLj imaju polaznicima pribliziti principe objektnog programiranja te jezike za svaku od pLatformi (Java za Android i Objective-C za iOS) Osim toga poucava se cijeli niz drugih specifienosti potrebnih za razvoj za svaku od platformi

CIJENA Na upit URL hmrllgau55-informatikacoml programi-obrazovanjal

EDUKACENTAR Uvod u razvojAndroid aplilltacija

gtSemina r u trajanju 20 skolskih sati namijenjen je svima koji se zeLe upoznati s razvojem mobiLnih aplikacija na platformi Android Govori se 0 sueelju Eclipse 5 ADT-om i Android 5DK-u 0 izradi grafickih sucelja upoznaje se 5 programskim jezikom Java tu je i rad sa zvukom i drugim elementima te niz jednostavnih primjera apLikacija

CIJENA Na upit URL httplIwwwedukacentar hrl Sem ina rilRazvoj-mobiln ib-a p lj kadja

-SKULA NA INTERNETU Osim kLasicnih tecajeva moze se pronaci niz eesto kvalitetnih predavanja putem kojih je moguce usvajati vjestine potrebne za uspjesno programiranje Evo nekoLiko najzanimljivijih e-ueionica

MIT OPEN COURSEWARE

gtUz brojne druge seminare na ovom se svjetski poznatom sveucilistu mogu pronaci predavanja i seminari vezanih uz programiranje Zapravo cilj je ponuditi sve 5to se moze cuti i vidjeti na MIT-u i to sasvim besplatno Stoga 5e dobiva djeli niz materijala od udzbenika preko multimedijskih sadrzaja pa sve do zadataka projekata i primjera Ovo je obavezna stanica za sve one koji tek pocinju s programiranjem ali i one koje zanimaju i naprednija predavanja

URL bttpllocwmitedu(

COURSERA -Take the worlds best courses online for free ~ - -- - - - shy

gt Rijec je 0 Stanfordovu projektu za e-ucenje koji je u kratkom roku stekao vetik broj korisnika jer svima zainteresiranima omogucuje pohadanje tecaja koji predaje sveueitisni profesor 5 toga sveuciLista sasvim besplatno i online Predavanja ima mnogo pa se uz teme usko vezanih uz racunalstvo mogu p05lusati (i pogledati) brojna druga zanimljiva predavanja

URL bttplwww coursera ori

TREEHOUSE Take the worlds best courses online fOI fIee ~-~~ ~~~~ laquozt~~ gtlt~o~~gt _j~ ~

Jos jedna sve popularnija e-ucionica putem koje je moguce nauciti programirati u razlicitim jezicima i za razlieite platforme Dakako pokriveno je programiranje za iOS i za Android Na raspolaganju je vise od ti5uCU videozapi5a a tijekom ucenja valja rjesavati niz zadataka cime cete zasluziti znackice P05toji i sadrzaj za koji 5e mora placati pa su dostupna dva modela pretplate Silver koji stoji 25 dolara mjesecno te Gold koji 5toji 50 dolara

URL httpteamtreehouse com

UDACITY

78 I BUG STUDENI 2013

__

Kako programirati za Android iii iOS

gt lako nudi jedva tridesetak raznih tecajeva (najvise ih je iz podrucja racunalstva) ovo odrediste za online ucenje sve je popularnije Nije ni cudo jer mijenja nacin na koji se odvijaju klasiena predavanja naglasavajuci interaktivnost - neprestano se trazi rjesavanje zadataka i problema Upravo je zato ovo idealno odrediste za stjecanje osnovnih vjestina u programiranju

URL www udacitycom

GOOGLE DEVELOPERS UNIVERSITY CONSORTIUM

]jillliii ~r-shy1lt_ ~--O__I-_

~_~___ _tftWl_~_~__-l~tioIa_

-__ __ ~- shy

gt I sam Google radi na poucavanju pa je dostupan Google Developers University Consortium putem kojega je moguce pronaci niz predavanja iz razliWih podrucja no svih vezanih uz Googleove tehnologije Stoga je ova odlicno mjesto za ucenje razvoja za Android

URL httpsUdevelopers google comi university

-

~Internetski resursi

PROGRAMERSKA VRELA Premda su dva sluzbena portala za razvojne inzenjere (ona za iDS i onaj za Android) i vise nego dovoljna da pronadete odgovore na prakticki sve sto vas moze zanimati dok programirate (osim toga tu je i nezaobilazni Google) dostupno je i nekoUko drugih web stranica koje ee dobro doti pri ucenju ali i razvoju aplikacija

STACK OVERFLOW

bull

~ G ~~-j~y---- shyltc _middot11_1_ ----l~Jgt

C gt ~ toIoIto~__ lI~-

- - _ bull ~_f_ ~ _ ) -tc-rIo-WlluttgttllOl-

gtVelika zajednica koja radi na principu postavi pitanje i dobij odgovor To liko je popularna medu programerima da je gotovo sigurno da eete trazeci savjet putem Googlea medu prvim ponudenim rezultatima pronaci upravo odgovor sa Stack Overflowa

URL bttpstackoverflowcoml

MOBILETUTS+

Creatit Web$lte QII ~ GOtIgle f)J~middot~ --~1-----1M

9

gtJos jedna Envatova web stranica no koja se bavi iskljueivo raznovrsnim tutorijalima za mobilne platforme ponajvise iDS i Android Tu eete pronaci niz raznovrsni h kvalitetnih clanaka neki su informativne prirode i za cilj imaju upoznati eitatelje 5

odredenim segmentima razvoja a neki vode korak po korak pri izradi primjera aplikacije

URL bttplmobiletutspluscoml

JAVA CODE GEEKS gt Ako ste se odlucili programiratl uJavi i za Android avo je jedna od web stranica (mozda bolje receno

zajednica) koju definitivno ne biste smjeli propustiti Tu cete pronaCi doslovce sve 5tO vam padne na pamet od zanimljivih elanaka preko tutorijala do primjera koda Dakle sve 5tO jednom programeru koji uti moze zatrebati

URL wwwJavacodegeekscom

ICODEBLOG

gt Premda se iz naziva ovoga bloga moze zakljueiti da se fokusira iskYucivo na Appleovu platformu zapravo cete ovdje pronaci hrpicu zgodnih (i nerijetko korisnih) tutorijala koji su ponekad popraeeni i videoisjeccima Osim toga tu je i niz primjera gotovog koda (snippeti) te drugi zgodni resursi

URL www icodeblog com

BUG ONLINE FORUM

~~~- 7~~h -

-Programiranie za mofiilne plaftorme

gt I nas je forum izvrsno mjesto za komentiranje i trazenje savjeta ali i pruzanje pomoei manje iskusnima Tim viSe sto je dostupna i kategorija upravo namijenjena programiranju za mobilne platforme Forum moze posluziti i kao mjesto za testiranje aplikacija - clanovi nerijetko znaju ponuditi svoje iskreno misljenje a apUkaciji za koju to zatrazite

URL bttpmiddotwwwbug hrlforum

2013 STUDENI BUG 119

UZ KNJlGE DO SAVRSENSTVA Osim internetskih resursa jedan od vrlo vaznih elemenata pri ucenju razvoja za mobilne platforme (ali i opcenito za programiranje) svakako su knjige Srecom knjiga ima napretek no nisu sve prikladne za pocetnike i one koji nemaju bas nikakva iskustva u programiranju Evo nekoliko naslova (tiskanih i e-knjiga) za Android i iOS uz koje ce pocetak u programiranju biti nesto laksi a koje mozete pronaci na Amazonu

lHf~~~taJ~-1 EDBURNmE Zgodna knjiga koja vodi od samih osnova pa do slozenijih koncepata prateci razvoj igre Sudoku Ova knjiga kroz prakticni primjer doista pomaze pri ucenju razvijanja za Android i stjecanja vaznih vjestina

Knjige za iOS

lOS Prgramming The Big Nerd Ranltlh Guidemiddot JOE CONWAY AARON HILUGASS Sjajna knjiga koja vodi i pokazuje kroz osnovne koncepte za razvoj aptikacija za iOS Ritam obrade materijala je dobar navedeni primjeri aplikacija nisu suhoparni i ovo je knjiga koju vrijedi procitati

Sams Teach Yourself iOS 6 Application Development in 24 Houus lDHN RAY

l~regelcopyp~lent in LAUREN DARCEY lako je i ova knjiga itekako pogodna za pocetnika na trenutke moze Jos jedna knjiga iz iznimno poznate serije instrukcijskih knjiga koja ce biti nerazumljiva onima koji nisu ovladali konceptima objektno itekako dobro doti pri svladavanju prvih koraka u razvoju za Android orijentiranog programiranja Stoga to treba imati na umu dok ju citate i

uz nju vjezbate

IAN F DARWIN iOS() Cookbeok VANDAD NAHAVANDIPOOR OReilly je dobro poznata izdavacka kuta cije su programerske Slicno kao i za Android dostupne su j kuharice za iOS (stoga znak kuharice dobro prihvacene jer nude konkretna (i vecinom kvalitetna) zamijenite inacicom i~S-a) Aktualna je kuharica za iOS 6 no moze se rjesenja za mnoge programerske probleme uskoro ocekivati i za iOS 7

Beginning iOS 6 Development Expioring the iOS SDKmiddot DAVID MARK JACK NUTTING JEFF LAMARCHE FRmRIK OLSSON

lako knjige iz serije za neznalice obicno imaju negativnu konotaciju Dobro poznavanje iOS SDK-a vrlo je vazno za uspjesno programiranje a zapravo su prilicno korisne Nacin na koji obraduju temu programiranja ova ga knjiga prilicno dobro rasclanjuje i objasnjava Doduse ovo je tek prikladan je upravo pocetnicima jedna od mnogih knjige iz iste serije

80 I BUG STUDENI 2013

Effedive ObjfiCthle~C 20 - MATI GALLOWAY Mozda i najbolja knjiga koja se bavi programskim jezikom Objective-C i nudi konkretne (i odlicne) savjete No ovo nije knjiga za one koji nimalo

Android no za totalne pocetnike Stoga ovu knjigu u ruke uzmite ne poznaju jezik Objective-C te Cocoa i Cocoa Touch tek nakon sto ste stekli odredeno iskustvo

nudi doista iscrpan pogled na razvoj aplikacija za

ALATI Kako programirati za Android iii iOS

Bez alata nema zanata Kako svaka platforma za koju se programira donosi i svoje specificnosti ne cudi da i za svaku platformu postoje i specijalizirani razvojni alatilzuzetak tu nisu ni Android i iOS a osim sto postoje sluZbeni alati i razvojna sucelja koji su i vise nego dostatni za razvoj dostupni su i drugi viseplatformski alati koji olakSavaju istodobni razvoj za vise platformi No uz njih tu su i druge aplikacije ali i nezaobilazni te mocni SDK-ovi

~1i~11-shy100t ~il15_ 2~ai~_

~ ~-shyi~~01( ~-lt

gtb b ~-shyshy~--shy~~shy_shy~

flj~tjIfIHltIU_

~ 1 Ilt~ w tOlIltlA tth a~shy~~ ~__~1iIowI

~=-lii ~shy

Profesionalne tvrtke koje se bave razvoshyjem mobilnih aplikaeija obicavaju stroshygo razdvajati programere koji se specishyjaliziraju za Objeetive-C i za Android

Javu Ne samo da su ta dva jezika razlitita nego je i pristup razvoju drukciji Razlitite su i dizajnerske smjemiee cijeli je ekosustav drukciji premda je rezultat u konacniei isti stvara se mobilna aplikacija ali za razlicite platforme Ipak te razlike slieno kao i kod drugih tema znaju neobicno utjecati na sve one koji se bave razvojem pa se neprestano iznova ponavljaju debate oko toga sto Je bolje - Appleov iDS iii Googleov Android

Dio tog debatiranja nerijetko obuhvaca i razvojne alate S jedne je strane tu Eclipse poznato integrirano razvojno sucelje za Jashyvu a s druge rclativno ugladeni Xcode Ono sto je svakako nesporno jest einjenica da ce pocetnici pa i oni iskusniji daleko bde prishyhvatiti nacin na koji radi Xcode a daleko ce tde nauciti da se snalaze u Eclipseu kojl je po svojoj prirodi prilieno kompleksan Isto vrijedi i kada se razvojno okruzenje prvi put postavlja Kod razvoja aplikacija za iPhone I iPad sve se svodi na to da se nabavi raeunalo s Mac OS-om X instalira Xcode I moze se poeeti s programiranjem Bez mnogo petshyIjaneije za pocetak

U slucaju Androida stvan bas i nisu takve no uz nekoliko pocetnih koraka te dodatshynog preuzimanja neizostavnih dodataka u rukama cete imati prilicno mocno razvojno

sueelje U njemu se doista isprva ponesto teze snaci no jednom kada se na njega navishyknete eak nl najzapetljanlje radnje viSe nece predstavljati problem iako ce i dalje uzimati viSe vremena nego sto bi trebale Jedna od kljuenih prednostl Androlda pred i~S-om definitivno je einjenica da sluzbeno razvoino sueelje radi na vise platformi ukljucujuci Linux i Mac OS X

Jednostavnije receno za razliku od Appleshyove metodologlje razvoj za Android moze biti sasvim besplatan iii ako nista drugo daleko jeftiniji cak i kada se u obzir uzme

Xamarin Studio rjesenje je za izradu viseplatformskih aplikacija ito pisuci k6d u programskom jeziku C pri cemu se mogu koristiti nativni API-ji sto je idealno rjesenje za NET programere (~

i naknada koju je potrebno platlti da bi se aplikaeije objavljlvale u sluzbenim trgovishynama U slucaju iDS-a obavezno se mora uclaniti u iDS Developer Program sto stoji 99 dolara potrebna je kupovina Appleova racunala a valja imati i iPhone Clanarina za razvojne inzenjere Android aplikacija za objavu uradaka na Google Playu stojl 25 doshylara no s adresom iz Hrvatske nije moguce prodavati apUkacije No zato je testiranje aplikacija na fizickim uredajima s Android OS-om jednostavno dok je procedura za iDS daleko slozenija

Tlta(jl~m Studio rftlJ(IItI~tMuIIIIIu_-

Titanium Studio jos je jedan moderni IDE koji omogucuje brzl razvoj nativnih mobilnih aplikacija Razvojno sucelje temelji se na Eclipseu a uz Titanium dolazi i njegov vlastiti SDK koji omogucuje razvoj s pomocu HTML-a PHP-a JavaScripta Rubyja i pythona (yJwwappceleratQuQm)

2013 STUDENI BUG I SJ

Android Studio novi je Googleov poku~aj da napravi razvojno 5ucelje Temelji 5e na razvojnom sucelju IntelliJ IDEA a nudi vise mogucnosti od Eclipsea sADT-om kao sto su GradLe refaktoriranje koda specifieno za Android ugradenu podrsku za Google Cloud ProGuard i drugo (httpgoo gllUEvL)

Nerijetko najveci problem s razvojnim suceljima neovisno 0 tome za koju su platshyfomlU obicavaju imati svi oni kOji su navikli raditi u Microsoftovu razvojnom sucelju Visual Studio Tome je tako pogotovo ako je rijec 0 Eclipseu koji bi se iskusnom razvojshynom inzenjeru za Microsoftove tehnologije mogao uciniti kao posvemaSnji metez SHcno vrijedi i za Xcode jer se treba naviknuti i na drukcije sucelje i principe samoga Mac OSshya X Srecom tehnologija nikada ne miruje i ako neSto stalno doista jest onda je to konstantan razvoJ

Tako su nastali alternativni alati kao sto je Xamarin koli se dobro integrira u Visual Studio cineci viseplatformsko programiranje tim jednostavnijim Ne samo da je Xamarishynom moguce istodobno razvijati aplikacije za vise platformi nego ih je moguce pisati u sasvim drugom jeziku - C-sharpu (C) Doduse takva alternativna viseplatformska rjdenja ipak nisu bez nedostatka Prije sveshyga tako napravljene aplikacije u sustini nisu nativne aplikacije (uvijek se mora dogoditi prevodenje sto moze rezultirati novim bushygovima i problemima) a to se reflektira i na performanse i na same mogucnosti Tu je i problem velikih razlika u sucelju aplikacija za razHcite platforme nekonzistentnosti kOje se zbog toga pojavljuju te brojni drugi proshyblemi To ne znaci da se takva rjesenja mora eliminirati nego samo da treba biti svjestan njihovih ogranicenja

No sto je zapravo potrebno za programirashynje U samoj sustini uz racunalo dovoljno je neko kompatibilno razvojno sucelje sluzbeni SDK (Sotware Development Kit) a uputno je imati i mobilni uredaj s OS-om za koji namjeravate razvijati budud da je to jedini konkretan nacin za istinsko testirashynje aplikacija Sto se sucelja tice bas kao i preferirane platforme iIi izbora uredaja sve je stvar osobne preferencije i formiranja navike (iako Xcode prednjaci sto se tice izrade grafickog sucelja) Naravno kada se prevladaju osnove i krene u razvoj konkretshynijih projekata bilo samostalno Hi u timu svijet mobilnog programiranja pokazat ce se cak i 0pseZnijim nego sto je to u slucaju izrade klasicnog softvera Iz te perspektive razvojno sucelje kole koristite postat ce one cime ga se od pocetka i trebalo smatratl tek jedan od alata u nizu potrebnih za uspjesan razvoj aplikacija

82 I BUG STUDENI 2013

Viieplatformske i druge alternative

ALTERNATIVNO PROGRAMIRANJE Osim sluzbenih razvojnih suceLja te osnovnih SDK-ova tijekom je vremena nastao i zavidan niz drugih alternativnih razvojnih sucelja dodatnih alata te hrpa nezavisnih SDK-ova koji razvoj aplikacija na ovaj ili anal nacin cine drukcijim i fLeksibilnijim

PHONEGAP

gtPhoneGapje besplatnorjesenje otvorenog koda (FOSS) namijenjeno

izradi aplikacija za Android iPhone i iPad uredaje (aliidruge) pri (emu se koriste standardni web jezici (HTML CSSi JaitaScript)Za one koji nekim Iudom prepozriaju slilnost 5 Apache Cordovom - u praVll5u PhoneGap je svojevrsna distribucija Apache Cordove u sustini su oboje namijenjeni viseplatformskom razvijanju mdbilriih aplikacija pri cemu omogucuju piistup nativnim funkcijama smartfona kaosto su kamera cikcelerometar i kompas Upravo je stoga avo sjajan SDK za one koji imaju ikustva 5 JavaScriptom i zele napraviti nesto naprednije mobilne aplikacije i to istodobno za vise platformi a uz minimalne ili nikakve intervencije

URL www phonegapcom

MOSYNC gtJos jedno besplatno rjesenje otvorenog koda koje omogucuje izradu nativnih mobilnih aplikacija koristeci jedan te isti programski kod Oslanja se na CC++ ili HTMlSI JavaScript te kombinaciju svega a

omogucuje kompiLiranje aplikacija za do devet razlicitih platformi istodobno To dakako ukljucuje iOS i Android Naravno tu su aplikacijska programska sulelja (API) potrebna za pristup specificnim mogucnostima smartfona i tableta a tu je i MoSync Reload koji omogucuje izradu viseplatformskih aplikacija koristeCi iskljulivo HTMlS i JavaScript (slicno kao PhoneGap)

URL www mosync com

RHOMOBILE

gt RhoMobile Suite zapravo je paket koji se sastoji ad RhoElementsa Rhodesa RhoConnecta RhoStudia RhoHuba i alata RhoGaLLery koji zdruzeno (bolje receno tu je Rhodes framework otvorenog koda koji se temelji na Rubyju) omogucuju eLegantan razvoj aplikacija bez obzira na ciljanu platformu Prednost je ito programski kad treba pisati samo jednom a on ce se kompilirati za praktiCki svaku mobilnu platformu koja je trenutno dostupna Iza ovoga rjesenja stoji Motorola a pohvalno je ito Rhodes nudi princip rada Model View Controler te brojne druge moguCnosti Rijec je dakle a rjesenju koje svakako treba iskusati

URL httpRgQQgllm9xt2

Kako programirati za Android iii iOS

RAZVOJIGARA

UMJESTO APLIKACIJA middot IGRE gt Razvijanje igara prilicno je kompleksan posao a osim samoga programiranja potrebnoje imati rjesenja za cijeli niz drugih aspekata koji su potrebni kada zeLite izraditi kvalitetnu igru Stoga i ne cudi da se dobrim igrama obicno bave timovi a vrlo rijetko individualci No Clanovi takvoga tima svakako moraju biti upuceni u programiranje i dobro se koristiti razvojnim alatima - i ne sarno onima koji sluze za razvoj klasicnih aplikacija Nairne stvaranje igara bas kao i aplikacija otezavaju velike razlike medu platformama a to je dodatno naglaseno upravo kod izrade igara Srecom postoje viseplatformska rjesenja koja takvo sto ipak cine manje bolnim nego sto doista jesUedno od najpoznatijih viSeplatformskih rjeshysenja upravo je Unity 3D Ono je dovoljno kompleksno za razvoj zbilja fantasticnih igracih naslova a istodobno dovoljno jednostavno da njime mogu ovladati i totalni pocetnici Ono sto mnoge iznenaduje svakako je cinjenica da je inicijalno ovaj engine sasvim besplatan a specifican je i po tome sto podrzava tri programska jezika (UnityScript C i Boo) Doduse besplatna inacica ima i odredenih nedostataka no puna Ushycenca stoji 1500 dolara sto i nije mnogo s obzirom na ono sto se nudi Uz Unity 3D dostupna su i druga rjesenja kao sto je Marmalade SDK Rijec je 0 moenom viseplatformskom SDK-u koji omogucuje izradu mobilnih igara za smartfone i tablete Dakako za rad s ovim SDK-om

Vrhunsko rjesenje za izradu atraktivnih viseplatformskih mobilnih (i drugih) igara moguee je dobiti sasvim besplatno 0Jww unity3d com)

potrebno je znanie programskog jezika C++ te odredeno programersko iskustvo Sam SDK moguee ie iskusati besplatno 30 dana sto je dovoljshyno vremena da se prode kroz hrpicu tutorijala a nakon toga ovaj SDK valja kupiti i to prema razlicitim modelima Najjeftinija inacica stoji 150 dolara godisnje po racunalu (Community) nju slijedi ona za 499 dolara godisnje po racunalu (lndie) zatim je tu model Plus koji stoji 1499 dolara godisnje po racunalu (s ovime se dobiva podrska i za rashyzvoj igara za pametne televizore) dok profesionalna i najopremljenija inacica stoji 3499 dolara godisnje po racunalu II

PODESAVANJE RAZVOJNOG OKRUZENJA ZAANDROID

SVE UJEDNOM PAKETU gt Eclipse kao standardno razvojno sucelje za Android nekada je trebalo rucno podesavati dodajuei mu Android SDK Tools te ADT Plugin (instalirani se JDK podrazumijeva) Sreeom otkad se pojavio ADT Bundle ko]i u jednom paketu donosi sve sto je potrebno podesavanje samoga sucelja prakticki je nepotrebno osim ako vee koristite Eclipse za programiranje u Javi i namjeravate prosiriti razvoj apUkacija na Android Tada treba proei dobro dokumentirani proces podesavanja sucelja koji cete pronaei na Googleovu portalu za razvojne inzenjere ADT Bundle dakle pocetak programiranja za Android cini doista lakim Treba samo na zeljenu lokaciju dekomprimirati sadrzaj Zip arhive (cijeU eete paket pronaei na DVD-u koji ste dobili uz ova] broi) otvoriti mapu eclipse i pokrenuti izvrsnu datoteku eclipseexe Sve ostalo vee je spremno Doduse medu vaznijim koracima svakako je definiranje virtualnog uredaja (emulatora) za testiranje aplikacija a po potrebi ee se kasnije morati dodavati i drugi paketi ADT Bundle i to cini jednostavnim

Kreiranje simulatora Android Virtual Device Manager najlaksi je nacin za kreiranje virtualnog uredaja Stoga ga valia pokrenuti tako da se u Eclipseu klikne na Window i zatim na AVD Manager U prozoru koji ee se otvoriti valia kliknuti na New Zatim valja unijeti ime virtualnog uredaja iizabrati vrstu uredaja

(veCinom je dovoljno izabrati uredaj prema velicini njegova ekrana) prema cemu ee biti definirane i druge postavke Parametre je moguee podesavati prema vlastitim preferencijama pri cemu ne treba pretjerivati (npr kod definiranja kolicine radne memorije) a svakako je uputno kvacicom oznaciti opciju Use Host GPU Jednom kada je sve definirano ostaje sarno kliknuti na gumb OK Virtualni uredaj pokreee se tipkom Start nakon cega valja biti strpljiv jer se emulator tradicionalno pokreee prilicno sporo

Upravljanje paketima Android SDK alate platforme i druge komponente organizira kao pakete koje je moguce preuzimati i instalirati Android SDK Managerom Pronaci cete ga u rnapi gdje je dekomprimiran ADT Bundle u obliku izvrsne datoteke (SDK Managerexe) Instalacija paketa maksimalno je jednostavna potrebno je sarno kvaCicom oznaciti zeljeni paket i zatim kliknuti na gumb koji ee pokrenuti instalaciju Medutim svakako treba instalirati SDK Tools SDK Platform-tools i SDK Platform System Image Android Support i primjeri koda preporucljivi su iako nisu nuzni No za pocetnike (i druge) svakako su to dobrodosli dodaci No kako razvijanje aplikacija bude postajalo ozbiljnije tako ce i potreba za paketima porast pa cete nerijetko svracati upravo u Android SDK Manager po nove pakete i azuriranja sect

PODESAVANJE RAZVOJNOG OKRUZENJA ZAiOS

fi ~srJH un~~~mer l ~i ~_ j ~ g~~l-1lt ~ ~J ~Iit~

Xcode

gt Xcode vise nije jedino razvojno sucelje za izradu apUkacija za iOS no dugo je to prakticki bio (vee je neko vrijeme dostupan JetBrainsov AppCode dok viSeplatformska rjesenja neeemo usporedivati) Posebnih koraka za postavljanje zapravo i nema a sve sto je potrebno uciniti jest na Appleovu racunalu pokrenuti App Store u polje za pretrazivanje utipkati Xcode j pokrenuti instalaciju Svakako je potrebno imati aktivnu vezu s Internetom i biti strpljiv jer ce se preuzeti gotovo 2 GB podataka Jednom kada je Xcode spreman s programiranjem s moze zapoceti odmah a jednako je tako spre~an i simulator Ono sto mnoge muci jest da Je za Xcode potrebno imati Appleovo racunalo Doduse moguee je posluziti se trikom virtualizacije te instalirati Mac OS X 108 Il~ visi u virtualnu masinu Medutim takvo Je sto nelegalno premda moze posluziti iskljucivo u edukativne svrhe - samo kao svojevrsno eksperimentiranje prije nego odlucite kupiti barem Apple Mac Mini

2013 STUDENI BUG I 13

ltW

ZIVOT APliKACIJE -

Od testiranja do objave

Jednom kada je onaj osnovni razvojni dio zavrsen i aplikacija se cini spremnom valja ju testirati Osim testiranja usimulatoru uvijek je prije objave uputno aptikacije provjeriti i na fizickim uredajima najbolje na vise od jednog Dok 5 jedne strane u slucaju Androida testiranje aplikacije nije problem jer je vrto jednostavno iskoristiti gotov APK ustucaju iOS-a stvari su znacajno stozenije i skupLje Isto vrijedi i ustucaju konacne objave aplikacije na stuzbenih trgovinama Evo sto morate znati

estiranje aplikacija Android USB debugging definitivno je neizshy opcija je koju svakako bjezno a premda se treba ukljuciti na uredaju zapravo odvija i tijeshy koji ce postuziti za testiranje kom samog razvojshy aplikacije (pronaci tete ju

nog procesa ono konacno u Settings pa Developer testiranje prije same objave options) aplikadje uvijek je pozeljshyno odraditi na fizickim uredajima Iz perspektive tadja uredaja za Android razvojnog inrenjera za Anshy ogromna pa je samim droid takvo sto uopce ne time razvojnim inzenjerishypredstavlja problem Dapashy ma tesko uzeti u obzir sve ee vee je tijekom samog rashy vrste uredaja koji se nalashyzvoja umjesto u emulatoru ze u opticaju Isto vrijedi testne primjerke aplikadje i predvidanje ponasanja moguee pokretati na jedshy aplikadje na raznim vershynom iii viSe fizickih ureshy zijama platforme premda daja Dovoljno ih je sarno SDK tu poprilicno pomashyUSB kablom prikljueiti na ze Kako bi smartfon s raeunalo a onda aplikaciju Android OS-om posluzio

je ovisno 0 platformi na kojo se razvija (na Mac OS-u X stvari ee raditi bez ikakve inmiddot tervencije dok je i za Windowse i za Linux potrebno odraditi nekoliko koraka pri eemu je Linux ponesto sozeniji)

Nakon toga na samom uredaju valja ukljushyeiti USB debugging te ee iduci put kada se u Eclipseu pokrene debugiranje apHkacije medu ponudenim uredajima biti i onai prishykljueen na raeunalo Zelite Ii pak provjeriti je Ii uredaj dostupan to je moguce napraviti naredbom adb devices 8to se testiranja apHkacija na iPhoneu iIi iPadu tice stvari

The easiest way to get feedback on your mobile application

Sign up free -7

~~ ~~-~ BETA FAMILY IN NUMBERS WIW MCRE THAN III=

Testiranje aplikacije moguce je prepustiti i drugima putem servisa kao 5tO je The Beta Family Rijec je 0 crowdsourcing platformi koja omogucuje da drugi testiraju j daju misljenje 0

aplikaciji na kojoj radite wwwthebetafamilycom

su daleko sloznije Iako se veCina razvojnih inzenjera grozi postupka kroz koji treba proei on ee ih ipak na kraju docekati Zasto Apple nije pojednostavio proceduru pitanje je 0 kojemu se moze debatirati no stvari Sil

takve kakve jesu Sreeom tu je okvir koji ee vas kroz nekoliko koraka sprovesti do uspjeha a pozitivno je 5tO jednom kada proshyZivite ovaj proces bit ee jednostavnije proCi kroz proces pripreme aplikacije za objavu u sluzbenoj trgovini Procedura za Google Play opet je nesto jednostavnija

No kljucna je razlika 8to se od prodaje aplishykacija putem App Storea moze zaradivati dok to nije moguce putem Google Playa sve dok ste registrirani 5 racunom u Hrvatskoj jer se ona ne nalazi na popisu poddanih zeshymalja Sreeom zarada je i daje moguca kroz reklame 110 aplikacija mora biti naznacena kao besplatna

pokretati izravno iz Eclipshysea iIi iz naredbenog retka (ADB)

Dakako fizieki uredaj u tom slucaju ipak ne moze zamijeniti emulator jer je fragmenshy

84 I BUG STUDENI 2013

za testiranje dovoljno ga je dakle prikljueiti na raeunalo Ako vee nisu svakako valja instalirati i potrebne upravljacke programe i ostale dodatke lito

Kako programirati za Android iii iOS

KakD te~tiratiiOS ~ aplikacJe na IPhoneu

APPLEOV RAZVOJNI PROGRAM Apple proceduru registracije uredaja za testiranje aplikacija nije ucinio jednostavnom pa i ne cudi da mnogi pribjegavajujailbreaku kao jeftinom i zacudo jednostavnijem rjesenju No sLuzbeni je nacin jedini podrzan a za njega cete se morati uclaniti u iDS Developer Program sto ce vas stajati 99 dolara godisnje Stoga pripremite kreditnu karticu i cvrste zivce za igru pokusaja i promasaja

lOS DeveIotgter Inlgram UUclraquoJgtIyltWklltU(I--shybull

ICorak-2 -

Generiranje certifikata 1

rA_~-Clt----shyOIGrmoollIl1ltG4

~16illttlt wt(tltjf1tlO4~_ulOll_

- ~

Kmiddotmiddotbullmiddotorakmiddot4_

_

bull _ _ n_~

Nakon ~to je certifikat spreman potrebno je registrl~ati uredaj koji ce sluziti za testiranje Ponovno se valja vratiti na iDS Provisioning Portal te pronaci poveznicu Devices i zatim kliknuti na Add Devices Dovoljno je upisati proizvoljan naziv te dodati Device ID ili UDID Rijecje 0

jedinstvenoj vrijednosti od 40 znamenki kojom se uredaj identificira UDID je moguce doznati ili putem iTunesa ili

- ---shy-shy

-~-~~-~-- - ~~~- ~

putemscodeaj uhutarQrgani~fa AkocetekoristitiJtuneskakobiste bull kQpirali ovugolemuvi-iJednost prvo ju l)ior~M (jllokUknoJiitiltiilptitjsriuti kOO1QinadjutipkicqrnmandifCNqkori tQgq uXci)deu yafjauOrgaljzerllPQ1J DeviqesproniitIsR9JejiiiPtJOlletEL bull kli~llutiriagumb Us~JQr[)eVetoPrnentmiddot

middotSretom ovo jenQjoezJQlnij(trenutjlk middotbull jerceXcQde~clltdegrllat~kiprlJetisye potrebn siOSPJQvi~iQJiing Portala st9seprljavit~sect c odgOl(araiLitimkOrisnikimPQdgcimmiddot bull

- -~~ ~~ ~~ -~-~- ~ ~-~--

2013 STUDENI BUG I 85

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 4: Kako Programirati Za Android 1

- -

Kako programirati za Android iU iOS

i svi se veCinom fokusiraju na Android sto je otprilike razumljivo Nairne za razvoj iOS aplikacija potreban je Mac te je pritom potrebno platiti i 99 dolara godisnje za iOS Developer Program a takva investicija u danasnje vrijeme nije bas za svaciji dzep Kako bi se pocelo programirati za Android potrebno je bilo kakvo racunalo (moze biti instaliran i Linux) te besplatni razvojni alatL Za isprobavanje aplikacija na fizickim uredajima nije se potrebno registrirati kao razvojni inzenjer (time se dobiva mogucnost objave aplikacije u sluzbenoj trgovini) pa je i to jedna od prednostL

--1--- I ~-----~ __ootItltItI~ _~ -----~----------

=~ j =-~u~==-t-shy~--middot-I e~VOlltFItSI~

-~ qn ====~ ~-~

~tIetcllQo9v

~f]===~f==~_ 2~H

~~tshy__ ~I Mttlt

~l

~It -IS~Cff~Dldccl - =9 rn- -- shy

1 - _hOljbigt ~ a_~~

~futAdDilyttl~

Jt9

51100 kao Apple i Googb~ ima vlasmi centar namijenjen razvojnim inzenjerima ali i totalnim pocetnicima Tu je stvarno sjajna dokumentacija ali i hrpica pocetnickih tutorijala (bttp developer android comtraining)

Samoucenje kao paradigma Tecajevi su dakle svakako dobar pocetak

jer ce nakon zavrsenog tecaja neki koncepshyti koji se na prvi pogled doimaju suvise slozenima biti demistificirani jednako kao i nacin na kOJi se koristi sarno razvoJno sushycelje te cete sted ispravnu metodiku rada U samoj sustini nauciti programirati nije teSko no nauciti da pisete kvalitetan kOd jest Upravo tu ldi zamka za pocetnike koji nerijetko umjesto da programski kOd u raznim materijalima prepisuju s razumishyjevanjem sarno kopiraju ne razmiSIjajuci previse 0 tome sto iz njihove perspektive svojevrsni snippet zapravo radi i kako utjece na same performanse aplikacije te njezine druge aspekte Zato je iznimno vazno dobro se upoznati sa svime 5tO odredena razvojna platforma nudi ukljucujuci njezine biblioteshyke te doista dubinski poznavati platformu za koju razvijate

To pak podrazumijeva mnogo istrazivanja i eksperimentiranja ali sugerira i da je za programiranje najbolje jednostavno s njime krenuti Od samih osnova pa sve do najsloshyzenijih koncepata te barem djelomice uciti kroz pokusaje i promasaje Na tom putu svakako pomazu knjige pa se valja prirediti na tu investiciju Srecom mreZa svih mreZa sarna po sebi je nepresuSan izvor za prograshymere-pocetnike gladne znanja Od sluzbene dokumentacije preko specificnih tutorijala pa sve do videotutorijala Izbora doista ima mnogo Stoga ce yam naredne stranice kao buducem razvojnom inzenjeru za jednu iIi obje platforme sigurno biti vrlo korisne_

Tecajevi i edukacije

UCENJE UUCIONICI Nauciti osnovno stvaranje aplikacija za mobilne platforme moguce je i kroz nekoliko tecajeva Za sada ih nema mnogo i vecina se fokusira na Android no evo nekoliko korisnih tecajeva (i edukacija) koji ce yam itekako dati dobru osnovu za daljnji napredak i stvarni rad na razvoju apUkacija

ALGEBRA

gt Cilj Algebrina programa jest pruianje znanja i vjestina za samostalno izradivanje aplikacija za mobilnu platformu Android te njihovo plasiranje na trziste Pro laze se osnove programiranja u Javi uvod u programiranje za Android te SQL Zatim se edukacija usredotocuje na osnovnu izradu aplikacije te na druge aspekte platforme Android Cijeli se tecaj zakljucuje procesom objave aplikacije u sluzbenoj trgovini

CIJENAAkcijska cijena 590000 kn redovna cijena 791800 kn URL httplaLgebra hrledukacjjal razyoj-a plikaci japrogramershymobilnjb-aplikacija-androjdl

NETAKADEMIJA

gt Tehnicko veleuciliste u Zagrebu organizira edukaciju u trajanju od 110 sati podijeljenih na predavanja i primjere vjezbe zadatke za samostalno rjesavanje izvan nastave

projektni zadatak i zavrsni zadatak koji valja samostalno rijesiti Prolazi se cijeli niz specificnosti vezanib uz platformu Android a od polaznika se trati zavrsen tecaj objektno orijentiranog programiranja ili poznavanje tema obradenih u tom tecaju

CIJENA 812500 kn Cijena za studente 609375 kn URL httpaLgebra hrledukacjjal razyQj-aplikacijaprogramershymobilnih-aplikacija-androjdl

CRUZ

~j OSaplikaclja iPhIUI

---~ ---- ~-~ - -j~~-~~ bullbull

--~ __ _---- ~_~ ~ cWlt~~___ bull__ bullbull -~---- =~Uolt -gt

gt Kratki tecaj u trajanju tri ili pet dana koji organizira CROZ nudi osnove u programiranju mobilnih aplikacija za Apple iOS Upoznaje se s razvojnom okolinom Xcode te programskim jezikom Objective-C i njegovim konceptima zatim je tu pregled programskog okvira CocoaTouch koji se koristi u razvoju iOS aplikacija pregled naprednih koncepata te se konacno govori o razvojnom ciklusu testiranju aplikacija i procesu objavljivanja aplikacija u App Storeu

CIJENA Na upit URL httpwwwcroznetlrazyoj-iosshyaplikacija-ipbone-jpad

2013 STUDENI BUG I 77

I

Razvoj AntJroid aplikacija

gtSUeno kao i kod teeaja za razvoj apUkacija za iPhone CROZ nudi i kratke tecajeve za razvoj Android aplikacija (p05toje i tecajevi za 5amu Javu) Tecaj traje pet dana a prolaze 5e najvazniji aspekti razvoja od postavLjanja razvojnog sueeLja preko izrade korisniekog sucelja pokretanja novih aktivnosti te komunikacije medu aktivnostima do spremanja podataka te pozadinskih aplikacija 1 lokacijskih usluga

CIJENA Na upit URL bttplIwww croz netrazyojshyandroid-apUkacijal

GAUSS INFORMATIKA iPhone Developmenti Android Development

gt Domaca tvrtka koja se naLazi u Osijeku vet neko vrijeme organizira edukaciju za one koji tele razvijati za 105 ali iza Android Naravno edukacije st razdvojene iako su u odredenim segmentima sUene Npr oba se teeaja provode u grupama od po iest polaznika a za ciLj imaju polaznicima pribliziti principe objektnog programiranja te jezike za svaku od pLatformi (Java za Android i Objective-C za iOS) Osim toga poucava se cijeli niz drugih specifienosti potrebnih za razvoj za svaku od platformi

CIJENA Na upit URL hmrllgau55-informatikacoml programi-obrazovanjal

EDUKACENTAR Uvod u razvojAndroid aplilltacija

gtSemina r u trajanju 20 skolskih sati namijenjen je svima koji se zeLe upoznati s razvojem mobiLnih aplikacija na platformi Android Govori se 0 sueelju Eclipse 5 ADT-om i Android 5DK-u 0 izradi grafickih sucelja upoznaje se 5 programskim jezikom Java tu je i rad sa zvukom i drugim elementima te niz jednostavnih primjera apLikacija

CIJENA Na upit URL httplIwwwedukacentar hrl Sem ina rilRazvoj-mobiln ib-a p lj kadja

-SKULA NA INTERNETU Osim kLasicnih tecajeva moze se pronaci niz eesto kvalitetnih predavanja putem kojih je moguce usvajati vjestine potrebne za uspjesno programiranje Evo nekoLiko najzanimljivijih e-ueionica

MIT OPEN COURSEWARE

gtUz brojne druge seminare na ovom se svjetski poznatom sveucilistu mogu pronaci predavanja i seminari vezanih uz programiranje Zapravo cilj je ponuditi sve 5to se moze cuti i vidjeti na MIT-u i to sasvim besplatno Stoga 5e dobiva djeli niz materijala od udzbenika preko multimedijskih sadrzaja pa sve do zadataka projekata i primjera Ovo je obavezna stanica za sve one koji tek pocinju s programiranjem ali i one koje zanimaju i naprednija predavanja

URL bttpllocwmitedu(

COURSERA -Take the worlds best courses online for free ~ - -- - - - shy

gt Rijec je 0 Stanfordovu projektu za e-ucenje koji je u kratkom roku stekao vetik broj korisnika jer svima zainteresiranima omogucuje pohadanje tecaja koji predaje sveueitisni profesor 5 toga sveuciLista sasvim besplatno i online Predavanja ima mnogo pa se uz teme usko vezanih uz racunalstvo mogu p05lusati (i pogledati) brojna druga zanimljiva predavanja

URL bttplwww coursera ori

TREEHOUSE Take the worlds best courses online fOI fIee ~-~~ ~~~~ laquozt~~ gtlt~o~~gt _j~ ~

Jos jedna sve popularnija e-ucionica putem koje je moguce nauciti programirati u razlicitim jezicima i za razlieite platforme Dakako pokriveno je programiranje za iOS i za Android Na raspolaganju je vise od ti5uCU videozapi5a a tijekom ucenja valja rjesavati niz zadataka cime cete zasluziti znackice P05toji i sadrzaj za koji 5e mora placati pa su dostupna dva modela pretplate Silver koji stoji 25 dolara mjesecno te Gold koji 5toji 50 dolara

URL httpteamtreehouse com

UDACITY

78 I BUG STUDENI 2013

__

Kako programirati za Android iii iOS

gt lako nudi jedva tridesetak raznih tecajeva (najvise ih je iz podrucja racunalstva) ovo odrediste za online ucenje sve je popularnije Nije ni cudo jer mijenja nacin na koji se odvijaju klasiena predavanja naglasavajuci interaktivnost - neprestano se trazi rjesavanje zadataka i problema Upravo je zato ovo idealno odrediste za stjecanje osnovnih vjestina u programiranju

URL www udacitycom

GOOGLE DEVELOPERS UNIVERSITY CONSORTIUM

]jillliii ~r-shy1lt_ ~--O__I-_

~_~___ _tftWl_~_~__-l~tioIa_

-__ __ ~- shy

gt I sam Google radi na poucavanju pa je dostupan Google Developers University Consortium putem kojega je moguce pronaci niz predavanja iz razliWih podrucja no svih vezanih uz Googleove tehnologije Stoga je ova odlicno mjesto za ucenje razvoja za Android

URL httpsUdevelopers google comi university

-

~Internetski resursi

PROGRAMERSKA VRELA Premda su dva sluzbena portala za razvojne inzenjere (ona za iDS i onaj za Android) i vise nego dovoljna da pronadete odgovore na prakticki sve sto vas moze zanimati dok programirate (osim toga tu je i nezaobilazni Google) dostupno je i nekoUko drugih web stranica koje ee dobro doti pri ucenju ali i razvoju aplikacija

STACK OVERFLOW

bull

~ G ~~-j~y---- shyltc _middot11_1_ ----l~Jgt

C gt ~ toIoIto~__ lI~-

- - _ bull ~_f_ ~ _ ) -tc-rIo-WlluttgttllOl-

gtVelika zajednica koja radi na principu postavi pitanje i dobij odgovor To liko je popularna medu programerima da je gotovo sigurno da eete trazeci savjet putem Googlea medu prvim ponudenim rezultatima pronaci upravo odgovor sa Stack Overflowa

URL bttpstackoverflowcoml

MOBILETUTS+

Creatit Web$lte QII ~ GOtIgle f)J~middot~ --~1-----1M

9

gtJos jedna Envatova web stranica no koja se bavi iskljueivo raznovrsnim tutorijalima za mobilne platforme ponajvise iDS i Android Tu eete pronaci niz raznovrsni h kvalitetnih clanaka neki su informativne prirode i za cilj imaju upoznati eitatelje 5

odredenim segmentima razvoja a neki vode korak po korak pri izradi primjera aplikacije

URL bttplmobiletutspluscoml

JAVA CODE GEEKS gt Ako ste se odlucili programiratl uJavi i za Android avo je jedna od web stranica (mozda bolje receno

zajednica) koju definitivno ne biste smjeli propustiti Tu cete pronaCi doslovce sve 5tO vam padne na pamet od zanimljivih elanaka preko tutorijala do primjera koda Dakle sve 5tO jednom programeru koji uti moze zatrebati

URL wwwJavacodegeekscom

ICODEBLOG

gt Premda se iz naziva ovoga bloga moze zakljueiti da se fokusira iskYucivo na Appleovu platformu zapravo cete ovdje pronaci hrpicu zgodnih (i nerijetko korisnih) tutorijala koji su ponekad popraeeni i videoisjeccima Osim toga tu je i niz primjera gotovog koda (snippeti) te drugi zgodni resursi

URL www icodeblog com

BUG ONLINE FORUM

~~~- 7~~h -

-Programiranie za mofiilne plaftorme

gt I nas je forum izvrsno mjesto za komentiranje i trazenje savjeta ali i pruzanje pomoei manje iskusnima Tim viSe sto je dostupna i kategorija upravo namijenjena programiranju za mobilne platforme Forum moze posluziti i kao mjesto za testiranje aplikacija - clanovi nerijetko znaju ponuditi svoje iskreno misljenje a apUkaciji za koju to zatrazite

URL bttpmiddotwwwbug hrlforum

2013 STUDENI BUG 119

UZ KNJlGE DO SAVRSENSTVA Osim internetskih resursa jedan od vrlo vaznih elemenata pri ucenju razvoja za mobilne platforme (ali i opcenito za programiranje) svakako su knjige Srecom knjiga ima napretek no nisu sve prikladne za pocetnike i one koji nemaju bas nikakva iskustva u programiranju Evo nekoliko naslova (tiskanih i e-knjiga) za Android i iOS uz koje ce pocetak u programiranju biti nesto laksi a koje mozete pronaci na Amazonu

lHf~~~taJ~-1 EDBURNmE Zgodna knjiga koja vodi od samih osnova pa do slozenijih koncepata prateci razvoj igre Sudoku Ova knjiga kroz prakticni primjer doista pomaze pri ucenju razvijanja za Android i stjecanja vaznih vjestina

Knjige za iOS

lOS Prgramming The Big Nerd Ranltlh Guidemiddot JOE CONWAY AARON HILUGASS Sjajna knjiga koja vodi i pokazuje kroz osnovne koncepte za razvoj aptikacija za iOS Ritam obrade materijala je dobar navedeni primjeri aplikacija nisu suhoparni i ovo je knjiga koju vrijedi procitati

Sams Teach Yourself iOS 6 Application Development in 24 Houus lDHN RAY

l~regelcopyp~lent in LAUREN DARCEY lako je i ova knjiga itekako pogodna za pocetnika na trenutke moze Jos jedna knjiga iz iznimno poznate serije instrukcijskih knjiga koja ce biti nerazumljiva onima koji nisu ovladali konceptima objektno itekako dobro doti pri svladavanju prvih koraka u razvoju za Android orijentiranog programiranja Stoga to treba imati na umu dok ju citate i

uz nju vjezbate

IAN F DARWIN iOS() Cookbeok VANDAD NAHAVANDIPOOR OReilly je dobro poznata izdavacka kuta cije su programerske Slicno kao i za Android dostupne su j kuharice za iOS (stoga znak kuharice dobro prihvacene jer nude konkretna (i vecinom kvalitetna) zamijenite inacicom i~S-a) Aktualna je kuharica za iOS 6 no moze se rjesenja za mnoge programerske probleme uskoro ocekivati i za iOS 7

Beginning iOS 6 Development Expioring the iOS SDKmiddot DAVID MARK JACK NUTTING JEFF LAMARCHE FRmRIK OLSSON

lako knjige iz serije za neznalice obicno imaju negativnu konotaciju Dobro poznavanje iOS SDK-a vrlo je vazno za uspjesno programiranje a zapravo su prilicno korisne Nacin na koji obraduju temu programiranja ova ga knjiga prilicno dobro rasclanjuje i objasnjava Doduse ovo je tek prikladan je upravo pocetnicima jedna od mnogih knjige iz iste serije

80 I BUG STUDENI 2013

Effedive ObjfiCthle~C 20 - MATI GALLOWAY Mozda i najbolja knjiga koja se bavi programskim jezikom Objective-C i nudi konkretne (i odlicne) savjete No ovo nije knjiga za one koji nimalo

Android no za totalne pocetnike Stoga ovu knjigu u ruke uzmite ne poznaju jezik Objective-C te Cocoa i Cocoa Touch tek nakon sto ste stekli odredeno iskustvo

nudi doista iscrpan pogled na razvoj aplikacija za

ALATI Kako programirati za Android iii iOS

Bez alata nema zanata Kako svaka platforma za koju se programira donosi i svoje specificnosti ne cudi da i za svaku platformu postoje i specijalizirani razvojni alatilzuzetak tu nisu ni Android i iOS a osim sto postoje sluZbeni alati i razvojna sucelja koji su i vise nego dostatni za razvoj dostupni su i drugi viseplatformski alati koji olakSavaju istodobni razvoj za vise platformi No uz njih tu su i druge aplikacije ali i nezaobilazni te mocni SDK-ovi

~1i~11-shy100t ~il15_ 2~ai~_

~ ~-shyi~~01( ~-lt

gtb b ~-shyshy~--shy~~shy_shy~

flj~tjIfIHltIU_

~ 1 Ilt~ w tOlIltlA tth a~shy~~ ~__~1iIowI

~=-lii ~shy

Profesionalne tvrtke koje se bave razvoshyjem mobilnih aplikaeija obicavaju stroshygo razdvajati programere koji se specishyjaliziraju za Objeetive-C i za Android

Javu Ne samo da su ta dva jezika razlitita nego je i pristup razvoju drukciji Razlitite su i dizajnerske smjemiee cijeli je ekosustav drukciji premda je rezultat u konacniei isti stvara se mobilna aplikacija ali za razlicite platforme Ipak te razlike slieno kao i kod drugih tema znaju neobicno utjecati na sve one koji se bave razvojem pa se neprestano iznova ponavljaju debate oko toga sto Je bolje - Appleov iDS iii Googleov Android

Dio tog debatiranja nerijetko obuhvaca i razvojne alate S jedne je strane tu Eclipse poznato integrirano razvojno sucelje za Jashyvu a s druge rclativno ugladeni Xcode Ono sto je svakako nesporno jest einjenica da ce pocetnici pa i oni iskusniji daleko bde prishyhvatiti nacin na koji radi Xcode a daleko ce tde nauciti da se snalaze u Eclipseu kojl je po svojoj prirodi prilieno kompleksan Isto vrijedi i kada se razvojno okruzenje prvi put postavlja Kod razvoja aplikacija za iPhone I iPad sve se svodi na to da se nabavi raeunalo s Mac OS-om X instalira Xcode I moze se poeeti s programiranjem Bez mnogo petshyIjaneije za pocetak

U slucaju Androida stvan bas i nisu takve no uz nekoliko pocetnih koraka te dodatshynog preuzimanja neizostavnih dodataka u rukama cete imati prilicno mocno razvojno

sueelje U njemu se doista isprva ponesto teze snaci no jednom kada se na njega navishyknete eak nl najzapetljanlje radnje viSe nece predstavljati problem iako ce i dalje uzimati viSe vremena nego sto bi trebale Jedna od kljuenih prednostl Androlda pred i~S-om definitivno je einjenica da sluzbeno razvoino sueelje radi na vise platformi ukljucujuci Linux i Mac OS X

Jednostavnije receno za razliku od Appleshyove metodologlje razvoj za Android moze biti sasvim besplatan iii ako nista drugo daleko jeftiniji cak i kada se u obzir uzme

Xamarin Studio rjesenje je za izradu viseplatformskih aplikacija ito pisuci k6d u programskom jeziku C pri cemu se mogu koristiti nativni API-ji sto je idealno rjesenje za NET programere (~

i naknada koju je potrebno platlti da bi se aplikaeije objavljlvale u sluzbenim trgovishynama U slucaju iDS-a obavezno se mora uclaniti u iDS Developer Program sto stoji 99 dolara potrebna je kupovina Appleova racunala a valja imati i iPhone Clanarina za razvojne inzenjere Android aplikacija za objavu uradaka na Google Playu stojl 25 doshylara no s adresom iz Hrvatske nije moguce prodavati apUkacije No zato je testiranje aplikacija na fizickim uredajima s Android OS-om jednostavno dok je procedura za iDS daleko slozenija

Tlta(jl~m Studio rftlJ(IItI~tMuIIIIIu_-

Titanium Studio jos je jedan moderni IDE koji omogucuje brzl razvoj nativnih mobilnih aplikacija Razvojno sucelje temelji se na Eclipseu a uz Titanium dolazi i njegov vlastiti SDK koji omogucuje razvoj s pomocu HTML-a PHP-a JavaScripta Rubyja i pythona (yJwwappceleratQuQm)

2013 STUDENI BUG I SJ

Android Studio novi je Googleov poku~aj da napravi razvojno 5ucelje Temelji 5e na razvojnom sucelju IntelliJ IDEA a nudi vise mogucnosti od Eclipsea sADT-om kao sto su GradLe refaktoriranje koda specifieno za Android ugradenu podrsku za Google Cloud ProGuard i drugo (httpgoo gllUEvL)

Nerijetko najveci problem s razvojnim suceljima neovisno 0 tome za koju su platshyfomlU obicavaju imati svi oni kOji su navikli raditi u Microsoftovu razvojnom sucelju Visual Studio Tome je tako pogotovo ako je rijec 0 Eclipseu koji bi se iskusnom razvojshynom inzenjeru za Microsoftove tehnologije mogao uciniti kao posvemaSnji metez SHcno vrijedi i za Xcode jer se treba naviknuti i na drukcije sucelje i principe samoga Mac OSshya X Srecom tehnologija nikada ne miruje i ako neSto stalno doista jest onda je to konstantan razvoJ

Tako su nastali alternativni alati kao sto je Xamarin koli se dobro integrira u Visual Studio cineci viseplatformsko programiranje tim jednostavnijim Ne samo da je Xamarishynom moguce istodobno razvijati aplikacije za vise platformi nego ih je moguce pisati u sasvim drugom jeziku - C-sharpu (C) Doduse takva alternativna viseplatformska rjdenja ipak nisu bez nedostatka Prije sveshyga tako napravljene aplikacije u sustini nisu nativne aplikacije (uvijek se mora dogoditi prevodenje sto moze rezultirati novim bushygovima i problemima) a to se reflektira i na performanse i na same mogucnosti Tu je i problem velikih razlika u sucelju aplikacija za razHcite platforme nekonzistentnosti kOje se zbog toga pojavljuju te brojni drugi proshyblemi To ne znaci da se takva rjesenja mora eliminirati nego samo da treba biti svjestan njihovih ogranicenja

No sto je zapravo potrebno za programirashynje U samoj sustini uz racunalo dovoljno je neko kompatibilno razvojno sucelje sluzbeni SDK (Sotware Development Kit) a uputno je imati i mobilni uredaj s OS-om za koji namjeravate razvijati budud da je to jedini konkretan nacin za istinsko testirashynje aplikacija Sto se sucelja tice bas kao i preferirane platforme iIi izbora uredaja sve je stvar osobne preferencije i formiranja navike (iako Xcode prednjaci sto se tice izrade grafickog sucelja) Naravno kada se prevladaju osnove i krene u razvoj konkretshynijih projekata bilo samostalno Hi u timu svijet mobilnog programiranja pokazat ce se cak i 0pseZnijim nego sto je to u slucaju izrade klasicnog softvera Iz te perspektive razvojno sucelje kole koristite postat ce one cime ga se od pocetka i trebalo smatratl tek jedan od alata u nizu potrebnih za uspjesan razvoj aplikacija

82 I BUG STUDENI 2013

Viieplatformske i druge alternative

ALTERNATIVNO PROGRAMIRANJE Osim sluzbenih razvojnih suceLja te osnovnih SDK-ova tijekom je vremena nastao i zavidan niz drugih alternativnih razvojnih sucelja dodatnih alata te hrpa nezavisnih SDK-ova koji razvoj aplikacija na ovaj ili anal nacin cine drukcijim i fLeksibilnijim

PHONEGAP

gtPhoneGapje besplatnorjesenje otvorenog koda (FOSS) namijenjeno

izradi aplikacija za Android iPhone i iPad uredaje (aliidruge) pri (emu se koriste standardni web jezici (HTML CSSi JaitaScript)Za one koji nekim Iudom prepozriaju slilnost 5 Apache Cordovom - u praVll5u PhoneGap je svojevrsna distribucija Apache Cordove u sustini su oboje namijenjeni viseplatformskom razvijanju mdbilriih aplikacija pri cemu omogucuju piistup nativnim funkcijama smartfona kaosto su kamera cikcelerometar i kompas Upravo je stoga avo sjajan SDK za one koji imaju ikustva 5 JavaScriptom i zele napraviti nesto naprednije mobilne aplikacije i to istodobno za vise platformi a uz minimalne ili nikakve intervencije

URL www phonegapcom

MOSYNC gtJos jedno besplatno rjesenje otvorenog koda koje omogucuje izradu nativnih mobilnih aplikacija koristeci jedan te isti programski kod Oslanja se na CC++ ili HTMlSI JavaScript te kombinaciju svega a

omogucuje kompiLiranje aplikacija za do devet razlicitih platformi istodobno To dakako ukljucuje iOS i Android Naravno tu su aplikacijska programska sulelja (API) potrebna za pristup specificnim mogucnostima smartfona i tableta a tu je i MoSync Reload koji omogucuje izradu viseplatformskih aplikacija koristeCi iskljulivo HTMlS i JavaScript (slicno kao PhoneGap)

URL www mosync com

RHOMOBILE

gt RhoMobile Suite zapravo je paket koji se sastoji ad RhoElementsa Rhodesa RhoConnecta RhoStudia RhoHuba i alata RhoGaLLery koji zdruzeno (bolje receno tu je Rhodes framework otvorenog koda koji se temelji na Rubyju) omogucuju eLegantan razvoj aplikacija bez obzira na ciljanu platformu Prednost je ito programski kad treba pisati samo jednom a on ce se kompilirati za praktiCki svaku mobilnu platformu koja je trenutno dostupna Iza ovoga rjesenja stoji Motorola a pohvalno je ito Rhodes nudi princip rada Model View Controler te brojne druge moguCnosti Rijec je dakle a rjesenju koje svakako treba iskusati

URL httpRgQQgllm9xt2

Kako programirati za Android iii iOS

RAZVOJIGARA

UMJESTO APLIKACIJA middot IGRE gt Razvijanje igara prilicno je kompleksan posao a osim samoga programiranja potrebnoje imati rjesenja za cijeli niz drugih aspekata koji su potrebni kada zeLite izraditi kvalitetnu igru Stoga i ne cudi da se dobrim igrama obicno bave timovi a vrlo rijetko individualci No Clanovi takvoga tima svakako moraju biti upuceni u programiranje i dobro se koristiti razvojnim alatima - i ne sarno onima koji sluze za razvoj klasicnih aplikacija Nairne stvaranje igara bas kao i aplikacija otezavaju velike razlike medu platformama a to je dodatno naglaseno upravo kod izrade igara Srecom postoje viseplatformska rjesenja koja takvo sto ipak cine manje bolnim nego sto doista jesUedno od najpoznatijih viSeplatformskih rjeshysenja upravo je Unity 3D Ono je dovoljno kompleksno za razvoj zbilja fantasticnih igracih naslova a istodobno dovoljno jednostavno da njime mogu ovladati i totalni pocetnici Ono sto mnoge iznenaduje svakako je cinjenica da je inicijalno ovaj engine sasvim besplatan a specifican je i po tome sto podrzava tri programska jezika (UnityScript C i Boo) Doduse besplatna inacica ima i odredenih nedostataka no puna Ushycenca stoji 1500 dolara sto i nije mnogo s obzirom na ono sto se nudi Uz Unity 3D dostupna su i druga rjesenja kao sto je Marmalade SDK Rijec je 0 moenom viseplatformskom SDK-u koji omogucuje izradu mobilnih igara za smartfone i tablete Dakako za rad s ovim SDK-om

Vrhunsko rjesenje za izradu atraktivnih viseplatformskih mobilnih (i drugih) igara moguee je dobiti sasvim besplatno 0Jww unity3d com)

potrebno je znanie programskog jezika C++ te odredeno programersko iskustvo Sam SDK moguee ie iskusati besplatno 30 dana sto je dovoljshyno vremena da se prode kroz hrpicu tutorijala a nakon toga ovaj SDK valja kupiti i to prema razlicitim modelima Najjeftinija inacica stoji 150 dolara godisnje po racunalu (Community) nju slijedi ona za 499 dolara godisnje po racunalu (lndie) zatim je tu model Plus koji stoji 1499 dolara godisnje po racunalu (s ovime se dobiva podrska i za rashyzvoj igara za pametne televizore) dok profesionalna i najopremljenija inacica stoji 3499 dolara godisnje po racunalu II

PODESAVANJE RAZVOJNOG OKRUZENJA ZAANDROID

SVE UJEDNOM PAKETU gt Eclipse kao standardno razvojno sucelje za Android nekada je trebalo rucno podesavati dodajuei mu Android SDK Tools te ADT Plugin (instalirani se JDK podrazumijeva) Sreeom otkad se pojavio ADT Bundle ko]i u jednom paketu donosi sve sto je potrebno podesavanje samoga sucelja prakticki je nepotrebno osim ako vee koristite Eclipse za programiranje u Javi i namjeravate prosiriti razvoj apUkacija na Android Tada treba proei dobro dokumentirani proces podesavanja sucelja koji cete pronaei na Googleovu portalu za razvojne inzenjere ADT Bundle dakle pocetak programiranja za Android cini doista lakim Treba samo na zeljenu lokaciju dekomprimirati sadrzaj Zip arhive (cijeU eete paket pronaei na DVD-u koji ste dobili uz ova] broi) otvoriti mapu eclipse i pokrenuti izvrsnu datoteku eclipseexe Sve ostalo vee je spremno Doduse medu vaznijim koracima svakako je definiranje virtualnog uredaja (emulatora) za testiranje aplikacija a po potrebi ee se kasnije morati dodavati i drugi paketi ADT Bundle i to cini jednostavnim

Kreiranje simulatora Android Virtual Device Manager najlaksi je nacin za kreiranje virtualnog uredaja Stoga ga valia pokrenuti tako da se u Eclipseu klikne na Window i zatim na AVD Manager U prozoru koji ee se otvoriti valia kliknuti na New Zatim valja unijeti ime virtualnog uredaja iizabrati vrstu uredaja

(veCinom je dovoljno izabrati uredaj prema velicini njegova ekrana) prema cemu ee biti definirane i druge postavke Parametre je moguee podesavati prema vlastitim preferencijama pri cemu ne treba pretjerivati (npr kod definiranja kolicine radne memorije) a svakako je uputno kvacicom oznaciti opciju Use Host GPU Jednom kada je sve definirano ostaje sarno kliknuti na gumb OK Virtualni uredaj pokreee se tipkom Start nakon cega valja biti strpljiv jer se emulator tradicionalno pokreee prilicno sporo

Upravljanje paketima Android SDK alate platforme i druge komponente organizira kao pakete koje je moguce preuzimati i instalirati Android SDK Managerom Pronaci cete ga u rnapi gdje je dekomprimiran ADT Bundle u obliku izvrsne datoteke (SDK Managerexe) Instalacija paketa maksimalno je jednostavna potrebno je sarno kvaCicom oznaciti zeljeni paket i zatim kliknuti na gumb koji ee pokrenuti instalaciju Medutim svakako treba instalirati SDK Tools SDK Platform-tools i SDK Platform System Image Android Support i primjeri koda preporucljivi su iako nisu nuzni No za pocetnike (i druge) svakako su to dobrodosli dodaci No kako razvijanje aplikacija bude postajalo ozbiljnije tako ce i potreba za paketima porast pa cete nerijetko svracati upravo u Android SDK Manager po nove pakete i azuriranja sect

PODESAVANJE RAZVOJNOG OKRUZENJA ZAiOS

fi ~srJH un~~~mer l ~i ~_ j ~ g~~l-1lt ~ ~J ~Iit~

Xcode

gt Xcode vise nije jedino razvojno sucelje za izradu apUkacija za iOS no dugo je to prakticki bio (vee je neko vrijeme dostupan JetBrainsov AppCode dok viSeplatformska rjesenja neeemo usporedivati) Posebnih koraka za postavljanje zapravo i nema a sve sto je potrebno uciniti jest na Appleovu racunalu pokrenuti App Store u polje za pretrazivanje utipkati Xcode j pokrenuti instalaciju Svakako je potrebno imati aktivnu vezu s Internetom i biti strpljiv jer ce se preuzeti gotovo 2 GB podataka Jednom kada je Xcode spreman s programiranjem s moze zapoceti odmah a jednako je tako spre~an i simulator Ono sto mnoge muci jest da Je za Xcode potrebno imati Appleovo racunalo Doduse moguee je posluziti se trikom virtualizacije te instalirati Mac OS X 108 Il~ visi u virtualnu masinu Medutim takvo Je sto nelegalno premda moze posluziti iskljucivo u edukativne svrhe - samo kao svojevrsno eksperimentiranje prije nego odlucite kupiti barem Apple Mac Mini

2013 STUDENI BUG I 13

ltW

ZIVOT APliKACIJE -

Od testiranja do objave

Jednom kada je onaj osnovni razvojni dio zavrsen i aplikacija se cini spremnom valja ju testirati Osim testiranja usimulatoru uvijek je prije objave uputno aptikacije provjeriti i na fizickim uredajima najbolje na vise od jednog Dok 5 jedne strane u slucaju Androida testiranje aplikacije nije problem jer je vrto jednostavno iskoristiti gotov APK ustucaju iOS-a stvari su znacajno stozenije i skupLje Isto vrijedi i ustucaju konacne objave aplikacije na stuzbenih trgovinama Evo sto morate znati

estiranje aplikacija Android USB debugging definitivno je neizshy opcija je koju svakako bjezno a premda se treba ukljuciti na uredaju zapravo odvija i tijeshy koji ce postuziti za testiranje kom samog razvojshy aplikacije (pronaci tete ju

nog procesa ono konacno u Settings pa Developer testiranje prije same objave options) aplikadje uvijek je pozeljshyno odraditi na fizickim uredajima Iz perspektive tadja uredaja za Android razvojnog inrenjera za Anshy ogromna pa je samim droid takvo sto uopce ne time razvojnim inzenjerishypredstavlja problem Dapashy ma tesko uzeti u obzir sve ee vee je tijekom samog rashy vrste uredaja koji se nalashyzvoja umjesto u emulatoru ze u opticaju Isto vrijedi testne primjerke aplikadje i predvidanje ponasanja moguee pokretati na jedshy aplikadje na raznim vershynom iii viSe fizickih ureshy zijama platforme premda daja Dovoljno ih je sarno SDK tu poprilicno pomashyUSB kablom prikljueiti na ze Kako bi smartfon s raeunalo a onda aplikaciju Android OS-om posluzio

je ovisno 0 platformi na kojo se razvija (na Mac OS-u X stvari ee raditi bez ikakve inmiddot tervencije dok je i za Windowse i za Linux potrebno odraditi nekoliko koraka pri eemu je Linux ponesto sozeniji)

Nakon toga na samom uredaju valja ukljushyeiti USB debugging te ee iduci put kada se u Eclipseu pokrene debugiranje apHkacije medu ponudenim uredajima biti i onai prishykljueen na raeunalo Zelite Ii pak provjeriti je Ii uredaj dostupan to je moguce napraviti naredbom adb devices 8to se testiranja apHkacija na iPhoneu iIi iPadu tice stvari

The easiest way to get feedback on your mobile application

Sign up free -7

~~ ~~-~ BETA FAMILY IN NUMBERS WIW MCRE THAN III=

Testiranje aplikacije moguce je prepustiti i drugima putem servisa kao 5tO je The Beta Family Rijec je 0 crowdsourcing platformi koja omogucuje da drugi testiraju j daju misljenje 0

aplikaciji na kojoj radite wwwthebetafamilycom

su daleko sloznije Iako se veCina razvojnih inzenjera grozi postupka kroz koji treba proei on ee ih ipak na kraju docekati Zasto Apple nije pojednostavio proceduru pitanje je 0 kojemu se moze debatirati no stvari Sil

takve kakve jesu Sreeom tu je okvir koji ee vas kroz nekoliko koraka sprovesti do uspjeha a pozitivno je 5tO jednom kada proshyZivite ovaj proces bit ee jednostavnije proCi kroz proces pripreme aplikacije za objavu u sluzbenoj trgovini Procedura za Google Play opet je nesto jednostavnija

No kljucna je razlika 8to se od prodaje aplishykacija putem App Storea moze zaradivati dok to nije moguce putem Google Playa sve dok ste registrirani 5 racunom u Hrvatskoj jer se ona ne nalazi na popisu poddanih zeshymalja Sreeom zarada je i daje moguca kroz reklame 110 aplikacija mora biti naznacena kao besplatna

pokretati izravno iz Eclipshysea iIi iz naredbenog retka (ADB)

Dakako fizieki uredaj u tom slucaju ipak ne moze zamijeniti emulator jer je fragmenshy

84 I BUG STUDENI 2013

za testiranje dovoljno ga je dakle prikljueiti na raeunalo Ako vee nisu svakako valja instalirati i potrebne upravljacke programe i ostale dodatke lito

Kako programirati za Android iii iOS

KakD te~tiratiiOS ~ aplikacJe na IPhoneu

APPLEOV RAZVOJNI PROGRAM Apple proceduru registracije uredaja za testiranje aplikacija nije ucinio jednostavnom pa i ne cudi da mnogi pribjegavajujailbreaku kao jeftinom i zacudo jednostavnijem rjesenju No sLuzbeni je nacin jedini podrzan a za njega cete se morati uclaniti u iDS Developer Program sto ce vas stajati 99 dolara godisnje Stoga pripremite kreditnu karticu i cvrste zivce za igru pokusaja i promasaja

lOS DeveIotgter Inlgram UUclraquoJgtIyltWklltU(I--shybull

ICorak-2 -

Generiranje certifikata 1

rA_~-Clt----shyOIGrmoollIl1ltG4

~16illttlt wt(tltjf1tlO4~_ulOll_

- ~

Kmiddotmiddotbullmiddotorakmiddot4_

_

bull _ _ n_~

Nakon ~to je certifikat spreman potrebno je registrl~ati uredaj koji ce sluziti za testiranje Ponovno se valja vratiti na iDS Provisioning Portal te pronaci poveznicu Devices i zatim kliknuti na Add Devices Dovoljno je upisati proizvoljan naziv te dodati Device ID ili UDID Rijecje 0

jedinstvenoj vrijednosti od 40 znamenki kojom se uredaj identificira UDID je moguce doznati ili putem iTunesa ili

- ---shy-shy

-~-~~-~-- - ~~~- ~

putemscodeaj uhutarQrgani~fa AkocetekoristitiJtuneskakobiste bull kQpirali ovugolemuvi-iJednost prvo ju l)ior~M (jllokUknoJiitiltiilptitjsriuti kOO1QinadjutipkicqrnmandifCNqkori tQgq uXci)deu yafjauOrgaljzerllPQ1J DeviqesproniitIsR9JejiiiPtJOlletEL bull kli~llutiriagumb Us~JQr[)eVetoPrnentmiddot

middotSretom ovo jenQjoezJQlnij(trenutjlk middotbull jerceXcQde~clltdegrllat~kiprlJetisye potrebn siOSPJQvi~iQJiing Portala st9seprljavit~sect c odgOl(araiLitimkOrisnikimPQdgcimmiddot bull

- -~~ ~~ ~~ -~-~- ~ ~-~--

2013 STUDENI BUG I 85

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 5: Kako Programirati Za Android 1

I

Razvoj AntJroid aplikacija

gtSUeno kao i kod teeaja za razvoj apUkacija za iPhone CROZ nudi i kratke tecajeve za razvoj Android aplikacija (p05toje i tecajevi za 5amu Javu) Tecaj traje pet dana a prolaze 5e najvazniji aspekti razvoja od postavLjanja razvojnog sueeLja preko izrade korisniekog sucelja pokretanja novih aktivnosti te komunikacije medu aktivnostima do spremanja podataka te pozadinskih aplikacija 1 lokacijskih usluga

CIJENA Na upit URL bttplIwww croz netrazyojshyandroid-apUkacijal

GAUSS INFORMATIKA iPhone Developmenti Android Development

gt Domaca tvrtka koja se naLazi u Osijeku vet neko vrijeme organizira edukaciju za one koji tele razvijati za 105 ali iza Android Naravno edukacije st razdvojene iako su u odredenim segmentima sUene Npr oba se teeaja provode u grupama od po iest polaznika a za ciLj imaju polaznicima pribliziti principe objektnog programiranja te jezike za svaku od pLatformi (Java za Android i Objective-C za iOS) Osim toga poucava se cijeli niz drugih specifienosti potrebnih za razvoj za svaku od platformi

CIJENA Na upit URL hmrllgau55-informatikacoml programi-obrazovanjal

EDUKACENTAR Uvod u razvojAndroid aplilltacija

gtSemina r u trajanju 20 skolskih sati namijenjen je svima koji se zeLe upoznati s razvojem mobiLnih aplikacija na platformi Android Govori se 0 sueelju Eclipse 5 ADT-om i Android 5DK-u 0 izradi grafickih sucelja upoznaje se 5 programskim jezikom Java tu je i rad sa zvukom i drugim elementima te niz jednostavnih primjera apLikacija

CIJENA Na upit URL httplIwwwedukacentar hrl Sem ina rilRazvoj-mobiln ib-a p lj kadja

-SKULA NA INTERNETU Osim kLasicnih tecajeva moze se pronaci niz eesto kvalitetnih predavanja putem kojih je moguce usvajati vjestine potrebne za uspjesno programiranje Evo nekoLiko najzanimljivijih e-ueionica

MIT OPEN COURSEWARE

gtUz brojne druge seminare na ovom se svjetski poznatom sveucilistu mogu pronaci predavanja i seminari vezanih uz programiranje Zapravo cilj je ponuditi sve 5to se moze cuti i vidjeti na MIT-u i to sasvim besplatno Stoga 5e dobiva djeli niz materijala od udzbenika preko multimedijskih sadrzaja pa sve do zadataka projekata i primjera Ovo je obavezna stanica za sve one koji tek pocinju s programiranjem ali i one koje zanimaju i naprednija predavanja

URL bttpllocwmitedu(

COURSERA -Take the worlds best courses online for free ~ - -- - - - shy

gt Rijec je 0 Stanfordovu projektu za e-ucenje koji je u kratkom roku stekao vetik broj korisnika jer svima zainteresiranima omogucuje pohadanje tecaja koji predaje sveueitisni profesor 5 toga sveuciLista sasvim besplatno i online Predavanja ima mnogo pa se uz teme usko vezanih uz racunalstvo mogu p05lusati (i pogledati) brojna druga zanimljiva predavanja

URL bttplwww coursera ori

TREEHOUSE Take the worlds best courses online fOI fIee ~-~~ ~~~~ laquozt~~ gtlt~o~~gt _j~ ~

Jos jedna sve popularnija e-ucionica putem koje je moguce nauciti programirati u razlicitim jezicima i za razlieite platforme Dakako pokriveno je programiranje za iOS i za Android Na raspolaganju je vise od ti5uCU videozapi5a a tijekom ucenja valja rjesavati niz zadataka cime cete zasluziti znackice P05toji i sadrzaj za koji 5e mora placati pa su dostupna dva modela pretplate Silver koji stoji 25 dolara mjesecno te Gold koji 5toji 50 dolara

URL httpteamtreehouse com

UDACITY

78 I BUG STUDENI 2013

__

Kako programirati za Android iii iOS

gt lako nudi jedva tridesetak raznih tecajeva (najvise ih je iz podrucja racunalstva) ovo odrediste za online ucenje sve je popularnije Nije ni cudo jer mijenja nacin na koji se odvijaju klasiena predavanja naglasavajuci interaktivnost - neprestano se trazi rjesavanje zadataka i problema Upravo je zato ovo idealno odrediste za stjecanje osnovnih vjestina u programiranju

URL www udacitycom

GOOGLE DEVELOPERS UNIVERSITY CONSORTIUM

]jillliii ~r-shy1lt_ ~--O__I-_

~_~___ _tftWl_~_~__-l~tioIa_

-__ __ ~- shy

gt I sam Google radi na poucavanju pa je dostupan Google Developers University Consortium putem kojega je moguce pronaci niz predavanja iz razliWih podrucja no svih vezanih uz Googleove tehnologije Stoga je ova odlicno mjesto za ucenje razvoja za Android

URL httpsUdevelopers google comi university

-

~Internetski resursi

PROGRAMERSKA VRELA Premda su dva sluzbena portala za razvojne inzenjere (ona za iDS i onaj za Android) i vise nego dovoljna da pronadete odgovore na prakticki sve sto vas moze zanimati dok programirate (osim toga tu je i nezaobilazni Google) dostupno je i nekoUko drugih web stranica koje ee dobro doti pri ucenju ali i razvoju aplikacija

STACK OVERFLOW

bull

~ G ~~-j~y---- shyltc _middot11_1_ ----l~Jgt

C gt ~ toIoIto~__ lI~-

- - _ bull ~_f_ ~ _ ) -tc-rIo-WlluttgttllOl-

gtVelika zajednica koja radi na principu postavi pitanje i dobij odgovor To liko je popularna medu programerima da je gotovo sigurno da eete trazeci savjet putem Googlea medu prvim ponudenim rezultatima pronaci upravo odgovor sa Stack Overflowa

URL bttpstackoverflowcoml

MOBILETUTS+

Creatit Web$lte QII ~ GOtIgle f)J~middot~ --~1-----1M

9

gtJos jedna Envatova web stranica no koja se bavi iskljueivo raznovrsnim tutorijalima za mobilne platforme ponajvise iDS i Android Tu eete pronaci niz raznovrsni h kvalitetnih clanaka neki su informativne prirode i za cilj imaju upoznati eitatelje 5

odredenim segmentima razvoja a neki vode korak po korak pri izradi primjera aplikacije

URL bttplmobiletutspluscoml

JAVA CODE GEEKS gt Ako ste se odlucili programiratl uJavi i za Android avo je jedna od web stranica (mozda bolje receno

zajednica) koju definitivno ne biste smjeli propustiti Tu cete pronaCi doslovce sve 5tO vam padne na pamet od zanimljivih elanaka preko tutorijala do primjera koda Dakle sve 5tO jednom programeru koji uti moze zatrebati

URL wwwJavacodegeekscom

ICODEBLOG

gt Premda se iz naziva ovoga bloga moze zakljueiti da se fokusira iskYucivo na Appleovu platformu zapravo cete ovdje pronaci hrpicu zgodnih (i nerijetko korisnih) tutorijala koji su ponekad popraeeni i videoisjeccima Osim toga tu je i niz primjera gotovog koda (snippeti) te drugi zgodni resursi

URL www icodeblog com

BUG ONLINE FORUM

~~~- 7~~h -

-Programiranie za mofiilne plaftorme

gt I nas je forum izvrsno mjesto za komentiranje i trazenje savjeta ali i pruzanje pomoei manje iskusnima Tim viSe sto je dostupna i kategorija upravo namijenjena programiranju za mobilne platforme Forum moze posluziti i kao mjesto za testiranje aplikacija - clanovi nerijetko znaju ponuditi svoje iskreno misljenje a apUkaciji za koju to zatrazite

URL bttpmiddotwwwbug hrlforum

2013 STUDENI BUG 119

UZ KNJlGE DO SAVRSENSTVA Osim internetskih resursa jedan od vrlo vaznih elemenata pri ucenju razvoja za mobilne platforme (ali i opcenito za programiranje) svakako su knjige Srecom knjiga ima napretek no nisu sve prikladne za pocetnike i one koji nemaju bas nikakva iskustva u programiranju Evo nekoliko naslova (tiskanih i e-knjiga) za Android i iOS uz koje ce pocetak u programiranju biti nesto laksi a koje mozete pronaci na Amazonu

lHf~~~taJ~-1 EDBURNmE Zgodna knjiga koja vodi od samih osnova pa do slozenijih koncepata prateci razvoj igre Sudoku Ova knjiga kroz prakticni primjer doista pomaze pri ucenju razvijanja za Android i stjecanja vaznih vjestina

Knjige za iOS

lOS Prgramming The Big Nerd Ranltlh Guidemiddot JOE CONWAY AARON HILUGASS Sjajna knjiga koja vodi i pokazuje kroz osnovne koncepte za razvoj aptikacija za iOS Ritam obrade materijala je dobar navedeni primjeri aplikacija nisu suhoparni i ovo je knjiga koju vrijedi procitati

Sams Teach Yourself iOS 6 Application Development in 24 Houus lDHN RAY

l~regelcopyp~lent in LAUREN DARCEY lako je i ova knjiga itekako pogodna za pocetnika na trenutke moze Jos jedna knjiga iz iznimno poznate serije instrukcijskih knjiga koja ce biti nerazumljiva onima koji nisu ovladali konceptima objektno itekako dobro doti pri svladavanju prvih koraka u razvoju za Android orijentiranog programiranja Stoga to treba imati na umu dok ju citate i

uz nju vjezbate

IAN F DARWIN iOS() Cookbeok VANDAD NAHAVANDIPOOR OReilly je dobro poznata izdavacka kuta cije su programerske Slicno kao i za Android dostupne su j kuharice za iOS (stoga znak kuharice dobro prihvacene jer nude konkretna (i vecinom kvalitetna) zamijenite inacicom i~S-a) Aktualna je kuharica za iOS 6 no moze se rjesenja za mnoge programerske probleme uskoro ocekivati i za iOS 7

Beginning iOS 6 Development Expioring the iOS SDKmiddot DAVID MARK JACK NUTTING JEFF LAMARCHE FRmRIK OLSSON

lako knjige iz serije za neznalice obicno imaju negativnu konotaciju Dobro poznavanje iOS SDK-a vrlo je vazno za uspjesno programiranje a zapravo su prilicno korisne Nacin na koji obraduju temu programiranja ova ga knjiga prilicno dobro rasclanjuje i objasnjava Doduse ovo je tek prikladan je upravo pocetnicima jedna od mnogih knjige iz iste serije

80 I BUG STUDENI 2013

Effedive ObjfiCthle~C 20 - MATI GALLOWAY Mozda i najbolja knjiga koja se bavi programskim jezikom Objective-C i nudi konkretne (i odlicne) savjete No ovo nije knjiga za one koji nimalo

Android no za totalne pocetnike Stoga ovu knjigu u ruke uzmite ne poznaju jezik Objective-C te Cocoa i Cocoa Touch tek nakon sto ste stekli odredeno iskustvo

nudi doista iscrpan pogled na razvoj aplikacija za

ALATI Kako programirati za Android iii iOS

Bez alata nema zanata Kako svaka platforma za koju se programira donosi i svoje specificnosti ne cudi da i za svaku platformu postoje i specijalizirani razvojni alatilzuzetak tu nisu ni Android i iOS a osim sto postoje sluZbeni alati i razvojna sucelja koji su i vise nego dostatni za razvoj dostupni su i drugi viseplatformski alati koji olakSavaju istodobni razvoj za vise platformi No uz njih tu su i druge aplikacije ali i nezaobilazni te mocni SDK-ovi

~1i~11-shy100t ~il15_ 2~ai~_

~ ~-shyi~~01( ~-lt

gtb b ~-shyshy~--shy~~shy_shy~

flj~tjIfIHltIU_

~ 1 Ilt~ w tOlIltlA tth a~shy~~ ~__~1iIowI

~=-lii ~shy

Profesionalne tvrtke koje se bave razvoshyjem mobilnih aplikaeija obicavaju stroshygo razdvajati programere koji se specishyjaliziraju za Objeetive-C i za Android

Javu Ne samo da su ta dva jezika razlitita nego je i pristup razvoju drukciji Razlitite su i dizajnerske smjemiee cijeli je ekosustav drukciji premda je rezultat u konacniei isti stvara se mobilna aplikacija ali za razlicite platforme Ipak te razlike slieno kao i kod drugih tema znaju neobicno utjecati na sve one koji se bave razvojem pa se neprestano iznova ponavljaju debate oko toga sto Je bolje - Appleov iDS iii Googleov Android

Dio tog debatiranja nerijetko obuhvaca i razvojne alate S jedne je strane tu Eclipse poznato integrirano razvojno sucelje za Jashyvu a s druge rclativno ugladeni Xcode Ono sto je svakako nesporno jest einjenica da ce pocetnici pa i oni iskusniji daleko bde prishyhvatiti nacin na koji radi Xcode a daleko ce tde nauciti da se snalaze u Eclipseu kojl je po svojoj prirodi prilieno kompleksan Isto vrijedi i kada se razvojno okruzenje prvi put postavlja Kod razvoja aplikacija za iPhone I iPad sve se svodi na to da se nabavi raeunalo s Mac OS-om X instalira Xcode I moze se poeeti s programiranjem Bez mnogo petshyIjaneije za pocetak

U slucaju Androida stvan bas i nisu takve no uz nekoliko pocetnih koraka te dodatshynog preuzimanja neizostavnih dodataka u rukama cete imati prilicno mocno razvojno

sueelje U njemu se doista isprva ponesto teze snaci no jednom kada se na njega navishyknete eak nl najzapetljanlje radnje viSe nece predstavljati problem iako ce i dalje uzimati viSe vremena nego sto bi trebale Jedna od kljuenih prednostl Androlda pred i~S-om definitivno je einjenica da sluzbeno razvoino sueelje radi na vise platformi ukljucujuci Linux i Mac OS X

Jednostavnije receno za razliku od Appleshyove metodologlje razvoj za Android moze biti sasvim besplatan iii ako nista drugo daleko jeftiniji cak i kada se u obzir uzme

Xamarin Studio rjesenje je za izradu viseplatformskih aplikacija ito pisuci k6d u programskom jeziku C pri cemu se mogu koristiti nativni API-ji sto je idealno rjesenje za NET programere (~

i naknada koju je potrebno platlti da bi se aplikaeije objavljlvale u sluzbenim trgovishynama U slucaju iDS-a obavezno se mora uclaniti u iDS Developer Program sto stoji 99 dolara potrebna je kupovina Appleova racunala a valja imati i iPhone Clanarina za razvojne inzenjere Android aplikacija za objavu uradaka na Google Playu stojl 25 doshylara no s adresom iz Hrvatske nije moguce prodavati apUkacije No zato je testiranje aplikacija na fizickim uredajima s Android OS-om jednostavno dok je procedura za iDS daleko slozenija

Tlta(jl~m Studio rftlJ(IItI~tMuIIIIIu_-

Titanium Studio jos je jedan moderni IDE koji omogucuje brzl razvoj nativnih mobilnih aplikacija Razvojno sucelje temelji se na Eclipseu a uz Titanium dolazi i njegov vlastiti SDK koji omogucuje razvoj s pomocu HTML-a PHP-a JavaScripta Rubyja i pythona (yJwwappceleratQuQm)

2013 STUDENI BUG I SJ

Android Studio novi je Googleov poku~aj da napravi razvojno 5ucelje Temelji 5e na razvojnom sucelju IntelliJ IDEA a nudi vise mogucnosti od Eclipsea sADT-om kao sto su GradLe refaktoriranje koda specifieno za Android ugradenu podrsku za Google Cloud ProGuard i drugo (httpgoo gllUEvL)

Nerijetko najveci problem s razvojnim suceljima neovisno 0 tome za koju su platshyfomlU obicavaju imati svi oni kOji su navikli raditi u Microsoftovu razvojnom sucelju Visual Studio Tome je tako pogotovo ako je rijec 0 Eclipseu koji bi se iskusnom razvojshynom inzenjeru za Microsoftove tehnologije mogao uciniti kao posvemaSnji metez SHcno vrijedi i za Xcode jer se treba naviknuti i na drukcije sucelje i principe samoga Mac OSshya X Srecom tehnologija nikada ne miruje i ako neSto stalno doista jest onda je to konstantan razvoJ

Tako su nastali alternativni alati kao sto je Xamarin koli se dobro integrira u Visual Studio cineci viseplatformsko programiranje tim jednostavnijim Ne samo da je Xamarishynom moguce istodobno razvijati aplikacije za vise platformi nego ih je moguce pisati u sasvim drugom jeziku - C-sharpu (C) Doduse takva alternativna viseplatformska rjdenja ipak nisu bez nedostatka Prije sveshyga tako napravljene aplikacije u sustini nisu nativne aplikacije (uvijek se mora dogoditi prevodenje sto moze rezultirati novim bushygovima i problemima) a to se reflektira i na performanse i na same mogucnosti Tu je i problem velikih razlika u sucelju aplikacija za razHcite platforme nekonzistentnosti kOje se zbog toga pojavljuju te brojni drugi proshyblemi To ne znaci da se takva rjesenja mora eliminirati nego samo da treba biti svjestan njihovih ogranicenja

No sto je zapravo potrebno za programirashynje U samoj sustini uz racunalo dovoljno je neko kompatibilno razvojno sucelje sluzbeni SDK (Sotware Development Kit) a uputno je imati i mobilni uredaj s OS-om za koji namjeravate razvijati budud da je to jedini konkretan nacin za istinsko testirashynje aplikacija Sto se sucelja tice bas kao i preferirane platforme iIi izbora uredaja sve je stvar osobne preferencije i formiranja navike (iako Xcode prednjaci sto se tice izrade grafickog sucelja) Naravno kada se prevladaju osnove i krene u razvoj konkretshynijih projekata bilo samostalno Hi u timu svijet mobilnog programiranja pokazat ce se cak i 0pseZnijim nego sto je to u slucaju izrade klasicnog softvera Iz te perspektive razvojno sucelje kole koristite postat ce one cime ga se od pocetka i trebalo smatratl tek jedan od alata u nizu potrebnih za uspjesan razvoj aplikacija

82 I BUG STUDENI 2013

Viieplatformske i druge alternative

ALTERNATIVNO PROGRAMIRANJE Osim sluzbenih razvojnih suceLja te osnovnih SDK-ova tijekom je vremena nastao i zavidan niz drugih alternativnih razvojnih sucelja dodatnih alata te hrpa nezavisnih SDK-ova koji razvoj aplikacija na ovaj ili anal nacin cine drukcijim i fLeksibilnijim

PHONEGAP

gtPhoneGapje besplatnorjesenje otvorenog koda (FOSS) namijenjeno

izradi aplikacija za Android iPhone i iPad uredaje (aliidruge) pri (emu se koriste standardni web jezici (HTML CSSi JaitaScript)Za one koji nekim Iudom prepozriaju slilnost 5 Apache Cordovom - u praVll5u PhoneGap je svojevrsna distribucija Apache Cordove u sustini su oboje namijenjeni viseplatformskom razvijanju mdbilriih aplikacija pri cemu omogucuju piistup nativnim funkcijama smartfona kaosto su kamera cikcelerometar i kompas Upravo je stoga avo sjajan SDK za one koji imaju ikustva 5 JavaScriptom i zele napraviti nesto naprednije mobilne aplikacije i to istodobno za vise platformi a uz minimalne ili nikakve intervencije

URL www phonegapcom

MOSYNC gtJos jedno besplatno rjesenje otvorenog koda koje omogucuje izradu nativnih mobilnih aplikacija koristeci jedan te isti programski kod Oslanja se na CC++ ili HTMlSI JavaScript te kombinaciju svega a

omogucuje kompiLiranje aplikacija za do devet razlicitih platformi istodobno To dakako ukljucuje iOS i Android Naravno tu su aplikacijska programska sulelja (API) potrebna za pristup specificnim mogucnostima smartfona i tableta a tu je i MoSync Reload koji omogucuje izradu viseplatformskih aplikacija koristeCi iskljulivo HTMlS i JavaScript (slicno kao PhoneGap)

URL www mosync com

RHOMOBILE

gt RhoMobile Suite zapravo je paket koji se sastoji ad RhoElementsa Rhodesa RhoConnecta RhoStudia RhoHuba i alata RhoGaLLery koji zdruzeno (bolje receno tu je Rhodes framework otvorenog koda koji se temelji na Rubyju) omogucuju eLegantan razvoj aplikacija bez obzira na ciljanu platformu Prednost je ito programski kad treba pisati samo jednom a on ce se kompilirati za praktiCki svaku mobilnu platformu koja je trenutno dostupna Iza ovoga rjesenja stoji Motorola a pohvalno je ito Rhodes nudi princip rada Model View Controler te brojne druge moguCnosti Rijec je dakle a rjesenju koje svakako treba iskusati

URL httpRgQQgllm9xt2

Kako programirati za Android iii iOS

RAZVOJIGARA

UMJESTO APLIKACIJA middot IGRE gt Razvijanje igara prilicno je kompleksan posao a osim samoga programiranja potrebnoje imati rjesenja za cijeli niz drugih aspekata koji su potrebni kada zeLite izraditi kvalitetnu igru Stoga i ne cudi da se dobrim igrama obicno bave timovi a vrlo rijetko individualci No Clanovi takvoga tima svakako moraju biti upuceni u programiranje i dobro se koristiti razvojnim alatima - i ne sarno onima koji sluze za razvoj klasicnih aplikacija Nairne stvaranje igara bas kao i aplikacija otezavaju velike razlike medu platformama a to je dodatno naglaseno upravo kod izrade igara Srecom postoje viseplatformska rjesenja koja takvo sto ipak cine manje bolnim nego sto doista jesUedno od najpoznatijih viSeplatformskih rjeshysenja upravo je Unity 3D Ono je dovoljno kompleksno za razvoj zbilja fantasticnih igracih naslova a istodobno dovoljno jednostavno da njime mogu ovladati i totalni pocetnici Ono sto mnoge iznenaduje svakako je cinjenica da je inicijalno ovaj engine sasvim besplatan a specifican je i po tome sto podrzava tri programska jezika (UnityScript C i Boo) Doduse besplatna inacica ima i odredenih nedostataka no puna Ushycenca stoji 1500 dolara sto i nije mnogo s obzirom na ono sto se nudi Uz Unity 3D dostupna su i druga rjesenja kao sto je Marmalade SDK Rijec je 0 moenom viseplatformskom SDK-u koji omogucuje izradu mobilnih igara za smartfone i tablete Dakako za rad s ovim SDK-om

Vrhunsko rjesenje za izradu atraktivnih viseplatformskih mobilnih (i drugih) igara moguee je dobiti sasvim besplatno 0Jww unity3d com)

potrebno je znanie programskog jezika C++ te odredeno programersko iskustvo Sam SDK moguee ie iskusati besplatno 30 dana sto je dovoljshyno vremena da se prode kroz hrpicu tutorijala a nakon toga ovaj SDK valja kupiti i to prema razlicitim modelima Najjeftinija inacica stoji 150 dolara godisnje po racunalu (Community) nju slijedi ona za 499 dolara godisnje po racunalu (lndie) zatim je tu model Plus koji stoji 1499 dolara godisnje po racunalu (s ovime se dobiva podrska i za rashyzvoj igara za pametne televizore) dok profesionalna i najopremljenija inacica stoji 3499 dolara godisnje po racunalu II

PODESAVANJE RAZVOJNOG OKRUZENJA ZAANDROID

SVE UJEDNOM PAKETU gt Eclipse kao standardno razvojno sucelje za Android nekada je trebalo rucno podesavati dodajuei mu Android SDK Tools te ADT Plugin (instalirani se JDK podrazumijeva) Sreeom otkad se pojavio ADT Bundle ko]i u jednom paketu donosi sve sto je potrebno podesavanje samoga sucelja prakticki je nepotrebno osim ako vee koristite Eclipse za programiranje u Javi i namjeravate prosiriti razvoj apUkacija na Android Tada treba proei dobro dokumentirani proces podesavanja sucelja koji cete pronaei na Googleovu portalu za razvojne inzenjere ADT Bundle dakle pocetak programiranja za Android cini doista lakim Treba samo na zeljenu lokaciju dekomprimirati sadrzaj Zip arhive (cijeU eete paket pronaei na DVD-u koji ste dobili uz ova] broi) otvoriti mapu eclipse i pokrenuti izvrsnu datoteku eclipseexe Sve ostalo vee je spremno Doduse medu vaznijim koracima svakako je definiranje virtualnog uredaja (emulatora) za testiranje aplikacija a po potrebi ee se kasnije morati dodavati i drugi paketi ADT Bundle i to cini jednostavnim

Kreiranje simulatora Android Virtual Device Manager najlaksi je nacin za kreiranje virtualnog uredaja Stoga ga valia pokrenuti tako da se u Eclipseu klikne na Window i zatim na AVD Manager U prozoru koji ee se otvoriti valia kliknuti na New Zatim valja unijeti ime virtualnog uredaja iizabrati vrstu uredaja

(veCinom je dovoljno izabrati uredaj prema velicini njegova ekrana) prema cemu ee biti definirane i druge postavke Parametre je moguee podesavati prema vlastitim preferencijama pri cemu ne treba pretjerivati (npr kod definiranja kolicine radne memorije) a svakako je uputno kvacicom oznaciti opciju Use Host GPU Jednom kada je sve definirano ostaje sarno kliknuti na gumb OK Virtualni uredaj pokreee se tipkom Start nakon cega valja biti strpljiv jer se emulator tradicionalno pokreee prilicno sporo

Upravljanje paketima Android SDK alate platforme i druge komponente organizira kao pakete koje je moguce preuzimati i instalirati Android SDK Managerom Pronaci cete ga u rnapi gdje je dekomprimiran ADT Bundle u obliku izvrsne datoteke (SDK Managerexe) Instalacija paketa maksimalno je jednostavna potrebno je sarno kvaCicom oznaciti zeljeni paket i zatim kliknuti na gumb koji ee pokrenuti instalaciju Medutim svakako treba instalirati SDK Tools SDK Platform-tools i SDK Platform System Image Android Support i primjeri koda preporucljivi su iako nisu nuzni No za pocetnike (i druge) svakako su to dobrodosli dodaci No kako razvijanje aplikacija bude postajalo ozbiljnije tako ce i potreba za paketima porast pa cete nerijetko svracati upravo u Android SDK Manager po nove pakete i azuriranja sect

PODESAVANJE RAZVOJNOG OKRUZENJA ZAiOS

fi ~srJH un~~~mer l ~i ~_ j ~ g~~l-1lt ~ ~J ~Iit~

Xcode

gt Xcode vise nije jedino razvojno sucelje za izradu apUkacija za iOS no dugo je to prakticki bio (vee je neko vrijeme dostupan JetBrainsov AppCode dok viSeplatformska rjesenja neeemo usporedivati) Posebnih koraka za postavljanje zapravo i nema a sve sto je potrebno uciniti jest na Appleovu racunalu pokrenuti App Store u polje za pretrazivanje utipkati Xcode j pokrenuti instalaciju Svakako je potrebno imati aktivnu vezu s Internetom i biti strpljiv jer ce se preuzeti gotovo 2 GB podataka Jednom kada je Xcode spreman s programiranjem s moze zapoceti odmah a jednako je tako spre~an i simulator Ono sto mnoge muci jest da Je za Xcode potrebno imati Appleovo racunalo Doduse moguee je posluziti se trikom virtualizacije te instalirati Mac OS X 108 Il~ visi u virtualnu masinu Medutim takvo Je sto nelegalno premda moze posluziti iskljucivo u edukativne svrhe - samo kao svojevrsno eksperimentiranje prije nego odlucite kupiti barem Apple Mac Mini

2013 STUDENI BUG I 13

ltW

ZIVOT APliKACIJE -

Od testiranja do objave

Jednom kada je onaj osnovni razvojni dio zavrsen i aplikacija se cini spremnom valja ju testirati Osim testiranja usimulatoru uvijek je prije objave uputno aptikacije provjeriti i na fizickim uredajima najbolje na vise od jednog Dok 5 jedne strane u slucaju Androida testiranje aplikacije nije problem jer je vrto jednostavno iskoristiti gotov APK ustucaju iOS-a stvari su znacajno stozenije i skupLje Isto vrijedi i ustucaju konacne objave aplikacije na stuzbenih trgovinama Evo sto morate znati

estiranje aplikacija Android USB debugging definitivno je neizshy opcija je koju svakako bjezno a premda se treba ukljuciti na uredaju zapravo odvija i tijeshy koji ce postuziti za testiranje kom samog razvojshy aplikacije (pronaci tete ju

nog procesa ono konacno u Settings pa Developer testiranje prije same objave options) aplikadje uvijek je pozeljshyno odraditi na fizickim uredajima Iz perspektive tadja uredaja za Android razvojnog inrenjera za Anshy ogromna pa je samim droid takvo sto uopce ne time razvojnim inzenjerishypredstavlja problem Dapashy ma tesko uzeti u obzir sve ee vee je tijekom samog rashy vrste uredaja koji se nalashyzvoja umjesto u emulatoru ze u opticaju Isto vrijedi testne primjerke aplikadje i predvidanje ponasanja moguee pokretati na jedshy aplikadje na raznim vershynom iii viSe fizickih ureshy zijama platforme premda daja Dovoljno ih je sarno SDK tu poprilicno pomashyUSB kablom prikljueiti na ze Kako bi smartfon s raeunalo a onda aplikaciju Android OS-om posluzio

je ovisno 0 platformi na kojo se razvija (na Mac OS-u X stvari ee raditi bez ikakve inmiddot tervencije dok je i za Windowse i za Linux potrebno odraditi nekoliko koraka pri eemu je Linux ponesto sozeniji)

Nakon toga na samom uredaju valja ukljushyeiti USB debugging te ee iduci put kada se u Eclipseu pokrene debugiranje apHkacije medu ponudenim uredajima biti i onai prishykljueen na raeunalo Zelite Ii pak provjeriti je Ii uredaj dostupan to je moguce napraviti naredbom adb devices 8to se testiranja apHkacija na iPhoneu iIi iPadu tice stvari

The easiest way to get feedback on your mobile application

Sign up free -7

~~ ~~-~ BETA FAMILY IN NUMBERS WIW MCRE THAN III=

Testiranje aplikacije moguce je prepustiti i drugima putem servisa kao 5tO je The Beta Family Rijec je 0 crowdsourcing platformi koja omogucuje da drugi testiraju j daju misljenje 0

aplikaciji na kojoj radite wwwthebetafamilycom

su daleko sloznije Iako se veCina razvojnih inzenjera grozi postupka kroz koji treba proei on ee ih ipak na kraju docekati Zasto Apple nije pojednostavio proceduru pitanje je 0 kojemu se moze debatirati no stvari Sil

takve kakve jesu Sreeom tu je okvir koji ee vas kroz nekoliko koraka sprovesti do uspjeha a pozitivno je 5tO jednom kada proshyZivite ovaj proces bit ee jednostavnije proCi kroz proces pripreme aplikacije za objavu u sluzbenoj trgovini Procedura za Google Play opet je nesto jednostavnija

No kljucna je razlika 8to se od prodaje aplishykacija putem App Storea moze zaradivati dok to nije moguce putem Google Playa sve dok ste registrirani 5 racunom u Hrvatskoj jer se ona ne nalazi na popisu poddanih zeshymalja Sreeom zarada je i daje moguca kroz reklame 110 aplikacija mora biti naznacena kao besplatna

pokretati izravno iz Eclipshysea iIi iz naredbenog retka (ADB)

Dakako fizieki uredaj u tom slucaju ipak ne moze zamijeniti emulator jer je fragmenshy

84 I BUG STUDENI 2013

za testiranje dovoljno ga je dakle prikljueiti na raeunalo Ako vee nisu svakako valja instalirati i potrebne upravljacke programe i ostale dodatke lito

Kako programirati za Android iii iOS

KakD te~tiratiiOS ~ aplikacJe na IPhoneu

APPLEOV RAZVOJNI PROGRAM Apple proceduru registracije uredaja za testiranje aplikacija nije ucinio jednostavnom pa i ne cudi da mnogi pribjegavajujailbreaku kao jeftinom i zacudo jednostavnijem rjesenju No sLuzbeni je nacin jedini podrzan a za njega cete se morati uclaniti u iDS Developer Program sto ce vas stajati 99 dolara godisnje Stoga pripremite kreditnu karticu i cvrste zivce za igru pokusaja i promasaja

lOS DeveIotgter Inlgram UUclraquoJgtIyltWklltU(I--shybull

ICorak-2 -

Generiranje certifikata 1

rA_~-Clt----shyOIGrmoollIl1ltG4

~16illttlt wt(tltjf1tlO4~_ulOll_

- ~

Kmiddotmiddotbullmiddotorakmiddot4_

_

bull _ _ n_~

Nakon ~to je certifikat spreman potrebno je registrl~ati uredaj koji ce sluziti za testiranje Ponovno se valja vratiti na iDS Provisioning Portal te pronaci poveznicu Devices i zatim kliknuti na Add Devices Dovoljno je upisati proizvoljan naziv te dodati Device ID ili UDID Rijecje 0

jedinstvenoj vrijednosti od 40 znamenki kojom se uredaj identificira UDID je moguce doznati ili putem iTunesa ili

- ---shy-shy

-~-~~-~-- - ~~~- ~

putemscodeaj uhutarQrgani~fa AkocetekoristitiJtuneskakobiste bull kQpirali ovugolemuvi-iJednost prvo ju l)ior~M (jllokUknoJiitiltiilptitjsriuti kOO1QinadjutipkicqrnmandifCNqkori tQgq uXci)deu yafjauOrgaljzerllPQ1J DeviqesproniitIsR9JejiiiPtJOlletEL bull kli~llutiriagumb Us~JQr[)eVetoPrnentmiddot

middotSretom ovo jenQjoezJQlnij(trenutjlk middotbull jerceXcQde~clltdegrllat~kiprlJetisye potrebn siOSPJQvi~iQJiing Portala st9seprljavit~sect c odgOl(araiLitimkOrisnikimPQdgcimmiddot bull

- -~~ ~~ ~~ -~-~- ~ ~-~--

2013 STUDENI BUG I 85

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 6: Kako Programirati Za Android 1

__

Kako programirati za Android iii iOS

gt lako nudi jedva tridesetak raznih tecajeva (najvise ih je iz podrucja racunalstva) ovo odrediste za online ucenje sve je popularnije Nije ni cudo jer mijenja nacin na koji se odvijaju klasiena predavanja naglasavajuci interaktivnost - neprestano se trazi rjesavanje zadataka i problema Upravo je zato ovo idealno odrediste za stjecanje osnovnih vjestina u programiranju

URL www udacitycom

GOOGLE DEVELOPERS UNIVERSITY CONSORTIUM

]jillliii ~r-shy1lt_ ~--O__I-_

~_~___ _tftWl_~_~__-l~tioIa_

-__ __ ~- shy

gt I sam Google radi na poucavanju pa je dostupan Google Developers University Consortium putem kojega je moguce pronaci niz predavanja iz razliWih podrucja no svih vezanih uz Googleove tehnologije Stoga je ova odlicno mjesto za ucenje razvoja za Android

URL httpsUdevelopers google comi university

-

~Internetski resursi

PROGRAMERSKA VRELA Premda su dva sluzbena portala za razvojne inzenjere (ona za iDS i onaj za Android) i vise nego dovoljna da pronadete odgovore na prakticki sve sto vas moze zanimati dok programirate (osim toga tu je i nezaobilazni Google) dostupno je i nekoUko drugih web stranica koje ee dobro doti pri ucenju ali i razvoju aplikacija

STACK OVERFLOW

bull

~ G ~~-j~y---- shyltc _middot11_1_ ----l~Jgt

C gt ~ toIoIto~__ lI~-

- - _ bull ~_f_ ~ _ ) -tc-rIo-WlluttgttllOl-

gtVelika zajednica koja radi na principu postavi pitanje i dobij odgovor To liko je popularna medu programerima da je gotovo sigurno da eete trazeci savjet putem Googlea medu prvim ponudenim rezultatima pronaci upravo odgovor sa Stack Overflowa

URL bttpstackoverflowcoml

MOBILETUTS+

Creatit Web$lte QII ~ GOtIgle f)J~middot~ --~1-----1M

9

gtJos jedna Envatova web stranica no koja se bavi iskljueivo raznovrsnim tutorijalima za mobilne platforme ponajvise iDS i Android Tu eete pronaci niz raznovrsni h kvalitetnih clanaka neki su informativne prirode i za cilj imaju upoznati eitatelje 5

odredenim segmentima razvoja a neki vode korak po korak pri izradi primjera aplikacije

URL bttplmobiletutspluscoml

JAVA CODE GEEKS gt Ako ste se odlucili programiratl uJavi i za Android avo je jedna od web stranica (mozda bolje receno

zajednica) koju definitivno ne biste smjeli propustiti Tu cete pronaCi doslovce sve 5tO vam padne na pamet od zanimljivih elanaka preko tutorijala do primjera koda Dakle sve 5tO jednom programeru koji uti moze zatrebati

URL wwwJavacodegeekscom

ICODEBLOG

gt Premda se iz naziva ovoga bloga moze zakljueiti da se fokusira iskYucivo na Appleovu platformu zapravo cete ovdje pronaci hrpicu zgodnih (i nerijetko korisnih) tutorijala koji su ponekad popraeeni i videoisjeccima Osim toga tu je i niz primjera gotovog koda (snippeti) te drugi zgodni resursi

URL www icodeblog com

BUG ONLINE FORUM

~~~- 7~~h -

-Programiranie za mofiilne plaftorme

gt I nas je forum izvrsno mjesto za komentiranje i trazenje savjeta ali i pruzanje pomoei manje iskusnima Tim viSe sto je dostupna i kategorija upravo namijenjena programiranju za mobilne platforme Forum moze posluziti i kao mjesto za testiranje aplikacija - clanovi nerijetko znaju ponuditi svoje iskreno misljenje a apUkaciji za koju to zatrazite

URL bttpmiddotwwwbug hrlforum

2013 STUDENI BUG 119

UZ KNJlGE DO SAVRSENSTVA Osim internetskih resursa jedan od vrlo vaznih elemenata pri ucenju razvoja za mobilne platforme (ali i opcenito za programiranje) svakako su knjige Srecom knjiga ima napretek no nisu sve prikladne za pocetnike i one koji nemaju bas nikakva iskustva u programiranju Evo nekoliko naslova (tiskanih i e-knjiga) za Android i iOS uz koje ce pocetak u programiranju biti nesto laksi a koje mozete pronaci na Amazonu

lHf~~~taJ~-1 EDBURNmE Zgodna knjiga koja vodi od samih osnova pa do slozenijih koncepata prateci razvoj igre Sudoku Ova knjiga kroz prakticni primjer doista pomaze pri ucenju razvijanja za Android i stjecanja vaznih vjestina

Knjige za iOS

lOS Prgramming The Big Nerd Ranltlh Guidemiddot JOE CONWAY AARON HILUGASS Sjajna knjiga koja vodi i pokazuje kroz osnovne koncepte za razvoj aptikacija za iOS Ritam obrade materijala je dobar navedeni primjeri aplikacija nisu suhoparni i ovo je knjiga koju vrijedi procitati

Sams Teach Yourself iOS 6 Application Development in 24 Houus lDHN RAY

l~regelcopyp~lent in LAUREN DARCEY lako je i ova knjiga itekako pogodna za pocetnika na trenutke moze Jos jedna knjiga iz iznimno poznate serije instrukcijskih knjiga koja ce biti nerazumljiva onima koji nisu ovladali konceptima objektno itekako dobro doti pri svladavanju prvih koraka u razvoju za Android orijentiranog programiranja Stoga to treba imati na umu dok ju citate i

uz nju vjezbate

IAN F DARWIN iOS() Cookbeok VANDAD NAHAVANDIPOOR OReilly je dobro poznata izdavacka kuta cije su programerske Slicno kao i za Android dostupne su j kuharice za iOS (stoga znak kuharice dobro prihvacene jer nude konkretna (i vecinom kvalitetna) zamijenite inacicom i~S-a) Aktualna je kuharica za iOS 6 no moze se rjesenja za mnoge programerske probleme uskoro ocekivati i za iOS 7

Beginning iOS 6 Development Expioring the iOS SDKmiddot DAVID MARK JACK NUTTING JEFF LAMARCHE FRmRIK OLSSON

lako knjige iz serije za neznalice obicno imaju negativnu konotaciju Dobro poznavanje iOS SDK-a vrlo je vazno za uspjesno programiranje a zapravo su prilicno korisne Nacin na koji obraduju temu programiranja ova ga knjiga prilicno dobro rasclanjuje i objasnjava Doduse ovo je tek prikladan je upravo pocetnicima jedna od mnogih knjige iz iste serije

80 I BUG STUDENI 2013

Effedive ObjfiCthle~C 20 - MATI GALLOWAY Mozda i najbolja knjiga koja se bavi programskim jezikom Objective-C i nudi konkretne (i odlicne) savjete No ovo nije knjiga za one koji nimalo

Android no za totalne pocetnike Stoga ovu knjigu u ruke uzmite ne poznaju jezik Objective-C te Cocoa i Cocoa Touch tek nakon sto ste stekli odredeno iskustvo

nudi doista iscrpan pogled na razvoj aplikacija za

ALATI Kako programirati za Android iii iOS

Bez alata nema zanata Kako svaka platforma za koju se programira donosi i svoje specificnosti ne cudi da i za svaku platformu postoje i specijalizirani razvojni alatilzuzetak tu nisu ni Android i iOS a osim sto postoje sluZbeni alati i razvojna sucelja koji su i vise nego dostatni za razvoj dostupni su i drugi viseplatformski alati koji olakSavaju istodobni razvoj za vise platformi No uz njih tu su i druge aplikacije ali i nezaobilazni te mocni SDK-ovi

~1i~11-shy100t ~il15_ 2~ai~_

~ ~-shyi~~01( ~-lt

gtb b ~-shyshy~--shy~~shy_shy~

flj~tjIfIHltIU_

~ 1 Ilt~ w tOlIltlA tth a~shy~~ ~__~1iIowI

~=-lii ~shy

Profesionalne tvrtke koje se bave razvoshyjem mobilnih aplikaeija obicavaju stroshygo razdvajati programere koji se specishyjaliziraju za Objeetive-C i za Android

Javu Ne samo da su ta dva jezika razlitita nego je i pristup razvoju drukciji Razlitite su i dizajnerske smjemiee cijeli je ekosustav drukciji premda je rezultat u konacniei isti stvara se mobilna aplikacija ali za razlicite platforme Ipak te razlike slieno kao i kod drugih tema znaju neobicno utjecati na sve one koji se bave razvojem pa se neprestano iznova ponavljaju debate oko toga sto Je bolje - Appleov iDS iii Googleov Android

Dio tog debatiranja nerijetko obuhvaca i razvojne alate S jedne je strane tu Eclipse poznato integrirano razvojno sucelje za Jashyvu a s druge rclativno ugladeni Xcode Ono sto je svakako nesporno jest einjenica da ce pocetnici pa i oni iskusniji daleko bde prishyhvatiti nacin na koji radi Xcode a daleko ce tde nauciti da se snalaze u Eclipseu kojl je po svojoj prirodi prilieno kompleksan Isto vrijedi i kada se razvojno okruzenje prvi put postavlja Kod razvoja aplikacija za iPhone I iPad sve se svodi na to da se nabavi raeunalo s Mac OS-om X instalira Xcode I moze se poeeti s programiranjem Bez mnogo petshyIjaneije za pocetak

U slucaju Androida stvan bas i nisu takve no uz nekoliko pocetnih koraka te dodatshynog preuzimanja neizostavnih dodataka u rukama cete imati prilicno mocno razvojno

sueelje U njemu se doista isprva ponesto teze snaci no jednom kada se na njega navishyknete eak nl najzapetljanlje radnje viSe nece predstavljati problem iako ce i dalje uzimati viSe vremena nego sto bi trebale Jedna od kljuenih prednostl Androlda pred i~S-om definitivno je einjenica da sluzbeno razvoino sueelje radi na vise platformi ukljucujuci Linux i Mac OS X

Jednostavnije receno za razliku od Appleshyove metodologlje razvoj za Android moze biti sasvim besplatan iii ako nista drugo daleko jeftiniji cak i kada se u obzir uzme

Xamarin Studio rjesenje je za izradu viseplatformskih aplikacija ito pisuci k6d u programskom jeziku C pri cemu se mogu koristiti nativni API-ji sto je idealno rjesenje za NET programere (~

i naknada koju je potrebno platlti da bi se aplikaeije objavljlvale u sluzbenim trgovishynama U slucaju iDS-a obavezno se mora uclaniti u iDS Developer Program sto stoji 99 dolara potrebna je kupovina Appleova racunala a valja imati i iPhone Clanarina za razvojne inzenjere Android aplikacija za objavu uradaka na Google Playu stojl 25 doshylara no s adresom iz Hrvatske nije moguce prodavati apUkacije No zato je testiranje aplikacija na fizickim uredajima s Android OS-om jednostavno dok je procedura za iDS daleko slozenija

Tlta(jl~m Studio rftlJ(IItI~tMuIIIIIu_-

Titanium Studio jos je jedan moderni IDE koji omogucuje brzl razvoj nativnih mobilnih aplikacija Razvojno sucelje temelji se na Eclipseu a uz Titanium dolazi i njegov vlastiti SDK koji omogucuje razvoj s pomocu HTML-a PHP-a JavaScripta Rubyja i pythona (yJwwappceleratQuQm)

2013 STUDENI BUG I SJ

Android Studio novi je Googleov poku~aj da napravi razvojno 5ucelje Temelji 5e na razvojnom sucelju IntelliJ IDEA a nudi vise mogucnosti od Eclipsea sADT-om kao sto su GradLe refaktoriranje koda specifieno za Android ugradenu podrsku za Google Cloud ProGuard i drugo (httpgoo gllUEvL)

Nerijetko najveci problem s razvojnim suceljima neovisno 0 tome za koju su platshyfomlU obicavaju imati svi oni kOji su navikli raditi u Microsoftovu razvojnom sucelju Visual Studio Tome je tako pogotovo ako je rijec 0 Eclipseu koji bi se iskusnom razvojshynom inzenjeru za Microsoftove tehnologije mogao uciniti kao posvemaSnji metez SHcno vrijedi i za Xcode jer se treba naviknuti i na drukcije sucelje i principe samoga Mac OSshya X Srecom tehnologija nikada ne miruje i ako neSto stalno doista jest onda je to konstantan razvoJ

Tako su nastali alternativni alati kao sto je Xamarin koli se dobro integrira u Visual Studio cineci viseplatformsko programiranje tim jednostavnijim Ne samo da je Xamarishynom moguce istodobno razvijati aplikacije za vise platformi nego ih je moguce pisati u sasvim drugom jeziku - C-sharpu (C) Doduse takva alternativna viseplatformska rjdenja ipak nisu bez nedostatka Prije sveshyga tako napravljene aplikacije u sustini nisu nativne aplikacije (uvijek se mora dogoditi prevodenje sto moze rezultirati novim bushygovima i problemima) a to se reflektira i na performanse i na same mogucnosti Tu je i problem velikih razlika u sucelju aplikacija za razHcite platforme nekonzistentnosti kOje se zbog toga pojavljuju te brojni drugi proshyblemi To ne znaci da se takva rjesenja mora eliminirati nego samo da treba biti svjestan njihovih ogranicenja

No sto je zapravo potrebno za programirashynje U samoj sustini uz racunalo dovoljno je neko kompatibilno razvojno sucelje sluzbeni SDK (Sotware Development Kit) a uputno je imati i mobilni uredaj s OS-om za koji namjeravate razvijati budud da je to jedini konkretan nacin za istinsko testirashynje aplikacija Sto se sucelja tice bas kao i preferirane platforme iIi izbora uredaja sve je stvar osobne preferencije i formiranja navike (iako Xcode prednjaci sto se tice izrade grafickog sucelja) Naravno kada se prevladaju osnove i krene u razvoj konkretshynijih projekata bilo samostalno Hi u timu svijet mobilnog programiranja pokazat ce se cak i 0pseZnijim nego sto je to u slucaju izrade klasicnog softvera Iz te perspektive razvojno sucelje kole koristite postat ce one cime ga se od pocetka i trebalo smatratl tek jedan od alata u nizu potrebnih za uspjesan razvoj aplikacija

82 I BUG STUDENI 2013

Viieplatformske i druge alternative

ALTERNATIVNO PROGRAMIRANJE Osim sluzbenih razvojnih suceLja te osnovnih SDK-ova tijekom je vremena nastao i zavidan niz drugih alternativnih razvojnih sucelja dodatnih alata te hrpa nezavisnih SDK-ova koji razvoj aplikacija na ovaj ili anal nacin cine drukcijim i fLeksibilnijim

PHONEGAP

gtPhoneGapje besplatnorjesenje otvorenog koda (FOSS) namijenjeno

izradi aplikacija za Android iPhone i iPad uredaje (aliidruge) pri (emu se koriste standardni web jezici (HTML CSSi JaitaScript)Za one koji nekim Iudom prepozriaju slilnost 5 Apache Cordovom - u praVll5u PhoneGap je svojevrsna distribucija Apache Cordove u sustini su oboje namijenjeni viseplatformskom razvijanju mdbilriih aplikacija pri cemu omogucuju piistup nativnim funkcijama smartfona kaosto su kamera cikcelerometar i kompas Upravo je stoga avo sjajan SDK za one koji imaju ikustva 5 JavaScriptom i zele napraviti nesto naprednije mobilne aplikacije i to istodobno za vise platformi a uz minimalne ili nikakve intervencije

URL www phonegapcom

MOSYNC gtJos jedno besplatno rjesenje otvorenog koda koje omogucuje izradu nativnih mobilnih aplikacija koristeci jedan te isti programski kod Oslanja se na CC++ ili HTMlSI JavaScript te kombinaciju svega a

omogucuje kompiLiranje aplikacija za do devet razlicitih platformi istodobno To dakako ukljucuje iOS i Android Naravno tu su aplikacijska programska sulelja (API) potrebna za pristup specificnim mogucnostima smartfona i tableta a tu je i MoSync Reload koji omogucuje izradu viseplatformskih aplikacija koristeCi iskljulivo HTMlS i JavaScript (slicno kao PhoneGap)

URL www mosync com

RHOMOBILE

gt RhoMobile Suite zapravo je paket koji se sastoji ad RhoElementsa Rhodesa RhoConnecta RhoStudia RhoHuba i alata RhoGaLLery koji zdruzeno (bolje receno tu je Rhodes framework otvorenog koda koji se temelji na Rubyju) omogucuju eLegantan razvoj aplikacija bez obzira na ciljanu platformu Prednost je ito programski kad treba pisati samo jednom a on ce se kompilirati za praktiCki svaku mobilnu platformu koja je trenutno dostupna Iza ovoga rjesenja stoji Motorola a pohvalno je ito Rhodes nudi princip rada Model View Controler te brojne druge moguCnosti Rijec je dakle a rjesenju koje svakako treba iskusati

URL httpRgQQgllm9xt2

Kako programirati za Android iii iOS

RAZVOJIGARA

UMJESTO APLIKACIJA middot IGRE gt Razvijanje igara prilicno je kompleksan posao a osim samoga programiranja potrebnoje imati rjesenja za cijeli niz drugih aspekata koji su potrebni kada zeLite izraditi kvalitetnu igru Stoga i ne cudi da se dobrim igrama obicno bave timovi a vrlo rijetko individualci No Clanovi takvoga tima svakako moraju biti upuceni u programiranje i dobro se koristiti razvojnim alatima - i ne sarno onima koji sluze za razvoj klasicnih aplikacija Nairne stvaranje igara bas kao i aplikacija otezavaju velike razlike medu platformama a to je dodatno naglaseno upravo kod izrade igara Srecom postoje viseplatformska rjesenja koja takvo sto ipak cine manje bolnim nego sto doista jesUedno od najpoznatijih viSeplatformskih rjeshysenja upravo je Unity 3D Ono je dovoljno kompleksno za razvoj zbilja fantasticnih igracih naslova a istodobno dovoljno jednostavno da njime mogu ovladati i totalni pocetnici Ono sto mnoge iznenaduje svakako je cinjenica da je inicijalno ovaj engine sasvim besplatan a specifican je i po tome sto podrzava tri programska jezika (UnityScript C i Boo) Doduse besplatna inacica ima i odredenih nedostataka no puna Ushycenca stoji 1500 dolara sto i nije mnogo s obzirom na ono sto se nudi Uz Unity 3D dostupna su i druga rjesenja kao sto je Marmalade SDK Rijec je 0 moenom viseplatformskom SDK-u koji omogucuje izradu mobilnih igara za smartfone i tablete Dakako za rad s ovim SDK-om

Vrhunsko rjesenje za izradu atraktivnih viseplatformskih mobilnih (i drugih) igara moguee je dobiti sasvim besplatno 0Jww unity3d com)

potrebno je znanie programskog jezika C++ te odredeno programersko iskustvo Sam SDK moguee ie iskusati besplatno 30 dana sto je dovoljshyno vremena da se prode kroz hrpicu tutorijala a nakon toga ovaj SDK valja kupiti i to prema razlicitim modelima Najjeftinija inacica stoji 150 dolara godisnje po racunalu (Community) nju slijedi ona za 499 dolara godisnje po racunalu (lndie) zatim je tu model Plus koji stoji 1499 dolara godisnje po racunalu (s ovime se dobiva podrska i za rashyzvoj igara za pametne televizore) dok profesionalna i najopremljenija inacica stoji 3499 dolara godisnje po racunalu II

PODESAVANJE RAZVOJNOG OKRUZENJA ZAANDROID

SVE UJEDNOM PAKETU gt Eclipse kao standardno razvojno sucelje za Android nekada je trebalo rucno podesavati dodajuei mu Android SDK Tools te ADT Plugin (instalirani se JDK podrazumijeva) Sreeom otkad se pojavio ADT Bundle ko]i u jednom paketu donosi sve sto je potrebno podesavanje samoga sucelja prakticki je nepotrebno osim ako vee koristite Eclipse za programiranje u Javi i namjeravate prosiriti razvoj apUkacija na Android Tada treba proei dobro dokumentirani proces podesavanja sucelja koji cete pronaei na Googleovu portalu za razvojne inzenjere ADT Bundle dakle pocetak programiranja za Android cini doista lakim Treba samo na zeljenu lokaciju dekomprimirati sadrzaj Zip arhive (cijeU eete paket pronaei na DVD-u koji ste dobili uz ova] broi) otvoriti mapu eclipse i pokrenuti izvrsnu datoteku eclipseexe Sve ostalo vee je spremno Doduse medu vaznijim koracima svakako je definiranje virtualnog uredaja (emulatora) za testiranje aplikacija a po potrebi ee se kasnije morati dodavati i drugi paketi ADT Bundle i to cini jednostavnim

Kreiranje simulatora Android Virtual Device Manager najlaksi je nacin za kreiranje virtualnog uredaja Stoga ga valia pokrenuti tako da se u Eclipseu klikne na Window i zatim na AVD Manager U prozoru koji ee se otvoriti valia kliknuti na New Zatim valja unijeti ime virtualnog uredaja iizabrati vrstu uredaja

(veCinom je dovoljno izabrati uredaj prema velicini njegova ekrana) prema cemu ee biti definirane i druge postavke Parametre je moguee podesavati prema vlastitim preferencijama pri cemu ne treba pretjerivati (npr kod definiranja kolicine radne memorije) a svakako je uputno kvacicom oznaciti opciju Use Host GPU Jednom kada je sve definirano ostaje sarno kliknuti na gumb OK Virtualni uredaj pokreee se tipkom Start nakon cega valja biti strpljiv jer se emulator tradicionalno pokreee prilicno sporo

Upravljanje paketima Android SDK alate platforme i druge komponente organizira kao pakete koje je moguce preuzimati i instalirati Android SDK Managerom Pronaci cete ga u rnapi gdje je dekomprimiran ADT Bundle u obliku izvrsne datoteke (SDK Managerexe) Instalacija paketa maksimalno je jednostavna potrebno je sarno kvaCicom oznaciti zeljeni paket i zatim kliknuti na gumb koji ee pokrenuti instalaciju Medutim svakako treba instalirati SDK Tools SDK Platform-tools i SDK Platform System Image Android Support i primjeri koda preporucljivi su iako nisu nuzni No za pocetnike (i druge) svakako su to dobrodosli dodaci No kako razvijanje aplikacija bude postajalo ozbiljnije tako ce i potreba za paketima porast pa cete nerijetko svracati upravo u Android SDK Manager po nove pakete i azuriranja sect

PODESAVANJE RAZVOJNOG OKRUZENJA ZAiOS

fi ~srJH un~~~mer l ~i ~_ j ~ g~~l-1lt ~ ~J ~Iit~

Xcode

gt Xcode vise nije jedino razvojno sucelje za izradu apUkacija za iOS no dugo je to prakticki bio (vee je neko vrijeme dostupan JetBrainsov AppCode dok viSeplatformska rjesenja neeemo usporedivati) Posebnih koraka za postavljanje zapravo i nema a sve sto je potrebno uciniti jest na Appleovu racunalu pokrenuti App Store u polje za pretrazivanje utipkati Xcode j pokrenuti instalaciju Svakako je potrebno imati aktivnu vezu s Internetom i biti strpljiv jer ce se preuzeti gotovo 2 GB podataka Jednom kada je Xcode spreman s programiranjem s moze zapoceti odmah a jednako je tako spre~an i simulator Ono sto mnoge muci jest da Je za Xcode potrebno imati Appleovo racunalo Doduse moguee je posluziti se trikom virtualizacije te instalirati Mac OS X 108 Il~ visi u virtualnu masinu Medutim takvo Je sto nelegalno premda moze posluziti iskljucivo u edukativne svrhe - samo kao svojevrsno eksperimentiranje prije nego odlucite kupiti barem Apple Mac Mini

2013 STUDENI BUG I 13

ltW

ZIVOT APliKACIJE -

Od testiranja do objave

Jednom kada je onaj osnovni razvojni dio zavrsen i aplikacija se cini spremnom valja ju testirati Osim testiranja usimulatoru uvijek je prije objave uputno aptikacije provjeriti i na fizickim uredajima najbolje na vise od jednog Dok 5 jedne strane u slucaju Androida testiranje aplikacije nije problem jer je vrto jednostavno iskoristiti gotov APK ustucaju iOS-a stvari su znacajno stozenije i skupLje Isto vrijedi i ustucaju konacne objave aplikacije na stuzbenih trgovinama Evo sto morate znati

estiranje aplikacija Android USB debugging definitivno je neizshy opcija je koju svakako bjezno a premda se treba ukljuciti na uredaju zapravo odvija i tijeshy koji ce postuziti za testiranje kom samog razvojshy aplikacije (pronaci tete ju

nog procesa ono konacno u Settings pa Developer testiranje prije same objave options) aplikadje uvijek je pozeljshyno odraditi na fizickim uredajima Iz perspektive tadja uredaja za Android razvojnog inrenjera za Anshy ogromna pa je samim droid takvo sto uopce ne time razvojnim inzenjerishypredstavlja problem Dapashy ma tesko uzeti u obzir sve ee vee je tijekom samog rashy vrste uredaja koji se nalashyzvoja umjesto u emulatoru ze u opticaju Isto vrijedi testne primjerke aplikadje i predvidanje ponasanja moguee pokretati na jedshy aplikadje na raznim vershynom iii viSe fizickih ureshy zijama platforme premda daja Dovoljno ih je sarno SDK tu poprilicno pomashyUSB kablom prikljueiti na ze Kako bi smartfon s raeunalo a onda aplikaciju Android OS-om posluzio

je ovisno 0 platformi na kojo se razvija (na Mac OS-u X stvari ee raditi bez ikakve inmiddot tervencije dok je i za Windowse i za Linux potrebno odraditi nekoliko koraka pri eemu je Linux ponesto sozeniji)

Nakon toga na samom uredaju valja ukljushyeiti USB debugging te ee iduci put kada se u Eclipseu pokrene debugiranje apHkacije medu ponudenim uredajima biti i onai prishykljueen na raeunalo Zelite Ii pak provjeriti je Ii uredaj dostupan to je moguce napraviti naredbom adb devices 8to se testiranja apHkacija na iPhoneu iIi iPadu tice stvari

The easiest way to get feedback on your mobile application

Sign up free -7

~~ ~~-~ BETA FAMILY IN NUMBERS WIW MCRE THAN III=

Testiranje aplikacije moguce je prepustiti i drugima putem servisa kao 5tO je The Beta Family Rijec je 0 crowdsourcing platformi koja omogucuje da drugi testiraju j daju misljenje 0

aplikaciji na kojoj radite wwwthebetafamilycom

su daleko sloznije Iako se veCina razvojnih inzenjera grozi postupka kroz koji treba proei on ee ih ipak na kraju docekati Zasto Apple nije pojednostavio proceduru pitanje je 0 kojemu se moze debatirati no stvari Sil

takve kakve jesu Sreeom tu je okvir koji ee vas kroz nekoliko koraka sprovesti do uspjeha a pozitivno je 5tO jednom kada proshyZivite ovaj proces bit ee jednostavnije proCi kroz proces pripreme aplikacije za objavu u sluzbenoj trgovini Procedura za Google Play opet je nesto jednostavnija

No kljucna je razlika 8to se od prodaje aplishykacija putem App Storea moze zaradivati dok to nije moguce putem Google Playa sve dok ste registrirani 5 racunom u Hrvatskoj jer se ona ne nalazi na popisu poddanih zeshymalja Sreeom zarada je i daje moguca kroz reklame 110 aplikacija mora biti naznacena kao besplatna

pokretati izravno iz Eclipshysea iIi iz naredbenog retka (ADB)

Dakako fizieki uredaj u tom slucaju ipak ne moze zamijeniti emulator jer je fragmenshy

84 I BUG STUDENI 2013

za testiranje dovoljno ga je dakle prikljueiti na raeunalo Ako vee nisu svakako valja instalirati i potrebne upravljacke programe i ostale dodatke lito

Kako programirati za Android iii iOS

KakD te~tiratiiOS ~ aplikacJe na IPhoneu

APPLEOV RAZVOJNI PROGRAM Apple proceduru registracije uredaja za testiranje aplikacija nije ucinio jednostavnom pa i ne cudi da mnogi pribjegavajujailbreaku kao jeftinom i zacudo jednostavnijem rjesenju No sLuzbeni je nacin jedini podrzan a za njega cete se morati uclaniti u iDS Developer Program sto ce vas stajati 99 dolara godisnje Stoga pripremite kreditnu karticu i cvrste zivce za igru pokusaja i promasaja

lOS DeveIotgter Inlgram UUclraquoJgtIyltWklltU(I--shybull

ICorak-2 -

Generiranje certifikata 1

rA_~-Clt----shyOIGrmoollIl1ltG4

~16illttlt wt(tltjf1tlO4~_ulOll_

- ~

Kmiddotmiddotbullmiddotorakmiddot4_

_

bull _ _ n_~

Nakon ~to je certifikat spreman potrebno je registrl~ati uredaj koji ce sluziti za testiranje Ponovno se valja vratiti na iDS Provisioning Portal te pronaci poveznicu Devices i zatim kliknuti na Add Devices Dovoljno je upisati proizvoljan naziv te dodati Device ID ili UDID Rijecje 0

jedinstvenoj vrijednosti od 40 znamenki kojom se uredaj identificira UDID je moguce doznati ili putem iTunesa ili

- ---shy-shy

-~-~~-~-- - ~~~- ~

putemscodeaj uhutarQrgani~fa AkocetekoristitiJtuneskakobiste bull kQpirali ovugolemuvi-iJednost prvo ju l)ior~M (jllokUknoJiitiltiilptitjsriuti kOO1QinadjutipkicqrnmandifCNqkori tQgq uXci)deu yafjauOrgaljzerllPQ1J DeviqesproniitIsR9JejiiiPtJOlletEL bull kli~llutiriagumb Us~JQr[)eVetoPrnentmiddot

middotSretom ovo jenQjoezJQlnij(trenutjlk middotbull jerceXcQde~clltdegrllat~kiprlJetisye potrebn siOSPJQvi~iQJiing Portala st9seprljavit~sect c odgOl(araiLitimkOrisnikimPQdgcimmiddot bull

- -~~ ~~ ~~ -~-~- ~ ~-~--

2013 STUDENI BUG I 85

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 7: Kako Programirati Za Android 1

UZ KNJlGE DO SAVRSENSTVA Osim internetskih resursa jedan od vrlo vaznih elemenata pri ucenju razvoja za mobilne platforme (ali i opcenito za programiranje) svakako su knjige Srecom knjiga ima napretek no nisu sve prikladne za pocetnike i one koji nemaju bas nikakva iskustva u programiranju Evo nekoliko naslova (tiskanih i e-knjiga) za Android i iOS uz koje ce pocetak u programiranju biti nesto laksi a koje mozete pronaci na Amazonu

lHf~~~taJ~-1 EDBURNmE Zgodna knjiga koja vodi od samih osnova pa do slozenijih koncepata prateci razvoj igre Sudoku Ova knjiga kroz prakticni primjer doista pomaze pri ucenju razvijanja za Android i stjecanja vaznih vjestina

Knjige za iOS

lOS Prgramming The Big Nerd Ranltlh Guidemiddot JOE CONWAY AARON HILUGASS Sjajna knjiga koja vodi i pokazuje kroz osnovne koncepte za razvoj aptikacija za iOS Ritam obrade materijala je dobar navedeni primjeri aplikacija nisu suhoparni i ovo je knjiga koju vrijedi procitati

Sams Teach Yourself iOS 6 Application Development in 24 Houus lDHN RAY

l~regelcopyp~lent in LAUREN DARCEY lako je i ova knjiga itekako pogodna za pocetnika na trenutke moze Jos jedna knjiga iz iznimno poznate serije instrukcijskih knjiga koja ce biti nerazumljiva onima koji nisu ovladali konceptima objektno itekako dobro doti pri svladavanju prvih koraka u razvoju za Android orijentiranog programiranja Stoga to treba imati na umu dok ju citate i

uz nju vjezbate

IAN F DARWIN iOS() Cookbeok VANDAD NAHAVANDIPOOR OReilly je dobro poznata izdavacka kuta cije su programerske Slicno kao i za Android dostupne su j kuharice za iOS (stoga znak kuharice dobro prihvacene jer nude konkretna (i vecinom kvalitetna) zamijenite inacicom i~S-a) Aktualna je kuharica za iOS 6 no moze se rjesenja za mnoge programerske probleme uskoro ocekivati i za iOS 7

Beginning iOS 6 Development Expioring the iOS SDKmiddot DAVID MARK JACK NUTTING JEFF LAMARCHE FRmRIK OLSSON

lako knjige iz serije za neznalice obicno imaju negativnu konotaciju Dobro poznavanje iOS SDK-a vrlo je vazno za uspjesno programiranje a zapravo su prilicno korisne Nacin na koji obraduju temu programiranja ova ga knjiga prilicno dobro rasclanjuje i objasnjava Doduse ovo je tek prikladan je upravo pocetnicima jedna od mnogih knjige iz iste serije

80 I BUG STUDENI 2013

Effedive ObjfiCthle~C 20 - MATI GALLOWAY Mozda i najbolja knjiga koja se bavi programskim jezikom Objective-C i nudi konkretne (i odlicne) savjete No ovo nije knjiga za one koji nimalo

Android no za totalne pocetnike Stoga ovu knjigu u ruke uzmite ne poznaju jezik Objective-C te Cocoa i Cocoa Touch tek nakon sto ste stekli odredeno iskustvo

nudi doista iscrpan pogled na razvoj aplikacija za

ALATI Kako programirati za Android iii iOS

Bez alata nema zanata Kako svaka platforma za koju se programira donosi i svoje specificnosti ne cudi da i za svaku platformu postoje i specijalizirani razvojni alatilzuzetak tu nisu ni Android i iOS a osim sto postoje sluZbeni alati i razvojna sucelja koji su i vise nego dostatni za razvoj dostupni su i drugi viseplatformski alati koji olakSavaju istodobni razvoj za vise platformi No uz njih tu su i druge aplikacije ali i nezaobilazni te mocni SDK-ovi

~1i~11-shy100t ~il15_ 2~ai~_

~ ~-shyi~~01( ~-lt

gtb b ~-shyshy~--shy~~shy_shy~

flj~tjIfIHltIU_

~ 1 Ilt~ w tOlIltlA tth a~shy~~ ~__~1iIowI

~=-lii ~shy

Profesionalne tvrtke koje se bave razvoshyjem mobilnih aplikaeija obicavaju stroshygo razdvajati programere koji se specishyjaliziraju za Objeetive-C i za Android

Javu Ne samo da su ta dva jezika razlitita nego je i pristup razvoju drukciji Razlitite su i dizajnerske smjemiee cijeli je ekosustav drukciji premda je rezultat u konacniei isti stvara se mobilna aplikacija ali za razlicite platforme Ipak te razlike slieno kao i kod drugih tema znaju neobicno utjecati na sve one koji se bave razvojem pa se neprestano iznova ponavljaju debate oko toga sto Je bolje - Appleov iDS iii Googleov Android

Dio tog debatiranja nerijetko obuhvaca i razvojne alate S jedne je strane tu Eclipse poznato integrirano razvojno sucelje za Jashyvu a s druge rclativno ugladeni Xcode Ono sto je svakako nesporno jest einjenica da ce pocetnici pa i oni iskusniji daleko bde prishyhvatiti nacin na koji radi Xcode a daleko ce tde nauciti da se snalaze u Eclipseu kojl je po svojoj prirodi prilieno kompleksan Isto vrijedi i kada se razvojno okruzenje prvi put postavlja Kod razvoja aplikacija za iPhone I iPad sve se svodi na to da se nabavi raeunalo s Mac OS-om X instalira Xcode I moze se poeeti s programiranjem Bez mnogo petshyIjaneije za pocetak

U slucaju Androida stvan bas i nisu takve no uz nekoliko pocetnih koraka te dodatshynog preuzimanja neizostavnih dodataka u rukama cete imati prilicno mocno razvojno

sueelje U njemu se doista isprva ponesto teze snaci no jednom kada se na njega navishyknete eak nl najzapetljanlje radnje viSe nece predstavljati problem iako ce i dalje uzimati viSe vremena nego sto bi trebale Jedna od kljuenih prednostl Androlda pred i~S-om definitivno je einjenica da sluzbeno razvoino sueelje radi na vise platformi ukljucujuci Linux i Mac OS X

Jednostavnije receno za razliku od Appleshyove metodologlje razvoj za Android moze biti sasvim besplatan iii ako nista drugo daleko jeftiniji cak i kada se u obzir uzme

Xamarin Studio rjesenje je za izradu viseplatformskih aplikacija ito pisuci k6d u programskom jeziku C pri cemu se mogu koristiti nativni API-ji sto je idealno rjesenje za NET programere (~

i naknada koju je potrebno platlti da bi se aplikaeije objavljlvale u sluzbenim trgovishynama U slucaju iDS-a obavezno se mora uclaniti u iDS Developer Program sto stoji 99 dolara potrebna je kupovina Appleova racunala a valja imati i iPhone Clanarina za razvojne inzenjere Android aplikacija za objavu uradaka na Google Playu stojl 25 doshylara no s adresom iz Hrvatske nije moguce prodavati apUkacije No zato je testiranje aplikacija na fizickim uredajima s Android OS-om jednostavno dok je procedura za iDS daleko slozenija

Tlta(jl~m Studio rftlJ(IItI~tMuIIIIIu_-

Titanium Studio jos je jedan moderni IDE koji omogucuje brzl razvoj nativnih mobilnih aplikacija Razvojno sucelje temelji se na Eclipseu a uz Titanium dolazi i njegov vlastiti SDK koji omogucuje razvoj s pomocu HTML-a PHP-a JavaScripta Rubyja i pythona (yJwwappceleratQuQm)

2013 STUDENI BUG I SJ

Android Studio novi je Googleov poku~aj da napravi razvojno 5ucelje Temelji 5e na razvojnom sucelju IntelliJ IDEA a nudi vise mogucnosti od Eclipsea sADT-om kao sto su GradLe refaktoriranje koda specifieno za Android ugradenu podrsku za Google Cloud ProGuard i drugo (httpgoo gllUEvL)

Nerijetko najveci problem s razvojnim suceljima neovisno 0 tome za koju su platshyfomlU obicavaju imati svi oni kOji su navikli raditi u Microsoftovu razvojnom sucelju Visual Studio Tome je tako pogotovo ako je rijec 0 Eclipseu koji bi se iskusnom razvojshynom inzenjeru za Microsoftove tehnologije mogao uciniti kao posvemaSnji metez SHcno vrijedi i za Xcode jer se treba naviknuti i na drukcije sucelje i principe samoga Mac OSshya X Srecom tehnologija nikada ne miruje i ako neSto stalno doista jest onda je to konstantan razvoJ

Tako su nastali alternativni alati kao sto je Xamarin koli se dobro integrira u Visual Studio cineci viseplatformsko programiranje tim jednostavnijim Ne samo da je Xamarishynom moguce istodobno razvijati aplikacije za vise platformi nego ih je moguce pisati u sasvim drugom jeziku - C-sharpu (C) Doduse takva alternativna viseplatformska rjdenja ipak nisu bez nedostatka Prije sveshyga tako napravljene aplikacije u sustini nisu nativne aplikacije (uvijek se mora dogoditi prevodenje sto moze rezultirati novim bushygovima i problemima) a to se reflektira i na performanse i na same mogucnosti Tu je i problem velikih razlika u sucelju aplikacija za razHcite platforme nekonzistentnosti kOje se zbog toga pojavljuju te brojni drugi proshyblemi To ne znaci da se takva rjesenja mora eliminirati nego samo da treba biti svjestan njihovih ogranicenja

No sto je zapravo potrebno za programirashynje U samoj sustini uz racunalo dovoljno je neko kompatibilno razvojno sucelje sluzbeni SDK (Sotware Development Kit) a uputno je imati i mobilni uredaj s OS-om za koji namjeravate razvijati budud da je to jedini konkretan nacin za istinsko testirashynje aplikacija Sto se sucelja tice bas kao i preferirane platforme iIi izbora uredaja sve je stvar osobne preferencije i formiranja navike (iako Xcode prednjaci sto se tice izrade grafickog sucelja) Naravno kada se prevladaju osnove i krene u razvoj konkretshynijih projekata bilo samostalno Hi u timu svijet mobilnog programiranja pokazat ce se cak i 0pseZnijim nego sto je to u slucaju izrade klasicnog softvera Iz te perspektive razvojno sucelje kole koristite postat ce one cime ga se od pocetka i trebalo smatratl tek jedan od alata u nizu potrebnih za uspjesan razvoj aplikacija

82 I BUG STUDENI 2013

Viieplatformske i druge alternative

ALTERNATIVNO PROGRAMIRANJE Osim sluzbenih razvojnih suceLja te osnovnih SDK-ova tijekom je vremena nastao i zavidan niz drugih alternativnih razvojnih sucelja dodatnih alata te hrpa nezavisnih SDK-ova koji razvoj aplikacija na ovaj ili anal nacin cine drukcijim i fLeksibilnijim

PHONEGAP

gtPhoneGapje besplatnorjesenje otvorenog koda (FOSS) namijenjeno

izradi aplikacija za Android iPhone i iPad uredaje (aliidruge) pri (emu se koriste standardni web jezici (HTML CSSi JaitaScript)Za one koji nekim Iudom prepozriaju slilnost 5 Apache Cordovom - u praVll5u PhoneGap je svojevrsna distribucija Apache Cordove u sustini su oboje namijenjeni viseplatformskom razvijanju mdbilriih aplikacija pri cemu omogucuju piistup nativnim funkcijama smartfona kaosto su kamera cikcelerometar i kompas Upravo je stoga avo sjajan SDK za one koji imaju ikustva 5 JavaScriptom i zele napraviti nesto naprednije mobilne aplikacije i to istodobno za vise platformi a uz minimalne ili nikakve intervencije

URL www phonegapcom

MOSYNC gtJos jedno besplatno rjesenje otvorenog koda koje omogucuje izradu nativnih mobilnih aplikacija koristeci jedan te isti programski kod Oslanja se na CC++ ili HTMlSI JavaScript te kombinaciju svega a

omogucuje kompiLiranje aplikacija za do devet razlicitih platformi istodobno To dakako ukljucuje iOS i Android Naravno tu su aplikacijska programska sulelja (API) potrebna za pristup specificnim mogucnostima smartfona i tableta a tu je i MoSync Reload koji omogucuje izradu viseplatformskih aplikacija koristeCi iskljulivo HTMlS i JavaScript (slicno kao PhoneGap)

URL www mosync com

RHOMOBILE

gt RhoMobile Suite zapravo je paket koji se sastoji ad RhoElementsa Rhodesa RhoConnecta RhoStudia RhoHuba i alata RhoGaLLery koji zdruzeno (bolje receno tu je Rhodes framework otvorenog koda koji se temelji na Rubyju) omogucuju eLegantan razvoj aplikacija bez obzira na ciljanu platformu Prednost je ito programski kad treba pisati samo jednom a on ce se kompilirati za praktiCki svaku mobilnu platformu koja je trenutno dostupna Iza ovoga rjesenja stoji Motorola a pohvalno je ito Rhodes nudi princip rada Model View Controler te brojne druge moguCnosti Rijec je dakle a rjesenju koje svakako treba iskusati

URL httpRgQQgllm9xt2

Kako programirati za Android iii iOS

RAZVOJIGARA

UMJESTO APLIKACIJA middot IGRE gt Razvijanje igara prilicno je kompleksan posao a osim samoga programiranja potrebnoje imati rjesenja za cijeli niz drugih aspekata koji su potrebni kada zeLite izraditi kvalitetnu igru Stoga i ne cudi da se dobrim igrama obicno bave timovi a vrlo rijetko individualci No Clanovi takvoga tima svakako moraju biti upuceni u programiranje i dobro se koristiti razvojnim alatima - i ne sarno onima koji sluze za razvoj klasicnih aplikacija Nairne stvaranje igara bas kao i aplikacija otezavaju velike razlike medu platformama a to je dodatno naglaseno upravo kod izrade igara Srecom postoje viseplatformska rjesenja koja takvo sto ipak cine manje bolnim nego sto doista jesUedno od najpoznatijih viSeplatformskih rjeshysenja upravo je Unity 3D Ono je dovoljno kompleksno za razvoj zbilja fantasticnih igracih naslova a istodobno dovoljno jednostavno da njime mogu ovladati i totalni pocetnici Ono sto mnoge iznenaduje svakako je cinjenica da je inicijalno ovaj engine sasvim besplatan a specifican je i po tome sto podrzava tri programska jezika (UnityScript C i Boo) Doduse besplatna inacica ima i odredenih nedostataka no puna Ushycenca stoji 1500 dolara sto i nije mnogo s obzirom na ono sto se nudi Uz Unity 3D dostupna su i druga rjesenja kao sto je Marmalade SDK Rijec je 0 moenom viseplatformskom SDK-u koji omogucuje izradu mobilnih igara za smartfone i tablete Dakako za rad s ovim SDK-om

Vrhunsko rjesenje za izradu atraktivnih viseplatformskih mobilnih (i drugih) igara moguee je dobiti sasvim besplatno 0Jww unity3d com)

potrebno je znanie programskog jezika C++ te odredeno programersko iskustvo Sam SDK moguee ie iskusati besplatno 30 dana sto je dovoljshyno vremena da se prode kroz hrpicu tutorijala a nakon toga ovaj SDK valja kupiti i to prema razlicitim modelima Najjeftinija inacica stoji 150 dolara godisnje po racunalu (Community) nju slijedi ona za 499 dolara godisnje po racunalu (lndie) zatim je tu model Plus koji stoji 1499 dolara godisnje po racunalu (s ovime se dobiva podrska i za rashyzvoj igara za pametne televizore) dok profesionalna i najopremljenija inacica stoji 3499 dolara godisnje po racunalu II

PODESAVANJE RAZVOJNOG OKRUZENJA ZAANDROID

SVE UJEDNOM PAKETU gt Eclipse kao standardno razvojno sucelje za Android nekada je trebalo rucno podesavati dodajuei mu Android SDK Tools te ADT Plugin (instalirani se JDK podrazumijeva) Sreeom otkad se pojavio ADT Bundle ko]i u jednom paketu donosi sve sto je potrebno podesavanje samoga sucelja prakticki je nepotrebno osim ako vee koristite Eclipse za programiranje u Javi i namjeravate prosiriti razvoj apUkacija na Android Tada treba proei dobro dokumentirani proces podesavanja sucelja koji cete pronaei na Googleovu portalu za razvojne inzenjere ADT Bundle dakle pocetak programiranja za Android cini doista lakim Treba samo na zeljenu lokaciju dekomprimirati sadrzaj Zip arhive (cijeU eete paket pronaei na DVD-u koji ste dobili uz ova] broi) otvoriti mapu eclipse i pokrenuti izvrsnu datoteku eclipseexe Sve ostalo vee je spremno Doduse medu vaznijim koracima svakako je definiranje virtualnog uredaja (emulatora) za testiranje aplikacija a po potrebi ee se kasnije morati dodavati i drugi paketi ADT Bundle i to cini jednostavnim

Kreiranje simulatora Android Virtual Device Manager najlaksi je nacin za kreiranje virtualnog uredaja Stoga ga valia pokrenuti tako da se u Eclipseu klikne na Window i zatim na AVD Manager U prozoru koji ee se otvoriti valia kliknuti na New Zatim valja unijeti ime virtualnog uredaja iizabrati vrstu uredaja

(veCinom je dovoljno izabrati uredaj prema velicini njegova ekrana) prema cemu ee biti definirane i druge postavke Parametre je moguee podesavati prema vlastitim preferencijama pri cemu ne treba pretjerivati (npr kod definiranja kolicine radne memorije) a svakako je uputno kvacicom oznaciti opciju Use Host GPU Jednom kada je sve definirano ostaje sarno kliknuti na gumb OK Virtualni uredaj pokreee se tipkom Start nakon cega valja biti strpljiv jer se emulator tradicionalno pokreee prilicno sporo

Upravljanje paketima Android SDK alate platforme i druge komponente organizira kao pakete koje je moguce preuzimati i instalirati Android SDK Managerom Pronaci cete ga u rnapi gdje je dekomprimiran ADT Bundle u obliku izvrsne datoteke (SDK Managerexe) Instalacija paketa maksimalno je jednostavna potrebno je sarno kvaCicom oznaciti zeljeni paket i zatim kliknuti na gumb koji ee pokrenuti instalaciju Medutim svakako treba instalirati SDK Tools SDK Platform-tools i SDK Platform System Image Android Support i primjeri koda preporucljivi su iako nisu nuzni No za pocetnike (i druge) svakako su to dobrodosli dodaci No kako razvijanje aplikacija bude postajalo ozbiljnije tako ce i potreba za paketima porast pa cete nerijetko svracati upravo u Android SDK Manager po nove pakete i azuriranja sect

PODESAVANJE RAZVOJNOG OKRUZENJA ZAiOS

fi ~srJH un~~~mer l ~i ~_ j ~ g~~l-1lt ~ ~J ~Iit~

Xcode

gt Xcode vise nije jedino razvojno sucelje za izradu apUkacija za iOS no dugo je to prakticki bio (vee je neko vrijeme dostupan JetBrainsov AppCode dok viSeplatformska rjesenja neeemo usporedivati) Posebnih koraka za postavljanje zapravo i nema a sve sto je potrebno uciniti jest na Appleovu racunalu pokrenuti App Store u polje za pretrazivanje utipkati Xcode j pokrenuti instalaciju Svakako je potrebno imati aktivnu vezu s Internetom i biti strpljiv jer ce se preuzeti gotovo 2 GB podataka Jednom kada je Xcode spreman s programiranjem s moze zapoceti odmah a jednako je tako spre~an i simulator Ono sto mnoge muci jest da Je za Xcode potrebno imati Appleovo racunalo Doduse moguee je posluziti se trikom virtualizacije te instalirati Mac OS X 108 Il~ visi u virtualnu masinu Medutim takvo Je sto nelegalno premda moze posluziti iskljucivo u edukativne svrhe - samo kao svojevrsno eksperimentiranje prije nego odlucite kupiti barem Apple Mac Mini

2013 STUDENI BUG I 13

ltW

ZIVOT APliKACIJE -

Od testiranja do objave

Jednom kada je onaj osnovni razvojni dio zavrsen i aplikacija se cini spremnom valja ju testirati Osim testiranja usimulatoru uvijek je prije objave uputno aptikacije provjeriti i na fizickim uredajima najbolje na vise od jednog Dok 5 jedne strane u slucaju Androida testiranje aplikacije nije problem jer je vrto jednostavno iskoristiti gotov APK ustucaju iOS-a stvari su znacajno stozenije i skupLje Isto vrijedi i ustucaju konacne objave aplikacije na stuzbenih trgovinama Evo sto morate znati

estiranje aplikacija Android USB debugging definitivno je neizshy opcija je koju svakako bjezno a premda se treba ukljuciti na uredaju zapravo odvija i tijeshy koji ce postuziti za testiranje kom samog razvojshy aplikacije (pronaci tete ju

nog procesa ono konacno u Settings pa Developer testiranje prije same objave options) aplikadje uvijek je pozeljshyno odraditi na fizickim uredajima Iz perspektive tadja uredaja za Android razvojnog inrenjera za Anshy ogromna pa je samim droid takvo sto uopce ne time razvojnim inzenjerishypredstavlja problem Dapashy ma tesko uzeti u obzir sve ee vee je tijekom samog rashy vrste uredaja koji se nalashyzvoja umjesto u emulatoru ze u opticaju Isto vrijedi testne primjerke aplikadje i predvidanje ponasanja moguee pokretati na jedshy aplikadje na raznim vershynom iii viSe fizickih ureshy zijama platforme premda daja Dovoljno ih je sarno SDK tu poprilicno pomashyUSB kablom prikljueiti na ze Kako bi smartfon s raeunalo a onda aplikaciju Android OS-om posluzio

je ovisno 0 platformi na kojo se razvija (na Mac OS-u X stvari ee raditi bez ikakve inmiddot tervencije dok je i za Windowse i za Linux potrebno odraditi nekoliko koraka pri eemu je Linux ponesto sozeniji)

Nakon toga na samom uredaju valja ukljushyeiti USB debugging te ee iduci put kada se u Eclipseu pokrene debugiranje apHkacije medu ponudenim uredajima biti i onai prishykljueen na raeunalo Zelite Ii pak provjeriti je Ii uredaj dostupan to je moguce napraviti naredbom adb devices 8to se testiranja apHkacija na iPhoneu iIi iPadu tice stvari

The easiest way to get feedback on your mobile application

Sign up free -7

~~ ~~-~ BETA FAMILY IN NUMBERS WIW MCRE THAN III=

Testiranje aplikacije moguce je prepustiti i drugima putem servisa kao 5tO je The Beta Family Rijec je 0 crowdsourcing platformi koja omogucuje da drugi testiraju j daju misljenje 0

aplikaciji na kojoj radite wwwthebetafamilycom

su daleko sloznije Iako se veCina razvojnih inzenjera grozi postupka kroz koji treba proei on ee ih ipak na kraju docekati Zasto Apple nije pojednostavio proceduru pitanje je 0 kojemu se moze debatirati no stvari Sil

takve kakve jesu Sreeom tu je okvir koji ee vas kroz nekoliko koraka sprovesti do uspjeha a pozitivno je 5tO jednom kada proshyZivite ovaj proces bit ee jednostavnije proCi kroz proces pripreme aplikacije za objavu u sluzbenoj trgovini Procedura za Google Play opet je nesto jednostavnija

No kljucna je razlika 8to se od prodaje aplishykacija putem App Storea moze zaradivati dok to nije moguce putem Google Playa sve dok ste registrirani 5 racunom u Hrvatskoj jer se ona ne nalazi na popisu poddanih zeshymalja Sreeom zarada je i daje moguca kroz reklame 110 aplikacija mora biti naznacena kao besplatna

pokretati izravno iz Eclipshysea iIi iz naredbenog retka (ADB)

Dakako fizieki uredaj u tom slucaju ipak ne moze zamijeniti emulator jer je fragmenshy

84 I BUG STUDENI 2013

za testiranje dovoljno ga je dakle prikljueiti na raeunalo Ako vee nisu svakako valja instalirati i potrebne upravljacke programe i ostale dodatke lito

Kako programirati za Android iii iOS

KakD te~tiratiiOS ~ aplikacJe na IPhoneu

APPLEOV RAZVOJNI PROGRAM Apple proceduru registracije uredaja za testiranje aplikacija nije ucinio jednostavnom pa i ne cudi da mnogi pribjegavajujailbreaku kao jeftinom i zacudo jednostavnijem rjesenju No sLuzbeni je nacin jedini podrzan a za njega cete se morati uclaniti u iDS Developer Program sto ce vas stajati 99 dolara godisnje Stoga pripremite kreditnu karticu i cvrste zivce za igru pokusaja i promasaja

lOS DeveIotgter Inlgram UUclraquoJgtIyltWklltU(I--shybull

ICorak-2 -

Generiranje certifikata 1

rA_~-Clt----shyOIGrmoollIl1ltG4

~16illttlt wt(tltjf1tlO4~_ulOll_

- ~

Kmiddotmiddotbullmiddotorakmiddot4_

_

bull _ _ n_~

Nakon ~to je certifikat spreman potrebno je registrl~ati uredaj koji ce sluziti za testiranje Ponovno se valja vratiti na iDS Provisioning Portal te pronaci poveznicu Devices i zatim kliknuti na Add Devices Dovoljno je upisati proizvoljan naziv te dodati Device ID ili UDID Rijecje 0

jedinstvenoj vrijednosti od 40 znamenki kojom se uredaj identificira UDID je moguce doznati ili putem iTunesa ili

- ---shy-shy

-~-~~-~-- - ~~~- ~

putemscodeaj uhutarQrgani~fa AkocetekoristitiJtuneskakobiste bull kQpirali ovugolemuvi-iJednost prvo ju l)ior~M (jllokUknoJiitiltiilptitjsriuti kOO1QinadjutipkicqrnmandifCNqkori tQgq uXci)deu yafjauOrgaljzerllPQ1J DeviqesproniitIsR9JejiiiPtJOlletEL bull kli~llutiriagumb Us~JQr[)eVetoPrnentmiddot

middotSretom ovo jenQjoezJQlnij(trenutjlk middotbull jerceXcQde~clltdegrllat~kiprlJetisye potrebn siOSPJQvi~iQJiing Portala st9seprljavit~sect c odgOl(araiLitimkOrisnikimPQdgcimmiddot bull

- -~~ ~~ ~~ -~-~- ~ ~-~--

2013 STUDENI BUG I 85

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 8: Kako Programirati Za Android 1

ALATI Kako programirati za Android iii iOS

Bez alata nema zanata Kako svaka platforma za koju se programira donosi i svoje specificnosti ne cudi da i za svaku platformu postoje i specijalizirani razvojni alatilzuzetak tu nisu ni Android i iOS a osim sto postoje sluZbeni alati i razvojna sucelja koji su i vise nego dostatni za razvoj dostupni su i drugi viseplatformski alati koji olakSavaju istodobni razvoj za vise platformi No uz njih tu su i druge aplikacije ali i nezaobilazni te mocni SDK-ovi

~1i~11-shy100t ~il15_ 2~ai~_

~ ~-shyi~~01( ~-lt

gtb b ~-shyshy~--shy~~shy_shy~

flj~tjIfIHltIU_

~ 1 Ilt~ w tOlIltlA tth a~shy~~ ~__~1iIowI

~=-lii ~shy

Profesionalne tvrtke koje se bave razvoshyjem mobilnih aplikaeija obicavaju stroshygo razdvajati programere koji se specishyjaliziraju za Objeetive-C i za Android

Javu Ne samo da su ta dva jezika razlitita nego je i pristup razvoju drukciji Razlitite su i dizajnerske smjemiee cijeli je ekosustav drukciji premda je rezultat u konacniei isti stvara se mobilna aplikacija ali za razlicite platforme Ipak te razlike slieno kao i kod drugih tema znaju neobicno utjecati na sve one koji se bave razvojem pa se neprestano iznova ponavljaju debate oko toga sto Je bolje - Appleov iDS iii Googleov Android

Dio tog debatiranja nerijetko obuhvaca i razvojne alate S jedne je strane tu Eclipse poznato integrirano razvojno sucelje za Jashyvu a s druge rclativno ugladeni Xcode Ono sto je svakako nesporno jest einjenica da ce pocetnici pa i oni iskusniji daleko bde prishyhvatiti nacin na koji radi Xcode a daleko ce tde nauciti da se snalaze u Eclipseu kojl je po svojoj prirodi prilieno kompleksan Isto vrijedi i kada se razvojno okruzenje prvi put postavlja Kod razvoja aplikacija za iPhone I iPad sve se svodi na to da se nabavi raeunalo s Mac OS-om X instalira Xcode I moze se poeeti s programiranjem Bez mnogo petshyIjaneije za pocetak

U slucaju Androida stvan bas i nisu takve no uz nekoliko pocetnih koraka te dodatshynog preuzimanja neizostavnih dodataka u rukama cete imati prilicno mocno razvojno

sueelje U njemu se doista isprva ponesto teze snaci no jednom kada se na njega navishyknete eak nl najzapetljanlje radnje viSe nece predstavljati problem iako ce i dalje uzimati viSe vremena nego sto bi trebale Jedna od kljuenih prednostl Androlda pred i~S-om definitivno je einjenica da sluzbeno razvoino sueelje radi na vise platformi ukljucujuci Linux i Mac OS X

Jednostavnije receno za razliku od Appleshyove metodologlje razvoj za Android moze biti sasvim besplatan iii ako nista drugo daleko jeftiniji cak i kada se u obzir uzme

Xamarin Studio rjesenje je za izradu viseplatformskih aplikacija ito pisuci k6d u programskom jeziku C pri cemu se mogu koristiti nativni API-ji sto je idealno rjesenje za NET programere (~

i naknada koju je potrebno platlti da bi se aplikaeije objavljlvale u sluzbenim trgovishynama U slucaju iDS-a obavezno se mora uclaniti u iDS Developer Program sto stoji 99 dolara potrebna je kupovina Appleova racunala a valja imati i iPhone Clanarina za razvojne inzenjere Android aplikacija za objavu uradaka na Google Playu stojl 25 doshylara no s adresom iz Hrvatske nije moguce prodavati apUkacije No zato je testiranje aplikacija na fizickim uredajima s Android OS-om jednostavno dok je procedura za iDS daleko slozenija

Tlta(jl~m Studio rftlJ(IItI~tMuIIIIIu_-

Titanium Studio jos je jedan moderni IDE koji omogucuje brzl razvoj nativnih mobilnih aplikacija Razvojno sucelje temelji se na Eclipseu a uz Titanium dolazi i njegov vlastiti SDK koji omogucuje razvoj s pomocu HTML-a PHP-a JavaScripta Rubyja i pythona (yJwwappceleratQuQm)

2013 STUDENI BUG I SJ

Android Studio novi je Googleov poku~aj da napravi razvojno 5ucelje Temelji 5e na razvojnom sucelju IntelliJ IDEA a nudi vise mogucnosti od Eclipsea sADT-om kao sto su GradLe refaktoriranje koda specifieno za Android ugradenu podrsku za Google Cloud ProGuard i drugo (httpgoo gllUEvL)

Nerijetko najveci problem s razvojnim suceljima neovisno 0 tome za koju su platshyfomlU obicavaju imati svi oni kOji su navikli raditi u Microsoftovu razvojnom sucelju Visual Studio Tome je tako pogotovo ako je rijec 0 Eclipseu koji bi se iskusnom razvojshynom inzenjeru za Microsoftove tehnologije mogao uciniti kao posvemaSnji metez SHcno vrijedi i za Xcode jer se treba naviknuti i na drukcije sucelje i principe samoga Mac OSshya X Srecom tehnologija nikada ne miruje i ako neSto stalno doista jest onda je to konstantan razvoJ

Tako su nastali alternativni alati kao sto je Xamarin koli se dobro integrira u Visual Studio cineci viseplatformsko programiranje tim jednostavnijim Ne samo da je Xamarishynom moguce istodobno razvijati aplikacije za vise platformi nego ih je moguce pisati u sasvim drugom jeziku - C-sharpu (C) Doduse takva alternativna viseplatformska rjdenja ipak nisu bez nedostatka Prije sveshyga tako napravljene aplikacije u sustini nisu nativne aplikacije (uvijek se mora dogoditi prevodenje sto moze rezultirati novim bushygovima i problemima) a to se reflektira i na performanse i na same mogucnosti Tu je i problem velikih razlika u sucelju aplikacija za razHcite platforme nekonzistentnosti kOje se zbog toga pojavljuju te brojni drugi proshyblemi To ne znaci da se takva rjesenja mora eliminirati nego samo da treba biti svjestan njihovih ogranicenja

No sto je zapravo potrebno za programirashynje U samoj sustini uz racunalo dovoljno je neko kompatibilno razvojno sucelje sluzbeni SDK (Sotware Development Kit) a uputno je imati i mobilni uredaj s OS-om za koji namjeravate razvijati budud da je to jedini konkretan nacin za istinsko testirashynje aplikacija Sto se sucelja tice bas kao i preferirane platforme iIi izbora uredaja sve je stvar osobne preferencije i formiranja navike (iako Xcode prednjaci sto se tice izrade grafickog sucelja) Naravno kada se prevladaju osnove i krene u razvoj konkretshynijih projekata bilo samostalno Hi u timu svijet mobilnog programiranja pokazat ce se cak i 0pseZnijim nego sto je to u slucaju izrade klasicnog softvera Iz te perspektive razvojno sucelje kole koristite postat ce one cime ga se od pocetka i trebalo smatratl tek jedan od alata u nizu potrebnih za uspjesan razvoj aplikacija

82 I BUG STUDENI 2013

Viieplatformske i druge alternative

ALTERNATIVNO PROGRAMIRANJE Osim sluzbenih razvojnih suceLja te osnovnih SDK-ova tijekom je vremena nastao i zavidan niz drugih alternativnih razvojnih sucelja dodatnih alata te hrpa nezavisnih SDK-ova koji razvoj aplikacija na ovaj ili anal nacin cine drukcijim i fLeksibilnijim

PHONEGAP

gtPhoneGapje besplatnorjesenje otvorenog koda (FOSS) namijenjeno

izradi aplikacija za Android iPhone i iPad uredaje (aliidruge) pri (emu se koriste standardni web jezici (HTML CSSi JaitaScript)Za one koji nekim Iudom prepozriaju slilnost 5 Apache Cordovom - u praVll5u PhoneGap je svojevrsna distribucija Apache Cordove u sustini su oboje namijenjeni viseplatformskom razvijanju mdbilriih aplikacija pri cemu omogucuju piistup nativnim funkcijama smartfona kaosto su kamera cikcelerometar i kompas Upravo je stoga avo sjajan SDK za one koji imaju ikustva 5 JavaScriptom i zele napraviti nesto naprednije mobilne aplikacije i to istodobno za vise platformi a uz minimalne ili nikakve intervencije

URL www phonegapcom

MOSYNC gtJos jedno besplatno rjesenje otvorenog koda koje omogucuje izradu nativnih mobilnih aplikacija koristeci jedan te isti programski kod Oslanja se na CC++ ili HTMlSI JavaScript te kombinaciju svega a

omogucuje kompiLiranje aplikacija za do devet razlicitih platformi istodobno To dakako ukljucuje iOS i Android Naravno tu su aplikacijska programska sulelja (API) potrebna za pristup specificnim mogucnostima smartfona i tableta a tu je i MoSync Reload koji omogucuje izradu viseplatformskih aplikacija koristeCi iskljulivo HTMlS i JavaScript (slicno kao PhoneGap)

URL www mosync com

RHOMOBILE

gt RhoMobile Suite zapravo je paket koji se sastoji ad RhoElementsa Rhodesa RhoConnecta RhoStudia RhoHuba i alata RhoGaLLery koji zdruzeno (bolje receno tu je Rhodes framework otvorenog koda koji se temelji na Rubyju) omogucuju eLegantan razvoj aplikacija bez obzira na ciljanu platformu Prednost je ito programski kad treba pisati samo jednom a on ce se kompilirati za praktiCki svaku mobilnu platformu koja je trenutno dostupna Iza ovoga rjesenja stoji Motorola a pohvalno je ito Rhodes nudi princip rada Model View Controler te brojne druge moguCnosti Rijec je dakle a rjesenju koje svakako treba iskusati

URL httpRgQQgllm9xt2

Kako programirati za Android iii iOS

RAZVOJIGARA

UMJESTO APLIKACIJA middot IGRE gt Razvijanje igara prilicno je kompleksan posao a osim samoga programiranja potrebnoje imati rjesenja za cijeli niz drugih aspekata koji su potrebni kada zeLite izraditi kvalitetnu igru Stoga i ne cudi da se dobrim igrama obicno bave timovi a vrlo rijetko individualci No Clanovi takvoga tima svakako moraju biti upuceni u programiranje i dobro se koristiti razvojnim alatima - i ne sarno onima koji sluze za razvoj klasicnih aplikacija Nairne stvaranje igara bas kao i aplikacija otezavaju velike razlike medu platformama a to je dodatno naglaseno upravo kod izrade igara Srecom postoje viseplatformska rjesenja koja takvo sto ipak cine manje bolnim nego sto doista jesUedno od najpoznatijih viSeplatformskih rjeshysenja upravo je Unity 3D Ono je dovoljno kompleksno za razvoj zbilja fantasticnih igracih naslova a istodobno dovoljno jednostavno da njime mogu ovladati i totalni pocetnici Ono sto mnoge iznenaduje svakako je cinjenica da je inicijalno ovaj engine sasvim besplatan a specifican je i po tome sto podrzava tri programska jezika (UnityScript C i Boo) Doduse besplatna inacica ima i odredenih nedostataka no puna Ushycenca stoji 1500 dolara sto i nije mnogo s obzirom na ono sto se nudi Uz Unity 3D dostupna su i druga rjesenja kao sto je Marmalade SDK Rijec je 0 moenom viseplatformskom SDK-u koji omogucuje izradu mobilnih igara za smartfone i tablete Dakako za rad s ovim SDK-om

Vrhunsko rjesenje za izradu atraktivnih viseplatformskih mobilnih (i drugih) igara moguee je dobiti sasvim besplatno 0Jww unity3d com)

potrebno je znanie programskog jezika C++ te odredeno programersko iskustvo Sam SDK moguee ie iskusati besplatno 30 dana sto je dovoljshyno vremena da se prode kroz hrpicu tutorijala a nakon toga ovaj SDK valja kupiti i to prema razlicitim modelima Najjeftinija inacica stoji 150 dolara godisnje po racunalu (Community) nju slijedi ona za 499 dolara godisnje po racunalu (lndie) zatim je tu model Plus koji stoji 1499 dolara godisnje po racunalu (s ovime se dobiva podrska i za rashyzvoj igara za pametne televizore) dok profesionalna i najopremljenija inacica stoji 3499 dolara godisnje po racunalu II

PODESAVANJE RAZVOJNOG OKRUZENJA ZAANDROID

SVE UJEDNOM PAKETU gt Eclipse kao standardno razvojno sucelje za Android nekada je trebalo rucno podesavati dodajuei mu Android SDK Tools te ADT Plugin (instalirani se JDK podrazumijeva) Sreeom otkad se pojavio ADT Bundle ko]i u jednom paketu donosi sve sto je potrebno podesavanje samoga sucelja prakticki je nepotrebno osim ako vee koristite Eclipse za programiranje u Javi i namjeravate prosiriti razvoj apUkacija na Android Tada treba proei dobro dokumentirani proces podesavanja sucelja koji cete pronaei na Googleovu portalu za razvojne inzenjere ADT Bundle dakle pocetak programiranja za Android cini doista lakim Treba samo na zeljenu lokaciju dekomprimirati sadrzaj Zip arhive (cijeU eete paket pronaei na DVD-u koji ste dobili uz ova] broi) otvoriti mapu eclipse i pokrenuti izvrsnu datoteku eclipseexe Sve ostalo vee je spremno Doduse medu vaznijim koracima svakako je definiranje virtualnog uredaja (emulatora) za testiranje aplikacija a po potrebi ee se kasnije morati dodavati i drugi paketi ADT Bundle i to cini jednostavnim

Kreiranje simulatora Android Virtual Device Manager najlaksi je nacin za kreiranje virtualnog uredaja Stoga ga valia pokrenuti tako da se u Eclipseu klikne na Window i zatim na AVD Manager U prozoru koji ee se otvoriti valia kliknuti na New Zatim valja unijeti ime virtualnog uredaja iizabrati vrstu uredaja

(veCinom je dovoljno izabrati uredaj prema velicini njegova ekrana) prema cemu ee biti definirane i druge postavke Parametre je moguee podesavati prema vlastitim preferencijama pri cemu ne treba pretjerivati (npr kod definiranja kolicine radne memorije) a svakako je uputno kvacicom oznaciti opciju Use Host GPU Jednom kada je sve definirano ostaje sarno kliknuti na gumb OK Virtualni uredaj pokreee se tipkom Start nakon cega valja biti strpljiv jer se emulator tradicionalno pokreee prilicno sporo

Upravljanje paketima Android SDK alate platforme i druge komponente organizira kao pakete koje je moguce preuzimati i instalirati Android SDK Managerom Pronaci cete ga u rnapi gdje je dekomprimiran ADT Bundle u obliku izvrsne datoteke (SDK Managerexe) Instalacija paketa maksimalno je jednostavna potrebno je sarno kvaCicom oznaciti zeljeni paket i zatim kliknuti na gumb koji ee pokrenuti instalaciju Medutim svakako treba instalirati SDK Tools SDK Platform-tools i SDK Platform System Image Android Support i primjeri koda preporucljivi su iako nisu nuzni No za pocetnike (i druge) svakako su to dobrodosli dodaci No kako razvijanje aplikacija bude postajalo ozbiljnije tako ce i potreba za paketima porast pa cete nerijetko svracati upravo u Android SDK Manager po nove pakete i azuriranja sect

PODESAVANJE RAZVOJNOG OKRUZENJA ZAiOS

fi ~srJH un~~~mer l ~i ~_ j ~ g~~l-1lt ~ ~J ~Iit~

Xcode

gt Xcode vise nije jedino razvojno sucelje za izradu apUkacija za iOS no dugo je to prakticki bio (vee je neko vrijeme dostupan JetBrainsov AppCode dok viSeplatformska rjesenja neeemo usporedivati) Posebnih koraka za postavljanje zapravo i nema a sve sto je potrebno uciniti jest na Appleovu racunalu pokrenuti App Store u polje za pretrazivanje utipkati Xcode j pokrenuti instalaciju Svakako je potrebno imati aktivnu vezu s Internetom i biti strpljiv jer ce se preuzeti gotovo 2 GB podataka Jednom kada je Xcode spreman s programiranjem s moze zapoceti odmah a jednako je tako spre~an i simulator Ono sto mnoge muci jest da Je za Xcode potrebno imati Appleovo racunalo Doduse moguee je posluziti se trikom virtualizacije te instalirati Mac OS X 108 Il~ visi u virtualnu masinu Medutim takvo Je sto nelegalno premda moze posluziti iskljucivo u edukativne svrhe - samo kao svojevrsno eksperimentiranje prije nego odlucite kupiti barem Apple Mac Mini

2013 STUDENI BUG I 13

ltW

ZIVOT APliKACIJE -

Od testiranja do objave

Jednom kada je onaj osnovni razvojni dio zavrsen i aplikacija se cini spremnom valja ju testirati Osim testiranja usimulatoru uvijek je prije objave uputno aptikacije provjeriti i na fizickim uredajima najbolje na vise od jednog Dok 5 jedne strane u slucaju Androida testiranje aplikacije nije problem jer je vrto jednostavno iskoristiti gotov APK ustucaju iOS-a stvari su znacajno stozenije i skupLje Isto vrijedi i ustucaju konacne objave aplikacije na stuzbenih trgovinama Evo sto morate znati

estiranje aplikacija Android USB debugging definitivno je neizshy opcija je koju svakako bjezno a premda se treba ukljuciti na uredaju zapravo odvija i tijeshy koji ce postuziti za testiranje kom samog razvojshy aplikacije (pronaci tete ju

nog procesa ono konacno u Settings pa Developer testiranje prije same objave options) aplikadje uvijek je pozeljshyno odraditi na fizickim uredajima Iz perspektive tadja uredaja za Android razvojnog inrenjera za Anshy ogromna pa je samim droid takvo sto uopce ne time razvojnim inzenjerishypredstavlja problem Dapashy ma tesko uzeti u obzir sve ee vee je tijekom samog rashy vrste uredaja koji se nalashyzvoja umjesto u emulatoru ze u opticaju Isto vrijedi testne primjerke aplikadje i predvidanje ponasanja moguee pokretati na jedshy aplikadje na raznim vershynom iii viSe fizickih ureshy zijama platforme premda daja Dovoljno ih je sarno SDK tu poprilicno pomashyUSB kablom prikljueiti na ze Kako bi smartfon s raeunalo a onda aplikaciju Android OS-om posluzio

je ovisno 0 platformi na kojo se razvija (na Mac OS-u X stvari ee raditi bez ikakve inmiddot tervencije dok je i za Windowse i za Linux potrebno odraditi nekoliko koraka pri eemu je Linux ponesto sozeniji)

Nakon toga na samom uredaju valja ukljushyeiti USB debugging te ee iduci put kada se u Eclipseu pokrene debugiranje apHkacije medu ponudenim uredajima biti i onai prishykljueen na raeunalo Zelite Ii pak provjeriti je Ii uredaj dostupan to je moguce napraviti naredbom adb devices 8to se testiranja apHkacija na iPhoneu iIi iPadu tice stvari

The easiest way to get feedback on your mobile application

Sign up free -7

~~ ~~-~ BETA FAMILY IN NUMBERS WIW MCRE THAN III=

Testiranje aplikacije moguce je prepustiti i drugima putem servisa kao 5tO je The Beta Family Rijec je 0 crowdsourcing platformi koja omogucuje da drugi testiraju j daju misljenje 0

aplikaciji na kojoj radite wwwthebetafamilycom

su daleko sloznije Iako se veCina razvojnih inzenjera grozi postupka kroz koji treba proei on ee ih ipak na kraju docekati Zasto Apple nije pojednostavio proceduru pitanje je 0 kojemu se moze debatirati no stvari Sil

takve kakve jesu Sreeom tu je okvir koji ee vas kroz nekoliko koraka sprovesti do uspjeha a pozitivno je 5tO jednom kada proshyZivite ovaj proces bit ee jednostavnije proCi kroz proces pripreme aplikacije za objavu u sluzbenoj trgovini Procedura za Google Play opet je nesto jednostavnija

No kljucna je razlika 8to se od prodaje aplishykacija putem App Storea moze zaradivati dok to nije moguce putem Google Playa sve dok ste registrirani 5 racunom u Hrvatskoj jer se ona ne nalazi na popisu poddanih zeshymalja Sreeom zarada je i daje moguca kroz reklame 110 aplikacija mora biti naznacena kao besplatna

pokretati izravno iz Eclipshysea iIi iz naredbenog retka (ADB)

Dakako fizieki uredaj u tom slucaju ipak ne moze zamijeniti emulator jer je fragmenshy

84 I BUG STUDENI 2013

za testiranje dovoljno ga je dakle prikljueiti na raeunalo Ako vee nisu svakako valja instalirati i potrebne upravljacke programe i ostale dodatke lito

Kako programirati za Android iii iOS

KakD te~tiratiiOS ~ aplikacJe na IPhoneu

APPLEOV RAZVOJNI PROGRAM Apple proceduru registracije uredaja za testiranje aplikacija nije ucinio jednostavnom pa i ne cudi da mnogi pribjegavajujailbreaku kao jeftinom i zacudo jednostavnijem rjesenju No sLuzbeni je nacin jedini podrzan a za njega cete se morati uclaniti u iDS Developer Program sto ce vas stajati 99 dolara godisnje Stoga pripremite kreditnu karticu i cvrste zivce za igru pokusaja i promasaja

lOS DeveIotgter Inlgram UUclraquoJgtIyltWklltU(I--shybull

ICorak-2 -

Generiranje certifikata 1

rA_~-Clt----shyOIGrmoollIl1ltG4

~16illttlt wt(tltjf1tlO4~_ulOll_

- ~

Kmiddotmiddotbullmiddotorakmiddot4_

_

bull _ _ n_~

Nakon ~to je certifikat spreman potrebno je registrl~ati uredaj koji ce sluziti za testiranje Ponovno se valja vratiti na iDS Provisioning Portal te pronaci poveznicu Devices i zatim kliknuti na Add Devices Dovoljno je upisati proizvoljan naziv te dodati Device ID ili UDID Rijecje 0

jedinstvenoj vrijednosti od 40 znamenki kojom se uredaj identificira UDID je moguce doznati ili putem iTunesa ili

- ---shy-shy

-~-~~-~-- - ~~~- ~

putemscodeaj uhutarQrgani~fa AkocetekoristitiJtuneskakobiste bull kQpirali ovugolemuvi-iJednost prvo ju l)ior~M (jllokUknoJiitiltiilptitjsriuti kOO1QinadjutipkicqrnmandifCNqkori tQgq uXci)deu yafjauOrgaljzerllPQ1J DeviqesproniitIsR9JejiiiPtJOlletEL bull kli~llutiriagumb Us~JQr[)eVetoPrnentmiddot

middotSretom ovo jenQjoezJQlnij(trenutjlk middotbull jerceXcQde~clltdegrllat~kiprlJetisye potrebn siOSPJQvi~iQJiing Portala st9seprljavit~sect c odgOl(araiLitimkOrisnikimPQdgcimmiddot bull

- -~~ ~~ ~~ -~-~- ~ ~-~--

2013 STUDENI BUG I 85

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 9: Kako Programirati Za Android 1

Android Studio novi je Googleov poku~aj da napravi razvojno 5ucelje Temelji 5e na razvojnom sucelju IntelliJ IDEA a nudi vise mogucnosti od Eclipsea sADT-om kao sto su GradLe refaktoriranje koda specifieno za Android ugradenu podrsku za Google Cloud ProGuard i drugo (httpgoo gllUEvL)

Nerijetko najveci problem s razvojnim suceljima neovisno 0 tome za koju su platshyfomlU obicavaju imati svi oni kOji su navikli raditi u Microsoftovu razvojnom sucelju Visual Studio Tome je tako pogotovo ako je rijec 0 Eclipseu koji bi se iskusnom razvojshynom inzenjeru za Microsoftove tehnologije mogao uciniti kao posvemaSnji metez SHcno vrijedi i za Xcode jer se treba naviknuti i na drukcije sucelje i principe samoga Mac OSshya X Srecom tehnologija nikada ne miruje i ako neSto stalno doista jest onda je to konstantan razvoJ

Tako su nastali alternativni alati kao sto je Xamarin koli se dobro integrira u Visual Studio cineci viseplatformsko programiranje tim jednostavnijim Ne samo da je Xamarishynom moguce istodobno razvijati aplikacije za vise platformi nego ih je moguce pisati u sasvim drugom jeziku - C-sharpu (C) Doduse takva alternativna viseplatformska rjdenja ipak nisu bez nedostatka Prije sveshyga tako napravljene aplikacije u sustini nisu nativne aplikacije (uvijek se mora dogoditi prevodenje sto moze rezultirati novim bushygovima i problemima) a to se reflektira i na performanse i na same mogucnosti Tu je i problem velikih razlika u sucelju aplikacija za razHcite platforme nekonzistentnosti kOje se zbog toga pojavljuju te brojni drugi proshyblemi To ne znaci da se takva rjesenja mora eliminirati nego samo da treba biti svjestan njihovih ogranicenja

No sto je zapravo potrebno za programirashynje U samoj sustini uz racunalo dovoljno je neko kompatibilno razvojno sucelje sluzbeni SDK (Sotware Development Kit) a uputno je imati i mobilni uredaj s OS-om za koji namjeravate razvijati budud da je to jedini konkretan nacin za istinsko testirashynje aplikacija Sto se sucelja tice bas kao i preferirane platforme iIi izbora uredaja sve je stvar osobne preferencije i formiranja navike (iako Xcode prednjaci sto se tice izrade grafickog sucelja) Naravno kada se prevladaju osnove i krene u razvoj konkretshynijih projekata bilo samostalno Hi u timu svijet mobilnog programiranja pokazat ce se cak i 0pseZnijim nego sto je to u slucaju izrade klasicnog softvera Iz te perspektive razvojno sucelje kole koristite postat ce one cime ga se od pocetka i trebalo smatratl tek jedan od alata u nizu potrebnih za uspjesan razvoj aplikacija

82 I BUG STUDENI 2013

Viieplatformske i druge alternative

ALTERNATIVNO PROGRAMIRANJE Osim sluzbenih razvojnih suceLja te osnovnih SDK-ova tijekom je vremena nastao i zavidan niz drugih alternativnih razvojnih sucelja dodatnih alata te hrpa nezavisnih SDK-ova koji razvoj aplikacija na ovaj ili anal nacin cine drukcijim i fLeksibilnijim

PHONEGAP

gtPhoneGapje besplatnorjesenje otvorenog koda (FOSS) namijenjeno

izradi aplikacija za Android iPhone i iPad uredaje (aliidruge) pri (emu se koriste standardni web jezici (HTML CSSi JaitaScript)Za one koji nekim Iudom prepozriaju slilnost 5 Apache Cordovom - u praVll5u PhoneGap je svojevrsna distribucija Apache Cordove u sustini su oboje namijenjeni viseplatformskom razvijanju mdbilriih aplikacija pri cemu omogucuju piistup nativnim funkcijama smartfona kaosto su kamera cikcelerometar i kompas Upravo je stoga avo sjajan SDK za one koji imaju ikustva 5 JavaScriptom i zele napraviti nesto naprednije mobilne aplikacije i to istodobno za vise platformi a uz minimalne ili nikakve intervencije

URL www phonegapcom

MOSYNC gtJos jedno besplatno rjesenje otvorenog koda koje omogucuje izradu nativnih mobilnih aplikacija koristeci jedan te isti programski kod Oslanja se na CC++ ili HTMlSI JavaScript te kombinaciju svega a

omogucuje kompiLiranje aplikacija za do devet razlicitih platformi istodobno To dakako ukljucuje iOS i Android Naravno tu su aplikacijska programska sulelja (API) potrebna za pristup specificnim mogucnostima smartfona i tableta a tu je i MoSync Reload koji omogucuje izradu viseplatformskih aplikacija koristeCi iskljulivo HTMlS i JavaScript (slicno kao PhoneGap)

URL www mosync com

RHOMOBILE

gt RhoMobile Suite zapravo je paket koji se sastoji ad RhoElementsa Rhodesa RhoConnecta RhoStudia RhoHuba i alata RhoGaLLery koji zdruzeno (bolje receno tu je Rhodes framework otvorenog koda koji se temelji na Rubyju) omogucuju eLegantan razvoj aplikacija bez obzira na ciljanu platformu Prednost je ito programski kad treba pisati samo jednom a on ce se kompilirati za praktiCki svaku mobilnu platformu koja je trenutno dostupna Iza ovoga rjesenja stoji Motorola a pohvalno je ito Rhodes nudi princip rada Model View Controler te brojne druge moguCnosti Rijec je dakle a rjesenju koje svakako treba iskusati

URL httpRgQQgllm9xt2

Kako programirati za Android iii iOS

RAZVOJIGARA

UMJESTO APLIKACIJA middot IGRE gt Razvijanje igara prilicno je kompleksan posao a osim samoga programiranja potrebnoje imati rjesenja za cijeli niz drugih aspekata koji su potrebni kada zeLite izraditi kvalitetnu igru Stoga i ne cudi da se dobrim igrama obicno bave timovi a vrlo rijetko individualci No Clanovi takvoga tima svakako moraju biti upuceni u programiranje i dobro se koristiti razvojnim alatima - i ne sarno onima koji sluze za razvoj klasicnih aplikacija Nairne stvaranje igara bas kao i aplikacija otezavaju velike razlike medu platformama a to je dodatno naglaseno upravo kod izrade igara Srecom postoje viseplatformska rjesenja koja takvo sto ipak cine manje bolnim nego sto doista jesUedno od najpoznatijih viSeplatformskih rjeshysenja upravo je Unity 3D Ono je dovoljno kompleksno za razvoj zbilja fantasticnih igracih naslova a istodobno dovoljno jednostavno da njime mogu ovladati i totalni pocetnici Ono sto mnoge iznenaduje svakako je cinjenica da je inicijalno ovaj engine sasvim besplatan a specifican je i po tome sto podrzava tri programska jezika (UnityScript C i Boo) Doduse besplatna inacica ima i odredenih nedostataka no puna Ushycenca stoji 1500 dolara sto i nije mnogo s obzirom na ono sto se nudi Uz Unity 3D dostupna su i druga rjesenja kao sto je Marmalade SDK Rijec je 0 moenom viseplatformskom SDK-u koji omogucuje izradu mobilnih igara za smartfone i tablete Dakako za rad s ovim SDK-om

Vrhunsko rjesenje za izradu atraktivnih viseplatformskih mobilnih (i drugih) igara moguee je dobiti sasvim besplatno 0Jww unity3d com)

potrebno je znanie programskog jezika C++ te odredeno programersko iskustvo Sam SDK moguee ie iskusati besplatno 30 dana sto je dovoljshyno vremena da se prode kroz hrpicu tutorijala a nakon toga ovaj SDK valja kupiti i to prema razlicitim modelima Najjeftinija inacica stoji 150 dolara godisnje po racunalu (Community) nju slijedi ona za 499 dolara godisnje po racunalu (lndie) zatim je tu model Plus koji stoji 1499 dolara godisnje po racunalu (s ovime se dobiva podrska i za rashyzvoj igara za pametne televizore) dok profesionalna i najopremljenija inacica stoji 3499 dolara godisnje po racunalu II

PODESAVANJE RAZVOJNOG OKRUZENJA ZAANDROID

SVE UJEDNOM PAKETU gt Eclipse kao standardno razvojno sucelje za Android nekada je trebalo rucno podesavati dodajuei mu Android SDK Tools te ADT Plugin (instalirani se JDK podrazumijeva) Sreeom otkad se pojavio ADT Bundle ko]i u jednom paketu donosi sve sto je potrebno podesavanje samoga sucelja prakticki je nepotrebno osim ako vee koristite Eclipse za programiranje u Javi i namjeravate prosiriti razvoj apUkacija na Android Tada treba proei dobro dokumentirani proces podesavanja sucelja koji cete pronaei na Googleovu portalu za razvojne inzenjere ADT Bundle dakle pocetak programiranja za Android cini doista lakim Treba samo na zeljenu lokaciju dekomprimirati sadrzaj Zip arhive (cijeU eete paket pronaei na DVD-u koji ste dobili uz ova] broi) otvoriti mapu eclipse i pokrenuti izvrsnu datoteku eclipseexe Sve ostalo vee je spremno Doduse medu vaznijim koracima svakako je definiranje virtualnog uredaja (emulatora) za testiranje aplikacija a po potrebi ee se kasnije morati dodavati i drugi paketi ADT Bundle i to cini jednostavnim

Kreiranje simulatora Android Virtual Device Manager najlaksi je nacin za kreiranje virtualnog uredaja Stoga ga valia pokrenuti tako da se u Eclipseu klikne na Window i zatim na AVD Manager U prozoru koji ee se otvoriti valia kliknuti na New Zatim valja unijeti ime virtualnog uredaja iizabrati vrstu uredaja

(veCinom je dovoljno izabrati uredaj prema velicini njegova ekrana) prema cemu ee biti definirane i druge postavke Parametre je moguee podesavati prema vlastitim preferencijama pri cemu ne treba pretjerivati (npr kod definiranja kolicine radne memorije) a svakako je uputno kvacicom oznaciti opciju Use Host GPU Jednom kada je sve definirano ostaje sarno kliknuti na gumb OK Virtualni uredaj pokreee se tipkom Start nakon cega valja biti strpljiv jer se emulator tradicionalno pokreee prilicno sporo

Upravljanje paketima Android SDK alate platforme i druge komponente organizira kao pakete koje je moguce preuzimati i instalirati Android SDK Managerom Pronaci cete ga u rnapi gdje je dekomprimiran ADT Bundle u obliku izvrsne datoteke (SDK Managerexe) Instalacija paketa maksimalno je jednostavna potrebno je sarno kvaCicom oznaciti zeljeni paket i zatim kliknuti na gumb koji ee pokrenuti instalaciju Medutim svakako treba instalirati SDK Tools SDK Platform-tools i SDK Platform System Image Android Support i primjeri koda preporucljivi su iako nisu nuzni No za pocetnike (i druge) svakako su to dobrodosli dodaci No kako razvijanje aplikacija bude postajalo ozbiljnije tako ce i potreba za paketima porast pa cete nerijetko svracati upravo u Android SDK Manager po nove pakete i azuriranja sect

PODESAVANJE RAZVOJNOG OKRUZENJA ZAiOS

fi ~srJH un~~~mer l ~i ~_ j ~ g~~l-1lt ~ ~J ~Iit~

Xcode

gt Xcode vise nije jedino razvojno sucelje za izradu apUkacija za iOS no dugo je to prakticki bio (vee je neko vrijeme dostupan JetBrainsov AppCode dok viSeplatformska rjesenja neeemo usporedivati) Posebnih koraka za postavljanje zapravo i nema a sve sto je potrebno uciniti jest na Appleovu racunalu pokrenuti App Store u polje za pretrazivanje utipkati Xcode j pokrenuti instalaciju Svakako je potrebno imati aktivnu vezu s Internetom i biti strpljiv jer ce se preuzeti gotovo 2 GB podataka Jednom kada je Xcode spreman s programiranjem s moze zapoceti odmah a jednako je tako spre~an i simulator Ono sto mnoge muci jest da Je za Xcode potrebno imati Appleovo racunalo Doduse moguee je posluziti se trikom virtualizacije te instalirati Mac OS X 108 Il~ visi u virtualnu masinu Medutim takvo Je sto nelegalno premda moze posluziti iskljucivo u edukativne svrhe - samo kao svojevrsno eksperimentiranje prije nego odlucite kupiti barem Apple Mac Mini

2013 STUDENI BUG I 13

ltW

ZIVOT APliKACIJE -

Od testiranja do objave

Jednom kada je onaj osnovni razvojni dio zavrsen i aplikacija se cini spremnom valja ju testirati Osim testiranja usimulatoru uvijek je prije objave uputno aptikacije provjeriti i na fizickim uredajima najbolje na vise od jednog Dok 5 jedne strane u slucaju Androida testiranje aplikacije nije problem jer je vrto jednostavno iskoristiti gotov APK ustucaju iOS-a stvari su znacajno stozenije i skupLje Isto vrijedi i ustucaju konacne objave aplikacije na stuzbenih trgovinama Evo sto morate znati

estiranje aplikacija Android USB debugging definitivno je neizshy opcija je koju svakako bjezno a premda se treba ukljuciti na uredaju zapravo odvija i tijeshy koji ce postuziti za testiranje kom samog razvojshy aplikacije (pronaci tete ju

nog procesa ono konacno u Settings pa Developer testiranje prije same objave options) aplikadje uvijek je pozeljshyno odraditi na fizickim uredajima Iz perspektive tadja uredaja za Android razvojnog inrenjera za Anshy ogromna pa je samim droid takvo sto uopce ne time razvojnim inzenjerishypredstavlja problem Dapashy ma tesko uzeti u obzir sve ee vee je tijekom samog rashy vrste uredaja koji se nalashyzvoja umjesto u emulatoru ze u opticaju Isto vrijedi testne primjerke aplikadje i predvidanje ponasanja moguee pokretati na jedshy aplikadje na raznim vershynom iii viSe fizickih ureshy zijama platforme premda daja Dovoljno ih je sarno SDK tu poprilicno pomashyUSB kablom prikljueiti na ze Kako bi smartfon s raeunalo a onda aplikaciju Android OS-om posluzio

je ovisno 0 platformi na kojo se razvija (na Mac OS-u X stvari ee raditi bez ikakve inmiddot tervencije dok je i za Windowse i za Linux potrebno odraditi nekoliko koraka pri eemu je Linux ponesto sozeniji)

Nakon toga na samom uredaju valja ukljushyeiti USB debugging te ee iduci put kada se u Eclipseu pokrene debugiranje apHkacije medu ponudenim uredajima biti i onai prishykljueen na raeunalo Zelite Ii pak provjeriti je Ii uredaj dostupan to je moguce napraviti naredbom adb devices 8to se testiranja apHkacija na iPhoneu iIi iPadu tice stvari

The easiest way to get feedback on your mobile application

Sign up free -7

~~ ~~-~ BETA FAMILY IN NUMBERS WIW MCRE THAN III=

Testiranje aplikacije moguce je prepustiti i drugima putem servisa kao 5tO je The Beta Family Rijec je 0 crowdsourcing platformi koja omogucuje da drugi testiraju j daju misljenje 0

aplikaciji na kojoj radite wwwthebetafamilycom

su daleko sloznije Iako se veCina razvojnih inzenjera grozi postupka kroz koji treba proei on ee ih ipak na kraju docekati Zasto Apple nije pojednostavio proceduru pitanje je 0 kojemu se moze debatirati no stvari Sil

takve kakve jesu Sreeom tu je okvir koji ee vas kroz nekoliko koraka sprovesti do uspjeha a pozitivno je 5tO jednom kada proshyZivite ovaj proces bit ee jednostavnije proCi kroz proces pripreme aplikacije za objavu u sluzbenoj trgovini Procedura za Google Play opet je nesto jednostavnija

No kljucna je razlika 8to se od prodaje aplishykacija putem App Storea moze zaradivati dok to nije moguce putem Google Playa sve dok ste registrirani 5 racunom u Hrvatskoj jer se ona ne nalazi na popisu poddanih zeshymalja Sreeom zarada je i daje moguca kroz reklame 110 aplikacija mora biti naznacena kao besplatna

pokretati izravno iz Eclipshysea iIi iz naredbenog retka (ADB)

Dakako fizieki uredaj u tom slucaju ipak ne moze zamijeniti emulator jer je fragmenshy

84 I BUG STUDENI 2013

za testiranje dovoljno ga je dakle prikljueiti na raeunalo Ako vee nisu svakako valja instalirati i potrebne upravljacke programe i ostale dodatke lito

Kako programirati za Android iii iOS

KakD te~tiratiiOS ~ aplikacJe na IPhoneu

APPLEOV RAZVOJNI PROGRAM Apple proceduru registracije uredaja za testiranje aplikacija nije ucinio jednostavnom pa i ne cudi da mnogi pribjegavajujailbreaku kao jeftinom i zacudo jednostavnijem rjesenju No sLuzbeni je nacin jedini podrzan a za njega cete se morati uclaniti u iDS Developer Program sto ce vas stajati 99 dolara godisnje Stoga pripremite kreditnu karticu i cvrste zivce za igru pokusaja i promasaja

lOS DeveIotgter Inlgram UUclraquoJgtIyltWklltU(I--shybull

ICorak-2 -

Generiranje certifikata 1

rA_~-Clt----shyOIGrmoollIl1ltG4

~16illttlt wt(tltjf1tlO4~_ulOll_

- ~

Kmiddotmiddotbullmiddotorakmiddot4_

_

bull _ _ n_~

Nakon ~to je certifikat spreman potrebno je registrl~ati uredaj koji ce sluziti za testiranje Ponovno se valja vratiti na iDS Provisioning Portal te pronaci poveznicu Devices i zatim kliknuti na Add Devices Dovoljno je upisati proizvoljan naziv te dodati Device ID ili UDID Rijecje 0

jedinstvenoj vrijednosti od 40 znamenki kojom se uredaj identificira UDID je moguce doznati ili putem iTunesa ili

- ---shy-shy

-~-~~-~-- - ~~~- ~

putemscodeaj uhutarQrgani~fa AkocetekoristitiJtuneskakobiste bull kQpirali ovugolemuvi-iJednost prvo ju l)ior~M (jllokUknoJiitiltiilptitjsriuti kOO1QinadjutipkicqrnmandifCNqkori tQgq uXci)deu yafjauOrgaljzerllPQ1J DeviqesproniitIsR9JejiiiPtJOlletEL bull kli~llutiriagumb Us~JQr[)eVetoPrnentmiddot

middotSretom ovo jenQjoezJQlnij(trenutjlk middotbull jerceXcQde~clltdegrllat~kiprlJetisye potrebn siOSPJQvi~iQJiing Portala st9seprljavit~sect c odgOl(araiLitimkOrisnikimPQdgcimmiddot bull

- -~~ ~~ ~~ -~-~- ~ ~-~--

2013 STUDENI BUG I 85

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 10: Kako Programirati Za Android 1

Kako programirati za Android iii iOS

RAZVOJIGARA

UMJESTO APLIKACIJA middot IGRE gt Razvijanje igara prilicno je kompleksan posao a osim samoga programiranja potrebnoje imati rjesenja za cijeli niz drugih aspekata koji su potrebni kada zeLite izraditi kvalitetnu igru Stoga i ne cudi da se dobrim igrama obicno bave timovi a vrlo rijetko individualci No Clanovi takvoga tima svakako moraju biti upuceni u programiranje i dobro se koristiti razvojnim alatima - i ne sarno onima koji sluze za razvoj klasicnih aplikacija Nairne stvaranje igara bas kao i aplikacija otezavaju velike razlike medu platformama a to je dodatno naglaseno upravo kod izrade igara Srecom postoje viseplatformska rjesenja koja takvo sto ipak cine manje bolnim nego sto doista jesUedno od najpoznatijih viSeplatformskih rjeshysenja upravo je Unity 3D Ono je dovoljno kompleksno za razvoj zbilja fantasticnih igracih naslova a istodobno dovoljno jednostavno da njime mogu ovladati i totalni pocetnici Ono sto mnoge iznenaduje svakako je cinjenica da je inicijalno ovaj engine sasvim besplatan a specifican je i po tome sto podrzava tri programska jezika (UnityScript C i Boo) Doduse besplatna inacica ima i odredenih nedostataka no puna Ushycenca stoji 1500 dolara sto i nije mnogo s obzirom na ono sto se nudi Uz Unity 3D dostupna su i druga rjesenja kao sto je Marmalade SDK Rijec je 0 moenom viseplatformskom SDK-u koji omogucuje izradu mobilnih igara za smartfone i tablete Dakako za rad s ovim SDK-om

Vrhunsko rjesenje za izradu atraktivnih viseplatformskih mobilnih (i drugih) igara moguee je dobiti sasvim besplatno 0Jww unity3d com)

potrebno je znanie programskog jezika C++ te odredeno programersko iskustvo Sam SDK moguee ie iskusati besplatno 30 dana sto je dovoljshyno vremena da se prode kroz hrpicu tutorijala a nakon toga ovaj SDK valja kupiti i to prema razlicitim modelima Najjeftinija inacica stoji 150 dolara godisnje po racunalu (Community) nju slijedi ona za 499 dolara godisnje po racunalu (lndie) zatim je tu model Plus koji stoji 1499 dolara godisnje po racunalu (s ovime se dobiva podrska i za rashyzvoj igara za pametne televizore) dok profesionalna i najopremljenija inacica stoji 3499 dolara godisnje po racunalu II

PODESAVANJE RAZVOJNOG OKRUZENJA ZAANDROID

SVE UJEDNOM PAKETU gt Eclipse kao standardno razvojno sucelje za Android nekada je trebalo rucno podesavati dodajuei mu Android SDK Tools te ADT Plugin (instalirani se JDK podrazumijeva) Sreeom otkad se pojavio ADT Bundle ko]i u jednom paketu donosi sve sto je potrebno podesavanje samoga sucelja prakticki je nepotrebno osim ako vee koristite Eclipse za programiranje u Javi i namjeravate prosiriti razvoj apUkacija na Android Tada treba proei dobro dokumentirani proces podesavanja sucelja koji cete pronaei na Googleovu portalu za razvojne inzenjere ADT Bundle dakle pocetak programiranja za Android cini doista lakim Treba samo na zeljenu lokaciju dekomprimirati sadrzaj Zip arhive (cijeU eete paket pronaei na DVD-u koji ste dobili uz ova] broi) otvoriti mapu eclipse i pokrenuti izvrsnu datoteku eclipseexe Sve ostalo vee je spremno Doduse medu vaznijim koracima svakako je definiranje virtualnog uredaja (emulatora) za testiranje aplikacija a po potrebi ee se kasnije morati dodavati i drugi paketi ADT Bundle i to cini jednostavnim

Kreiranje simulatora Android Virtual Device Manager najlaksi je nacin za kreiranje virtualnog uredaja Stoga ga valia pokrenuti tako da se u Eclipseu klikne na Window i zatim na AVD Manager U prozoru koji ee se otvoriti valia kliknuti na New Zatim valja unijeti ime virtualnog uredaja iizabrati vrstu uredaja

(veCinom je dovoljno izabrati uredaj prema velicini njegova ekrana) prema cemu ee biti definirane i druge postavke Parametre je moguee podesavati prema vlastitim preferencijama pri cemu ne treba pretjerivati (npr kod definiranja kolicine radne memorije) a svakako je uputno kvacicom oznaciti opciju Use Host GPU Jednom kada je sve definirano ostaje sarno kliknuti na gumb OK Virtualni uredaj pokreee se tipkom Start nakon cega valja biti strpljiv jer se emulator tradicionalno pokreee prilicno sporo

Upravljanje paketima Android SDK alate platforme i druge komponente organizira kao pakete koje je moguce preuzimati i instalirati Android SDK Managerom Pronaci cete ga u rnapi gdje je dekomprimiran ADT Bundle u obliku izvrsne datoteke (SDK Managerexe) Instalacija paketa maksimalno je jednostavna potrebno je sarno kvaCicom oznaciti zeljeni paket i zatim kliknuti na gumb koji ee pokrenuti instalaciju Medutim svakako treba instalirati SDK Tools SDK Platform-tools i SDK Platform System Image Android Support i primjeri koda preporucljivi su iako nisu nuzni No za pocetnike (i druge) svakako su to dobrodosli dodaci No kako razvijanje aplikacija bude postajalo ozbiljnije tako ce i potreba za paketima porast pa cete nerijetko svracati upravo u Android SDK Manager po nove pakete i azuriranja sect

PODESAVANJE RAZVOJNOG OKRUZENJA ZAiOS

fi ~srJH un~~~mer l ~i ~_ j ~ g~~l-1lt ~ ~J ~Iit~

Xcode

gt Xcode vise nije jedino razvojno sucelje za izradu apUkacija za iOS no dugo je to prakticki bio (vee je neko vrijeme dostupan JetBrainsov AppCode dok viSeplatformska rjesenja neeemo usporedivati) Posebnih koraka za postavljanje zapravo i nema a sve sto je potrebno uciniti jest na Appleovu racunalu pokrenuti App Store u polje za pretrazivanje utipkati Xcode j pokrenuti instalaciju Svakako je potrebno imati aktivnu vezu s Internetom i biti strpljiv jer ce se preuzeti gotovo 2 GB podataka Jednom kada je Xcode spreman s programiranjem s moze zapoceti odmah a jednako je tako spre~an i simulator Ono sto mnoge muci jest da Je za Xcode potrebno imati Appleovo racunalo Doduse moguee je posluziti se trikom virtualizacije te instalirati Mac OS X 108 Il~ visi u virtualnu masinu Medutim takvo Je sto nelegalno premda moze posluziti iskljucivo u edukativne svrhe - samo kao svojevrsno eksperimentiranje prije nego odlucite kupiti barem Apple Mac Mini

2013 STUDENI BUG I 13

ltW

ZIVOT APliKACIJE -

Od testiranja do objave

Jednom kada je onaj osnovni razvojni dio zavrsen i aplikacija se cini spremnom valja ju testirati Osim testiranja usimulatoru uvijek je prije objave uputno aptikacije provjeriti i na fizickim uredajima najbolje na vise od jednog Dok 5 jedne strane u slucaju Androida testiranje aplikacije nije problem jer je vrto jednostavno iskoristiti gotov APK ustucaju iOS-a stvari su znacajno stozenije i skupLje Isto vrijedi i ustucaju konacne objave aplikacije na stuzbenih trgovinama Evo sto morate znati

estiranje aplikacija Android USB debugging definitivno je neizshy opcija je koju svakako bjezno a premda se treba ukljuciti na uredaju zapravo odvija i tijeshy koji ce postuziti za testiranje kom samog razvojshy aplikacije (pronaci tete ju

nog procesa ono konacno u Settings pa Developer testiranje prije same objave options) aplikadje uvijek je pozeljshyno odraditi na fizickim uredajima Iz perspektive tadja uredaja za Android razvojnog inrenjera za Anshy ogromna pa je samim droid takvo sto uopce ne time razvojnim inzenjerishypredstavlja problem Dapashy ma tesko uzeti u obzir sve ee vee je tijekom samog rashy vrste uredaja koji se nalashyzvoja umjesto u emulatoru ze u opticaju Isto vrijedi testne primjerke aplikadje i predvidanje ponasanja moguee pokretati na jedshy aplikadje na raznim vershynom iii viSe fizickih ureshy zijama platforme premda daja Dovoljno ih je sarno SDK tu poprilicno pomashyUSB kablom prikljueiti na ze Kako bi smartfon s raeunalo a onda aplikaciju Android OS-om posluzio

je ovisno 0 platformi na kojo se razvija (na Mac OS-u X stvari ee raditi bez ikakve inmiddot tervencije dok je i za Windowse i za Linux potrebno odraditi nekoliko koraka pri eemu je Linux ponesto sozeniji)

Nakon toga na samom uredaju valja ukljushyeiti USB debugging te ee iduci put kada se u Eclipseu pokrene debugiranje apHkacije medu ponudenim uredajima biti i onai prishykljueen na raeunalo Zelite Ii pak provjeriti je Ii uredaj dostupan to je moguce napraviti naredbom adb devices 8to se testiranja apHkacija na iPhoneu iIi iPadu tice stvari

The easiest way to get feedback on your mobile application

Sign up free -7

~~ ~~-~ BETA FAMILY IN NUMBERS WIW MCRE THAN III=

Testiranje aplikacije moguce je prepustiti i drugima putem servisa kao 5tO je The Beta Family Rijec je 0 crowdsourcing platformi koja omogucuje da drugi testiraju j daju misljenje 0

aplikaciji na kojoj radite wwwthebetafamilycom

su daleko sloznije Iako se veCina razvojnih inzenjera grozi postupka kroz koji treba proei on ee ih ipak na kraju docekati Zasto Apple nije pojednostavio proceduru pitanje je 0 kojemu se moze debatirati no stvari Sil

takve kakve jesu Sreeom tu je okvir koji ee vas kroz nekoliko koraka sprovesti do uspjeha a pozitivno je 5tO jednom kada proshyZivite ovaj proces bit ee jednostavnije proCi kroz proces pripreme aplikacije za objavu u sluzbenoj trgovini Procedura za Google Play opet je nesto jednostavnija

No kljucna je razlika 8to se od prodaje aplishykacija putem App Storea moze zaradivati dok to nije moguce putem Google Playa sve dok ste registrirani 5 racunom u Hrvatskoj jer se ona ne nalazi na popisu poddanih zeshymalja Sreeom zarada je i daje moguca kroz reklame 110 aplikacija mora biti naznacena kao besplatna

pokretati izravno iz Eclipshysea iIi iz naredbenog retka (ADB)

Dakako fizieki uredaj u tom slucaju ipak ne moze zamijeniti emulator jer je fragmenshy

84 I BUG STUDENI 2013

za testiranje dovoljno ga je dakle prikljueiti na raeunalo Ako vee nisu svakako valja instalirati i potrebne upravljacke programe i ostale dodatke lito

Kako programirati za Android iii iOS

KakD te~tiratiiOS ~ aplikacJe na IPhoneu

APPLEOV RAZVOJNI PROGRAM Apple proceduru registracije uredaja za testiranje aplikacija nije ucinio jednostavnom pa i ne cudi da mnogi pribjegavajujailbreaku kao jeftinom i zacudo jednostavnijem rjesenju No sLuzbeni je nacin jedini podrzan a za njega cete se morati uclaniti u iDS Developer Program sto ce vas stajati 99 dolara godisnje Stoga pripremite kreditnu karticu i cvrste zivce za igru pokusaja i promasaja

lOS DeveIotgter Inlgram UUclraquoJgtIyltWklltU(I--shybull

ICorak-2 -

Generiranje certifikata 1

rA_~-Clt----shyOIGrmoollIl1ltG4

~16illttlt wt(tltjf1tlO4~_ulOll_

- ~

Kmiddotmiddotbullmiddotorakmiddot4_

_

bull _ _ n_~

Nakon ~to je certifikat spreman potrebno je registrl~ati uredaj koji ce sluziti za testiranje Ponovno se valja vratiti na iDS Provisioning Portal te pronaci poveznicu Devices i zatim kliknuti na Add Devices Dovoljno je upisati proizvoljan naziv te dodati Device ID ili UDID Rijecje 0

jedinstvenoj vrijednosti od 40 znamenki kojom se uredaj identificira UDID je moguce doznati ili putem iTunesa ili

- ---shy-shy

-~-~~-~-- - ~~~- ~

putemscodeaj uhutarQrgani~fa AkocetekoristitiJtuneskakobiste bull kQpirali ovugolemuvi-iJednost prvo ju l)ior~M (jllokUknoJiitiltiilptitjsriuti kOO1QinadjutipkicqrnmandifCNqkori tQgq uXci)deu yafjauOrgaljzerllPQ1J DeviqesproniitIsR9JejiiiPtJOlletEL bull kli~llutiriagumb Us~JQr[)eVetoPrnentmiddot

middotSretom ovo jenQjoezJQlnij(trenutjlk middotbull jerceXcQde~clltdegrllat~kiprlJetisye potrebn siOSPJQvi~iQJiing Portala st9seprljavit~sect c odgOl(araiLitimkOrisnikimPQdgcimmiddot bull

- -~~ ~~ ~~ -~-~- ~ ~-~--

2013 STUDENI BUG I 85

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 11: Kako Programirati Za Android 1

ltW

ZIVOT APliKACIJE -

Od testiranja do objave

Jednom kada je onaj osnovni razvojni dio zavrsen i aplikacija se cini spremnom valja ju testirati Osim testiranja usimulatoru uvijek je prije objave uputno aptikacije provjeriti i na fizickim uredajima najbolje na vise od jednog Dok 5 jedne strane u slucaju Androida testiranje aplikacije nije problem jer je vrto jednostavno iskoristiti gotov APK ustucaju iOS-a stvari su znacajno stozenije i skupLje Isto vrijedi i ustucaju konacne objave aplikacije na stuzbenih trgovinama Evo sto morate znati

estiranje aplikacija Android USB debugging definitivno je neizshy opcija je koju svakako bjezno a premda se treba ukljuciti na uredaju zapravo odvija i tijeshy koji ce postuziti za testiranje kom samog razvojshy aplikacije (pronaci tete ju

nog procesa ono konacno u Settings pa Developer testiranje prije same objave options) aplikadje uvijek je pozeljshyno odraditi na fizickim uredajima Iz perspektive tadja uredaja za Android razvojnog inrenjera za Anshy ogromna pa je samim droid takvo sto uopce ne time razvojnim inzenjerishypredstavlja problem Dapashy ma tesko uzeti u obzir sve ee vee je tijekom samog rashy vrste uredaja koji se nalashyzvoja umjesto u emulatoru ze u opticaju Isto vrijedi testne primjerke aplikadje i predvidanje ponasanja moguee pokretati na jedshy aplikadje na raznim vershynom iii viSe fizickih ureshy zijama platforme premda daja Dovoljno ih je sarno SDK tu poprilicno pomashyUSB kablom prikljueiti na ze Kako bi smartfon s raeunalo a onda aplikaciju Android OS-om posluzio

je ovisno 0 platformi na kojo se razvija (na Mac OS-u X stvari ee raditi bez ikakve inmiddot tervencije dok je i za Windowse i za Linux potrebno odraditi nekoliko koraka pri eemu je Linux ponesto sozeniji)

Nakon toga na samom uredaju valja ukljushyeiti USB debugging te ee iduci put kada se u Eclipseu pokrene debugiranje apHkacije medu ponudenim uredajima biti i onai prishykljueen na raeunalo Zelite Ii pak provjeriti je Ii uredaj dostupan to je moguce napraviti naredbom adb devices 8to se testiranja apHkacija na iPhoneu iIi iPadu tice stvari

The easiest way to get feedback on your mobile application

Sign up free -7

~~ ~~-~ BETA FAMILY IN NUMBERS WIW MCRE THAN III=

Testiranje aplikacije moguce je prepustiti i drugima putem servisa kao 5tO je The Beta Family Rijec je 0 crowdsourcing platformi koja omogucuje da drugi testiraju j daju misljenje 0

aplikaciji na kojoj radite wwwthebetafamilycom

su daleko sloznije Iako se veCina razvojnih inzenjera grozi postupka kroz koji treba proei on ee ih ipak na kraju docekati Zasto Apple nije pojednostavio proceduru pitanje je 0 kojemu se moze debatirati no stvari Sil

takve kakve jesu Sreeom tu je okvir koji ee vas kroz nekoliko koraka sprovesti do uspjeha a pozitivno je 5tO jednom kada proshyZivite ovaj proces bit ee jednostavnije proCi kroz proces pripreme aplikacije za objavu u sluzbenoj trgovini Procedura za Google Play opet je nesto jednostavnija

No kljucna je razlika 8to se od prodaje aplishykacija putem App Storea moze zaradivati dok to nije moguce putem Google Playa sve dok ste registrirani 5 racunom u Hrvatskoj jer se ona ne nalazi na popisu poddanih zeshymalja Sreeom zarada je i daje moguca kroz reklame 110 aplikacija mora biti naznacena kao besplatna

pokretati izravno iz Eclipshysea iIi iz naredbenog retka (ADB)

Dakako fizieki uredaj u tom slucaju ipak ne moze zamijeniti emulator jer je fragmenshy

84 I BUG STUDENI 2013

za testiranje dovoljno ga je dakle prikljueiti na raeunalo Ako vee nisu svakako valja instalirati i potrebne upravljacke programe i ostale dodatke lito

Kako programirati za Android iii iOS

KakD te~tiratiiOS ~ aplikacJe na IPhoneu

APPLEOV RAZVOJNI PROGRAM Apple proceduru registracije uredaja za testiranje aplikacija nije ucinio jednostavnom pa i ne cudi da mnogi pribjegavajujailbreaku kao jeftinom i zacudo jednostavnijem rjesenju No sLuzbeni je nacin jedini podrzan a za njega cete se morati uclaniti u iDS Developer Program sto ce vas stajati 99 dolara godisnje Stoga pripremite kreditnu karticu i cvrste zivce za igru pokusaja i promasaja

lOS DeveIotgter Inlgram UUclraquoJgtIyltWklltU(I--shybull

ICorak-2 -

Generiranje certifikata 1

rA_~-Clt----shyOIGrmoollIl1ltG4

~16illttlt wt(tltjf1tlO4~_ulOll_

- ~

Kmiddotmiddotbullmiddotorakmiddot4_

_

bull _ _ n_~

Nakon ~to je certifikat spreman potrebno je registrl~ati uredaj koji ce sluziti za testiranje Ponovno se valja vratiti na iDS Provisioning Portal te pronaci poveznicu Devices i zatim kliknuti na Add Devices Dovoljno je upisati proizvoljan naziv te dodati Device ID ili UDID Rijecje 0

jedinstvenoj vrijednosti od 40 znamenki kojom se uredaj identificira UDID je moguce doznati ili putem iTunesa ili

- ---shy-shy

-~-~~-~-- - ~~~- ~

putemscodeaj uhutarQrgani~fa AkocetekoristitiJtuneskakobiste bull kQpirali ovugolemuvi-iJednost prvo ju l)ior~M (jllokUknoJiitiltiilptitjsriuti kOO1QinadjutipkicqrnmandifCNqkori tQgq uXci)deu yafjauOrgaljzerllPQ1J DeviqesproniitIsR9JejiiiPtJOlletEL bull kli~llutiriagumb Us~JQr[)eVetoPrnentmiddot

middotSretom ovo jenQjoezJQlnij(trenutjlk middotbull jerceXcQde~clltdegrllat~kiprlJetisye potrebn siOSPJQvi~iQJiing Portala st9seprljavit~sect c odgOl(araiLitimkOrisnikimPQdgcimmiddot bull

- -~~ ~~ ~~ -~-~- ~ ~-~--

2013 STUDENI BUG I 85

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 12: Kako Programirati Za Android 1

Kako programirati za Android iii iOS

KakD te~tiratiiOS ~ aplikacJe na IPhoneu

APPLEOV RAZVOJNI PROGRAM Apple proceduru registracije uredaja za testiranje aplikacija nije ucinio jednostavnom pa i ne cudi da mnogi pribjegavajujailbreaku kao jeftinom i zacudo jednostavnijem rjesenju No sLuzbeni je nacin jedini podrzan a za njega cete se morati uclaniti u iDS Developer Program sto ce vas stajati 99 dolara godisnje Stoga pripremite kreditnu karticu i cvrste zivce za igru pokusaja i promasaja

lOS DeveIotgter Inlgram UUclraquoJgtIyltWklltU(I--shybull

ICorak-2 -

Generiranje certifikata 1

rA_~-Clt----shyOIGrmoollIl1ltG4

~16illttlt wt(tltjf1tlO4~_ulOll_

- ~

Kmiddotmiddotbullmiddotorakmiddot4_

_

bull _ _ n_~

Nakon ~to je certifikat spreman potrebno je registrl~ati uredaj koji ce sluziti za testiranje Ponovno se valja vratiti na iDS Provisioning Portal te pronaci poveznicu Devices i zatim kliknuti na Add Devices Dovoljno je upisati proizvoljan naziv te dodati Device ID ili UDID Rijecje 0

jedinstvenoj vrijednosti od 40 znamenki kojom se uredaj identificira UDID je moguce doznati ili putem iTunesa ili

- ---shy-shy

-~-~~-~-- - ~~~- ~

putemscodeaj uhutarQrgani~fa AkocetekoristitiJtuneskakobiste bull kQpirali ovugolemuvi-iJednost prvo ju l)ior~M (jllokUknoJiitiltiilptitjsriuti kOO1QinadjutipkicqrnmandifCNqkori tQgq uXci)deu yafjauOrgaljzerllPQ1J DeviqesproniitIsR9JejiiiPtJOlletEL bull kli~llutiriagumb Us~JQr[)eVetoPrnentmiddot

middotSretom ovo jenQjoezJQlnij(trenutjlk middotbull jerceXcQde~clltdegrllat~kiprlJetisye potrebn siOSPJQvi~iQJiing Portala st9seprljavit~sect c odgOl(araiLitimkOrisnikimPQdgcimmiddot bull

- -~~ ~~ ~~ -~-~- ~ ~-~--

2013 STUDENI BUG I 85

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 13: Kako Programirati Za Android 1

-

middot~ il I

r

Prodaja nakon razvoja i zatim instalirati u Keychain (obicnim dvokLikom)

Generiranje prom Nakon toga na iOS Provisioning Portalu odaberite ProviSioning te zatim Distribution i stvorite novi profiL Za distribucijsku metodu valja naznaciti App Store te iskoristiti vee kreirani App ID Ostaje potvrditi profil i pricekati koji trenutak kako biste ga preuzeli i instalirali (bit ce dodan Xcodeu)

Potpisivanje i podesltlllt1mje

gt Slicno kao i kod definiranja uredaja za testiranje aplikacije I u slucaju objave aplikacija u trgovini potrebno je proci odredenu proeeduru To znaci da je ponovno potrebno generirati eertifikat provisioning profil ali procl i neke druge korake kao ito je proees odobravanja aplikaeije koji provodi sam Apple Doduie materija oko objave aplikacije i sve ito ona podrazumijeva prilicno je opsena pa svakako valja citati slubenu dokumentaciju ili - guglati

Prvi koraci Ako ste odlucili pratiti vodic kako testirati iOS aplikacije na fizickim uredajima onda ste vee nekoliko koraka blize jer znaci da ste se pridruzili lOS Developer Programu Ako niste onda je vrijeme da to svakako ucinite Usamoj sustini cijeU proces objave aplikacije u sluzbenoj trgovini podrazumijeva kreiranje App ID-a generiranje distribucijskog certifikata i distribucijskog provisioning profila potpisivanje apUkacije stvorenim profilom nekoliko sitnih podesavanja u Xcodeu i konacno kreiranju aplikacije na iTunes Connectu s odgovarajueim metapodacima Dakle morate biti cLanom iOS Developer Programa i imati pristup iOS Provisioning Portalu

Generiranje certifikata Ako ste vee testirali aplikaciju to znaci da imate i generiran App ID Stoga prije svega treba generirati distribucijski certifikat i distribucijski provisioning profil Oboje se izvodi otpriUke slicno kao u slucaju testiranja aplikacije Stoga prvo kreirajte novi CSR (certificate signing request) te zatim pokrenite proceduru generiranja certifikata Potom na iOS Provisioning portalu u odjeljku Certificates pa Distribution kliknite na Add Certificate Posaljite generirani CSR te pricekajte da se generira certifikat koji je potrebno preuzeti

U Xcodeu otvorite projekt i oznacite prvu stavku u popisu

datoteka Zatim pronadite karticu Build Settings Po potrebi kliknite opciju All umjesto Combined te u popisu parametara pronadite stavku Code Signing Provjerite ima li opcija Release definiran generiran distribucijski profil Zatim kao build scheme naznacite iOS Device i krenite na postupak arhiviranja (Archiving)

Stvaranje arhive Prije nego je moguee stvarno poslati aplikaciju potrebno je stvoriti arhivu cijeloga projekta ili jednostavnije receno set datoteka koje ee stvarno biti poslane na iTunes Connect Treba provjeriti je li parametar Build Configuration (pod Archive) namjesten na Release Hi to podesiti Srecom funkcija Auto-Create Schemes to ce sasvim bezbolno rijesiti Osim toga za projekt treba svakako u stavki Build Settings u polje za pretrazivanje utipkati skip te zatim parametar Skip install postaviti na Yes Konacno valja iz izbornika Product izabrati stavku Archive Jednom kada je arhiva generirana trebali biste ju pronaci pod Organizer i zatim Archives

iTures (mined iTunes Connect Appleov je servis kroz koji se upravlja prodajom aplikacija Cijeli je servis prilicno razraden pa ee trebati nesto vremena za upoznavanje No zasad se treba usredotociti na objavu same aplikacije Stoga kliknite na Add a New App U padajucem izborniku valja naznaciti napravljeni bundle identifier i zatim pratti vodic korak po korak Jednom kada praces zavrsi aplikacija ce biti dodana sa statusom Waiting for Upload U tom se trenutku valja vratiti u Xcode pokrenuti Organizer te Archives pronaci aplikaciju i kliknuti na Submit Tada zapocinje proces odobrenja koji moze potrajati nekoliko tjedana nakon cega ce aplikacija napokon biti dostupna u trgovini ~i

86 I BUG STUDENI 2013

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 14: Kako Programirati Za Android 1

Moje apilkaCije

Tt90vina

Kako programlrati za Android iii iOS

DISTRIBUCIJAANDROID APLIKACIJA

bullJ ApLikacije za Android ne moraju se nuzno distribuirati putem sluzbene trgovine iako je to pozeljno vee se mogu slobodno slati putem e-poste ili objavljivati na vLastitim web stranicama Ipak GoogLe Play je sredisl1je mjesto za trazenje apLikacija pa ih je tamo najbolje postaviti Sreeom proces nije slozen

roces objave aplikacije u sluzbenoj Googleovoj trgovini iako poneSto jedshynostavniji i manje zapetljan od procesa objave iOS aplikacija ipak traii odredeni angaiman Prije svega valja prirediti

aplikaciju za objavu zatim registrirati Google Play racun pri cemu je moguee koristiti vee poshy

-shyI-shy_______t_

-----~ ----~--~-~--~

_-_ dll~_ ~ ~

Registracija kao razvojni inzenjer prvi je korak do objave aplikacije u trgovini a jednom kada to odradite i platite 25 dolara (godisnja naknada) dobit cete pristup konzoti za razvojne inienjere

=-

stojeCi Googleov racun (ako ga imate) te platiti naknadu od 25 dolara za jednu godinu Nakon toga je pripremljenu apUkaciju moguce objaviti relativno bezbolno Naime Google ne namece proces odobravanja aplikacije nego ce gotove apUkacije tek pregledati kako bi ustanovio da nije rijec 0 kakvom malwashyreu Stoga ce jed nom kada je apUkacija poslana ubrzo biti i dostupna u sluibenoj trgovini Medutim prije nego to bude moguce aplikaciju koja je jos zapravo u testnoj fazi valja prirediti i digitalno je potpisati Na Androidu sve aplikacije moraju biti potpisane a dok aplikaciju debugirate bilo u emulatoru iU na fizickom ureshydaju za vas ee to automatski napraviti Eclipse Taj se digishytalni potpis iii kljuc ne moze koristiti za konacnu aplikaciju nego je kljuc potrebno zasebno generirati Srecom nUe potrebno kupovati certifikat kako bi se apli shykacija potpisala nego ga je moguce generirati

uz malenu pomoe standardnih alata Keytool i Jarsigner Privatni kljuc koji ee se generirati mora zashydovoljlti nekoUko uvjeta Morate bitl njegov iskljucivi vlasnik (vazno je sacuvati kljuc i upamtiti lozinku koja ee se koristiti pri geneshyriranju kljuca) mora biti vazeei najmanje 25 godina i dakako ne smije biti privatni kljuc za debugiranje Osim toga lozinke moraju biti sto kompleksnije a treba se pripaziti i da kljuc ne dospije u neieljene ruke (vazan je i za naknadshyno azuriranje aplikacije u sluibenoj trgovini) Proces stvaranja kljuca i digitalnog potpisivanja moze se izvesti rucno (sve je prilicno detaljno opisano u sluibenoj Googleovoj dokumentaciji na portalu za razvojne inzenjere) ill uz malenu pomoe prikladnog carobnjaka u Eclipseu s postavljenim prosirenjem ADT pri cemu ee se generirati potrebne datoteke s pomocu Keytoola i Jarsignera te ee biti prireden paket za distribuciju alatom zipatign Stoga u Eclipseu unutar Package Explorera izaberite File te zatim Export Otvorite mapu Android te izaberite Export Android Applicashytion i kliknite Next Time ee se aktivirati cashyrobnjak koji ee vas voditi korak po korak kroz proces digitalnog potpisivanja sto ukljucuje i izbor privatnog kljuca kojim ce konacni APK biti potpisan Jednom kada carobnjak zavrsi aplikacija je spremna za objavu Kao rezultat samoga procesa izvoza aplikacije dobit ee se sasvim spreman APK koji zatim valja poslati na Google Play Prije toga valja samo prirediti ikone te druge graficke elemente uz jasan i sto precizniji opis Sve to pomaze korisnicima da se odluce instalirati bas vasu aplikaciju Kada je to spreshymno skocite na konzolu za razvojne inienjere ako vee niste napraviti svoj profil razvojnog inzenjera (time se stjece pravo za distribuciju besplatnih aplikacija 5to je trenutno i jedno moguee iz Hrvatske) potrazite poveznicu Upload Application i dalje pratite upute Na koncu samo jos treba pritisnuti gumb Publish

bull _bullH ~

Umjesto rucne procedure za pripremu aplikacija za objavu mogute je iskoristiti carobnjak za izvoz aplikacije u Eclipseu 5 prosirenjem ADT (ADT bundle dolazi sa svime sto je potrebno)

2013 STUDENI BUG I 87

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 15: Kako Programirati Za Android 1

PRIMJERI APLIKACIJA -

Iz teorije u praksu Kako je ucenje programiranja najcesce lakse tako da se prate i potom anaLiziraju primjeri gotovih aplikacija ni ova tema nije mogLa proci bez aplikacija koje uz pracenje uputa mozete i sami izraditi i potom koristiti za analizu ili kao ideju za stvaranje svoje prve apLikacije

Kada se tek poeinje s programiranjem uobieajeno je najprije napraviti aplishykaciju s dobro poznatim pozdravom zdravo sVijete Iako to doista ima smisla jer se time svladavaju same

osnove te takav primjer moze posluZiti za upoznavanje razvojnog sueelja uvid kako je to napisati koju liniju programskog koda te odmah provjeru kako je to kompilirati i testirati aplikaciju takvi primjeri bas i nisu pretjerano korisni Sigurno ne onima koji odmah zele i traze vise

Stoga smo odlueili ponuditi dva primjera aplikacije bull jedan za Android i jedan za iOS - koji bi trebali bid razumljivi totalnim poshyeetnicima a istodobno dovoljno zanimljivi za proueavanje te kasniju nadgradnju Ovo je potonje najeeSce i najvaznije jer se tako nerijetko najbolje uei programiratimiddot proueashyvanjem primjera popravljanjem eventualnih pogresaka i prosirivanjem funkcionalnosd aplikacije ako je izvomi kOd obje aplikacije dostupan na DVD-u (oba su projekta spremshy

na za otvaranje u prikladnim razvojnim sueeljima) valja imati na umu da je ipak uputnije praHti stvaranje aplikacije korak po korak te programski kod prepisivati

Takav pristup ima nekoliko oeiglednih prednosti Naime ne samo da cete tako lakse upamtiti sintaksu nego Cete pritom i ovladati razvojnim suceljem Gotove proshyjekte mokte iskoristiti kako biste provjerili je li razvojno sucelje podeseno kako treba te kasnije za referencu i dobar nacin da se snadete u vrstama datoteka kOje su kljucne za svaki projekt Otvaranje projekta za iOS vrlo je jednostavno - dovoljno je dvokliknuti datoteku projekta -dok je u slucaju Androida i razvojnog sucelja Eclipse princip ponesto drukeiji

Prezirnije da biste otvorili projekt zashypravo ga morate uvesti Stoga u Eclipseu iz izbornika File izaberite opciju Import (nakon sto je projekt dekomprimiran u neku mapu na disku) te potom stavku Existing Android Code Into Workspace Izaberite

Izvorni kod za oba primjera aplikacije pronaci cete u rubrikama na DVD-u koji ste dobili uz ovaj broj

mapu u kojoj se nalazi vec gotovi projekt ako nije oznacen oznaCite ga kvaCicom te potom oznaeite i opciju Copy projects into UJorkspace ako projekt zeHte imati u svojoj radnoj mapi Ostaje yam jos samo da klikneshyte na gumb Finish _

Lata brajevi plikacija za Android koju smo odlueili napraviti za primjer treba generirati nasumicne brojeve za lutriju bull preciznije reshyceno za dva sistema domace lutrije Iako se na prvi pogled

cini jednostavnom za izradu aplikacije trebalo je rijesiti nekoHko izazova Ovaj je primjer zanimljiv bas zato sto jasno pokazuje s eime se programed koliko god bazicno to bilo moraju susretati Naime ne sarno da je valjalo napraviti generator koji ce izbacivati nasumicne brojeve nego se taj generator mora pobrinuti da se medu nasumicno izabranim brojevima oni ne ponavljaju - inaee dobivena kombinacija za lutriju ne bi bila valjana_ Osim toga u primjeru se koriste i dodatne kontrole (radio-gumbi) za izbor sistema lutrije te kontrolna struktura switch Sve to ovaj primjer Cini dobrim upravo za pocetnike ali i odlicnim za dodatna prosirenja Izvorni k6d moshyzete pronaCi na DVD-u koji ste dobili uz ovaj broj

Kreiranje projekta Prije svega je potrebno pokrenuti Eclipse a to cete uCiniti tako

da u mapu u koju ste dekomprimirali ADT Bundle koji ste dobili na DVD-u uz ovaj broj pronadete mapu eclipse te u njoj pokrenete izvrsnu datoteku eclipseexe Nakon toga valja izraditi projekt On se za ovu aplikaciju stvara sasvim isto kao i bilo za koji drugi proshyjekt U Eclipseu se jednostavno izabere opcija New zatim Android Application Project te se popune obavezna poJiao Kao ime aplikacije unesite Generator lutrije a sve ostale postavke (i u drugirn prozorishy

88 I BUG STUDENI 2013

rna carobnjaka) ostavite na podrazumijevanirn vrijednostirna Nakon toga valja pricekati da Eclipse stvori projekt

Dodavanje znakovnih nizova Kako se ne bi neprestano morali ponavljati isti nazivi za razlicite

elemente u projektu najprije je uputno na lijevoj strani prozora pronaCi mapu values te u njoj XML datoteku stringsxmL U nju cemo dodati znakovne nizove kOji ce se koristiti u suprotnom ce Eclipse

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 16: Kako Programirati Za Android 1

Kako programirati za Android iii iOB

sugerirati da znakovne nizove dodate u tu datoteku prl svakom kompiliranju (1 debuglranju) Vrijednosti je moguee jednu po jednu unositi putem grafiekog sueelja no za potrebe ovoga primjera bit ee dovoljno da izravno unesete sljedeee vrijednosti i snimite projekt

lt7xml version=lO encoding=utf-8gt ltresourcesgt

ltstring name=app_namegtLoto brojevkstringgt ltstri ng name=action_setti ngsgtSetti ngsltstri nggt ltstring name=hello_worldgtHello worldkstringgt ltstring name=sestod45gtLutrija 6 od 45ltstringgt ltstring name=sedamod39gtLutrija 7 od 39ltstringgt ltstring name=gumb_generirajgtGenerirajltstringgt

ltresourcesgt

Dodavanje elemenata

u idueem je koraku potrebno dodati grupu radio-gumba te ostale elemente kojl ee sacinjavati sueelje same aplikacije Umjesto da se elementi dodaju jedan po jedan rueno u datoteku activity_main xml koja se nalazi na lijevoj strani u mapi layout treba dodati sljedeee

ltLinea rLayout xm lnsa nd ro id= httpschemasa ndroi d coma pkresl android

xmlnstools=httpschemasandroidcomtools androidid=+idLinearLayoutl androidlayouCwidth=match_parent androidlayouCheight=match_parent an droidori entation= vertical androidpaddingBottom=dimenactivity-vertical_margin androidpaddingLeft=dimenactivity-horizontaLmargin androidpaddingRight=dimenactivity-horizontal_margin androidpaddingTop=dimenactivity-vertical_margin toolscontext=MainActivity gt

ltRadioGroup androidid=+idradioLotoGrupa androidlayouCwidth=wrap_content androidlayouCheight=wrap_content gt

ltRadio Button androidid=+idradio_6od45 androidlayouCwidth=wrap_content androidlayout_height=wrap_content androidchecked=true androidtext=stringsestod45 Igt

Trazenje pogresaka Jedna od neizbjeznih aktivnosti svakoga programera 5vakako je trazenje i uocavanje bugova Oni mogu biti doi5ta raznovrsni ali 5e iz gresaka ponekad najbolje uti Proces debugiranja samo je jos jedan od ciklusa kroz koji mora proti svaka aplikacija a bez obzira na prirodu pogresaka u programskom kodu ponekad su one teze uocljive Stoga i ne cudi da se u aplikacijama koje su vee odavna dozivjele svoje sluzbeno izdanje i moze ih se kupiti (ili dobiti besplatno) u sluzbenim trgovinama nerijetko mogu pronaCi kojekakve pogreske Sretom korisnici ih obicavaju uredno dojavljivati pa ih zatim razvojni inzenjeri mogu ispravljati i objavljivati nadogradnje za aplikacije Kako biste i sami stekli dojam koUko je ponekad tesko uociti neku pogresku koliko god ona oCita bila namjerno smo napravili pogresku u izvornom kodu aplikacije za Android Doduse ta je pogreska vidljiva iskljucivo u izvornom kodu aplikacije koji mozete pronati na DVD-u uz ovaj broj dok je na idutim stranicama programski kOd ispravan Potonji te naime posluziti da pogresku lakse otkrijete Medutim prije nego sto pocnete usporedivati programski kOd u tiskanom izdanju s izvornim kodom aplikacije na DVD-u pokusajte pogresku pronaci sami To je naime jos jedan proces ucenja programiranja i svladavanja osnovnih koncepata _

ltRadioButton androidid=+idradio_radio7d039 androidlayout_width=wrap_content androidlayout_height=wrap_content androidtext=stringsedamod39 Igt

ltRadioGroupgt

ltButton androidid=+idbutton androidlayouCwidthwrap_content androidlayout_height=wrap_content androidtext=stringgumb_generiraj Igt

ltTextView androidid=+idtextViewl androidlayouCwidth=wrap_content androidlayouCheight=wrap_content androi d textAppearance= a nd roidattrtextAppearanceMedium Igt

ltLinearLayoutgt

Iz ovoga je lako vidjeti da koristimo RadioGroup da bismo grupiraH radio-gum be Kod gumba s oznakom +idradioLotoGrupa uocite i stavku androidchecked=true Ona osigurava da ta opcija bude oznaeena odmah po pokretanju Jednom kada ste unijeJi ovaj kad kliknite na karticu Graphical Layout da biste dobili pretpregled sucelja

Dodavanje funkcionalnosti i akcije na gumb (addButtonListener)

Da bi se brojevi generirali potrebno je dodati akciju na gumb koji ee pokrenuti proceduru za generiranje odnosno akciju kOja ee se izvcSiti kada korisnik klikne na gumbo Th se zapravo nalazi i cijeli programski kod te Iogika kojom se generiraju brojevi No treba krenuti redom Stoga pri samome vrhu datoteke MainActivityjava odmah ispod Hnije package comexamplegeneratorlutrije dodajte sljedece reference (slobodno zamijenite vee postojeee)

2013 5TUDENl BUG I 89

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 17: Kako Programirati Za Android 1

t~~I~ ~AbullbullffJ ~ ItMioltoioI_~ shy ~

fpi- shy- shy2I-~ il3i1)Olaquo1

a__

itshy~~ a_1 shy~~~

~~~ ~shyo-o--u ~-shy~~-shyii ___ shy

jOOiUl~u~I_()(

~~)tlrlilri~bulltt~)1

_-(_I_IltIIrWAWgtmM)

t ~Ulaquobti_(Io(UoJI~~J (

fOltI1-hllt

)=L~logto) f~_uUrl~b ~i middot~~U~~Id~~~t 1~ __ (noIl~bull~i ji

Urt tJflOtiull l~t~elltltrM4iraquolllllibti~ ~1alt4II1h~__q~h~)1

rUort1ICfl1lOltOl

~lo4Inm

import javautilArrayList import javautiLCollections

import androidosBundle import androidappActivity import androidviewMenu import androidviewView import androidviewViewOnClickListener import androidwidgetButton import androidwidgetRadioGroup import androidwidgetTextView

Zatim odmah ispod definidje klase dodajte sljedece

private RadioGroup radioGroupld private Button button

U metodu OnCreate prije zadnje viticaste zagrade dodajte liniju addButtonListener() te zatim odmah ispod zavrsetka metode onCreshyateOptionsMenu kOja sluZi za generiranje izbornika (dakle nakon njezine posljednje vitieaste zagrade) dodajte sljedeCi kOd

public void addButtonListenerO (

radioGroupld (RadioGroup) findViewByld(RidradioLotoGrupa)

button (Button) findViewByldRidbutton)

buttonsetOnClickListener(new OnClickListenerO Override

public void onClick(View v)

final Textview text (TextView) findViewByldRidtextViewl) textsetTextSize(36)

Radnja ovisna 0 tome koji je radio button oznacen switch (radioGroupldgetCheckedRadioButtonld())

case Ridradio_6od45

textsetText(nu It) Definiranje liste koja ce sadrzavati brojeve ArrayListltlntegergt sestOd45 = new ArrayLisklntegergtO for(int i 0 i lt 45 i++) sestOd45add(i+l)

IZelimo da brojevi budu nasumicno pomijesani CoLLectionss h u ffle(sestOd45)

Izvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 6 j++)

90 I BUG STUDENI 2013

textappend(StringvalueOf(sestOd45getj) + U)) J break

case Ridradio_radio7do39

textsetT extnu ll) Definiranje liste koja ce sadrzavati brojeve ArrayLisklntegergt sedamOd39 = new ArrayLisklntegergt) for(int i = 0 i lt 39 i++)

sedamOd39add(i+l)

IIZelimo da brojevi budu nasumicno pomijesani Collectionsshuffle(sedamOd39)

Illzvrtit ce sest brojeva iz koLekcije i prikvaciti ih na textViewl for(int j =0 j lt 7 j++) (

textappend(StringvalueOf(sedamOd39get(j) + OJ)

break

)

Nakon toga spremni ste za pOkretanje aplikacije u emulatoru iii izravno na smartfonu

Anatomija (ogike (kontrolna struktura switch) Neltemo ulaziti u sve dijelove programskog koda jer cete sintaksu

ionako svladavati kroz ucenje ali svejedno cemo istaknuti nekoshyliko vaznih dijelova Prije svega tu je kontrolna struktura sWitch kojom se u ovom slucaju detektira koji je radio-gumb korisnik oznacio Primijetit cete da je za argument postavljena vrijednost radioGroupldgetCheckedRadioButtonldO kOja zapravo vraca ID oznacenog radio-gumba Tako je rijeseno grananje i izbjegnuto koristenje naredbi if

Anatomija (ogike (generiranje nasumicnosti) o generiranju nasumicnih brojeva i nasumienosti moze se doista

mnogo diskutirati no u ovome je slucaju zapravo koristen prljavi trik (to ne znaci nuzno da je to najbolji nacin za rjesavanje ovog probleshyma) Naime kako nije bilo dovoljno generirati nasumicne brojeve u nekome rasponu nego se trebalo pobrinuti da generirani brojevi budu jerunstveni svaki put kada ih se generira bilo je potrebno naCi odgovarajuce rjesenje Stoga su svi brojevi ovisno 0 sistemu lutrije za koji se generiraju (zato je bilo potrebno koristiti kontrolnu strukturu switch) dodani u polje iIi niz (Array) sto postaje jasno iz sljedeceg komadica koda

ArrayLisklntegergt sedamOd39 =new ArrayListltlntegergt)

for(int i =0 i lt 39 i++)

sedamOd39addi+l)

Nakon toga se iskoristila metoda tipicna za ]avu a kOja omoshygucuje nasumicno mijesanje stavki u nekom nizu Collections shuffle(sedamOd39)

Tek nakon toga se u polje textViewl dodaju generirani brojevi u odredenom rasponu i prikazuju u sucelju

for(int j =0 j lt 7 j++ textappend(StringvalueOf(sedamOd39get(j) + raquo

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 18: Kako Programirati Za Android 1

Kako programirati za Aadroid iU iOS

PRIMJER ZA iOS

mogucnosti i parametara samoga projekta U tom je prozoru najbolje odmah dodati potrebne frameworkove koji ce prepoznavanje lokashycije uciniti mogucim Stoga u tom prozoru pronadite stavku Linked

Frameworks and Libraries te ispod popisanih biblioteka kliknite ha znak plus U dijalogu koji ce se pokazati utipkajte Core Location framework i dodajte gao

Dizajniranje sucelja Nakon toga u popisu datoteka na lijevoj strani pronadite Main

storyboard te kliknite na nju Time ce se otvoriti osnovno sucelje gtaplikacije kojemu valja dodati ukupno sedam oznaka (Label) i dva

gumba slicno kao sto je to na slici Naravno stilsko je oblikovanje sasvim proizvoljno pa slobodno pogledajte 5to se nudi na paletama u samom razvojnom sueelju Grafieki se elementi dosLovce povlaee na sueelje pa to i uCinite

definiranja outieta u polju Connection odabere Action Ako ste sve dobro napravili kOd bi trebao izgledati otprilike ovako

import ltUIKitUIKithgt

interface ViewController UIViewController

property(weak nonatomic) IBOutlet UILabel ZemSirina property (weak nonatomic) IBOutlet ULabetZemDuzina property (weak nonatomic) IBOuttet UILabel

- (IBAction)dajLokaciju(id)sender - (IBAction)zaustaviLokaciju(jd)sender

end

2013 STUDENI BUG 91

Moja lokacija 10

A plikacija za iPhone za razliku od primjera za Android ponesto je modernija Modernija utoliko sto ce ipak koshyristiti odredene specificnosti smartfona i dostupnih frashy

meworkova To je u ovome slucaju odredivanje lokacije korisnika Iako se programerima-pocetnicima to moZda nece na prvi pogled tako ciniti odredivanje lokacije korisnika nije pretjerano slozeno Appleov iOS dobro je potkovan i na raspolaganju yam je Core Location framework koji taj zadatak cini vrlo laganim (vise 0 tom frameworku moguce je procitati u sluzbenoj dokumentaciji) Osim toga ova ce aplikacija bez problema raditi u simulatoru jer Xcode (ovdje koristimo Xcode 50) nudi i mogucnost simuliranja lokacije Bas kao i u slucaju aplikacije za Android izvorni k6d mozete pronaci na DVD-u koji ste dobiIi uz ovaj broj Stoga krenimo

Izrada projekta Sve pocinje stvaranjem novoga projekta pa stoga treba pokrenuti

Xcode te aktivirati izradu novoga projekta kOristeci predlozak Single View Application Pokrenut ce se carobnjak u kojemu je potrebno upisati naziv aplikacije (u nasem ce slucaju to biti Moja lokacija) te svakako upisati identifikator tvrtke iIi pojedinca (moze biti bilo sto) Ostale postavke nije potrebno modificirati a jedino valja odrediti lokaciju gdje ce projekt biti snimljen

Dodavanje frameworka

c Prvi prozor koji ce Xcode pokazati tice se poddavanje osnovnih

__1__ bull

oINI-z-ti$ -oINII(A4

er~ ~

Povezivanje elemenata Kao i kod svih drugih elemenata prije nego ih se moze zashy

ista koristiti potrebno ih je povezati Stoga valja kliknuti na ViewControllerh na lijevoj strani i pokrenuti Assistant Editor putem ikone u gornjem desnom dijeLu prozora Uz prikaz sVjeze dizajniranog sueeLja pokazat ce se i prozor s izvornim kodom Poshyvezivanje je zamisLjeno prilieno jednostavno - dovoLjno je zaddati tipu CtrL kliknuti na zeljeni element te ga doslovce odvuci u dio s izvornim kodom pri eemu samo treba paziti da se element dovuce

izmedu kljuenih djeei interface i end Nakon toga mora se poshyjaviti dijaloski okvir s definiranjem parametara Stoga napravite to za sve elemente (prema slici) sirina (nazvat cemo ga ZemSirina) duzina (nazvat cemo ga ZemDuzina) zemljaGrad (nazvat cemo ga zemljaGrad) i za dva gumba jedan cemo nazvati dajLokaciju a drugi zaustaviLokaciju Kod potonja dva gumba pripazite da se kod

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 19: Kako Programirati Za Android 1

Napokon kodiranje prvi dio Core Location framework zgodna je biblioteka koja omogueuje

dohvaeanje lokacije korisnika u obliku GPS koordinata pri cemu se podaci neprestano salju pa je lokaciju moguee dobivati i ako je korisnik u pokretu (to dod use ima utjecaja na potrosnju baterije no to je vee druga prica) Kako bi se iskoristila u aplikaciji najshyprije je potrebno uvesti header datoteku Stoga otvorite datoteku ViewControllerh te u nju dodajte i sljedeeu liniju

import ltCoreLocationCoreLocationhgt

Zatim treba dodati delegata te stoga treba i promijeniti liniju

interface ViewController UIViewController tako da izgleda ovako

interface ViewControLLer UIViewControLLer ltCLLocationManagershyDeLegategt

Nakon toga otvorite datoteku ViewControllerm te deklarirajte varijablu detekcijaLokacije (objekt CLLocationManager zasluzan je za slanje podataka 0 lokaciji) Stoga odmah ispod linije implemenshytation View Controller dOdajte liniju

CLLocationManager detekcijaLokacije

BuduCi da ee aplikacija prepoznati u kojem se gradu i ddavi koshyrisnik nalazi odmah ispod varijable detekcijaLokacije treba dodati i sljedeee

CLGeocoder geocoder CLPLacemark pLacemark

Ostaje je jos postojeeoj metodi viewDidLoad dodati instancu detekcijaLokacije = [[CLLocationManager alloc] init] te definiciju geocoder tako da konacni kod izgleda ovako

- (void)viewDidLoad

[super viewDidLoadl II Do any additionaL setup after Loading the view typically

from a nib detekcijaLokacije = [[CLLocationManager aLLocl initl geocoder = [[CLGeocoder aLLocl init]

Napokon kodiranje drugi dio Nakon prvih koraka u kodiranju valja nastaviti dalje Stoga u

datoteci ViewControllerm postojeeoj metodi dajLokaciju koja je povezana s istoimenim gumbom valja dodati sljedeee linije tako da izgleda ovako

- (lBAction)dajLokaciju(id)sender detekcijaLokacijedeLegate = seLf detekcija LokacijedesiredAccuracy = kCLLocationAccuracyBest

[detekcija Lokacije sta rtUpdatingLocationl

Tu se nalazi i drugi gumb koji sluzi za zaustavljanje dohvaeanja lokacije Nairne jednom kada se aktivira dohvaeanje lokacije ([deshytekcijaLokacije startUpdatingLocation]) ono ee se kontinuirano odshyvijati u pozadini sto utjece na potrosnju baterije Stoga valja dodati moguenost da se dohvaeanje lokacije zaustavi prikladnim gumborn

- (IBAction)zaustaviLokaciju(id)sender

[detekcija Lo kacije stopUpdati ngLocation]

Siijedi jos sarno dohvaeanje podataka prosljedivanje dodanim

92 I BUG STUDENI 2013

oznakama i prikazivanje u sucelju nakon sto se pritisne gumb za dohvat lokacije Stoga odmah ispod prethodne metode dodajte sljedeee

- (void)Location Manager(CLLocation Manager )manager didFaiLWithError(NSError )error

UIALertView errorALert = [[UIALertView aLLocl

initWithTitLeGreska messageNe mogu dohvatiti Lokaciju deLegateniL canceLButtonTitLeU redu otherButtonTitLesniLl

[errorALert showl

- (void)LocationManager(CLLocationManager ) manager didUpdateToLocation(CLLocation )newLocation fromLocation(CLLocation )oLdLocation

NSLog(didUpdateToLocation newLocation) CLLocation currentLocation = newLocation

if (currentLocation = nil) seLfZemDuzinatext = [NSString stringWithFormat8f

cu r rent Locat i on coo rd i nate Longitu del seLfZemSirinatext = [NSString stringWithFormat8f

cu r rentLocat ion coo rd i nate Latitu qel

IIDohvacanje fizicke Lokacije [geocoder reverseGeocodeLocationcurrentLocation

compLetionHandLer(NSArray pLacemarks NSError error) if ([pLacemarks count] gt 0 ampamp error == niL)

pLacemark = [pLacemarks LastObject] seLfzemLjaGradtext = [NSString stringWithFormat

nn pLacemarkLocaLity pLacemarkadministrativeArea pLacemarkcou ntry]

eLse seLfzemljaGradtext = Ne mogu naci podatke

l

Testiranje 5 laznom lokacijom _ _ _ _ _~ -_ ~ ~ ~ L ___~ ~ _ JI_ ~_

I e~~~~4iE=~= ~~~~- --

1 ~ bullbull-

I~----cJb VMAM

Mola Lokacl]a 10

Zemljopisoa Airina 5150998000

Zemljoplsna duflna -013370000

Zemija I grad

London England

United Kingdom

Na koncu ostaje jos sarno da gotovu aplikaciju pokrenete u simulashytoru pri cemu je potrebno i namjestiti laznu lokaciju - u suprotnom ee aplikacija dojaviti pogresku Stoga u Xcodeu iz izbornika Product izaberite opciju Run Time ee se otvoriti simulator te pokrenuti aplikacija Jednom kada se to dogodi iz izbornika Debug izaberite opciju Simulate Location i izaberite neku od ponudenih lokacija Sada sarno ostaje detaljno proucavanje koda i - eksperimentiranje te prosirivanje moguenosti (npr dohvaeanje tocne adrese iii prikaz korisnika na mapi)

Page 20: Kako Programirati Za Android 1