Újabb fejlesztői interjúval jelentkezünk, ezúttal Gruber Kristóffal beszélgettünk az egyidejű multiplatform fejlesztés nehézségeiről és a Titanium SDK-ról, mint egyik lehetséges útról.

Mióta fejlesztesz iOS-re?

Időtlen idők óta honlap készítéssel és webfejlesztéssel foglalkozom, de titkos vágyam mindig az volt, hogy mobilokra készítsek programokat. Tavaly nyáron vette fel a Drukka.hu-val koprodukcióban működő Bitnet.hu Kft., ahol dolgozom, a profiljába a mobilalkalmazás-fejlesztést, azóta pedig ezzel foglalkozom. A nyáron kezdett első nagyobb projektünk óta több kisebb programot is írtam.

Mik ezek?

TraffipaxInfo (Lite és Pro): a közeli traffipaxokat képes megjeleníteni, valamint szól, ha a beállítható távolságba került egy mérő. Nemrég végeztem a 2.0-ás verzióval, ami gyakorlatilag egy teljes újraírása a programnak. Egy csomó hasznos funkció került bele, pl. térkép nézet és éjszakai mód. Remélhetőleg az 1.x verziók pár gyengeségét is sikerült javítanom.

Horoszkóp (Lite és Pro, valamint angol verziók): Szerény és elfogult véleményem szerint a legszebb magyar horoszkóp alkalmazás okostelefonra. Nincs túlzsúfolva felesleges funkciókkal, csak egy egyszerű napi/heti/havi/szerelmi/üzleti horoszkópból és egy beállítások ablakból áll, hasonlóan a beépített időjárás apphoz.

BeerTimer: ezt a programot csak hobbiból fejlesztettem a Schönherz Qpa méltán híres sörváltójára, ahol kevesebb, mint 2 másodperc alatt isszák meg a korsó sört és ezt le is szokták mérni.

Jelenleg már majdnem kész stádiumban van a ClubInfo mobil alkalmazása is, amivel a környéken lévő szórakozóhelyeket és azok programjait böngészhetitek majd.

A blogodon olvasom, hogy Titanium SDK-t használsz, mert egyszerre Androidra és iOS-re is fejlesztesz. Sok helyről hallottam már, hogy hasonló megoldásokat választanak, mert manapság evidencia, hogy mindkét sikerplatformon meg kell jelenni, egyúttal az erőforrás mindig kevés. Mik a tapasztalataid ezzel az SDK-val?

Szerintem a legtöbben azért döntenek ilyen megoldások mellett, mert ezek költséghatékonyak. A program motorját elég egyszer megírni, és csak a megjelenítést kell az adott platformhoz igazítani. A Titanium magában hordozza ezt az előnyt, de ezen kívül volt egy másik érv is, amiért ezt választottuk: JavaScript nyelven lehet benne megírni az alkalmazást, ebben pedig már elég jártasak voltunk. Az iPhone ObjectiveC nyelve eltér minden "megszokott" programnyelvtől szintaktikájában, így egy elég hosszadalmas és költséges tanulási fázistól kíméltük meg magunkat.

Annak eredményeképpen, hogy nem kell megírni a programot külön iOS-re és Androidra, elvielg épp hogy több idő jutna az optimalizálásokra, szépítésekre. Az ilyen SDK-k hátránya, hogy próbálnak uniformizálni, vagyis a platformok kis különbségeit gyakran nem lehet kihasználni belőlük. A Titanium esetében szerencsére nincs így, az eltérő részek is elérhetőek (pl. rendezhető listák iPhone-on vagy a menük Androidon), mindössze arra van szükség, hogy azokat az adott platformon külön igénybe vegyük.

Sokan azért vannak a Titanium ellen, mert – tévesen – azt hiszik, hogy csak natív alkalmazásra hasonlító webappokat lehet bennük készíteni, amiket a telefon egy WebView-ban futtat. Ez nincs így, itt az iOS és az Android saját GUI elemeit tudjuk használni a JavaScript nyelvből, tehát semmivel sem lesznek ezek a részek lassabbak. A legtöbb programnak pedig ez elegendő.

Az ilyen megoldások a minőség rovására mennek, vagy megoldható, hogy ne legyen így?

Jobb esetben, nagyobb cégeknél külön csapat foglalkozik a két platformra történő fejlesztéssel. Esetükben az appok egy szinten tartása jelent problémát.

Nálunk én végzem a fejlesztést mindkét platformra. Általában úgy dolgozom, hogy először iPhone-ra készítem el a programot, és csak utána "portolom át" Androidra, ami kábé annyit jelent, hogy az ott alkalmazott megoldásokat beleépítem a programba. Mondok egy példát: iOS-en van az képernyőknek egy fejléce, a képernyő nevével, amire ki tudsz rakni 1-2 gombot. Androidon ilyen GUI elem nem létezik, így ott ugyanezeket a funkciókat a menü gombra elérhető menübe kell beleraknod. A gond ott van, hogy nincs minden iOS funkciónak Androidos megfelelője, vagy valamiért az nem működik, így sokszor kimaradnak funkciók, vagy lebutítva érhetőek el az alkalmazás Android verziójában. Amikor az ember kellőképpen sok időt töltött már azzal, hogy ezeket a hibákat/hiányosságokat kijavítsa vagy áthidalja valahogy, eljön az a határ, amikor már nincs kedve azzal bíbelődni, hogy pl. az a képernyő animálva jelenjen meg Androidon is. Ez sajnos ront a felhasználói élményen... Sok olyan dolog is van, amit az iOS alapból ad, Androidon pedig neked magadnak kell megcsinálnod. Ezek általában kimaradnak sajnos, ha nem teszik magát a programot élvezhetetlenné. Lehet, hogy csak a fejlesztési módszeremből adódik, de számomra nagy könnyebbség lenne, ha az iPhone verzió elkészülése után meg lehetne állni és elégedetten konstatálni, hogy jó munkát végeztem.

