Mendelova univerzita v Brně Provozně ekonomická fakulta
Návrh a realizace aplikace Atlas hub na platformě iPhone Bakalářská práce
Vedoucí práce: Ing. Pavel Haluza
Jakub Wagner
Brno 2012
Úvodem práce bych rád poděkoval společenství autorů z komunity houbareni.cz za poskytnutí materiálů použitých v aplikaci. Mojí rodině za podporu a v neposlední řadě mému vedoucímu práce Ing. Pavlovi Haluzovi za užitečné rady při tvorbě práce.
Prohlašuji, že jsem tuto bakalářskou práci řešil samostatně a s použitím uvedené literatury.
V Brně dne 5. ledna 2012
_______________________
Abstract WAGNER, J. Design and implementation of application Mushroom Atlas for iPhone platform Bachelor thesis. Brno, 2012. This thesis deals with the implementation of the application for the Apple mobile platform. It mentions basics of iPhone application development. Its new features of current version of its operating system iOS and its implication on development. Finally it describes important parts of development of the application Mushroom atlas in detail. Keywords Thesis, Apple, iPhone, application development, Xcode 4, iOS 5, CoreData, Storyboards
Abstrakt WAGNER, J. Návrh a realizace aplikace Atlas hub na platformě iPhone Bakalářská práce. Brno, 2012. Tato bakalářská práce se zaměřuje na realizování aplikace Atlas hub pro mobilní platformu společnosti Apple. V práci jsou zmíněny základy vývoje pro tuto platformu. Nové vlastnosti současné verze operačního systému iOS a jejich vliv na vývoj aplikací. Nakonec detailně popisuje důležité části vývoje aplikace Atlas hub. Klíčová slova Bakalářská práce, iPhone, vývoj aplikací, Xcode 4, iOS 5, CoreData, Storyboards
Obsah
5
Obsah 1 Úvod a cíl práce
8
1.1 Úvod .............................................................................................................................. 8 1.2 Cíl práce ........................................................................................................................ 8 2 Historický vývoj platformy iPhone
9
2.1 První iPhone .................................................................................................................. 9 2.1.1 Hardware ................................................................................................................ 9 2.1.2 iOS ........................................................................................................................ 10 2.1.3 Jailbreaking .......................................................................................................... 11 2.1.4 iPod Touch ........................................................................................................... 11 2.2 iPhone 3G .................................................................................................................... 11 2.2.1 App Store.............................................................................................................. 11 2.3 iPhone 3GS .................................................................................................................. 11 2.4 iPhone 4 ....................................................................................................................... 12 2.4.1 Retina displej ........................................................................................................ 12 2.4.2 iPad ....................................................................................................................... 12 2.5 iPhone 4S ..................................................................................................................... 12 2.5.1 iOS 5.0 .................................................................................................................. 13 2.6 Důležité znalosti vývojáře ........................................................................................... 13 3 Vývoj aplikace
14
3.1 Specifika mobilní aplikace pro iPhone ........................................................................ 14 3.2 Vývojářská licence ...................................................................................................... 15 3.3 Xcode........................................................................................................................... 15 3.4 Uživatelské rozhraní .................................................................................................... 17 3.4.1 Základní prvky uživatelského rozhraní ................................................................ 17 3.4.2 Strategie návrhu aplikace ..................................................................................... 18 3.4.3 Způsoby vývoje uživatelského rozhraní ............................................................... 18
Obsah
6
3.4.4 Storyboards........................................................................................................... 19 3.5 Programovací jazyk Objective-C ................................................................................ 20 3.5.1 Automatic Reference Counting ............................................................................ 22 3.6 Systém uložení dat....................................................................................................... 22 3.6.1 Plist soubory ......................................................................................................... 22 3.6.2 SQLite databáze ................................................................................................... 22 3.6.3 CoreData............................................................................................................... 23 4 Implementace
24
4.1 Struktura dat ................................................................................................................ 24 4.1.1 Konverze použitých dat ........................................................................................ 25 4.2 Grafické uživatelské rozhraní ...................................................................................... 25 4.2.1 Obrazovka Zaznamenání nálezu .......................................................................... 27 4.2.2 Obrazovka Zaznamenání nálezu se souřadnicemi ............................................... 28 4.2.3 Obrazovka s uložením pozice .............................................................................. 29 4.2.4 Obrazovka Košík .................................................................................................. 30 4.2.5 Obrazovka Mapa nálezů ....................................................................................... 31 4.2.6 Obrazovka Atlas hub ............................................................................................ 32 4.2.7 Obrazovka Atlas hub detail .................................................................................. 33 4.2.8 Barevné schéma aplikace ..................................................................................... 34 4.3 Ukázky ze zdrojového kódu ........................................................................................ 34 4.3.1 Změna popisků v Tab bar ..................................................................................... 34 4.3.2 Přidání tlačítka do navigation bar......................................................................... 35 4.3.3 Načtení souboru s CoreData ................................................................................. 35 4.3.4 Načítání fotek do atlasu dle jména ....................................................................... 36 4.3.5 Optimalizované načtení atlasu hub ...................................................................... 36 4.3.6 Předávání dat mezi obrazovkami ......................................................................... 37 4.3.7 Formátování data .................................................................................................. 38 4.3.8 Nastavení zobrazených informací o houbě v buňce ............................................ 39
Obsah
5 Distribuce aplikace
7
40
5.1 Webová prezentace...................................................................................................... 40 5.2 App Store ..................................................................................................................... 40 5.3 Další možnosti šíření ................................................................................................... 41 5.4 Testování aplikace ....................................................................................................... 41 6 Závěr
42
6.1 Hodnocení technické ................................................................................................... 42 6.2 Hodnocení ekonomické ............................................................................................... 42 6.3 Další možný rozvoj ..................................................................................................... 43 7 Literatura
44
A Ukázky z vývojového prostředí
47
Úvod a cíl práce
8
1 Úvod a cíl práce 1.1
Úvod
Mobilní telefon je nedílnou pomůckou civilizovaného světa. S rozvojem informačních a telekomunikačních technologií už však nejde pouze o jednoúčelové zařízení. Jde o mobilní osobní počítač obsahující řadu senzorů, výkonem odpovídající stolním počítačům z doby před pár lety. Dostupný mobilní internet nabízí přístup k datům kdykoliv a odkudkoliv. Spolu s dostupností nástrojů pro vývoj aplikací pro tyto zařízení, lze vytvářet specializované aplikace. Dotykové ovládání umožňuje vytvářet taková grafická rozhraní, která ovládaní takovýchto aplikací nesmírně zjednodušuje a přibližuje i zcela laickému uživateli. Spolu s komplexním vyřešení distribuce, tak i samotný vývojář může vytvořit aplikaci, jež bude mít značný úspěch mezi miliony uživatelů.
1.2
Cíl práce
Cílem této práce je vytvořit aplikaci zprostředkující atlas hub. Aplikace bude dále využívat možnosti hardwaru zařízení, zde GPS technologie, pro možnost lokalizace a uložení aktuální polohy. V první části práce bude zmíněn historický vývoj platformy iPhone a jeho vliv na možnosti vývoje aplikací pro tuto platformu. Druhá část pak bude věnována samotnému vývoji aplikace od grafického rozhraní, výběru mechanismu pro uchovávání dat a základním principům vývoje aplikací. Třetí část se bude zbývat přímou implementací aplikace Atlas hub a popisu jejích důležitých částí. Čtvrtá část se bude zabývat mechanismem distribuce a propagace aplikace. Poslední závěrečná část bude obsahovat zhodnocení celé práce.
Historický vývoj platformy iPhone
9
2 Historický vývoj platformy iPhone Počátky Apple platformy pro mobilní zařízení lze datovat již od roku 1993. Prvotní produkt Newton Message Pad s operační systémem Newton OS byl na svou dobu technicky velmi moderním zařízením, avšak s vysokou cenou. Na trhu se neujal a výroba skončila roku 1998. (Hormby, 2006) Až roku 9. ledna 2007 byl na konferenci Macworld představen zcela nový produkt, mobilní telefon iPhone. Prezentaci vedl Steve Jobs, v tu dobu již ikonická osoba, která měla velký vliv nejen na vývoj celé budoucí mobilní platformy, ale i na samotné záchraně společnosti Apple. Ta byla právě kolem roku 1997 ve velmi těžké finanční situaci mimo jiné i vlivem nákladného vývoje platformy Newton. (Block, 2007)
2.1
První iPhone
Po prezentaci se zvedla vlna rozporuplných reakcí. Na jedné straně, komunita uživatelů Apple produktů, kteří po obdobném zařízení už dlouho volali. Stejně tak spousta uživatelů, pro které iPhone představoval snadnou cestu k užívání mobilního internetu a obsluhu emailů. Na straně druhé především výrobci zařízení z konkurenčních platforem, pro které byl Apple outsider a nevěřili, že zařízení může mít slibované funkce (Elektronista, 2010), či je příliš drahé na to, aby mělo komerční úspěch. 2.1.1
Hardware
Z hardwarového hlediska telefonu dominovala 3,5 palcová LCD obrazovka s kapacitní dotykovou vrstvou. Mimo tlačítek pro zapnutí a volby hlasitosti, případně vypnutí vyzvánění, zde bylo jediné tlačítko Home pro návrat na úvodní obrazovku. iPhone se ovládal dotyky prstů po displeji (v té době značná část konkurence používala rezistivní dotykové displeje a byla ovládaná pomocí stylusu). Operační systém iPhonu byl pro toto ovládání uzpůsoben a využíval i možnosti současného doteku více prstů (multitouch) pro definovaná gesta, například oddálení dvou prstů na obrazovce pro zoom v mapové aplikaci Maps. Naproti tomu telefonu záměrně chyběly některé prvky výbavy, pro konkurenční telefony typické. iPhone neměl výměnný zadní kryt, ani uživatelsky vyměnitelnou baterii. Taktéž neobsahoval slot pro paměťové karty, paměť měl vestavěnou 4GB nebo 8GB později i 16GB. Neobsahoval taktéž 3G modul pro využití rychlého mobilního internetu. (Block, 2007)
Historický vývoj platformy iPhone
Obr. 1
2.1.2
10
Chytré telefony před a po příchodu iPhonu na trh (iPhone uprostřed) Zdroj: Webová stránka Starved Fool, 2011
iOS
Operační systém se nazýval iPhone OS, později přejmenovaný na iOS. To po vyřešení licenčních sporů s firmou Cisco, která měla ochranou známku na svůj operační systém IOS používaný ve svých síťových prvcích. (Carvell, 2010) Pro prvotní verzi systému nebylo možné psát nativní aplikace. Aktivně byla podporovaná tvorba webových mobilních aplikací. Tedy specificky upravených webových stránek pro běh ve webovém prohlížeči Safari, postaveném na jádře WebKit. Nemožnost oficiálně instalovat nativní aplikace obcházela metoda pro získání přístupu k souborovému systému a kořenové oprávnění, jailbreaking. (Matoušek, 2011)
Historický vývoj platformy iPhone
2.1.3
11
Jailbreaking
Je metoda využívající většinou bezpečnostní chybu pro eskalaci uživatelských práv. Uživatel má pak přístup k souborovému systému a může instalovat aplikace třetích stran. Komunitou vývojářů byl díky němu tvořeny nativní aplikace a vytvořen obchod Cydia, kde jsou tyto aplikace nabízeny. Jailbreak byl soudem uznán v roce 2010 legální pro občany Spojených Států. (German, 2010) 2.1.4
iPod Touch
V roce 2007 byl uveden další nesmírně důležitý produkt pro Apple mobilní platformu. Byl jím iPod Touch, vzhledově velmi podobný telefonu iPhone. Neobsahoval telefonní modul, tím však nepotřeboval drahý úvazek mobilnímu operátorovi. (nutný pro iPhone především ve Spojených Státech) Za znatelně nižší cenu tak rozšiřoval dostupnost celé platformy. Používal totiž stejný operační systém jako iPhone. Často se při srovnávacích statistikách tento produkt nezahrnuje, ač má na populárnost celé platformy značný vliv.
2.2
iPhone 3G
Další model byl uveden 11.července 2008. Byl jím iPhone 3G, hlavní rozdíly pak byla přidaná podpora pro 3G mobilní data, asistovaná GPS a především nová verze operačního systému, iOS 2.0. Tento systém byl uvolněn i pro originální iPhone a iPod Touch. Jendou z největších nových funkcí byl App Store. 2.2.1
App Store
Jednotné místo pro výběr a nákup software třetích stran. Je to jediné místo, které je podporované společností Apple. V okamžiku spuštění zde bylo zhruba 500 aplikací. V roce 2011 se jich nabízí více než 500 000. (Ricker, 2008) Aplikace musí projít kontrolou společností Apple. Tento kontrolní proces se stal poněkud kontroverzní, díky nejasným důvodům pro odmítnutí aplikace či omezením, která to na vývojáře aplikace klade.
2.3
iPhone 3GS
Uveden 8.června 2009, vzhledem takřka identický s iPhonem 3G. Uvnitř obsahoval rychlejší procesor, vetší operační paměť a nový digitální kompas. S novým hardwarem přišel i nový operační systém, opět dostupný pro předchozí modely a iPod Touch. Některé jeho funkce však byly dostupné pouze pro model iPhone 3GS, díky hardwarové náročnosti. Takovou funkcí byl např. Voice Control, pro základní ovládání hlasem nebo VoiceOver hlasový pomocník pro tělesně postižené. (Apple Inc., 2009)
Historický vývoj platformy iPhone
2.4
12
iPhone 4
S ročním odstupem byl 7. června 2010 uveden vzhledem zcela odlišný model. Ocelová obruba sloužící zároveň jako anténa či oboustranný skleněný kryt byl konstrukčně unikátní. Mimo další zvýšení výkonu, videohovory, gyroskopický senzor představuje iPhone 4 především inovovaný Retina displej. 2.4.1
Retina displej
Je marketingový název pro displej, který využívá předpokladu, že obraz s hustotou 300 ppi ve vzdálenosti 12 palců od oka pozorovatele, hraničí s fyzickou schopností oka rozlišit jednotlivé pixely. Rozlišení iPhonu 4 je 960x640 pixelů na 3,5 palcovém LCD, tedy s hustotou 326 ppi. Aplikace musí být pro toto rozlišení uzpůsobeny. Tím, že jde o dvojnásobek rozlišení v původních modelech se tak starší aplikace poměrně snadno dají přetvořit na aplikace s podporou Retina displeje. (Brandrick, 2010) 2.4.2
iPad
Ještě před uvedením iPhonu 4 byl 27. ledna 2010 uveden první moderní tablet společnosti Apple. Vzhledově velmi připomínal zvětšený iPhone 3GS s hliníkovým zadním krytem. Využívá taktéž operační systém iOS. Vývoj aplikací je pro něj specifický. Přestože na něm lze spustit aplikace pro iPhone ve zvětšeném režimu, upřednostňuje se navržení grafického rozhraní uzpůsobené velikosti obrazovky iPadu, tedy 9,7 palců s rozlišením 1024x768 pixelů. S vlastním uváděcím cyklem se představil 12. května 2011 i jeho nástupce, iPad 2. Vzhledově opět podobný, i když tenčí a lehčí. Sjednotil použití shodné verze operačního systému s iPhonem.
2.5
iPhone 4S
Představen 4. října 2011 porušil roční uváděcí cyklus. Vzhledem opět takřka identický s předchozím modelem. Nabízí anténu schopnou pracovat v GSM i CDMA sítích, násobně vyšší výkon především u graficky náročných aplikací, výrazně přepracovaný fotoaparát a rozšířené hlasové ovládání.
Historický vývoj platformy iPhone
Obr. 2
2.5.1
13
Podoba současného modelu iPhone s běžícími aplikacemi Zdroj: Webová stránka Apple, 2011.
iOS 5.0
Společný systém pro všechna mobilní zařízení platformy. Tedy iPhone, iPad a iPod Touch. Obsahuje řadu nových uživatelských funkcí. Především nevázanost na stolní nebo přenosný počítač se softwarem iTunes, bezdrátové zálohování a synchronizaci. Vývojáři zpřístupňuje pomocí nových API např. pokročilé ovládání fotoaparátu. (Dante, 2011) Ukončuje podporu pro některá starší zařízení. iPhone 3G a iPod Touch druhé generace tak podporuje pouze iOS verze 4.2.1.
2.6
Důležité znalosti vývojáře
Vývojář by měl mít znalost o hardwarových a softwarových možností všech modelů. Vybavení jako např. GPS obsahuje jen určitá část zařízení celé platformy, aplikace však může být nabízena i pro ostatní zařízení pokud GPS není pro aplikaci stěžejní, musí to však být ve zdrojovém kódu patřičně ošetřeno. Podobně i možnosti určitých verzí operačního systému iOS limituje rozsah zařízení na které pak půjde aplikace nainstalovat. Vývojář by si měl určit, od které verze operačního systému, a které zařízení z platformy bude podporovat. Tomu musí přizpůsobit grafické rozhraní aplikace, či vytvořit několik verzí aplikace pro jednotlivé zařízení. Vlivem rychlého vývoje bude muset průběžně aplikaci upravovat, aby podporoval nové operační systémy, či využil funkce nových zařízení.
Vývoj aplikace
14
3 Vývoj aplikace Tato část práce se bude věnovat vývoji aplikací pro zařízení iPhone, případně iPod Touch, z platformy Apple mobilních zařízení. Postupy jsou až na jistá specifika shodná i s vývojem pro tablet iPad. Přestože jde vyvíjet i pomocí jiných postupů či nástrojů, jde opět o specifické případy a obecně nedoporučované postupy. Platforma iPhone používá jako programovací jazyk Objective-C spolu s frameworkem CocoaTouch. Vývoj aplikace se provádí v aplikaci Xcode a testuje v aplikaci iPhone Simulator. Pro vývoj je nutné být registrovaný vývojář společnosti Apple. Při vývoji je třeba mít na zřeteli jisté omezení běhu aplikací v operačním systému iOS. Zdrojový kód aplikace je vhodné psát v anglickém jazyce, zjednodušení to sdílení kódu v případě problémů, jelikož zahraniční komunita vývojářů je mnohem větší.
3.1
Specifika mobilní aplikace pro iPhone
Výkon mobilního zařízení Přestože každý rok výkon v procesní a grafické oblasti násobně roste, je potřeba počítat s omezenými prostředky zařízení. Zvláště pokud vývoj probíhá na výkonné pracovní stanici může testování pouze v simulátoru zatajit vážné nedostatky v oblasti výkonu a odezvy aplikace. Proto je nezbytné testovat aplikaci na samotném zařízení, ideálně na všech zařízení platformy, pro které bude aplikace podporována. Sandboxing Sandboxing je systémové omezení přístupu aplikací k ostatním aplikacím a systému samotnému. Aplikace tak má přístup pouze k souborům z předem určených lokací. To zvyšuje bezpečnost, jelikož škodlivá aplikace nemá přístup např. k systémovým složkám, naproti tomu to může znemožnit užitečné funkce aplikace. Typicky pokud by jsme chtěli pracovat s daty jiné aplikace nebo vytvořit systémovou službu společnou pro více aplikací. (Apple Inc., 2011) Multitasking Současná verze iOS nabízí možnost spuštění více aplikací a přepínání mezi nimi. Uživatel může operovat pouze s jednou aplikací přes její grafické rozhraní. Pokud se z aplikace přepne na jinou, její stav se uloží a aplikace dále neběží. Po přepnutí zpět se aplikace obnoví ve stavu, kdy byla ukončena. Některé služby jako GPS, či stahování mohou přesto běžet v pozadí. (Apple Inc., 2011)
Vývoj aplikace
15
Aplikace může být kdykoliv ukončena Na vývojáře toto chování klade požadavek, že aplikace může být kdykoliv ukončena případně hibernována. Má tedy omezený čas uložit aktuální data momentálního stavu aplikace a posléze do tohoto stavu zpětně obnovit pokud uživatel zpět aplikaci obnoví. Ve stavu hibernace o ukončení rozhoduje operační systém podle potřeby systémových zdrojů.
3.2
Vývojářská licence
Pro vývoj aplikace je nutná aplikace Xcode a další součásti SDK1. To je možné získat přes webové stránky http://developer.apple.com. Apple odděluje vývojáře pro mobilní iOS platformu a Mac platformu specifikou licencí. Pro vývoj na iOS platformě licence dále rozděluje na iOS Developer Program Standardní program za 99 USD ročně. Zahrnuje přístup k betaverzím Xcode a SDK. Umožňuje testovat na vlastním zařízení a především nabízet aplikace v Apple App Store, ať již zdarma nebo placené. iOS Developer Enterprise Program Obdobně jako standardní program, jen místo App Store umožňuje specifickou formu distribuce pro aplikace tvořené na zakázku. Především tedy aplikace pro firmy, vládu nebo školství. Stojí 299 USD ročně. iOS Developer University Program Speciální program pro školství. Je zdarma, ale umožňuje pouze vývoj a testování bez uvedení do App Store. Je určen pro školy, které mají v osnovách právě výuku programovaní na iOS platformě a musí být smluvně ošetřen. Během historického vývoje platformy se i vývojářské licence měnily. Nejčastěji je potřeba právě placená verze. Především, pokud chce vývojář aplikaci nabízet pomocí App Store a to i zdarma, musí počítat s ročním poplatkem.
3.3
Xcode
Xcode je kompletní vývojové prostředí používané pro vývoj aplikací pro všechny platformy společnosti Apple. Spolu s rozvojem platformy iPhone došlo také k razantním změnám v prostředí Xcode. Především verze Xcode 4.0 doznala radikálních změn, jak ve svém grafickém rozhraní, tak i k samotnému přístupu k vývoji aplikací. Xcode je podporován pouze na
Vývoj aplikace
16
operačních systémech OS X, pro vývoj aplikací je tedy navíc nezbytné používat Apple hardware. Pro použití nových funkcí nebo přístupů k návrhu aplikace je často nutná kombinace konkrétních verzí Xcode, SDK a iOS na podporovaném zařízení. Ekosystém vývoje je tedy velice těsný, obzvláště pokud vývojář chce používat nejmodernější způsoby vývoje. Základní prvky vývojového prostředí se kterým bude vývojář pracovat jsou Editor s Asistentem Podporuje pokročilé doplňování kódu a díky inovovanému kompilátoru LLVM nabídne automatické opravy některých chyb v kódu. Asistent zobrazuje relevantní soubory podle právě zobrazeného kódu. Interface builder Dříve samostatná aplikace, od verze 4.0 vestavěný do Xcode. Pomocí něj se vytváří grafické rozhraní aplikace. Umožňuje pokročilou interakci s vlastnostmi objektů a návaznost do kódu aplikace. iOS Simulator Umožňuje simulaci běhu aplikace na vývojové stanici. Je možný výběr cíleného zařízení i se specifickým displejem. Tedy například iPhone s Retina displejem nebo iPad. Je možné také simulovat některá gesta např. zatřesení nebo funkce jako GPS. Na aplikaci je tak možné pohodlně testovat její základní chování. Jak bylo zmíněno dříve, pro skutečný test odezvy aplikace či využití dalších funkcí je nezbytné testovat na skutečném zařízení. Organizer Speciální samostatná aplikace pro správu vývojářského profilu a především pro správu testovacích zařízení. Každé zařízení se před testováním musí registrovat pomocí získané vývojářské licence. Obsahuje také soubory s log informacemi při pádu aplikace na zařízení. A to, jak pro testovací, tak pro všechny ostatní aplikace na zařízení.
___________________________ 1
SDK – Software Development Kit je skupina nástrojů pro tvorbu aplikací na danou platformu
Vývoj aplikace
3.4
17
Uživatelské rozhraní
Při vývoji pro mobilní platformy je nesmírně důležité správně navrhnuté uživatelské rozhraní. Mobilní zařízení je typicky omezené velikostí obrazovky a způsobem interakce s obsahem na obrazovce. Současné populární platformy pro mobilní zařízení se poměrně liší důrazem na integritu zobrazení a chování ovládacích prvků. Platforma iPhone zde velmi těží z toho, že byla od počátku navržena pro zobrazení a ovládání obsahu pouze přes displej zařízení, tedy pomocí samotného softwaru. Je zde jediné hardwarové tlačítko Home pro odchod z jakéhokoliv stavu aplikace na domovskou obrazovku. V momentu běhu aplikace se tak celé zařízení metaforicky stává aplikací. Zvláště při použití jednoúčelových aplikací jako Kalkulačka, Slovník, Vodováha dává zařízení pocit jako by bylo přímo navržené pouze pro tuto činnost. 3.4.1
Základní prvky uživatelského rozhraní
Návrh rozhraní používá specifické názvosloví pro jednotlivé prvky. Pro většinu základních aplikací si vývojář vystačí se systémovými UI prvky2, kde má navíc možnost měnit jejich vzhled. Pro tvorbu her se pak používají jiné postupy návrhu grafického rozhraní, většinou neobsahující standardní UI prvky. Zde je potřeba použití speciálních grafických knihoven. (Apple Inc., 2010) Status bar Obsahuje základní systémové údaje jako čas, síla signálu připojení a stav baterie. Nemusí být vždy viditelný. Obrazovka (screen) Každá aplikace používající standardní UI prvky se skládá ze skupiny obrazovek, kde každá osahuje další prvky. Uživatel pak přechází mezi jednotlivými obrazovkami. Navigation bar Umístěný ve vrchní části obrazovky pod Status barem. Do něj se umísťují tlačítka pro přechod k jiným obrazovkám aplikace či jiné vývojářem definované chování.
___________________________ 2
UI prvek – User Interface prvek, je základní součást grafického rozhraní. Tvoří jej tlačítka, popisky, textová pole a další složitější objekty
Vývoj aplikace
18
Tab bar Umístěn ve spodní části obrazovky. Obsahuje ikony oddělující základní funkce aplikace a po stlačení umožňují přechod k jejich obrazovkám Toolbar Nachází se ve stejné poloze jako Tab bar a obsahuje vývojářem definovaná tlačítka nebo ovládací prvky. Tableview / Imageview Jsou základní prvky pro zobrazení dat v aplikaci. Tableview většinou dále obsahuje další prvky jako popisky, tlačítka nebo obrázky. 3.4.2
Strategie návrhu aplikace
Apple na svém vývojářském portále nabízí řadu dokumentů, které mají vývojářům usnadnit vývoj aplikace. Jedním ze základních je pak iOS Human Interface Guidelines. Je to seznam doporučených strategií návrhu aplikace, jak ze vzhledové, tak i funkční a filozofické podoby. (Apple Inc., 2010) Důraz je kladen především na 1.
2. 3.
4.
3.4.3
Stanovení funkcí aplikace dle očekávaných potřeb cílových uživatelů. Aplikace pokud možno navrhovat jednoúčelové. Každá obrazovka aplikace by pak měla přesně definovat činnost jakou lze vykonávat. Návrh grafického rozhraní speciálně pro každé cílené zařízení. Využívat všech specifických funkcí, jež konkrétní zařízení nabízí. Využívání standardních UI prvků a chování. Tedy aby např. tlačítko bylo rozeznatelné. Vzhled rozhraní by měl sám napovídat jak aplikaci používat, vyvarovat by se mělo dlouhých textů nápovědy v aplikaci. Uzpůsobení designu aplikace úkolu. Pro aplikaci vodováhy tak např. zobrazit libelu se vzduchovou bublinou. Uživatel zná předmět z reálného světa a ihned mu bude jasné jak aplikace funguje. Způsoby vývoje uživatelského rozhraní
V praxi se pro vývoj uživatelského rozhraní používá několik způsobů, či jejich kombinací. Postupy se liší podle typu aplikace, především hry mají specifický přístup. Záleží také na konkrétnosti zadání či představě o aplikaci. (Iphonized, 2009)
Vývoj aplikace
19
Ručně kreslené poznámky Překvapivě efektivní metoda pro rychlý náčrtek myšlenek, způsobů návaznosti obrazovek, rozložení jednotlivých ovládacích prvků a zobrazení informací. Při práci v týmu, chybí jistá jednotnost návrhů a bez digitalizace je problematické i šíření a zálohování. Pomůcky pro kreslené návrhy Vlivem popularity platformy iPhone vzniklo několik komerčních produktů pro usnadnění kreslených návrhů. Jedná se o speciální sešity a bloky s listy formátovanými jako iPhone obrazovky, zde stačí pak jednotlivé prvky dokreslit pomocí kovových šablon. Jednotlivé návrhy tak mají ustálenou štábní kulturu a lépe odpovídají skutečné aplikaci, včetně reálných rozměrů rozhraní. Digitální wireframes Existuje řada předpřipravených šablon pro známé profesionální grafické aplikace. Pomocí nich lze velmi rychle připravit reálnou podobu výsledné aplikace, včetně vlastního designu ovládacích prvků, který je možno možno exportovat a ve výsledné aplikaci přímo použít. Digitální interaktivní návrhy O třídu výše je pak použití digitálních grafických návrhů pomocí populárních prezentačních aplikací Keynote, Powerpoint nebo specializovaného softwaru navrženého přímo pro tuto činnost. Existuje i řada webových nástrojů pro tento účel. Mimo navržení rozmístění prvků lze definovat přechody a interakce mezi jednotlivými prvky. Výhodou je snadné šíření a možnost diskuze nad návrhy a jejich následná jednoduchá úprava. Pro malé projekty je časová a finanční náročnost zvládnutí celého workflow návrhu po implementací spíše přítěží. Často je rychlejší měnit rozhraní přímo v kódu při psaní aplikace. 3.4.4
Storyboards
Další velká inovace systému iOS od verze 5.0. Spojuje dříve jednotlivé soubory .nib (nyní nazývané .xib, jelikož jsou nově založeny na XML formátu) s návrhem uživatelského rozhraní do jednoho. Umožňuje graficky provádět vazby mezi jednotlivými obrazovkami a tím i vytvořit grafický model celé aplikace. Umožňuje provádět animované přechody mezi obrazovkami tzv. segues. (Wenderlich, 2011) Velmi lehce se dá pracovat s rozvržením zobrazení informací v UI prvcích, jako jsou tableviews nebo modifikovat některé vzhledové aspekty prvků. Storyboards je stále ve vývoji, proto zatím není možné upravovat všechny vlastnosti UI prvků a některé změny se tak musí provádět ručně v kódu.
Vývoj aplikace
3.5
20
Programovací jazyk Objective-C
Programovací jazyk vytvořili Brad Cox a Tom Love již v roce 1986. Šlo o spojení syntaxe obdobné Smalltalku (jeden z prvních rozšířených objektových jazyků vůbec) spolu se známým jazykem C. V roce 1988 byl jazyk licencován společností NeXT a byl použit jako základ aplikačního frameworku NeXTStep. Po sloučení společností NeXT a Apple se toto rozhraní využilo pro framework Cocoa, tedy framework, který se dnes používá v obměnách jak na stolních tak mobilních platformách společnosti Apple. Odtud také pochází pojmenování tříd předponou NS – to značí NeXTStep. (Neuburg, 2011) V Objective-C tedy je typ instance definován jeho třídou. Objective-C pro toto hojně využívá ukazatele. Jako typ tedy slouží ukazatel na danou třídu. Pokud tedy chceme vytvořit proměnou která obsahuje nějakou větu. NSString* s = @"Toto je testovací věta.";
Pro volání metody se používají hranaté závorky. NSString* sUpperCase = [s uppercaseString];
Běžně tedy pracujeme s ukazateli, což má svá specifika, ale v celém jazyku se tento přístup používá konstantně, proto to po zvyknutí nečiní větší potíže. Základní konstrukcí aplikace je pak objekt. Kombinuje data spolu s funkčností do oddělených celků. Při správném návrhu struktury jej lze vhodně opakovaně používat. Pro implementaci je nutný hlavičkový soubor obsahující část @interface a implementační soubor obsahující část @implementation Soubor Objekt.h obsahuje data a metody viditelné pro ostatní objekty @interface MyObject : NSObject @property (nonatomic, strong) NSString *text; // proměnná viditelná pro ostatní objekty -‐ (void)myMethod; @end
Vývoj aplikace
21
Soubor Objekt.m pak obsahuje implementační detaily těchto metod #import "MyObject.h" @implementation MyObject { int count; } @synthesize text; -‐ (id)init { if ((self = [super init])) { // akce při inicializaci } return self; } -‐ (void)myMethod { // akce metody } @end
Pokud chceme použít objekt v nějaké části aplikace, typicky v jiném objektu musíme jej předtím naimportovat #import "MyObject.h"
V hlavičkovém souboru si lze všimnout konstrukce @property. Ta je zde pouze k usnadnění zápisu proměnné. Metody pro získání a zapsání hodnoty proměnné doplní překladač a nemusí se psát ručně. Celá konstrukce je tedy, v hlavičkovém souboru @property (nonatomic, strong) NSString *text;
a poté v implementačním souboru @synthesize text;
Vývoj aplikace
3.5.1
22
Automatic Reference Counting
ARC je jedna z nevětších změn systému iOS verze 5.0. Ve skutečnosti jde spíše o vlastnost nového kompilátoru Clang/LLVM. Ten nahrazuje velmi známý kompilátor GCC. Ve zkratce jde o metodu odstraňující nutnost manuálního ošetření memory managementu3 aplikace. (Wenderlich, 2011) Používá se velmi snadno, stačí nastavit v projektu použití ARC a dále, až na speciální případy, nepoužívat metody retain, release a autorelease. Překladač si je vhodně doplní sám. Vývojové prostředí Xcode (od verze 4.2) umožňuje konverzi starších projektů. ARC zčásti nahrazuje garabage collector4 známý především z Javy. Přestože jazyk Objective-C od verze 2.0 garbage collector také obsahuje, není jeho použití na mobilní platformě povoleno kvůli vysoké výkonnostní náročnosti. Naproti tomu ARC je implementován během překladu aplikace. Výsledný kód tedy použití ARC nijak nezpomaluje.
3.6
Systém uložení dat
Na platformě iPhone se data v praxi ukládají několika způsoby. Každý má své výhody a omezení. Na začátku každého projektu by se proto měl zvolit vhodný způsob. Je možné i způsoby kombinovat, pokud to přinese zřejmé výhody, ale obecně je lepší se držet jedné metody. Metody obsluhující práci s daty se tak mohou používat napříč celou aplikací jednotně. 3.6.1
Plist soubory
Nejjednodušší metoda, pokud nepočítáme uložení přímo ve zdrojovém kódu. Zvolené data se uloží do souboru na disku. Standardně se .plist (property list) soubor u aplikace nachází jako systémový soubor pro popis aplikace, požadavcích na spuštění atp., nicméně lze tuto strukturu využít i pro ukládání dat ve formě klíč-hodnota. Na složitější aplikace s potřebou třídění nebo vyhledávání dle více parametrů se tato metoda nehodí. 3.6.2
SQLite databáze
Velmi často užívaná metoda. Data jsou uložená v SQLite5 databázi, ta je opět implementovaná jedním souborem .sqlite3 na disku. S touto databází můžeme standardně pracovat například přes systémový terminál. Tvořit schémata, plnit data, či editovat stávající data. (Alessi, 2010) ___________________________ 3
memory management – snaha o optimální alokování paměti dle potřeby aplikace a její následné uvolnění garbage collector– je forma automatického memory menagementu prováděném za běhu aplikace 5 SQLite –je relační databázový systém obsažený v knihovně napsané v jazyku C. 4
Vývoj aplikace
23
Přímá podpora Cocoa Touch frameworku však chybí, proto je nutné při práci s SQLite v aplikaci použít struktury jazyka C. Jelikož je jazyk Objectiv-C ANSI implementací jazyka C, není v tom žádný problém. Avšak v případě kdy by jsme chtěli používat ARC, část kódu psaném v C musíme ošetřit ručně. Na práci s SQLite je proto vhodné použít jeden z více dostupných frameworků, vytvořených samotnými vývojáři, přes který můžeme s databází pracovat pomocí objektů. 3.6.3
CoreData
CoreData je data model framework vytvořený společností Apple pro práci s daty. Zjednodušeně by šel popsat jako graf objektů přímo zapsaný na disk. Vnitřně ho obsluhuje SQLite databáze. Navenek je implementován pomocí MVC6 vzoru. Vývojář tak nepracuje se SQL příkazy ale s objekty. Ty jsou tvořeny v paměti zařízení. Některé základní konstrukce pro uložení, načtení a vyhledávání v datech jsou poměrně jednoduché. CoreData je doporučovaná metoda pro vývojáře a přestože naučit se s frameworkem pracovat zabere vývojáři jistý čas, jedná se o takřka nezbytnou součást moderního vývoje aplikací. (Alessi, 2010)
___________________________ 6
Model-View-Controller– je softwarová architektura, která rozděluje datový model aplikace, uživatelské rozhraní a řídicí logiku do tří nezávislých komponent tak, že modifikace některé z nich má minimální vliv na ostatní.
Implementace
24
4 Implementace Pro vývoj aplikace byly zvoleny právě nejnovější postupy umožněné systémem iOS verze 5.0. Situaci komplikoval fakt, že většina materiálů popisuje tvorbu aplikací pomocí konstrukcí bez těchto nových postupů a možností. Samozřejmě je stále možné psát aplikace dle starých zvyklostí, mnohé nové postupy však značně ulehčují vývoj.
4.1
Struktura dat
Jelikož základem aplikace je databáze jednotlivých druhů hub, bylo zapotřebí vybrat vhodnou strukturu pro uchování těchto dat. Reálně se dalo uvažovat pouze mezi SQLite a CoreData. Po krátké úvaze byla zvolena CoreData. CoreData pracují s vyšší abstrakcí a umožňují jednoduchou implementaci základních funkcí bez potřeby opouštět Objective-C jazyk. Dále podporují Automatic Reference Counting, tedy zjednodušuje i memory management. Poměrně jednoduchým způsobem se dá optimalizovat i výkon aplikace, což bylo pro Atlas hub využito. Nejprve je nutné vytvořit objektový model struktury dat. To se dá provést přímo v Xcode v určeném nástroji. Pro celou aplikaci je potřeba pouze dvou tabulek. Tabulka Mushroom obsahuje atributy popisující vlastnosti dané houby. Tabulka Location pak popis uložených lokací. Mezi tabulkami nejsou potřeba žádné vazby.
Obr. 3
Podoba tabulek popisující datový model Zdroj: Vývojářské prostředí Xcode
Tabulka Location se bude plnit až v době běhu programu. Naopak tabulku Mushroom musíme naplnit vlastními daty již v době vývoje. Jako data byly použity materiály z webových stránek http://www.houbareni.cz. Data je ovšem před použitím nutné zkonvertovat a to hned několikrát.
Implementace
4.1.1
25
Konverze použitých dat
Obr. 4
Graf konverze použitých dat
Z webových stránek byla data převedena do souboru SQLite. K tomu bylo použito standardních SQLite příkazů. Pro tento SQLite soubor bylo nejprve vytvořeno schéma tabulky Muschrooms odpovídající tabulce Mushroom v Xcode. Samotný vklad jednotlivé houby byl poté provedené příkazem (příkaz zkrácen) insert into Mushrooms (name,latin,status,grow_from,grow_to,mushroom_info, grow_info) values ( zde hodnoty v uvozovkách oddělenými čárkami );
Vklad po jedné hodnotě se prováděl z důvodu nutných textových úprav zdrojového materiálu do žádané podoby. Z webového zdroje se tak vybírala jen data vhodná dle schématu tabulky Mushrooms. Po naplnění byl získán SQLite soubor, který by šel již přímo použít v aplikaci, kdyby nebylo zvoleno použití CoreData. CoreData jsou sice založena na SQLite souboru, ale s vlastní strukturou, která neodpovídá tabulce Mushroom vytvořené v Xcode. Pro naplnění daty je tedy nutné nejprve vytvořit duplikát souboru CoreData.sqlite, ten posléze naplit daty z námi připraveného souboru Atlas.sqlite3 a následně vynutit jeho inicializaci při startu aplikace. Pro převod dat do CoreData.sqlite byl použit skript transformaceCoreData.py napsaný v jazyce Python, spouštěný přes terminál. Tento skript se vypořádá s rozdílem schémat a připraví soubor CoreData.sqlite pro použití.
4.2
Grafické uživatelské rozhraní
Pro základní náčrt aplikace bylo použito ručně kreslených návrhů. Ty se ukázaly jako nejrychlejší metoda pro zpracování nápadů, které se navíc zpočátku často měnily, než se ustálily. Použití metod zahrnující softwarové vybavení by v této fázi zbytečně komplikovalo vývoj, zvláště když nebylo třeba konzultovat s třetí stranou vzhled aplikace.
Implementace
26
Následně bylo použito nové metody Storyboards. Kreslené návrhy se převedly do grafického modelu aplikace, který byl užitečný pro následné přidávání funkčnosti. Storyboards se tak ukázala jako velice produktivní metoda návrhu grafického rozhraní. Umožňuje přidávat celé obrazovky s vazbami mezi sebou, takže je srozumitelná i logika přechodů mezi jednotlivými obrazovkami navzájem. Celý grafický model je ukázán na Obrázku č.5.
Obr. 5 Storyboards, grafický model aplikace Zdroj: Vývojové prostředí Xcode, 2011
Následuje detailní popis rozhraní aplikace, kde jsou zároveň popsány všechny funkce aplikace, případně důvody proč byl zvolen určitý UI prvek a jeho umístění na obrazovce.
Implementace
4.2.1
27
Obrazovka Zaznamenání nálezu
Obr. 6
Obrazovka Zaznamenání nálezu
Po spuštění je na první pohled zřejmá základní funkčnost aplikace. K tomu byl použit UI prvek Tab bar, ve kterém jsou slovně i graficky vyobrazené sekce, které aplikace obsahuje. Jako výchozí je nastaven panel pro uložení nálezu. Je to totiž akce, která se od uživatele čeká nejčastěji. Protože, kdyby byl jako startovní vybrán panel jiný a uživatel by musel udělat o jeden dotek navíc, by mohl být při častém užívání aplikace frustrován. Vývojář by se měl snažit minimalizovat počet nutných úkonů uživatele pro jakoukoliv akci. Na obrazovce tedy dále nalezneme jediné tlačítko pro akci zjištění polohy. Obrázek loga aplikace je zde pouze jako dekorace. Po stisknutí tlačítka proběhne krátká animace. Logo se odkutálí bokem, aby tak udělalo místo pro užitečné informace. Ve skutečnosti aplikace přejde na novou obrazovku. Pro uživatele je však decentní animace poutavý prvek vytvářející vazbu k aplikaci. Jelikož je tato animace po spuštění vidět pouze jednou, protože u dalších vyhledávání pozice se vychází už další obrazovky, neobtěžuje uživatele. Tyto drobné nuance, ukazují péči vývojáře, a jsou znakem dobře implementované aplikace.
Implementace
4.2.2
28
Obrazovka Zaznamenání nálezu se souřadnicemi
Obr. 7
Obrazovka Zaznamenání nálezu se souřadnicemi
Viditelná po prvním příkazu na zjištění polohy uživatele. Doba zjišťování polohy je pevně nastavena na 10 sekund. Po tuto dobu se aktualizuje zeměpisná šířka a výška, pokud dochází k přesnějšímu nálezu polohy. Případně je možné zjišťování polohy zastavit stisknutím na tlačítko Zjistit polohu (to má v době zjišťování popis Přerušit). Konečně může uživatel zjištěnou polohu uložit, to umožní přístup k další obrazovce. Je důležité si uvědomit že iPhone pracuje s omezenými zdroji, především co se kapacity baterie týče. Vyhledávání GPS pozice je energeticky velmi náročná činnost. Proto se jej snažíme všemi prostředky zkrátit. Získat přesnou polohu je ale také časově náročné a zde musíme brát ohled na uživatele, nabídnout mu možnost akci přerušit a zobrazit nějaký stav průběhu akce.
Implementace
4.2.3
29
Obrazovka s uložením pozice
Obr. 8
Obrazovka s uložením pozice
Po potvrzení volby uložení pozice po jejím nalezení se uživateli nabídne možnost přidat další detaily nálezu. Po doteku na pole pro popis místa se zobrazí standardní virtuální klávesnice pro zadání textového popisu nálezu nebo místa nálezu. V panelu je zobrazeno datum nálezu a typ nálezu, což je zároveň tlačítko, jež zobrazí obrazovku s možnostmi výběru kategorie nálezu. Mimo kategorie houby si tak může uživatel odlišit nález malin, borůvek, černého bezu atp. Podobným způsobem je implementovaná funkce přidání fotky, zde se uživateli objeví možnost pořídit fotku vestavěným fotoaparátem nebo použít fotku z knihovny v zařízení, tedy například pořízenou někdy dříve nebo staženou z webových stránek. Dále je zde zaznamenána uchovaná zeměpisná šířka a výška, pokud by ji uživatel chtěl použít v jiném zařízení nebo programu, který přímé zadání souřadnic umožňuje.
Implementace
30
V UI prvku navigation bar jsou pak dvě tlačítka pro potvrzení nebo zrušení nálezu. Bez jedné z těchto akcí nemůže uživatel obrazovku opustit, proto by se nemělo stát, že přijde nechtěným dotykem na jiný UI prvek (kdyby byl nabízen) o zaznamenaná data. Po odsouhlasení nebo zrušení tak opětovně přejde na obrazovku Zaznamenání nálezu se souřadnicemi, aby mohl přidat další nález. Je předpoklad, že bude zadávat několik nálezů za sebou nebo v krátkém časovém rozmezí. 4.2.4
Obrazovka Košík
Obr. 9
Obrazovka Košík
Obrazovka využívá UI prvku tableview pro zobrazení seznam uložených pozic. Pro lepší rozlišení a vizuální přitažlivost využívá uložených fotografii pro zobrazení malého náhledu. Dále ukazuje text popisku a datum nálezu. Na obrázku jsou zobrazena ukázková data, jimiž byla testovaná aplikace naplněna.
Implementace
31
Jednotlivé buňky slouží navíc jako tlačítka pro přístup k editaci nálezu. K tomu je vhodně použita právě Obrazovka s uložením pozice. Pokud je to možné, je vhodné znovu využívat jednou vytvořené obrazovky nebo zdrojový kód. Obrazovka nabízí jednu skrytou akci. Tou je možnost smazání uložené pozice. Horizontálním přejetím prstu po buňce se zobrazí tlačítko pro smazání, které po stisknutí záznam smaže. Díky použití standardního UI prvku je tato funkcionalita poměrně snadno implementována a odpovídá i standardnímu chování v jiných aplikací, především těch systémových. Velice elegantně tak vyřeší funkci smazání bez omezení přehlednosti obrazovky. Navíc evokuje v uživateli jistou známost chování aplikace, jelikož se chová stejně, jak je zvyklý z aplikací jiných. To dodává konzistenci i celé platformě. 4.2.5
Obrazovka Mapa nálezů
Třetí panel zobrazuje mapu s výskytem uložených nálezů. Nálezy jsou zobrazeny symbolem špendlíku zapíchnutého do své polohy na mapě. Po stisknutí na jeho hlavičku se zobrazí malé okno s popisem a kategorií nálezu spolu s tlačítkem pro přechod na tento nález. Samotné měřítko mapy lze upravovat pomocí gesta dvěma prsty, obdobně jak je na platformě obvyklé. Testované nálezy na obrázku jsou lokalizovány na západním pobřeží Spojených Států. Je to dáno funkcí iPhone Simulátoru, která u testování GPS funkcionality přiřazuje náhodné lokace obchodů společnosti Apple. Na obrazovce se v UI prvku navigation bar nalézají ještě dvě tlačítka. To vlevo slouží pro zobrazení oblasti mapy kde se nacházejí nálezy. Tedy uzpůsobí měřítko mapy, tak aby se na ni vešly všechny nálezy. Pravé tlačítko slouží pro zobrazení aktuální pozice uživatele a tím umožnění navigace k místu nálezu.
Obr. 10
Obrazovka Mapa nálezů
Implementace
4.2.6
32
Obrazovka Atlas hub
Čtvrtý panel obsahuje zobrazení atlasu hub, tedy hlavní funkce aplikace. Zde se promítají data vytvořena z CoreData při spuštění aplikace. Data jsou zobrazena opět pomocí tableview obsahující buňky s jednotlivými houbami. Houby jsou řazeny abecedně a předtím ještě dle kategorií jedlá, nejedlá, jedovatá. Buňka pak obsahuje náhled na fotografii houby, její český a latinský název. Následně ještě symbol šipky symbolizující existenci obrazovky s detaily. Opět se jedná o standardní způsob zobrazení na iPhone platformě.
Obr. 11
Obrazovka Atlas hub
Implementace
4.2.7
33
Obrazovka Atlas hub detail
Poslední popsaná obrazovka je zobrazení detailu houby. Zde byl opět použit UI prvek tableview, který dovoluje i takovéto rozvolněné zobrazení informací. Text je zde poté vhodně formátován z CoreData a zobrazen. Jelikož je zobrazených informací více, včetně fotky, je umožněn posun obrazovky pomocí doteku a posunu prstu uživatele. Protože se využívá standardních UI prvků rozhraní, je animace posunu velmi líbivá včetně animace gumového odrazu při najetí na konec nebo začátek obrazovky. Tyto nepatrné prvky dodávají i do statických informací jakousi hravost a jejich provedení je nepochybně jeden z faktorů úspěchu Apple mobilní platformy.
Obr. 12
Obrazovka Atlas hub detail
Implementace
4.2.8
34
Barevné schéma aplikace
Aby aplikace lépe tematicky ladila se zvolenou funkcionalitou, byly změněny některé vlastnosti standardních prvků. To dodává aplikaci jistou originalitu. Některé prvky jako ikony v panelech či barva pozadí lze poměrně jednoduše změnit přes rozhraní vývojového prostředí Xcode. Jiné detaily, které ještě nebyly do Storyboards implementované, jako v případě této aplikace byla barva a font popisů panelů, se musely dělat ručně kódem. To bude ukázáno níže v této práci.
4.3
Ukázky ze zdrojového kódu
Při tvorbě aplikace bylo hojně používáno tutoriálů a příkladů z webové stránky http://www.raywenderlich.com/tutorials a internetového fóra pro vývojáře http://stackoverflow.com. Oba zdroje poskytují aktuální postupy při řešení rozličných problémů, jež během vývoje mohou nastat. Celý zdrojový kód bude po dobu obhajoby uveřejněn na webové adrese https://akela.mendelu.cz/~xwagner1/BPA/kod Dále budou následovat zajímavé pasáže ze zdrojového kódu spolu s vysvětlením funkčnosti. 4.3.1
Změna popisků v Tab bar
Jak bylo dříve v práci zmíněno, některé vlastnosti vzhledu UI prvků nelze změnit přímo pomocí Xcode editoru vlastností. Zde je ukázka ošetření stavu, kdy je jednotlivý tab UI prvku Tab bar neoznačen. Části kódu v komentáři ukazují další možnosti nastavení vzhledu, které nebyly v aplikaci využity. [[UITabBarItem appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor colorWithRed:191.0/255.0 green:159.0/255.0 blue:127.0/255.0 alpha:1.0], UITextAttributeTextColor, //[UIColor whiteColor], UITextAttributeTextShadowColor, //[NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextSha-‐ dowOffset, //[UIFont fontWithName:@"AmericanTypewriter" size:0.0], UITextAttributeFont nil] forState:UIControlStateNormal];
Implementace
4.3.2
35
Přidání tlačítka do navigation bar
Další věc, co zatím Storyboards neumožňuje, je přidávání vlastních tlačítek do UI prvku navigation bar. Toto je nutné ošetřit následujícím kódem. Po stisknutí se spustí metoda done, která způsobí odchod z obrazovky na obrazovku Zaznamenání nálezu se souřadnicemi. self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Uložit" style:UIBarButtonItemStylePlain target:self action:@selector(done:)];
4.3.3
Načtení souboru s CoreData
Pro zobrazení atlasu hub je nutné načíst připravený soubor s CoreData při startu aplikace a použít jako výchozí. Toto se děje pouze při prvním startu. Soubor se zkopíruje do složky dokumentů vyhrazeném systémem iOS. Další změny (uložení pozice s nálezem) se dále ukládají sem a aplikace pracuje dále s tímto souborem. Uživatel tak při dalším startu aplikace o svá data nepřijde. Dále je ukázáno použití odchytnutí chyby třídy NSError. Přes konstrukci NSLog je případná chyba vypsána na terminál. Využití NSLog se v aplikaci hojně využívá, umožňuje vývojáři kontrolu správného běhu aplikace. Po finálním odladění je možné tyto kusy kódu odebrat. Uživatel tyto výstupy ale stejně nikdy neuvidí, proto je praxe spíše je ponechat, aby při případném přidávání další funkcionality napomohly opětovném testování aplikace. -‐ (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (persistentStoreCoordinator == nil) { NSURL *storeURL = [NSURL fileURLWithPath:[self dataStorePath]]; NSFileManager * fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath:[self dataStorePath]]) { NSString *defaultStorePath = [[NSBundle mainBundle] PathForResource:@"DataStore" ofType:@"sqlite"]; if (defaultStorePath) { [fileManager copyItemAtPath:defaultStorePath toPath:[self dataStorePath] error:NULL]; } } persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];
Implementace
}
4.3.4
36 NSError *error; if(![persistentStoreCoordinator addPersistentStoreWithTy pe:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { NSLog(@"Chyba při přidávání trvalého úložiště (persistent store) %@, %@", error, [error userInfo]); abort(); } } return persistentStoreCoordinator;
Načítání fotek do atlasu dle jména
Aby se nemusely jednotlivé fotky načítat celé do souboru CoreData, což je neefektivní, bylo zvoleno načítání fotek dle latinského jména dané houby. Fotky jsou tak přidány ke zdrojovým souborům aplikace a v potřebném čase vyhledány. Na příkladu je patrné volání metod pomocí hranatých závorek a používání dlouhých výstižných jmen metod, tedy jeden se znaků jazyka Objective-C a frameworku Cocoa Touch. -‐ (NSString *)photoPath { // Vyhledá v resources fotky latinske_jmeno.jpg NSString *filename = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[self.latin stringByReplacingOccurrencesOfString:@" " withString:@"_"]] ofType:@"jpg"]; return filename; }
4.3.5
Optimalizované načtení atlasu hub
Pro načtení samotných dat se používá metoda fetchRequest s atributem setFetchBatchSize. Je tak využito funkcionality CoreData a data jsou načítána po dávce dle potřeby. V tomto případě po 10 buňkách. To znatelně zlepšuje výkon aplikace, poněvadž uživatel více jak 10 položek na displeji nevidí, je proto zbytečné je všechny načítat do paměti. V případě posunutí obrazovky se pak načítají po dalších dávkách. Je také patrné dvojí seřazení. Prvně dle statusu, tedy jedlá, nejedlá, jedovatá. Dále pak dle abecedního pořádku. První setřídění je navíc odděleno oddělovačem kategorií. Zde je vidět další přednost CoreData v práci se tříděním a selekcí dat. Pokud by se pracovalo přímo s SQLite byl by zápis kódu mnohem složitější a méně přehledný.
Implementace
37
-‐ (NSFetchedResultsController *)fetchedResultsController { if (fetchedResultsController == nil) { NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForNa me:@"Mushroom" inManagedObjectContext:self.managedObjectContext]; [fetchRequest setEntity:entity]; NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescrip torWithKey:@"status" ascending:YES]; NSSortDescriptor *sortDescriptor2 = [NSSortDescriptor sortDescrip torWithKey:@"name" ascending:YES]; [fetchRequest setSortDescriptors:[NSArray arrayWithOb jects:sortDescriptor1, sortDescriptor2, nil]]; // Načítá v dávce po deseti dle potřeby [fetchRequest setFetchBatchSize:10]; fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"status" cacheName:@"Mushroom"]; fetchedResultsController.delegate = self; } return fetchedResultsController; }
4.3.6
Předávání dat mezi obrazovkami
Předávání dat mezi obrazovkami obsluhuje metoda prepareForSegue. V tomto případě se jedná o předání dat z obrazovky Zaznamenání nálezu se souřadnicemi do Obrazovky s uložením pozice (definovaná v souboru LocationDetailsViewController.h). Toto je postup s využitím Storyboards, kdy je nutné ještě pojmenování přechodu (segue) přes Xcode v modelu grafického rozhraní aplikace. -‐ (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"EditLocation"]) { UINavigationController *navigationController = se gue.destinationViewController; LocationDetailsViewController *controller = (LocationDetailsViewController *)navigationController.topViewController; controller.managedObjectContext = self.managedObjectContext;
Implementace
38
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; Location *location = [self.fetchedResultsController objectAtIn-‐ dexPath:indexPath]; controller.locationToEdit = location; } }
4.3.7
Formátování data
Na metodě formatDate pro formátování data je patrné použití přístupu lazy loading7. Pomocí klíčového slova static zajistí aby byl objekt třídy NSDateFormatter vytvořen jako lokální statická proměnná, tedy nezruší se s koncem metody a lze jej opětovně používat. To šetří systémové prostředky, na které je objekt třídy NSDateFormater poměrně náročný, pokud by se měl pokaždé vytvářet znovu. -‐ (NSString *)formatDate:(NSDate *)theDate { static NSDateFormatter *formatter = nil; if (formatter == nil) { formatter = [[NSDateFormatter alloc] init]; [formatter setDateStyle:NSDateFormatterMediumStyle]; [formatter setTimeStyle:NSDateFormatterShortStyle];
} return [formatter stringFromDate:theDate]; }
___________________________ 7
lazy loading –programátorský přístup, kdy se data načítají až v okamžiku potřeby, což šetří systémové zdroje.
Implementace
4.3.8
39
Nastavení zobrazených informací o houbě v buňce
Poslední ukázka předvádí zobrazení informací z instance mushroom třídy Muschroom do připravených textových popisků v buňce tableview. Je třeba ošetřit stav kdy by nebyly zadány všechny názvy (vlivem např. špatné přípravy dat pro CoreData). Podobně je třeba připravit i náhled fotografie houby. Zde se pouze upraví vhodnou metodou originální fotka používaná v detailním zobrazení. -‐ (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { MushroomCell *mushroomCell = (MushroomCell *)cell; Mushroom *mushroom = [self.fetchedResultsController objectAtIndex Path:indexPath]; if ([mushroom.name length] > 0) { mushroomCell.nameLabel.text = mushroom.name; } else { mushroomCell.nameLabel.text = @"Houba nemá český název)"; } if ([mushroom.latin length] > 0) { mushroomCell.latinLabel.text = mushroom.latin; } else { mushroomCell.latinLabel.text = @"Houba nemá latinský název)"; } UIImage *image = nil; if ([mushroom hasPhoto]) { image = [mushroom photoImage]; if (image != nil) { image = [image resizedImageWithBounds:CGSizeMake(66, 66)]; } } mushroomCell.imageView.image = image; }
Distribuce aplikace
40
5 Distribuce aplikace Pro úspěch aplikace je nesmírně důležitá správná prezentace a marketing aplikace. Pro komerční úspěch je pak potřeba vzít do úvahy distribuční model, náklady na vývoj a příjem z aplikace v budoucím čase.
5.1
Webová prezentace
Prezentace by měla být jednoduchá, s obrázky nebo videem z aplikace, kde je zřejmé jak aplikace funguje, případně jaké funkce nabízí. Je vhodné umístit přímý kontakt na vývojáře nebo jinou formu možnosti odezvy na aplikaci. Jako další funkce je vhodné začlenit sdílení na sociálních sítí nebo newsletter pro marketing aplikace. A samozřejmě odkaz na aplikaci v App Store, pokud je nabízena. Aplikace Atlas hub má přechodnou webovou prezentaci na https://akela.mendelu.cz/~xwagner1/BPA.
5.2
App Store
V rámci placené vývojářské licence má vývojář právo distribuovat aplikaci přes oficiální Apple App Store. Před přidáním aplikace do katalogu je podrobena testováním zaměstnanci společnosti Apple, které může trvat řadu dní až týdnů. Aplikace se testuje, zda odpovídá popisu, jde spustit a správně funguje. Dále zda odpovídá pravidlům pro App Store, tedy např. nehanobí rasu, nekopíruje licencovaný materiál či nepoužívá neveřejné metody z frameworku. Aplikaci jde stáhnout z App Store i kdykoliv později a vývojář se nemusí hned dozvědět co konkrétně musí změnit, aby aplikace prošla novým schvalováním. (Apple Inc., 2011) Tyto omezující podmínky na jednu stranu omezují vývojáře a řadu užitečných aplikací není možné distribuovat. Na stranu druhou poskytují alespoň základní záruku, že pořízená aplikace bude fungovat a škodlivá aplikace, i pokud by testováním prošla, půjde kdykoliv z distribuce stáhnout. Vlivem obrovského úspěchu celé platformy je na App Store nesmírná konkurence. Komerční úspěch je tak poměrně nepředvídatelný a větší naději mají aplikace s unikátním obsahem, funkcemi nebo s povedeným grafickým rozhraním. Pro úspěch je důležité vhodné načasování, protože pokud aplikace nezíská ohlas, například při uvedení do App Store, rychle zapadne mezi ostatní aplikace. Aplikaci je tak lepší nabízet až s ucelenou sadou funkcí a jistým záměrem celkové prezentace aplikace.
Distribuce aplikace
5.3
41
Další možnosti šíření
Mimo oficiální App Store je šíření aplikace velmi omezené. Komplexní zabezpečení celé platformy lehké šíření do dalších zařízení značně ztěžuje. Šíření zdrojového kódu Používá se pro open source projekty nebo části aplikace, případně samostatné knihovny se speciální funkcionalitou. Zdrojový kód je většinou vystaven na webových stránkách autora. Pro komplexní projekty se využívá možnosti systému pro správu verzí a odpovídajících webových služeb např. GitHub. Některé tyto systémy jsou plně podporovány i v Xcode. Vhodné jsou samozřejmě i pro uzavřené projekty. Neoficiální obchody s aplikacemi Pro zařízení na kterých byl proveden jailbreak existuje řada obdobných obchodů jako App Store, aplikace se zde dají nabízet bez kontroly a omezení. Nejznámější je obchod Cydia. Nabízí se zde nejen aplikace, ale i alternativní grafické rozhraní a další systémové úpravy. Komerční úspěch aplikací zde vystavených je ale značně omezený, jelikož aplikace zde nakupuje minimum uživatelů. Navíc uživatelů co mají na svém zařízení proveden jailbreak je menšina.
5.4
Testování aplikace
Registrovaný vývojář může poskytnout aplikaci až 100 testerům ročně. Přes webové rozhraní musí registrovat jednotlivá ID zařízení, na kterých se bude aplikace testovat. Aplikaci pak následně rozešle testerům. Poté může sbírat i reporty o chybách a pádu aplikace. (Apple Inc., 2011) Testování je tak skvělý způsob jak získat zpětnou vazbu na aplikaci před jejím oficiálním uvedením do App Store. Umožňuje testovat na zařízeních, které vývojář nemá fyzicky k dispozici nebo na různých verzích operačního systému iOS. Především však je možné získat odezvu slušného vzorku reálných uživatelů a případné připomínky či návrhy nových funkcí zapracovat do aplikace před jejím oficiálním uvedením.
Závěr
42
6 Závěr Cílem bakalářské práce byla implementace aplikace obsahující atlas hub s detailním popisem pro jednotlivé houby. Data bylo nutné pro použití zkonvertovat do vhodné datové struktury. Dále bylo cílem využít GPS pro uložení aktuální pozice a její následné zobrazení na mapě. Oba cíle byly plně splněny. Navíc bylo zapracováno na přívětivém uživatelském vzhledu aplikace s ohledem na zachování standardního chování prvků dle zvyklostí platformy. Vzhledem k plánovanému komerčnímu využití aplikace, nebyla odeslána do Apple App Store, dokud se patřičně neošetří všechny licenční vztahy vyplívající z použití materiálů třetích stran. Aplikace může být použita na dalších zařízení platformy iPhone pomocí vestavěné funkce testování a to až pro 100 zařízení. Na aplikaci se tedy bude dál pracovat a začleňovat další funkcionalita.
6.1
Hodnocení technické
Při vývoji bylo poznat, že jde o moderní platformu s velmi rychlým vývojem. Již během vývoje byly uvedeny nové způsoby tvorby aplikace. Xcode je velmi mocný nástroj, který po zvládnutí šetří dost času a vývoj bez něho v podstatě není možný. Klasickým problémem pak je zvládnutí poměrně odlišného zápisu notace jazyka Objective-C a dodržování modelu MVC při vývoji. Navíc se v praxi operuje především v mantinelech daných frameworkem Cocoa Touch, který přidává další úroveň abstrakce. Některé funkce aplikace je tak velmi jednoduché pomocí frameworku naprogramovat. V oblasti testování a distribuce aplikace jsou striktní pravidla. To na jednu stranu značně usnadňuje komerční možnosti distribuce aplikace. Na straně druhé poměrně svazuje při netradičních modelech vývoje nebo šíření aplikace. Mobilní iPhone platforma zahrnuje i iPod Touch a iPad. S iPodem Touch je vývoj v podstatě stejný, jen je třeba řešit omezení hardwaru např. mobilní data nebo GPS. Pro iPad se pak tvoří aplikace s přepracovaným GUI pro lepší využití plochy tabletu, zde jsou nutné už i specifické úpravy kódu. Aplikace lze tvořit jako univerzální, tak, že aplikace jde spustit na všech zařízeních platformy.
6.2
Hodnocení ekonomické
Na rozdíl od některých konkurenčních platforem není vývoj zadarmo. Mimo nutnosti vyvíjet aplikace pouze na Apple hardwaru je tu potřeba ročně placené licence nejen pro distribuci aplikace, ale i pro samotné testování na vlastním zařízení, což je pro vývoj kvalitní aplikace nezbytné.
Závěr
43
Díky velké konkurenci na Apple App Store je poměrně těžké predikovat možný finanční zisk z aplikace. Velký úspěch často zaznamenaly zcela jednoduché aplikace. Důležité je načasování a vhodná propagace. V současné době se na českém trhu aplikace vyvíjejí spíše pro velké korporace jako reklamní. Případně se úspěch aplikace staví na originálním obsahu.
6.3
Další možný rozvoj
V průběhu vývoje byl nejčastější dotaz, zda aplikace umí rozpoznat daný druh houby jen podle vyfocené fotografie. Něco takového je však technicky velmi problematické a v praxi spíše nereálné naprogramovat. Bylo by ovšem možné ve spolupráci s komunitou houbařů vytvořit internetový portál, který by byl s aplikací propojen. Z aplikace by tak šla fotografie odeslat a pak pomocí crowdsourcingu8 uživateli portálu, takovou houbu skutečně určit. Ke každému nálezu by byla vedena diskuze, kde by se daly vyžádat další fotky případně jiné informace, aby se minimalizovala možnost špatného určení. Tato problematika však převyšuje rozsah bakalářské práce, bylo by to však zajímavé téma pro práci diplomovou. Co se týče aplikace samotné, další vhodná funkčnost, kterou by bylo vhodné začlenit je pokročilé vyhledávání a především sdílení nálezů pomocí sociálních sítí. Tyto funkce nejsou problematické naprogramovat, ale vyžadují další studium vývojářské dokumentace, kde jsou popsány metody pro začlenění této funkčnosti.
___________________________ 8
crowdsourcing – způsob dělby práce, kdy se využije skupina lidí. Často je to formou veřejné výzvy.
Literatura
44
7 Literatura ALESSI, P. Professional iPhone and iPad Database Application Programming. Wrox; 1. vydání, 2010. 408 s. ISBN 0-4706-3617-3. APPLE INC. (2009-07-08) Apple Announces the New iPhone 3GS. Získané 7.12.2011 z Apple.com : http://www.apple.com/pr/library/2009/06/08Apple-Announces-the-New-iPhone-3GSThe-Fastest-Most-Powerful-iPhone-Yet.html APPLE INC. (2011-09-27) About App Sandbox. Získané 7.12.2011 z apple.com : http://developer.apple.com/library/mac/#documentation/Security/Conceptual/AppSandbo xDesignGuide/AboutAppSandbox/AboutAppSandbox.html APPLE INC. (2011-10-12) Distributing Aplication. Získané 7.12.2011 z apple.com : http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_developm ent_workflow/145-Distributing_Applications/distributing_applications.html APPLE INC. (2011-10-12) , iOS Human Interface Guidelines. Získané 7.12.2011 z iOS Developer Library : http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/Mobi leHIG/AppDesign/AppDesign.html#//apple_ref/doc/uid/TP40006556-CH19-SW1 BRANDRICK, C. (2010-07-07) iPhone 4's Retina Display Explained. Získané 11.12.2011 z pcworld.com : http://www.pcworld.com/article/198201/iphone_4s_retina_display_explained.html CARVELL, K. (2010-06-07) Cisco and Apple Agreement on IOS Trademark. Získané 12.12.2011 z cisco.com : http://blogs.cisco.com/news/cisco_and_apple_agreement_on_ios_trademark/ DANTE, C. (2011-10-12) iOS 5 review. Získané 12.12.2011 z engadged.com : http://www.engadget.com/2011/10/12/ios-5-review/ ELECTRONISTA, kolektiv autorů (2010-11-27) RIM thought iPhone was impossible in 2007. Získané 12.12.2011 z Electronista.com : http://www.electronista.com/articles/10/12/27/rim.thought.apple.was.lying.on.iphone.in. 2007/ GERMAN, K. (2010-06-27) On Call: Go ahead and jailbreak, it's legal now. Získané 12.12.2011 z cnet.com : http://www.cnet.com/8301-17918_1-20011824-85.html
Literatura
45
HORNBY, T. (2006-02-07).The Story Behind Apple's Newton. Získané 12.12.2011 z Lowendmac.com : http://lowendmac.com/orchard/06/john-sculley-newton-origin.html IPHONIZED. (2009-11-21) 21 Prototyping, Mockup, and Wireframing Tools for iPhone App Development. Získané 12.12.2011 z iphonized.com : http://iphoneized.com/2009/11/21-prototyping-mockup-wireframing-tools-iphone-appdevelopment/ MATOUŠEK, J. (2011) Co je to Jailbreak u iPhone. Získané 11.12.2011 z appleporadna.cz : http://www.appleporadna.cz/iphone/co-je-to-jailbreak-u-iphone/ NEUBURG, M. Programming iOS 4. O'Reilly Media, 2011. 834 s. ISBN 1-4493-8844-2. RICKER, T. (2008-07-10) Jobs: App Store launching with 500 iPhone applications, 25% free. Získané 12.12.2011 z engadged.com : http://www.engadget.com/2008/07/10/jobs-app-store-launching-with-500-iphoneapplications-25-free/ RYAN, B. (2009-01-09) Live from Macworld 2007: Steve Jobs keynote. Získané 12.12.2011 z Engadged.com : http://www.engadget.com/2007/01/09/live-from-macworld-2007-steve-jobs-keynote/ WENDERLICH, R. (2011-11-07) Beginning ARC in iOS 5. Získané 8.12.2011 z raywenderlich.com : http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1 WENDERLICH, R. (2011-10-14) Beginning Storyboards in iOS 5. Získané 8.12.2011 z raywenderlich.com : http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1
Literatura
46
Přílohy
Ukázky z vývojového prostředí
A Ukázky z vývojového prostředí
47