Artikkelit
Mobiilikehitys Androidilla ja iPhonella
Kokenut kehittäjä ottaa mobiilialustat nopeasti haltuun
Android- ja iPhone-laitteiden suosio on kasvanut merkittävästi muutaman vuoden aikana. Vuoden 2010 lopussa jo noin puolet älypuhelimista käytti joko Android-käyttöjärjestelmää tai iPhonen iOS-käyttöjärjestelmää.
Mobiilimaailmasta kiinnostunut kehittäjä pääsee nopeasti sinuiksi molempien mobiilialustojen kanssa. Tähän artikkeliin on koottu reaktorilaisten kokemuksia mobiilikehitysprojekteista.
Java-kehittäjä löytää Androidista paljon tuttua
Java-ympäristöissä työskennellyt kehittäjä pääsee nopeasti vauhtiin myös Androidin kanssa. Kehityksessä voi käyttää vanhastaan tuttuja työkaluja kuten esimerkiksi Eclipseä ja IntelliJ IDEA:a. Oppimiskynnystä madaltavat tutut Java-kirjastot, jotka ovat suoraan käytettävissä Android-puolella. Javan lisäksi ohjelmointikielen valinnassa on muita vaihtoehtoja, joista esimerkiksi merkittävästi ilmaisuvoimaisemmat Scala, Clojure ja JRuby soveltuvat mainiosti mobiilikehitykseen.
Kehittäjälle, joka on tehnyt komponenttipohjaista kehitystä esimerkiksi Swingillä, Androidin käyttöliittymämalli tulee nopeasti tutuksi. Androidilla asemointi on rajoitetumpaa kuin esimerkiksi Swingin kolmansien osapuolten komponenteilla, mutta toimintaperiaate on sama.
Käyttöliittymän rakentamisessa käytetään paljon XML-kuvauksia. Sen vuoksi esiin tulevat perinteisen “XML-koodauksen” haasteet muun muassa koodin ja XML:n vastuunjaossa sekä duplikoinnissa. Käyttöliittymäkomponentteja voi rakentaa myös koodissa, mutta alusta dokumentaatioineen ja työkaluineen ohjaa vahvasti XML-asemointien suuntaan.
Tuore Android-kehittäjä joutuu nopeasti sukeltamaan monisäikeisyyden hallintaan. Pienetkin taustaprosessoinnit joutuu usein tekemään omassa säikeessään, jotta käyttöliittymän vaste saadaan riittävän nopeaksi.
Androidilla eri puhelinmallit lisäävät manuaalisen testauksen tarvetta
Kehitysversioiden testaus onnistuu Android-puhelimien lisäksi Android SDK:n omalla emulaattorilla, joka toimii pääsääntöisesti luotettavasti. Eri puhelimissa esimerkiksi käyttöliittymän asettelu toimii osin hieman eri tavalla, mistä seuraa melko paljon manuaalista testauskuormaa.
Kääntäminen ja asentaminen laitteeseen eroavat jonkin verran web-kehityksestä. Android-kääntämisen esiprosessoinnissa XML:stä generoidaan automaattisesti koodia, mikä vaatii spesifit Android-työkalut. Alustan ja työvälineiden dokumentaation osalta Googlen dokumentaatio toimii melko hyvin, vaikka alustan ikääntymisen tuoma sekalaisuus ja kirjavuus alkaa jo näkyä.
iPhone-kehittäminen voi tuntua aluksi työläältä
iPhonen iOS-alustalla toteutuskielenä on useimmiten alustan oma Objective-C. Kehityksessä käytetään enimmäkseen Applen omaa kehitystyökalua (XCode), johon Applen välineisiin tottumatonkin koodaaja pääsee nopeasti sisään. Mikäli C/C++-maailma ei ole entuudestaan hallussa, niin Objective-C:n matala abstraktiotaso aiheuttaa alussa kulmakarvojen kohoilua. Koodausaikaa kuluu melko paljon esimerkiksi muistinhallinnasta huolehtimiseen. Myös Objective-C:n lavea syntaksi tuo lisähaastetta koodin siistinä pitämiseen. Koodausta helpottaa jonkin verran tuki dynaamisille lohkoille iOS v4.0:sta lähtien.
Käyttöliittymäkehitys nojaa vahvasti XCoden käyttöliittymäeditoriin (Interface Builder), jolla perusasioiden tekeminen on nopeaa. Käyttöliittymän monimutkaistuessa työläyskäyrä nousee. Asettelun hallinta on yllättävänkin työlästä – esimerkiksi dynaamisesti kasvavia komponentteja käyttävä kehittäjä joutuu monessa tilanteessa huolehtimaan komponenttien asettelusta koodissaan itse. iOS-kehityksen ytimessä olevan MVC-mallin toteutus on XCodessa kankea. Koodia joutuu välillä jakamaan eri paikkoihin epäintuitiivisesti.
iOS:llä asentaminen ja testaus on nopeaa, sertifikaattien hallinta työlästä
XCoden mukana tuleva simulaattori toimii hyvin kehitysversioiden testaamisessa. Kääntäminen ja simulaattorin käynnistys tapahtuu ripeästi. Silloin tällöin ilmenee pieniä eroja käyttöliittymän grafiikoiden piirtämisen osalta simulaattorissa ja fyysisissä testilaitteissa, mutta muutoin simulaattori toimii luotettavasti.
iOS:n käyttöliittymätestauksen välineet ovat huomattavasti jäljessä web-kehitystä, mutta tyydyttävän UI-regressiotestauksen pystytys onnistuu nopeasti. Automatisoituun regressiotestaukseen soveltuvat esimerkiksi UISpec ja siihen pohjautuva Frank.
iOS:n kehitysympäristöjen sertifikaattien hallinta vie päivityksineen yllättävän paljon aikaa. Käytännössä kaikilla kehitystiimiläisillä pitää olla tiimin provisiointiprofiiliin liitetty sertifikaatti, jolla sovelluksen voi asentaa testilaitteisiin. Kaikki testilaitteet pitää myös rekisteröidä tiimin provisiointiprofiiliin. Asentaminen puhelimeen on nopeaa, kun sertifikaatit ovat kunnossa.
Android-kehittäminen on usein iOS:ää sujuvampaa
Kehitysympäristöjä vertailtaessa Android-kehitys vetää pidemmän korren. Monia kehittäjille tuttuja perustoiminnallisuuksia ei löydy vieläkään XCodesta. Esimerkiksi metodin kutsujen etsiminen (find usages) on perustoiminto, jota XCodesta ei kirjoitushetkellä edelleenkään löydy. Myös XCoden refaktorointityökalut ovat kankeampia ja toiminnoiltaan rajallisempia verrattuna esimerkiksi Eclipseen tai IDEA:an.
Android-kehityksessä ohjelmointikielissä on merkittävästi enemmän valinnanvaraa kuin iOS-puolella. Kaikki JVM:n päällä ajettavat kielet sopivat hyvin, ja useimmissa kielissä ilmaisuvoima ja abstraktiotaso ovat Objective-C:tä korkeammalla. iOS:n kehityssykli (kääntäminen ja asentaminen) sen sijaan on nopeampi kuin Androidilla. Asettelutyö on yksinkertaisissa asioissa helpompaa iOS-puolella, mutta Androidin asettelu puutteineenkin miellyttää kehittäjää enemmän.
Android-alustan avoimuus on pykälää parempi iOS:ään verrattuna. Esimerkiksi open source -komponenttien käyttäminen on helpompaa kuin iOS:ssä. Lisäksi Androidilla kehittäjät voivat itse toteuttaa esimerkiksi omia protokollia. iOS:llä jo alustan omien Applen dokumentoimattomien metodien käyttämisestä seuraa hylkäys sovelluksen katselmointivaiheessa AppStoressa.
Android tukee sovellusten välistä kommunikointia iOS:ää jouhevammin. Androidin intent-mekanismin avulla esimerkiksi kuvan jakaminen Facebookiin omasta sovelluksesta onnistuu muutamalla rivillä koodia: omasta sovelluksesta laukaistaan ACTION_SEND-intent, jolla kuva voidaan välittää Facebook-sovellukselle.
Manuaalitestauksessa iOS-laitekannan homogeenisuus helpottaa kehittäjän työtä. Android-puhelimet vaativat eri lailla toimivien laitteiden vuoksi merkittävästi enemmän manuaalista työtä testauksessa.
Koodin laatu ei riipu alustasta
Molemmat mobiilialustat ovat lopulta teknologioita muiden joukossa. Uusiin teknologioihin tutustumisen ja opettelun pitäisi olla arkipäivää jokaiselle ohjelmoijalle, eivätkä iOS- ja Android-alustat eroa tässä suhteessa muista. Laadukas koodi on laadukasta koodia alustasta ja kielestä riippumatta.
