Ludvík Souček, blahé paměti, kdysi v jedné svojí knize o fotografování psal, že ho nejvíc ve verneovce Tajuplný ostrov zajímal seznam věcí, které trosečníci nalezli v bedně vyplavené na břeh. I já jsem byl obdobně zvědavý, co bude XE4 obsahovat.
Co je v truhle (nového)
To zásadní a nové jsou nativní ARM kompilátory založené na LLVM pro cílovou platformu iOS. Většina ostatních změn a vylepšení se rovněž týká nově podporované mobilní platformy.
Za výjimku lze považovat FireDAC - univerzální knihovnu pro přístup k “velkým” korporátním databázím. Podporuje jak VCL, tak FireMonkey (jak už ostatně “Fire” v názvu napovídá) a lze tedy předpokládat, že má nahradit předchozí komponenty (dbExpress™) pro databázové přístupy v multiplatformním vývoji. Základní verze XE4 Professional ji neobsahuje a je nutné ji dokoupit zvlášť, to ovšem vzhledem k obchodní politice Embarcadera příliš nepřekvapí - podpora vývoje robustních databázových projektů je efektivně podporovaná až ve verzích Enterprise, Ultimate a Architect (a v odpovídající cenové hladině).
Většinu ostatních věcí, které Embarcadero uvádí jako novinky, bych spíš řadil do kategorie inovací - inovovaný multiplatformní framework FireMonkey® FM3 (i když rozšíření o iOS je už pořádná inovace), inovovaný a doplněný LiveBindings, inovované Actions a další a další... Nemá asi cenu zabíhat do větších podrobností, laskavý čtenář si je najde přímo na stránkách Embarcadera - detailní přehled je na docwiki.
Cui bono?
Komu XE4 prospěje? Zcela jistě stávajícím Delphi vývojářům, kteří začínají ze svého Windows světadílu pokukovat, kam přes oceán vyrazit. Pravda, trajekt na OSX jezdí už od verze XE2, ale vzhledem k aktuální situaci jsou mobilní zařízení přeci jen vyšší level. A vize, že dosavadní Delphi VCL vývojář bude schopen, bez nutnosti osvojit si nové vývojové prostředí a nový jazyk, vyvíjet prakticky okamžitě aplikace pro iOS, zní trošku nereálně. Ovšem přesně, o tohle se Embarcadero s XE4 snaží. Jak moc se mu to daří, se pokusím nastínit v druhé části článku, kde popíšu svoje první zkušenosti.
Nemyslím si, že by mnoho stávajících zkušených Microsoft Visual Studio, Apple Xcode nebo Android SDK/NDK vývojářů mělo chuť měnit vývojové prostředí. Zákazníky na svojí platformě asi vždycky najdou a velká firma nebude mít problémy si na každou platformu najmout vývojáře-specialistu.
Mnohem zajímavější je úhel pohledu studenta informatiky, který se rozhoduje, co se naučit. Nahlédnutím na strukturu inzerce na portálech trhu práce zjistíme, že nejlépe placené a často hledané pozice jsou C++/C# a Java vývojáři. Když ale budu chtít zkusit vlastní byznys nebo vlastní projekt? Budu se ohlížet po mobilních platformách a jejich ekosystémech. Je nepochybné, že multiplatformní prostředí (byť omezené svou univerzálností) bude ta správná volba.
I amar prestar aen
Promiňte, to je elfsky a znamená to “Svět se změnil” (v anglickém překladu “World is changed”, dle některých jazykovědců to není elfsky zcela správně, ale opravdu důležité je to, co si lidé myslí, že to znamená).
Z hlediska používání počítačů, nebo ještě lépe řečeno návyků běžných lidí-uživatelů, se svět během několika posledních let změnil hodně, možná bych si troufl použít slovo dramaticky. Prodej tabletů letos poprvé překročil prodej notebooků (mobilních počítačů, laptopů, ultrabooků, říkejme tomu jak chceme).
Dle agentury Gartner předběhnou tablety ostatní počítače (desktopy a notebooky) někdy v roce 2015. Neméně zajímavý je i přehled používaných operačních systémů, kde vede Android, následovaný Windows a OSX/iOS. Zbývá sice ještě velký kus koláče, ale předpověď trendu je klesající. Prognózy se málokdy zcela naplní, ale současná situace, kdy Apple prodal v posledním čtvrtletí 2012 27 milionů kusů počítačů, z toho 23 milionů iPadů o čemsi vypovídá. Z odhadu IDC pak vyplývá, že se za stejné období prodalo celkem 52 milionů tabletů. iPadů tedy skoro polovina.
Dle informací z Embarcadero bude další verze RAD XE podporovat vývoj nativních aplikací (na úrovni NDK) pro Android letos na podzim. Dle reakcí představitelů Embarcadero na webinářích o XE 4 na dotazy ohledně podpory Androida jsem vyrozuměl, že “když už máme iOS, Android je hračka”. Uvidíme za půl roku. Ale mobilní FireMonkey a ARM kompilátory už mají.
Promiňte, už jdu psát o tom, jak jsem poprvé programoval pro iOS. Ale ještě si neodpustím poznámku. Obchodní síla mobilních zařízení (a teď mám na mysli i smartphony) není zcela v jejich počtu (byť po započítání mobilů jde o stovky milionů kusů), ale především v jejich ekosystému.
Ten totiž zajišťuje okamžitě a kvalitně reklamu, prodej, distribuci a instalaci v jednoduchém a robustním provedení, které je snadno dostupné všem uživatelům dotyčného systému. Zatím mě nepřestaly překvapovat počty stažení aplikací na Google Play - ještě se dá nějak přijmout, že Facebook má 100 000 000+ ale prostinký (a roztomilý) remake Tamagotchi zvaný Pou má 50 000 000+ stažení. A z tohoto úhlu pohledu mají vývojové platformy, které budou umět pokrýt zmíněné (a případně další) ekosystémy, nepochybný půvab.
Ještě takový výstřel na dlouhou vzdálenost - kompilátory LLVM umí i Linux. A ve světě embedovaných OS má Linux velký podíl. GUI vašeho DVD přehrávače v Delphi?
iOS a la XE 4
Kromě nativního kompilátoru a rozšíření FireMonkey FM3 podporující iOS, je k dispozici i podpora pro lokální databáze SQLite (Public Domain, je již součástí iOS ale i Android) a IBLite. IBLite je “ořezaná” verze InterBase ToGo (mobilní verze “klasické” InterBase) a součástí XE 4 je neomezená licence pro vývoj a šíření.
Pro vývoj je nezbytný Mac s nainstalovaným Xcode. To postačí pro ladění aplikací na iOS simulátoru, který je součástí Xcode. Pokud to ovšem človek myslí opravdu vážně, je nezbytné mít k dispozici fyzické zařízení s iOS. Nehledě například na nemožnost pořádně ladit ovládání gesty, jsem měl během svých pokusů neodbytný dojem, že se aplikace na simulátoru chová jinak než na fyzickém zařízení (ostatně oddělené kompilátory...).
Tady se věci začnou komplikovat, protože pro umístění aplikace na fyzické zařízení (a ve finále i na AppStore) je nutné mít vlastní certifikát pro vývoj iOS aplikací. K tomu je nutné zakoupit některý z iOS Developer programů. Základní je za $99, Enterprise pak za $299 (jde o roční poplatek). Rozdíl je v tom, že v Enterprise můžete distribuovat vaše aplikace lokálně mimo AppStore v rámci podniku. Já jsem zvolil první variantu a včetně 23% VATu mě to přislo na 2125 Kč.
Dle kombinovaných instrukcí z Embarcadera a Apple jsem certifikát vpravil do Xcode a pak i do připárovaného iPadu 2. Embarcadero popisy totiž v určitých bodech končí odkazem na návody Applu. Ne vždy je všechno zřejmé a pochopitelné na první pohled, na druhý však ano. No, dost jsem popis téhle části zjednodušil, na každou vyvíjenou aplikaci je třeba založit profil, ale to je téma na samostatný článek.
Další nezbytnou podmínkou je i instalace PAServeru na OSX. PAServer je konzolový program, který po spuštění umožňuje XE 4 IDE provádět vzdáleně operace potřebné k odeslání a ladění aplikací. To je ale stará věc, byla už v první verzi XE 2 pro ladění na OSX platformě. V XE 4 se PAServer dočkal kabátu běžné OSX aplikace, která se normálně instaluje a objeví se v nabidce programů.
Po spuštění je možné zadat heslo pro vzdálené připojení a pak už jen čeká co po něm bude IDE chtít. V IDE je pak třeba vytvořit Connection profil pro konkrétní Mac zařízení. Stačí k tomu IP adresa nebo název (který se dost krkolomně hledá v OSX nastavení sítě). Pokud se vše podaří, vypadá pak test spojení takhle:
A můžete začít pracovat
V nabídce XE 4 při vytváření nového projektu se objevila nová položka FireMonkey Mobile Application, která spustí průvodce novým projektem. V nabídce je kromě prázdné aplikace i pár typických mobilních konstrukcí, které by měly zjednodušit začátek:
Pro první testy jsem volil Header/Footer - snad jen kvůli tomu, abych na formuláři něco měl. No a pak se objeví klasické Delphi IDE:
Povšimněte si prosím, že jako cílovou platformu můžete zvolit nejen fyzické iOS zařízení a iOS emulátor, ale i Win32 aplikaci (ta slouží k ladění, viz dále).
Ještě poznámku k uspořádání. Jelikož musíte mít k dispozici Windows, na kterém běží vývojové prostředí a zároveň Mac s OSX, kde běží simulátor, naskýtá se klasická otázka, kam s nimi.
Velmi častá konfigurace, kterou jsem okoukal na konferencích, je vzít Apple PowerBook, na ten si dát nějaký virtualizační nástroj typu Parallel Desktop nebo VMware Fusion a v něm rozjet virtuálně Windows. Řešení to není nijak překvapivě nové a funguje velmi dobře. Ovšem z pohledu Delphi vývojáře, co má na stole pecéčko, těžko stravitelné (ne že by nešel OSX virtualizovat, ale být vámi, tak do takového řešení nejdu - jednak je to nelegální a druhak je funkcionalita dosti diskutabilní). Asi nejlevnější řešení je postavit si někam Mini Macka (nový je na Alze za 16 tisíc Kč s daní). Pak stačí nějaký vzdálený přístup (já jsem z nedostatku fantazie použil TeamViewer a bylo).
Mimochodem Embarcadero vyjednalo pro uživatele XE 4 testovací omezený provoz (24 hodin na 30 dnů) na pozoruhodném projektu macincloud.com, v rámci kterého je možné si pronajmout strojový čas na vzdáleně přístupných počítačích Apple. V systému je již nainstalovaný PAserver, takže je možné zkoušet tvorbu iOS aplikací i bez fyzického Macka doma. Ceny vcelku mírné: $1 za hodinu, $7 za týden nebo $20 za měsíc. Nicméně zatím není k dispozici možnost mít připojené k takovému Mackovi mobilní iOS zařízení, takže případné ladění je jen o simulátoru.
in merito
Projel jsem si většinu příkladů a miniprográmků (u Embarcadera jim říkají Code Snippets), některé na simulátoru a některé jsem pustil do iPada. Sem tam jsem si zkusil něco změnit a většinou to dělalo, co jsem chtěl, aby to dělalo. Během seznamování jsem přišel na to, proč se iOS aplikace dá přeložit a ladit pod Windows - je to totiž o hodně rychlejší než překlad a zahájení ladění na Mackovi. V průběhu vytváření vlastní aplikace jsem se k tomu často uchyloval, protože pro odladění procedurální části není detailní GUI třeba a rychlejší obrátka byla znát.
Všechno vypadalo povědomě a domácky, jen mi výsledky běhaly na iPadu. Někdy pátý večer uzrál čas na vlastní projekt, který s příklady od Embarcadera nemá nic společného. Přeci jen, ukázkové příklady funguji vždycky a na potíže člověk narazí v okamžiku, kdy se vydá vlastní cestou. Před časem jsem realizoval ovládací modul pro studiové osvětlení Fomei pomocí LAN adaptéru. Bylo to ve VCL, kód komunikoval s krabičkou pomocí UDP/TCP protokolů a shodou okolností jsem na to použil Indy. Rozhodl jsem se tedy přenést tento modul na iOS jako samostatnou aplikaci.
Do projektu typu Header/Footer vytvořeného průvodcem jsem naházel ovládací prvky - snažil jsem se dodržovat Apple doporučení, jak má GUI vypadat. Jak co udělat jsem okoukal během těch předcházejících večerů (dnes jsem shlédnul Embarcadero webinář ohledně tvorby iOS rozhraní a kdyby ho uspořádali dřív, tak jsem si tak tři večery mohl ušetřit). Pak jsem celkem odvážně vzal kód z VCL předlohy a zkopíroval ho do nového projektu. Při masakrování zdrojáku jsem narazil na odlišnosti a doporučení, na co je třeba dát pozor právě při migraci kódu do iOS.
Mě se hlavně týkalo odlišné pojetí řetězců a práce s nimi, zejména pak odlišné indexování. Také je nutné v případě polí pracovat s dynamickou variantou.
První verze, která uměla krabičku na síti najít UDP broadcastem a požádat ji o seznam dostupných zábleskových jednotek, mi fungovala ještě týž večer (no, spíše ráno). Ukázalo se, že Indy se chová stejně na Win/iOS simulátor/iPad, alespoň to, co jsem používal. V dalších dvou večerech jsem trosku učesal GUI, vyměnil TSpinBox za něco lidského (kdo navrhoval SpinBox, toho bych nechal pro výstrahu zastřelit). Výsledek vypadá takhle (screenshot je přímo z iPadu přes Xcode):
Ve Windows to pak vypadá takhle:
Do umístění na AppStore to má pochopitelně ještě daleko a na základě jedné vcelku malé aplikace (má to tak 1000 rozevlátých řádek) nelze obecně usuzovat. Ale v praxi jsem si vyzkoušel, že Delphi vývojář je schopen po týdnu osahávání Macka a iPadu přenést nenáročnou aplikaci z VCL do iOSu. Už se těším, až si to na podzim přeložím na Androida.
Na konec (Here at the End of All Things)
Pokud jste dočetli moje úvahy až sem, asi jste nabyli dojmu že moje hodnocení RAD XE 4 (a zejména iOS části) je veskrze kladné. Ano, musím přiznat, že se mi líbí, kam Embarcadero Delphi za těch pár let dotáhli a fandím koncepci multiplatformního vývoje, kterou uvádí v život.
Ale... je vidět, že všechno je strašně nové a “neusazené” (mám na mysli zejména FireMonkey a iOS). Mohl bych tu začít vyjmenovávat problémy, na které jsem narazil osobně a o kterých je možné se dočíst. Pro mě to však není zásadní věc. Dle mého soudu je mnohem důležitější jasný záměr a viditelná snaha ho realizovat. Přede dvěma dny vydalo Embarcadero Update 1 pro XE 4. Lze tedy čekat, že chyby budou postupně mizet a kvalita růst. Hodně důležitá bude dynamika tohoto růstu. RAD Studio není levná věc ani v Professional verzi a dovedu si představit, že by uživatel mohl za svoje peníze chtít větší kvalitu. Změn a nových věcí je však spousta a někdo vývoj zaplatit musí. Držím Embarcaderu palce, aby to ustáli a dotáhli Delphi tam, kde by ho rádi měli. Aby dělalo radost všem fandům, vývojářům a panu Wirthovi.
Recenzi pro Programujte.com napsal Daniel Jenne.