Hogy látod, kinek van lehetősége teljesen külön optimalizálni Androidra és iOS-re?

Ez szerintem elsősorban határidő kérdése. A platformok natív programnyelvét és API-jait megtanulni sokkal több idő, a programot "kétszer kifejleszteni" szintén sokkal több idő. Egyszerűbb programok esetében ez az időráfordítás nem éri meg, mert Titaniummal azonos minőségű programot lehet készíteni sokkal kevesebb befektetett munkával.

Persze vannak a Titaniumnak korlátai is, bizonyos API-k nem, vagy még nem használhatóak, bizonyos dolgokhoz pedig egyszerűen túl lassú a JavaScript. Ilyen esetekben nem marad más, mint ObjectiveC-ben és Java-ban is megírni a programot. Szerencsére ilyen még nem fordult velünk elő, mert ezek a korlátok elég magasan vannak:)

Aktív Twitter-használó vagy. Az Apple Twitter-integrációs megoldásait használod? Hasznos a közösségnek szerinted?

Felhasználóként használom, bár csak elég ritkán, ha egy-egy programban a fejlesztő nem saját megoldást alkalmazott a twitter postolásra. Fejlesztőként még nem volt dolgom vele, de a közel jövőben tervezzük, hogy több programunk frissítése is tartalmazni fogja a Facebook mellett a Twitter integrációt is. Jó dolognak tartom, mert egy csomó terhet levesz a fejlesztő és a felhasználó válláról is (utóbbinak például nem kell minden programba külön bejelentkeznie). Örülnék, ha a postolás csak az első lépés lenne, és ennél mélyebb Twitter integrációt is kapnánk az új iOS verziókban (például a telefonkönyvben látszódnának a felhasználó tweetjei).

Amit még ennél is hasznosabbnak tartok, az a Facebook-integráció. Rendkívül egyszerű használni, és megkíméli a felhasználót a hosszadalmas és unalmas regisztrációs fázistól: például nem kell bekérnünk a profil képét vagy a születési dátumát, nincs szükség email cím ellenőrzésre, stb.

A tweetjeidet figyeltem, jelentős részük az Android operációs rendszerét gyalázták. Milyen arányt fedeztél fel az iOS és az Android homlokra csapós állatságai között?

Tagadhatatlanul több a szívás az Android verzióval. Ez három részből adódik: nem felhőtlen a viszonyom az Androiddal felhasználói szempontból, a Titanium SDK által a fordításhoz használt Android SDK csapnivalóan rossz, és sajnos a Titaniumban is egyre inkább kiütköznek minden új verziójában a jelek, hogy az iPhone támogatás ott is az elsődleges cél. Amolyan "ha megy Androidon is, akkor jó, de ha nem, hát nem baj" érzése van az embernek ezt látva. Saját tapasztalataim azt mutatják, hogy Androidra "portolni" egy kész Titanium alkalmazást legalább annyi idő, mint megírni a motort és elkészíteni az iPhone megjelenítési részt. Mindig van valami, ami nem működik.

Kiemelnél néhány emlékezetes példát? Akár mindkét oldalról.

Az egyik kedvencem, amikor a magasan objektum orientált Androidon a Google saját Maps View-járól kiderült, hogy egy alkalmazásban egyszerre csak egyetlen példányban lehet felhasználni. Tehát például nem tudsz olyat csinálni, hogy az app egyik tabján van egy áttekintő térkép, a többi tabon nézegetve meg mondjuk egy hely adatlapjára egy kis térkép részletet még kiraksz. Ilyen esetben kézzel le kell szedni az épp nem látszó térképet a GUI-ról.

Android esetén rengeteg energiát felemészt a rengeteg kijelző méret, felbontás és OS verzió támogatása is. Nem csak arról van szó, hogy minden grafikát legalább 3, de inkább 6 különböző méretben kell elkészítenünk, de ezeket folyamatosan tesztelnünk is kell az amúgy legendásan lassú Android emulátorral. Összehasonlítás képpen: az iOS Simulator az én gépemen 10 másodperc alatt elindul, az Ice Cream Sandwich emulátor pedig közel 5 perc alatt bootol be. És minden felbontáshoz újra kell indítani.

Persze iPhone esetén is vannak gondok néha: a háttérben futás Titaniumos megvalósítása még mindig tud meglepetéseket okozni számomra.

Mik a tervek jövőre nézve?

Tele vagyunk megrendelésekkel, olyannyira, hogy most bővítettük is mobil fejlesztővel a csapatot. Rövid időn belül érkezik a ClubInfo, utána pedig egy napi vicceket küldő alkalmazás várható. Tervezés alatt áll egy olyan app is, amivel a megrendelőink a bérelt gépeiket monitorozhatják és menedzselhetik. Aztán meg ki tudja.