Jack Nutting, David Mark, Jeff LaMarche
Cocoa Průvodce programováním pro Mac
Computer Press, a. s. Brno 2011
K1775.indd 1
14.9.2011 12:21:20
Cocoa Průvodce programováním pro Mac Jack Nutting, David Mark, Jeff LaMarche Computer Press, a. s., 2011. Vydání první. Překlad: Jakub Mužík Odborná korektura: Tomáš Kolář Jazyková korektura: Marie Schreinerová Sazba: Petr Klíma Rejstřík: Daniel Štreit Obálka: Martin Sodomka
Komentář na zadní straně obálky: Martin Herodek Technická spolupráce: Jiří Matoušek, Zuzana Šindlerová, Dagmar Hajdajová Odpovědný redaktor: Martin Herodek Technický redaktor: Jiří Matoušek Produkce: Petr Baláš
Original edition copyright © 2010 by Jack Nutting, David Mark and Jeff LaMarche. All rights reserved. Czech edition copyright 2011 by Computer Press. All rights reserved. Autorizovaný překlad z originálního anglického vydání Learn Cocoa on the Mac, First Edition. Originální copyright: © Jack Nutting, David Mark, Jeff LaMarche, 2010. Překlad: © Computer Press, a.s., 2011. Computer Press, a. s., Holandská 3, 639 00 Brno Objednávky knih: http://knihy.cpress.cz
[email protected] tel.: 800 555 513 ISBN 978-80-251-2883-1 Prodejní kód: K1775 Vydalo nakladatelství Computer Press, a. s., jako svou 4088. publikaci. © Computer Press, a. s. Všechna práva vyhrazena. Žádná část této publikace nesmí být kopírována a rozmnožována za účelem rozšiřování v jakékoli formě či jakýmkoli způsobem bez písemného souhlasu vydavatele.
K1775.indd 2
14.9.2011 12:21:31
Obsah Předmluva ....................................................................... 11 O autorech....................................................................... 13 O odborném korektorovi ............................................... 14 Poděkování ..................................................................... 15 Úvod ................................................................................ 17 KAPITOLA 1 Kakao má každý rád ....................................................... 19 Opatřete si počítač Macintosh a stáhněte si potřebné vývojové nástroje .....20 Kde najít pomoc...................................................................................................................21 Co musíte vědět předtím, než začnete........................................................................22 Jste připravení? ....................................................................................................................22
KAPITOLA 2 Ahoj světe ....................................................................... 25 Projekt Hello World .............................................................................................................25 Průzkum nib souboru ........................................................................................................29 Knihovna .................................................................................................................................30 Přetažení popisku ................................................................................................................32 Používání modrých pomocných čar .............................................................................33 Okno inspektoru ..................................................................................................................34 Inspektor atributů ...............................................................................................................35 Změna barvy a písma textu popisku ...........................................................................37 Editor nabídek ......................................................................................................................39 Vytvoření ikony aplikace ...................................................................................................41 Přidání ikony do projektu .................................................................................................42 Seznamy vlastností .............................................................................................................44 Spuštění aplikace.................................................................................................................45 Sdílení radosti z vašeho výtvoru s okolním světem ...............................................46 Na shledanou Ahoj světe ..................................................................................................48
K1775.indd 3
14.9.2011 12:21:31
4
Obsah
KAPITOLA 3 Světla, Kamera, Akce! (a také outlety) .......................... 49 Aplikace, která je tématem této kapitoly....................................................................50 Frameworky, frameworky, všude samé frameworky ..............................................51 Framework Foundation ....................................................................................................................... 52 Framework AppKit ................................................................................................................................. 52
Model-vzhled-řízení ............................................................................................................52 Outlety, akce a řídicí objekty ...........................................................................................53 Deklarace outletů................................................................................................................................... 54 Deklarace akcí ......................................................................................................................................... 55
Outlety a akce v akci...........................................................................................................56 Zapnutí automatické správy paměti............................................................................................... 56 Naprogramování řídicí třídy ............................................................................................................... 58 Deklarace outletu a akce ..................................................................................................................... 59 A nyní zpět do nástroje Interface Builder ..................................................................................... 60 Konfigurace okna aplikace ................................................................................................................. 64 Návrh uživatelského rozhraní okna ................................................................................................. 66 Zapojení outletu ..................................................................................................................................... 69 Propojení tlačítka s akcí ....................................................................................................................... 71
Implementace metody akce............................................................................................72 Delegát aplikace ..................................................................................................................73 Ukončení aplikace při zavření jejího okna .................................................................................... 74
Prohlížeč dokumentace.....................................................................................................75 Shrnutí .....................................................................................................................................76
KAPITOLA 4 Komponenty grafického uživatelského rozhraní ........ 77 Aplikace VillainTracker .......................................................................................................79 Vytvoření třídy VillainTrackerAppDelegate................................................................................... 80 Naplánování grafického uživatelského rozhraní ........................................................................ 82
Vybudování rozhraní ..........................................................................................................84 Přetažení textových polí ...................................................................................................................... 85 Umožnění výběru kalendářních dat ............................................................................................... 87 Rozbalovací seznam .............................................................................................................................. 88 Hodnocení ................................................................................................................................................ 89 Matice přepínačů ................................................................................................................................... 90 Přidání rámce obrázku ......................................................................................................................... 92 Přidání zaškrtnutelných políček do matice .................................................................................. 93 Konfigurace tlačítka nabídky ............................................................................................................. 95 Vložení textového rámce .................................................................................................................... 95 Logické seskupení.................................................................................................................................. 95 Změna rozměrů ...................................................................................................................................... 98 Řídicí objekt ...........................................................................................................................................100 Propojování ............................................................................................................................................101
K1775.indd 4
14.9.2011 12:21:31
5
Obsah Základy psaní zdrojového kódu aplikace ................................................................ 102 Standardizace názvů klíčů ................................................................................................................103 Vytvoření výchozího padoucha ......................................................................................................103 Cit pro detaily ........................................................................................................................................104 Nastavení jednoduchých hodnot ..................................................................................................105 Hodnoty komplexních ovládacích prvků ....................................................................................106 Reakce na zadávání vstupu ..............................................................................................................110
Závěr...................................................................................................................................... 113
KAPITOLA 5 Tabulky .......................................................................... 115 Příprava třídy VillainTrackerAppDelegate na více padouchů ........................... 116 Uvolnění místa pro rámec tabulky ............................................................................. 117 Vyladění automatické změny rozměrů..................................................................... 120 Nová propojení.................................................................................................................. 123 Zdrojový kód obsluhující rámec tabulky ................................................................. 123 Rámec tabulky potřebuje vaši pomoc ...................................................................... 124 Přidávání a mazání padouchů ..................................................................................... 127 Závěr...................................................................................................................................... 129
KAPITOLA 6 Technologie Cocoa Bindings ....................................... 131 Vazba jednoduchých ovládacích prvků ................................................................... 132 Vytvoření projektu DungeonThing ...............................................................................................132 Vytvoření okna předvoleb ................................................................................................................133 Vazba s třídou NSUserDefaultsController ...................................................................................138 Vytvoření hlavního okna aplikace..................................................................................................141 Konfigurace třídy DungeonThingAppDelegate........................................................................143 Definice konstant .................................................................................................................................143 Specifikace výchozích hodnot předvoleb...................................................................................144 Implementace metod akcí ................................................................................................................145
Vazba rámce tabulky ....................................................................................................... 148 Příprava zdrojového kódu na použití vazeb ..............................................................................149 Zobrazování historie v tabulkách...................................................................................................152 Vytvoření a konfigurace řídicího objektu pole .........................................................................155 Vazba tabulky prostřednictvím řídicího objektu pole............................................................157 Vazbatextového pole prostřednictvím výběru provedeného řídicím objektem ............. 157 Kontrola funkčnosti .............................................................................................................................157 Napěnit, opláchnout a znovu ..........................................................................................................158
Dobře, ale jak to vlastně funguje? .............................................................................. 158 Pojmenované atributy objektů .......................................................................................................158 Sledování změn objektů....................................................................................................................160 Jak technologie Cocoa Bindings funguje....................................................................................160
Závěr...................................................................................................................................... 161
K1775.indd 5
14.9.2011 12:21:31
6
Obsah
KAPITOLA 7 Úvod do technologie Core Data .................................. 163 Nedostatky předchozích aplikací ............................................................................... 164 Aplikace MythBase ........................................................................................................... 165 Definování modelu..............................................................................................................................166 Automaticky vygenerované grafické uživatelské rozhraní ...................................................173 Doladění uživatelského rozhraní....................................................................................................175
Průzkum zdrojového kódu šablony ........................................................................... 182 Rozhraní delegátu aplikace ..............................................................................................................182 Implementace delegátu aplikace ..................................................................................................183
Přidání aplikační logiky .................................................................................................. 191 Validace jednotlivých atributů ........................................................................................................192 Validace více atributů najednou.....................................................................................................193 Vytvoření vlastního atributu ............................................................................................................195
Závěr...................................................................................................................................... 197
KAPITOLA 8 Koncepce vztahů v technologii Core Data ................. 199 Modelování nových entit a vztahů ............................................................................ 200 Verzování modelu a migrace ...........................................................................................................201 Příprava na různé verze datového modelu ................................................................................201 Přidání nových entit ............................................................................................................................202 Přidání vztahů........................................................................................................................................202 Vytvoření jednoduché migrace ......................................................................................................205 Otestování aplikace .............................................................................................................................206
Aktualizace grafického uživatelského rozhraní ..................................................... 208 Vytvoření okna pro data entit MythicalBand.............................................................................208 Přidělení užitečných názvů řídicím objektům polí ..................................................................209 Přidávání postav do kapel ................................................................................................................210 Zobrazování členů skupin.................................................................................................................212 Vytvoření okna pro data entit MythicalVenue ..........................................................................214 Přidání seznamu koncertních síní do okna skupin..................................................................215
Shrnutí .................................................................................................................................. 217
KAPITOLA 9 Vyhledávání a vracení dat uchovávaných prostřednictvím technologie Core Data na základě kritérií......................................................... 219 Aplikace QuoteMonger .................................................................................................. 220 Vytvoření projektu a jeho datového modelu ............................................................................221 Okno pro zadávání dat.......................................................................................................................221 Okno pro vyhledávání citací ............................................................................................................224
K1775.indd 6
14.9.2011 12:21:31
7
Obsah Omezování výsledků vyhledávání prostřednictvím třídy NSPredicate (predikátů)................................................... 226 Vytváření predikátů .............................................................................................................................226 Specifikace predikátu pro třídu NSArrayController v nástroji Interface Builder ...........228
Predikáty definované uživatelem ............................................................................... 228 Přidání predikátu do delegátu aplikace ......................................................................................229 Přidání editoru predikátů do vyhledávacího okna ..................................................................230 Konfigurace editoru predikátů........................................................................................................230
Uložení predikátu ............................................................................................................. 233 Závěr...................................................................................................................................... 234
KAPITOLA 10 Okna, nabídky a lístky ................................................. 235 Třídy NSWindow a NSPanel .......................................................................................... 236 Standardní systémové panely .........................................................................................................240 Řídicí objekt s vlastním nib souborem .........................................................................................245 Modální okna.........................................................................................................................................248
Systémové nabídky.......................................................................................................... 251 Standardní položky nabídek aplikace ..........................................................................................252 Vaše vlastní nabídky............................................................................................................................252
Lístky ..................................................................................................................................... 259 Shrnutí .................................................................................................................................. 261
KAPITOLA 11 Aplikace pro zpracování dokumentů ......................... 263 Vytvoření aplikace ColorMix......................................................................................... 265 Průzkum výchozích nib souborů....................................................................................................265 Definování modelu..............................................................................................................................266
Nastavení dvou barev ..................................................................................................... 266 Nejjednodušší grafické uživatelské rozhraní na světě............................................................267 Vytvoření výchozí sady barev ..........................................................................................................268
Výběr formátu souborů .................................................................................................. 270 Přidání barvy ...................................................................................................................... 270 Třída ColorBlendView .........................................................................................................................271 Přidání smísených barev do grafického uživatelského rozhraní ........................................273 Přidání pozlátka na pozadí ...............................................................................................................278
Několik slov o Undo a Redo operacích..................................................................... 279 Undo zásobník ......................................................................................................................................280
Závěr...................................................................................................................................... 281
K1775.indd 7
14.9.2011 12:21:31
8
Obsah
KAPITOLA 12 Výjimky, signály, chyby a ladění ................................. 283 Ošetřování výjimek .......................................................................................................... 284 Zpracování výjimek .............................................................................................................................284 Omezená role výjimek v prostředí Cocoa ...................................................................................285 Testovací aplikace ................................................................................................................................286 Výjimka NSInvalidArgumentException ........................................................................................292 Výjimka NSRangeException .............................................................................................................294 Další druhy výjimek .............................................................................................................................296
Horší než výjimky: smrt způsobená signálem ....................................................... 297 Třída NSError ...................................................................................................................... 299 Domény a kódy chyb ..........................................................................................................................300 Detekce výskytu chyby ......................................................................................................................301 Prezentace chyby .................................................................................................................................305
Závěr...................................................................................................................................... 306
KAPITOLA 13 Kreslení v Cocoa............................................................ 307 Základy ................................................................................................................................. 308 Systém souřadnic rámce vzhledu ..................................................................................................308 Obdélníky frame a bounds ...............................................................................................................309 Obdélníky, body a rozměry ..............................................................................................................309 Základy koncepce křivek ...................................................................................................................310
Vytvoření podtřídy třídy NSView ................................................................................ 310 Struktury jazyka C ................................................................................................................................311 Základní kreslicí metoda: drawRect: .............................................................................................311 Grafické stavy ........................................................................................................................................311 Pomocné objekty pro vytváření křivek ........................................................................................312 Barvy a grafický kontext ....................................................................................................................313 A kromě barvy .......................................................................................................................................313 Manuální konstrukce křivky .............................................................................................................314 Posunutí hranic .....................................................................................................................................315
Aplikace LOLmaker .......................................................................................................... 317 První kroky k Lolu.................................................................................................................................318 Třída LOLView ........................................................................................................................................320
Základy obsluhy tisku ..................................................................................................... 326 Shrnutí .................................................................................................................................. 327
KAPITOLA 14 Pokročilé kreslení ......................................................... 329 Úprava křivky ..................................................................................................................... 329 Přípravy ....................................................................................................................................................330 Infrastruktura aplikace .......................................................................................................................332
K1775.indd 8
14.9.2011 12:21:32
9
Obsah Vykreslení křivky ...................................................................................................................................333 Sledování myši ......................................................................................................................................335
Několik vylepšení.............................................................................................................. 337 Úvod do technologie Core Animation...................................................................... 338 Základy animací ................................................................................................................ 339 Implicitní animace ...............................................................................................................................339 Explicitní animace ................................................................................................................................340 Seskupování animací ..........................................................................................................................345
Shrnutí .................................................................................................................................. 353
KAPITOLA 15 Práce se soubory........................................................... 355 Implicitní přístup k souborům ..................................................................................... 355 Vysokoúrovňové operace se soubory ....................................................................... 357 Zdrojový kód aplikace What About That File............................................................................358 Uživatelské rozhraní aplikace What About That File ...............................................................363
Shrnutí .................................................................................................................................. 367
KAPITOLA 16 Souběžnost ................................................................... 369 Aplikace SlowWorker ...................................................................................................... 370 Základy provádění zdrojového kódu v různých vláknech ................................ 372 Jednotky práce......................................................................................................................................373 Operační fronty .....................................................................................................................................374
Oživení aplikace SlowWorker ....................................................................................... 374 Rozšíření třídy NSObject....................................................................................................................377 Vyžádání hlavního vlákna .................................................................................................................378
GCD: Řazení do nízkoúrovňových front ................................................................... 383 Bloky .........................................................................................................................................................384 Druhý způsob oživení aplikace SlowWorker..............................................................................385 Další možnost: třída NSBlockOperation.......................................................................................388
Závěr...................................................................................................................................... 389
KAPITOLA 17 Pohled do budoucnosti ................................................ 391 Další techniky charakteristické pro Cocoa ............................................................. 392 Notifikace ................................................................................................................................................392 Bloky .........................................................................................................................................................394
Prostředí Cocoa a jiné jazyky........................................................................................ 396 PyObjC .....................................................................................................................................................397 MacRuby ..................................................................................................................................................397 Nu...............................................................................................................................................................398 JavaScript ................................................................................................................................................399
K1775.indd 9
14.9.2011 12:21:32
10
Obsah F-Script .....................................................................................................................................................400
Portované prostředí Cocoa ........................................................................................... 401 Cocoa Touch ...........................................................................................................................................401 GNUstep a Cocotron ...........................................................................................................................402 Cappuccino/Objective-J ....................................................................................................................403
Konec naší společné cesty ............................................................................................ 403
Rejstřík .......................................................................... 404
K1775.indd 10
14.9.2011 12:21:32
Předmluva Dávejte si pozor na nové nápady Dava Marka. Davovo jméno jste už asi na obálkách knih nakladatelství Apress o počítačích Macintosh nebo platformě iPhone viděli. Jeho jméno je vlastně i na obálce této knihy. Dave je redaktor série knih o počítačích Macintosh a platformě iPhone, umí dodělat, co si předsevzal, a rád bych měl alespoň půlku jeho energie. Když jste jeho kamarád, hned vás zapojí do práce. Mě také zapojuje do práce (nad rámec mého běžného povolání), a to už po celá léta. „Hej Marku, mám takový nápad, že bychom mohli napsat úvod do programování v Objective-C. Co kdybyste ho se Scottem Knasterem napsali?“ Připadalo mi, že by to mohla být zábava, a taky že byla. Ještě pořád se občas směji vtipům o programování, které jsme si při tom vyprávěli. „Hej Marku, máme s Jeffem LaMarchem takový nápad, že bychom mohli napsat knihu o iPhone SDK, chtěl bys udělat její odbornou korekturu?“ Připadalo mi, že by to mohla být zábava, a taky že byla. Poté udělali další knihu, na které jsem se podílel jako odborný korektor. A najednou jsem si uvědomil, že provádění odborných korektur je opravdu zábavné. Představte si to. Musíte přečíst odbornou knihu předtím, než vyjde. Musíte se při tom naučit všechny ty skvělé novinky. A nejlepší na tom je, že při tom hledáte chyby v textu a ve zdrojovém kódu, kibicujete a obecně vzato navrhujete různé změny. A poté to vše také musíte opravit! A dokonce za to ještě dostáváte zaplaceno! Moje drahá polovička mi nechá všechny peníze, které vydělám na knihách, takže je můžu použít pro svoje účely. Tátův foťák potřebuje nový objektiv. A najednou mi zavolá Dave a říká: „Hej Marku, mám takový nápad, že bychom mohli napsat knihu o Cocoa, chtěl bys udělat její odbornou korekturu?“ Připadalo mi, že by to mohla být zábava. A navíc táta potřebuje nový objektiv 85mm f/1.8. Takže se po „e-mailu“ seznámím s tímhle Jackem Nuttingem. Hledám na Googlu jako blázen, kdo to vlastně je. Chvíli chatujeme. Začnu dostávat kapitoly, které mám opravovat. Jsou zajímavé. Jsou informativní. Učím se nové věci (aha, takže takhle fungují vazby pro třídu NSPopupMenu). A navíc jsou i zábavné. U počítače se zřídkakdy opravdu zasměju, ale při provádění korektury této knihy jsem se párkrát opravdu málem udusil kafem.
K1775.indd 11
14.9.2011 12:21:32
12
Předmluva
Ze začátku jsem měl jisté pochybnosti. Cocoa je široké téma. Typická desktop aplikace pro systém Mac OS X vyžaduje mnohem víc práce a využívá mnohem více technologií a tříd prostředí Cocoa než typická aplikace pro iPhone. Některé části Cocoa jsou navíc zastaralé a zbytečně složité, protože jsou dvacet let staré. Některé části Cocoa jsou naopak zbrusu nové. Ale ať už píšete jakoukoliv Cocoa aplikaci, musíte toho vědět opravdu hodně, abyste mohli vůbec začít. Jack vybral ty aktuálně nejlepší techniky programování aplikací v systému Mac OS X 10.5 a 10.6 (a novějších verzích). Kniha má dostatečný záběr, abyste se dozvěděli to, co potřebujete, dostatečnou hloubku na to, abyste mohli nabyté vědomosti používat v praxi, a rozebírá dostatek témat, kterým se můžete dále věnovat sami. Doufám, že si tuhle knihu užijete, její korektura mě opravdu bavila. Mark Dalrymple
K1775.indd 12
14.9.2011 12:21:32
O autorech Jack Nutting pracoval s prostředím Cocoa již za starých časů, dávno předtím, než se vůbec začalo jmenovat Cocoa. V prostředí Cocoa a jeho předchůdcích vyvinul širokou škálu nejrůznějšího softwaru pro nejrůznější obory, včetně herního průmyslu, grafického designu, digitální online distribuce, telekomunikací, finančnictví, publishingu a cestovního ruchu. Když zrovna nepracuje na softwarových projektech pro počítače Macintosh a pro platformu iPhon, nebo na vývoji webových aplikací v prostředí Ruby on Rails, tráví obvykle svůj volný čas s rodinou. Jack je vášnivý propagátor jazyka Objective-C a frameworků prostředí Cocoa. Na požádání udělá podrobnou přednášku o výhodách dynamického posílání zpráv a manipulací se třídami za běhu programu komukoliv, kdo je ochotný poslouchat (a dokonce i těm, kteří poslouchat nechtějí). Čas od času také zveřejňuje články na svém blogu, který najdete na adrese www.nuthole.com. Jeff LaMarche je dlouholetý vývojář programů pro Macintosh a pro iPhone s více než dvaceti lety zkušeností s programováním. Píše o Cocoa a o programovacím jazyce Objective-C do časopisu MacTech Magazine a články pro webovou stránku Apple’s Developer Technical Services. Má zkušenosti s vývojem komerčního softwaru, které získal při práci ve firmě PeopleSoft, jejímž zaměstnancem byl od počátku devadesátých let, a s prací nezávislého konzultanta, kterým se stal později. V současné době se zaměřuje pouze na programování aplikací pro počítače Macintosh a pro platformu iPhone. Dave Mark je dlouholetý vývojář programů pro Macintosh a autor mnoha knih o vývoji programů pro tento počítač, včetně knih Learn C on the Mac, The Macintosh Programming Primer series a Ultimate Mac Programming. Jeho blog najdete na adrese http:// www.davemark.com.
K1775.indd 13
14.9.2011 12:21:32
O odborném korektorovi Mark Dalrymple je dlouholetý vývojář programů pro počítače Macintosh a Unix, který pracuje na multiplatformních sadách nástrojů, nástrojích pro Internet publishing, vysoce výkonných webových serverech a aplikacích pro koncové uživatele. Je také hlavním autorem knih Advanced Mac OS X Programming (Big Nerd Ranch, 2005) a Learn Objective-C on the Mac (Apress, 2009). Ve volném čase hraje na trombon a na fagot a vyrábí zvířátka z nafukovacích balónků.
K1775.indd 14
14.9.2011 12:21:32
Poděkování Tato kniha by nikdy nevznikla bez práce mnoha různých lidí. Zkušené vedení a vhled do procesu vydávání knih Claye Andrese mi nespočetněkrát pomohly pokračovat správným směrem. Reakce a konkrétní rady Dava Marka týkající se tvorby textu byly zcela zásadní; věřte mi, že byste nechtěli vidět první verzi první kapitoly, kterou jsem napsal předtím, než mi Dave začal radit. Práce Jeffa LaMarche na prvních kapitolách a jeho původní náčrt zbytku knihy mi poskytly solidní základy, na kterých jsem mohl dále stavět. Mark Dalrymple odvedl skvělou práci při pročesávání technických detailů knihy, čímž zachoval moji vážnost a současně mi vylepšil fazonu. Brian MacDonald díky své pozici velkého odborníka, který však nemá žádnou konkrétní zkušenost s Cocoa, pomohl objevit kousíčky a kousky knihy, které bylo nutné rozšířit anebo naopak zkrátit. Mary Tobinová pak se mnou jako s autorem-nováčkem měla v průběhu několika uplynulých měsíců velkou trpělivost a velmi mi pomohla sledováním stavu práce na jednotlivých kapitolách a organizací celého procesu. A pomocný redaktor Tracy Brown Collins pečlivě a efektivně opravil záplavu kapitol odevzdaných dávno po oficiálním termínu. Mimo zmíněných spolupracovníků se na vzniku knihy podílelo množství lidí zodpovědných za její grafickou podobu a další aspekty jejího vydání, které sice vůbec neznám, ale kteří byli naprosto nepostradatelným článkem její produkce. Díky vám všem! Kromě lidí spojených s nakladatelstvím Apress mi při psaní knihy nejrůznějším způsobem a v nejrůznějších ohledech pomohlo množství přátel, kteří dobrovolně obětovali svůj volný čas anebo alespoň vyhověli mým žádostem o radu. Saurabh Sharan mi poskytl cennou zpětnou vazbu na téměř všechny kapitoly knihy a pomohl mi nalézt sekce, které potřebovaly podrobnější výklad. Joar Wingfors mi dodal detailní komentář několika kapitol a šikovný veřejný zdrojový kód, který jsme použili v 11. kapitole. Tim Burks poskytl důležitou zpětnou vazbu na poslední kapitolu. Můj velký dík patří Tomu Gellererovi, který mě spojil s nakladatelstvím Apress; bez Toma, který mě dal s nakladatelstvím dohromady, bych zde stále ještě seděl a přemýšlel, jestli někdy vůbec napíšu „opravdovou“ knihu. A nakonec bych rád poděkoval své manželce Weronice Meijer a našim dcerám Henriettě a Dorotee, které snášely mé ponocování a „promarněné“ víkendy, které jsem strávil prací na této knize, a byly trpělivější, než bych si kdy mohl vůbec přát; tuto knihu věnuji jim.
K1775.indd 15
14.9.2011 12:21:32
K1775.indd 16
14.9.2011 12:21:32
Úvod S prostředím Cocoa jsem se poprvé setkal v roce 1989 jako student vysoké školy. Bylo to samozřejmě dávno předtím, než společnost Apple vyrobila iPhone a systém Mac OS X, a prostředí Cocoa se tenkrát dokonce ani nejmenovalo Cocoa. Zárodek dnešního Cocoa byl tenkrát součástí platformy NeXTStep, operačního systému počítačů vyráběných společností NeXT. Systém NeXTStep předběhl svou dobu o celé roky a zatímco laboratoř plnou počítačů společnosti NeXT nikdo nepoužíval, já jsem s nimi v rámci své studentské brigády jako jejich správce pracoval denně. Jako uživatel jsem byl zcela unešený. Nebudu se zde rozepisovat o jejich kladných vlastnostech z pohledu uživatele, ale pouze zmíním, že mnohé z nejlepších vlastností systému Mac OS X nepochází ani tak ze starých počítačů Macintosh, jako spíše ze systému NeXTStep. V té době neexistoval žádný Internet, komunita vývojářů aplikací pro systém NeXTStep nebyla zrovna velká a kromě nesrozumitelných tlustopisů, které společnost NeXT dodávala spolu se svými prvními počítači, neexistovalo ani mnoho knih o jejich vývojovém prostředí. Čas od času jsem se pokoušel přijít na kloub jazyku Objective-C a knihovně AppKit, ale bez pomoci odborníků a spousty vzorového zdrojového kódu (nemluvě o mých studijních povinnostech, které odpoutávaly moji pozornost od zábavných projektů) jsem v tomto směru v podstatě zakrněl. Avšak po dokončení vysoké školy se stalo něco zcela nečekaného – kamarád mě upozornil na konzultační firmu, která vyvíjela zakázkové aplikace určené pro systém NeXTStep pro velmi důležité klienty, a já měl to štěstí, že mě přijala do zaměstnání. Najednou jsem okolo sebe měl skupinu kolegů, kteří nejenže měli zkušenosti s vývojem aplikací pro systém NeXTStep, ale někteří z nich dokonce pro firmu NeXT dříve pracovali! Stačilo, aby mi trochu poradili, a věci, které mi po léta připadaly jako záhada, najednou začaly dávat smysl. Během několika týdnů jsem se toho naučil tolik, že jsme mohl začít sám učit jiné vývojáře. Pointa tohoto příběhu nespočívá v tom, že jsem geniální nebo že se rychle učím, ale v tom, že sada technologií, které nyní společně nazýváme Cocoa, je velmi výkonná a lze se ji snadno naučit používat – je však potřeba, aby vám s tím někdo pomohl. Doufám, že vás tato kniha postrčí správným směrem, že vám pomůže porozumět podstatě Cocoa programování a že až ji dočtete, budete vědět o Cocoa dost na to, abyste se sami dále vyvíjeli a psali své vysněné aplikace. Jednoduše řečeno, že se jedná o knihu, kterou bych býval potřeboval před oněmi dvaceti lety. Jack Nutting
K1775.indd 17
14.9.2011 12:21:32
K1775.indd 18
14.9.2011 12:21:33
KAPITOLA 1 Kakao má každý rád Vítejte! Tyto řádky čtete jistě proto, že chcete psát programy pro počítače Macintosh, a v takovém případě jste si pořídili tu správnou knihu. Až ji dočtete, budete vědět vše, co je třeba pro vývoj rychlých, výkonných a dobře vypadajících aplikací pro systém Mac OS X. Klíčem k vývoji moderních aplikací pro počítače Macintosh je prostředí Cocoa. Podle společnosti Apple je Cocoa sadou objektově orientovaných frameworků, které zajišťují běhové prostředí pro aplikace určené pro systém Mac OS X. Jak se budete postupně touto knihou prokousávat dál a dál, dozvíte se o frameworcích tvořících prostředí Cocoa vše potřebné. Prozatím si ho můžete představovat jako asistenta vývojáře, který se stará o většinu domácích prací spojených s vývojem aplikací pro počítače Macintosh. Téměř jakýkoliv běžný úkon aplikace pro Macintosh, kreslením oken počínaje a blikáním kurzoru v textovém poli konče, obsluhuje prostředí Cocoa za vás, takže se můžete plně soustředit na zdrojový kód, který činí vaši aplikaci jedinečnou. Prostředí Cocoa obsahuje třídy, které jistě splní téměř všechny vaše vývojové nároky. Jeho součástí jsou třídy reprezentující veškeré komponenty uživatelského rozhraní systému Mac OS X, okny a nabídkami počínaje, přes posuvníky a tlačítka a obrázky a ikonami konče. Představíte-li si jakýkoliv prvek uživatelského rozhraní, který byste chtěli přidat do své aplikace, existuje velmi dobrá šance, že je již implementovaný v podobě jedné ze tříd prostředí.
K1775.indd 19
14.9.2011 12:21:33
20
Kapitola 1: Kakao má každý rád
Další výhodou prostředí Cocoa je jeho pevná integrace do systému Mac OS X. Vybudujte svou aplikaci v prostředí Cocoa a můžete se spolehnout, že bude správně spolupracovat s ostatními aplikacemi pro systém Mac OS X a bezchybně se propojí s jeho komponenty, jako je aplikace Finder nebo Dock.
Když dvacet let uteče jako voda Prostředí Cocoa je zde v té či oné podobě již od roku 1986. Technologie, které souhrnně označujeme jako Cocoa, se postupně vyvinuly z balíčku NeXTStep AppKit, balíčku vývojových nástrojů vyvinutého pro platformu NeXT. Když společnost Apple v roce 1996 společnost NeXT koupila, začala vyvíjet novou verzi systému Mac OS, kterou nyní známe pod názvem Mac OS X a jejíž velkou část založila právě na technologiích získaných od společnosti NeXT. Spolu s dalším vývojem systému Mac OS X se pak dále vyvíjelo i prostředí Cocoa. Společnost Apple do něj přidala technologie pocházející z klasického systému Mac OS, jako je technologie QuickTime, i úplně nové technologie, jako je například technologie Quartz, která umožňuje všechny možné vizuální efekty a animace, na které jsme v systému Mac OS X zvyklí. Při tom všem však nikdy nepřestala klást důraz na maximální jednoduchost používání systému. Sečteno a podtrženo, prostředí Cocoa se neustále vyvíjí. Vývojové nástroje, knihovny a frameworky, o kterých se budete učit v této knize, jsou výsledkem více než dvaceti let experimentů a vylepšování.
Opatřete si počítač Macintosh a stáhněte si potřebné vývojové nástroje Předtím, než budete moci s tvorbou aplikací v prostředí Cocoa začít, si musíte opatřit počítač Macintosh. Nemusí to být zrovna nejnovější ani nejvýkonnější model; při programování příkladů uvedených v knize ve skutečnosti dobře poslouží v podstatě jakýkoliv počítač Macintosh vyrobený v posledních šesti nebo sedmi letech. Až budete vědět, že to s psaním softwaru myslíte opravdu vážně, možná zjistíte, že se vám vyplatí investovat do novějšího nebo výkonnějšího počítače, ale prozatím vám dobře poslouží téměř jakýkoliv Macintosh vyrobený v tomto miléniu. Systém Mac OS X 10.5 (Leopard) lze provozovat na jakémkoliv počítači Macintosh s procesorem Intel a téměř na všech počítačích Macintosh PowerPC s procesory G4 nebo G5. Chcete-li provozovat novější verzi systému, verzi 10.6 (Snow Leopard), musíte mít počítač s procesorem Intel. Dále se musíte zapojit do organizace Apple Developer Connection (ADC), což je organizace společnosti Apple sdružující vývojáře. Existuje několik různých druhů členství v této organizaci, ale základní členství je zdarma. Abyste si mohli stáhnout vývojové nástroje společnosti Apple, které potřebujete, chcete-li psát programy využívající prostředí Cocoa, musíte získat alespoň tento druh členství. Do organizace se můžete zapojit na adrese http://developer.apple.com/mac/. Pokud již Apple ID (členské uživatelské
K1775.indd 20
14.9.2011 12:21:33
Kde najít pomoc
21
jméno) máte, přihlaste se do systému a najděte informace o svém účtu. Pokud jste online služby společnosti Apple ještě nikdy nepoužili, klepněte na odkaz pro registraci a svůj uživatelský účet vytvořte. Jakmile se stanete členem ADC, budete si moci stáhnout vývojové nástroje společnosti Apple. Jejich seznam najdete na hlavní stránce vývojářského centra Mac Dev Center pod hlavičkou Xcode. Klepnutím na odkaz pro stažení prostředí Xcode ve skutečnosti stáhnete úplnou sadu vývojových nástrojů včetně veškerého softwaru potřebného pro práci s prostředím Cocoa. Jakmile se přihlásíte, najděte verzi prostředí Xcode určenou pro vaši verzi systému Mac OS X a klepněte na odkaz pro její stažení – stáhnete soubor diskového obrazu s koncovkou .dmg. Když jsme to zkoušeli naposled, měl velikost asi jeden gigabajt, takže to může chvíli trvat. Až se stahování diskového obrazu dokončí, poklepáním jej připojte a poklepáním na soubor instalátoru zahajte instalaci. Nemáte-li internetové připojení, můžete si vývojové nástroje nainstalovat z jednoho z CD nebo DVD disků, které jste obdrželi při koupi počítače. Pokud je to však jenom trochu možné, měli byste se pokusit stáhnout jejich nejnovější verze.
Poznámka Pokud jste si už někdy dříve nainstalovali sadu nástrojů iPhone SDK, nic víc nepotřebujete. Když si nainstalujete sadu iPhone SDK, nainstalují se společně s ní i nástroje potřebné pro vývoj Cocoa aplikací. Ačkoliv se frameworky obou platforem výrazně liší, jejich vývojové nástroje jsou v podstatě stejné. To také znamená, že jestli jste již někdy vyvíjeli aplikace pro iPhone, měli byste se při vývoji Cocoa programů cítit jako doma.
Kde najít pomoc Při četbě se vám také jistě stane, že se budete chtít čas od času na něco zeptat. Naštěstí je zde pro vás skvělá komunita navržená specificky pro tuto sérii knih, ke které se můžete připojit. Najdete ji na následující adrese: http://learncocoa.org Zaregistrujte se, najděte příslušné fórum a ptejte se, na co chcete. Jistě zde najdete další vývojáře, kteří budou znát odpovědi na vaše otázky, a kdo ví – za nějaký čas budete možná na některé otázky sami odpovídat.
K1775.indd 21
14.9.2011 12:21:33
22
Kapitola 1: Kakao má každý rád
Co musíte vědět předtím, než začnete V této knize předpokládáme, že již máte jisté základní vědomosti o programování. Neměly by vám činit potíže koncepce cyklů, proměnných, ukazatelů a lineárních seznamů. Dále předpokládáme, že chápete základní koncepce objektového programování a máte nějaké zkušenosti s jazykem Objective-C. Spolu s verzí operačního systému Mac OS X 10.5 Leopard byla uvolněna nová verze jazyka Objective-C s názvem Objective-C 2.0. Nemáte-li zkušenosti s novými rozšířeními jazyka v této verzi, nemusíte si s tím dělat starosti. Dáváme si záležet na tom, abychom vás vždy upozornili na jakékoliv nové vlastnosti verze jazyka Objective-C 2.0, které budete využívat, a abychom vám vysvětlili, jak fungují a proč je používáte.
Ještě jste se s Objective-C nesetkali? Zde je několik zdrojů, které vám pomohou začít. Jste programátoři-nováčci? Podívejte se na knihu Objective-C 2.0, kterou napsal Stephen G. Kochan: http://knihy.cpress.cz/objective-c-20.html Stáhněte si také ze stránek Apple Development Center kopii dokumentu The Objective-C 2.0 Programming Language, velmi podrobného a rozsáhlého popisu jazyka a výborné referenční příručky: http://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/ObjectiveC
Jste připravení? Počítač Macintosh je skvělá výpočetní platforma a prostředí Cocoa je nejlepším nástrojem pro tvorbu vašich vlastních aplikací pro tento počítač. Přecházíte-li na počítač Macintosh z jiné platformy, bude vám možná práce s prostředím Cocoa a jazykem Objective-C zprvu připadat trochu zmatená. Avšak i když pro vás možná bude obtížné se „chytit“, jsme si jistí, že způsobu práce s prostředím Cocoa brzy porozumíte a s trochou výdrže vám vše rychle začne dávat smysl. Měli byste také myslet na to, že příklady uvedené v knize nejsou seznamem povinností, jejichž splnění vám zajistí status mistra vývojáře. Při programování každého z nich si nejprve musíte být jistí, že přesně víte, co děláte, než budete pokračovat dalším příkladem. Nebojte se také dělat změny ve zdrojovém kódu. Experimentujte a sledujte výsledky. Je to jeden z nejlepších způsobů, jak porozumět problematice programování v prostředí, jako je Cocoa. Nezapomeňte ani na fórum, které jsme založili pro čtenáře knihy, aby na něm mohli diskutovat o jejím obsahu a o problémech, se kterými se při její četbě setkají. Takže když vám něco nepůjde nebo si s námi a s ostatními vývojáři budete chtít o něčem popoví-
K1775.indd 22
14.9.2011 12:21:34
Jste připravení?
23
dat, zadejte do svého internetového prohlížeče adresu http://learncocoa.org a zaregistrujte se na diskusním fóru. Už jste si tedy nainstalovali potřebné vývojové nástroje? Pokud ano, otočte na následující stranu. Pokud ne, rychle to napravte.
Zpětná vazba od čtenářů Nakladatelství a vydavatelství Computer Press, které pro vás tuto knihu přeložilo, stojí o zpětnou vazbu a bude na vaše podněty a dotazy reagovat. Můžete se obrátit na následující adresy: redakce PC literatury Computer Press Spielberk Office Centre Holandská 3 639 00 Brno nebo
[email protected] Computer Press neposkytuje rady ani jakýkoli servis pro aplikace třetích stran. Pokud budete mít dotaz k programu, obraťte se prosím na jeho tvůrce.
Zdrojové kódy ke knize Z adresy http://knihy.cpress.cz/K1775 si po klepnutí na odkaz Soubory ke stažení můžete přímo stáhnout archiv s ukázkovými kódy.
Errata Přestože jsme udělali maximum pro to, abychom zajistili přesnost a správnost obsahu, chybám se úplně vyhnout nedá. Pokud v některé z našich knih najdete chybu, ať už chybu v textu nebo v kódu, budeme rádi, pokud nám ji nahlásíte. Ostatní uživatele tak můžete ušetřit frustrace a pomoci nám zlepšit následující vydání této knihy. Veškerá existující errata zobrazíte na adrese http://knihy.cpress.cz/K1775 po klepnutí na odkaz Soubory ke stažení.
K1775.indd 23
14.9.2011 12:21:34
K1775.indd 24
14.9.2011 12:21:34
KAPITOLA 2 Ahoj světe Jak asi dobře víte, stalo se již jistou tradicí používat jako první příklad v knihách o programování program „Ahoj světe“ („Hello World“). My se budeme řídit klasickým pravidlem, které říká „nespravuj, co není rozbité“, a tuto tradici zachováme.
Projekt Hello World V tuto chvíli byste již měli mít na svém počítači nainstalované prostředí Xcode a na pevném disku někde bezpečně uloženou složku Learn Cocoa Projects. Pokud tomu tak z nějakého důvodu není, vraťte se k první kapitole a přečtěte si znovu její část věnovanou instalaci vývojových nástrojů a stažení zdrojových kódů příkladů. První projekt, se kterým budete pracovat, je ve složce 02.01 – Hello, World. Spusťte prostředí Xcode, které najdete ve složce /Developer/Applications. Pro případ, že jste ještě nikdy v prostředí Xcode nepracovali, zde popíšeme postup vytvoření nového projektu. Začněte výběrem položky New Project… z nabídky File nebo stiskem kláves SHIFT++N. V asistentu pro vytvoření nového projektu (viz obrázek 2.1) vyberte v levém sloupci pod hlavičkou Mac OS X položku Application, v pravé horní tabuli okna označte ikonu Cocoa Application a klepněte na tlačítko Choose….
K1775.indd 25
14.9.2011 12:21:34
26
Kapitola 2: Ahoj světe
Obrázek 2.1 Výběr šablony projektu Cocoa Application z asistentu New Project prostředí Xcode
Prostředí vás prostřednictvím standardního dialogu požádá o výběr názvu projektu a specifikaci jeho úložiště (viz obrázek 2.2). Nazvěte projekt Hello World a vyberte jeho úložiště – můžete jej uložit buď do složky Documents nebo vytvořit pro své vlastní Xcode projekty zvláštní složku. Není důležité, kam projekt uložíte, ale budete-li projekty ukládat na jedno místo, budou se vám později snáze hledat.
Obrázek 2.2 Výběr názvu projektu a specifikace jeho úložiště
Jakmile projekt nějak nazvete a určíte, kam se má uložit, zobrazí se nové okno projektu (viz obrázek 2.3). I když už možná prostředí Xcode znáte, pojďme se nyní nejprve společně na okno projektu krátce podívat. V tomto okně budete trávit obrovské množství času, takže se chceme ujistit, že budete vždy vědět, o čem mluvíme.
K1775.indd 26
14.9.2011 12:21:34
Projekt Hello World
27
Obrázek 2.3 Hlavní okno vašeho projektu v prostředí Xcode
V horní části okna se nachází lišta nástrojů, jejímž prostřednictvím můžete jednoduše provádět množství běžně používaných operací. Pod lištou nástrojů je pak okno rozdělené do tří různých sekcí (tabulí). Tabule, která je u levého okraje okna, se nazývá Groups & Files. V této tabuli se seskupují všechny prostředky, které tvoří váš projekt, a také jeho nejrůznější vlastnosti. Klepnete-li na malý trojúhelníček nalevo od některé z položek v této tabuli, rozbalíte ji a zobrazí se všechny její dostupné podpoložky. Klepnete-li na trojúhelníček znovu, položku opět zabalíte. Pravá horní tabule se nazývá Detail View a zobrazuje podrobné informace o položkách vybraných v tabuli Groups & Files. Pokud žádná z položek v tabuli Groups & Files vybraná není, zobrazují se v tabuli Detail View všechny soubory, které tvoří váš projekt. Vpravo dole je pak v okně tabule Editor. Vyberete-li v tabuli Groups & Files nebo Detail View jeden ze souborů a prostředí Xcode ví, jak jej zobrazit nebo upravovat, zobrazí se v tabuli Editor jeho obsah. V této tabuli budete psát a upravovat zdrojové kódy svých aplikací.
Poznámka Mnozí vývojáři se chtějí při práci v editoru tabule Detail View w zbavit, aby měli při psaní zdrojového kódu k dispozici více místa na obrazovce; tabuli Detail View můžete skrývat a opět zobrazovat stiskem kláves SHIFT++E.
K1775.indd 27
14.9.2011 12:21:35
28
Kapitola 2: Ahoj světe
Nyní obraťte svou pozornost ke složce Resources v tabuli Groups & Files. Poklepáním na složku nebo klepnutím na její trojúhelníček složku rozbalte; zobrazí se tři soubory, které pro vás prostředí automaticky vytvořilo. První dva z nich budeme prozatím ignorovat a vrátíme se k nim později. Třetí ze zobrazených souborů pak má název MainMenu.xib.
Poznámka Možná jste si všimli, že má soubor MainMenu.xib svůj vlastní rozbalovací trojúhelníček, dokonce i když se jedná o jediný soubor, a ne o složku či skupinu. Rozbalovací trojúhelníčky se používají také pro lokalizovatelné soubory, což znamená, že je lze přeložit do jiných jazyků. Pokud na trojúhelníček souboru MainMenu.xib klepnete, zobrazí se jeho jediná podpoložka, jejíž název odpovídá jazyku vybranému v záložce Internationall předvoleb System Settings vašeho operačního systému. Avšak i když má soubor MainMenu.xib rozbalovací trojúhelníček, poklepáním jej otevřete.
V okně svého projektu na soubor MainMenu.xib poklepejte. Měl by se automaticky spustit nástroj Interface Builder, editor speciálně navržený pro úpravu .xib souborů (viz obrázek 2.4). Při četbě této knihy vám bude zanedlouho jasné, že prostředí Xcode a nástroj Interface Builder k sobě patří jako slanina k vejcím nebo, chcete-li, primář Sova a doktor Blažej. Prostředí Xcode slouží k organizaci prostředků a zdrojových kódů vašeho programu a nástroj Interface Builder k vývoji jeho uživatelského prostředí. Ve skutečnosti je to pak ještě o trochu složitější, ale obecně vzato je tento popis výstižný. Souboru MainMenu.xib se říká nib soubor. Cože? Nib soubor? Proč ne xib soubor? Jedním z důvodů je, že slovo xib se mnohem hůře vyslovuje. Avšak hlavním důvodem je historický charakter pojmu nib. Předchůdce prostředí Cocoa a moderních vývojových nástrojů vyvíjela společnost NeXT, Inc., kterou založil Steve Jobs v roce 1985. Přípona .nib pak původně specifikovala soubory nástroje NeXT Interface Builder. Časem však společnost NeXT pohltila společnost Apple a z nib formátu se vyvinul novější formát založený na XML. Výsledkem kombinace názvů formátu a vývojového nástroje pak byl vznik přípony .xib. Pojem „nib soubor“ však přetrval a většina vývojářů označuje soubory s příponou .xib jako nib soubory.
Upozornění Soubor MainMenu.xib je součástí všech Cocoa projektů, které vytvoříte v prostředí Xcode. Tento soubor je zcela výjimečný a podle toho byste s ním také měli zacházet. Nepřesouvejte jej, nepřejmenovávejte a ani nijak jinak si s ním nehrajte, pokud vás k tomu výslovně nevybídneme. Když se vyvíjená aplikace spustí, automaticky načte obsah tohoto souboru do paměti. Soubor MainMenu.xib obsahuje zásadní součásti aplikace, včetně její lišty nabídek a hlavního okna (pokud nějaké má). Časem se dozvíte o nib souborech úplně vše a budete vytvářet své vlastní nib soubory. Prozatím však buďte trpěliví a soubor MainMenu.xib nechte raději na pokoji.
K1775.indd 28
14.9.2011 12:21:35
Průzkum nib souboru
29
Obrázek 2.4 Soubor MainMenu.xib otevřený v nástroji Interface Builder
Průzkum nib souboru Jakmile se Interface Builder spustí, otevře se několik oken. Velké prázdné okno s názvem Window (viz obrázek 2.4) reprezentuje hlavní okno vaší aplikace. Jak uvidíte za chvíli, do tohoto okna budete vkládat obsah okna, které se zobrazí při spuštění vašeho programu. Šablona Cocoa Application, kterou jste při založení tohoto projektu použili, předpokládá, že bude mít vaše aplikace alespoň jedno okno, a vytvořila pro vás jeho instanci. Dlouhé úzké okno MainMenu (viz obrázek 2.4) reprezentuje lištu nabídek vaší aplikace. Změny, které v tomto okně provedete, se promítnou do podoby lišty nabídek vaší aplikace, která se zobrazí při jejím spuštění. Levé horní okno s popiskem MainMenu.xib (English) je hlavní okno vašeho nib souboru. Nepleťte si jej s oknem Window, které reprezentuje hlavní okno vaší aplikace. Toto okno je v podstatě hlavní dokumentové okno nib souboru zobrazující všechna okna, rámce a další objekty, které jsou jeho součástí. Abychom ho odlišili od oken, které obsahuje, odkazujeme se na něj v textu obvykle jako na „hlavní okno nib souboru“. Pokud hlavní okno nib souboru zavřete, zavřou se automaticky všechna ostatní okna spojená s daným nib souborem.
K1775.indd 29
14.9.2011 12:21:36
30
Kapitola 2: Ahoj světe
Knihovna U pravého okraje obrazovky je okno s menší horní lištou (viz obrázek 2.4). Menší horní lišta indikuje, že okno není součástí žádného konkrétního dokumentu, ale spíše se jedná o nějaký pomocný nástroj. Toto konkrétní okno je pak známé podnázvem knihovna (library). Knihovna slouží jako paleta nebo kolekce objektů, které můžete používat při budování uživatelského rozhraní své aplikace. Najdete v ní objekt, který chcete použít, a přetáhnete jej do příslušného okna nástroje Interface Builder.
Poznámka Pokud knihovnu z nějakého důvodu zavřete, můžete ji znovu otevřít výběrem položky Library z nabídky Tools nebo stiskem kláves SHIFT++L.
Okno knihovny je rozdělené do tří základních tabulí – viz obrázek 2.5. Horní tabule se nazývá organizační a můžete v ní vybírat specifické skupiny objektů, jejichž obsah chcete zobrazit. Prostřední tabule je známá jako tabule objektů. Obsah této tabule závisí na položce vybrané v organizační tabuli. Spodní tabule se pak nazývá tabule detailů. Jak již napovídá její název, zobrazují se v ní detailní informace o položce aktuálně vybrané v tabuli objektů.
Organizační tabule
Tabule objektů
Tabule detailů
Obrázek 2.5 Součásti knihovny nástroje Interface Builder
K1775.indd 30
14.9.2011 12:21:37
Knihovna
31
Klepněte na rozbalovací trojúhelníček vedle slova Library v organizační tabuli (horní tabuli okna knihovny) – zobrazí se množství dalších kategorií. První kategorií pod kategorií Library by měla být kategorie Cocoa, která by také měla mít svůj rozbalovací trojúhelníček. Klepněte na něj také. Pod kategorií Cocoa najdete tři podkategorie. První z nich má název Application a obsahuje objekty, které se týkají celé aplikace – například nabídky a okna. Váš projekt již obsahuje všechny nabídky a okna, které budete prozatím potřebovat, takže ji můžete tentokrát vynechat. Druhá kategorie se nazývá Objects & Controllers a obsahuje objekty, které vám pomáhají spravovat data aplikace. Protože však vzorová aplikace, kterou píšete v této kapitole, žádná data nemá, můžeme tuto kategorii prozatím také vynechat. Poslední podkategorií kategorie Cocoa je kategorie Views & Cells. Tato kategorie obsahuje nejrůznější rámce vzhledu a ovládací prvky, které můžete použít při tvorbě uživatelského prostředí své aplikace. Rozbalte ji a poté klepněte na její podpoložku Inputs & Values (viz obrázek 2.6).
Obrázek 2.6 Výběr popisku v knihovně
K1775.indd 31
14.9.2011 12:21:38
32
Kapitola 2: Ahoj světe
Přetažení popisku V tabuli objektů se zobrazí seznam objektů, které můžete přetáhnout do okna aplikace a použít při budování jejího uživatelského rozhraní. Pojďte tam tedy jeden z nich přetáhnout. Prvním objektem pod položkou Inputs & Values je objekt s názvem Label (popisek), který se používá ke zobrazování statického textu – textu, který uživatel nemůže upravit. V tabuli objektů okna knihovny klepněte na první řádek a přetáhněte objekt Label do hlavního okna své aplikace (okna s popiskem Window). Výsledkem této operace bude přidání nového popisku do okna. Jestli jste okno aplikace omylem zavřeli, můžete jej opět otevřít poklepáním na ikonu Window v hlavním okně nib souboru (v okně s popiskem MainMenu.xib).
Tip Místo postupného procházení hierarchií kategorií můžete jednoduše zadat do vyhledávacího políčka ve spodní části okna knihovny slovo „label“. Výsledkem bude přefiltrování seznamu, který bude nadále zobrazovat pouze objekty, jejichž název nebo popis obsahuje slovo „label“.
Nyní pojďte popisek změnit. Poklepáním jej označte a přepněte do režimu úprav (viz obrázek 2.7).
Obrázek 2.7 Poklepáním přepnete popisek do režimu úprav
Protože je aktuální text popisku již označený, můžete začít rovnou zadávat svůj vlastní text, který jej nahradí. Dejte se do toho a vložte do popisku text „Ahoj světe“, což je jistě zajímavější než „Label“. Jestli se cítíte jako rebelové, můžete vložit do popisku i nějaký jiný text, ale potom si nestěžujte, až se na vás snese boží hněv.
K1775.indd 32
14.9.2011 12:21:38
Používání modrých pomocných čar
33
Používání modrých pomocných čar Až popisek upravíte k obrazu svému, potvrďte provedené změny stiskem klávesy RETURN, čímž současně deaktivujete režim úprav. Poté na popisek klepněte a přetáhněte jej k levému okraji okna. Jakmile se dostane blízko k okraji okna, zobrazí Interface Builder v okně přerušovanou modrou čáru (viz obrázek 2.8). Tato modrá čára indikuje, že je přemisťovaný objekt v okně správně zarovnaný s objekty, které jsou v jeho okolí. V tomto konkrétním případě pak modrá čára značí, že je popisek ve správné vzdálenosti od levého okraje okna.
Poznámka Jednou z věcí, která byla na počítačích Macintosh vždy velmi příjemná, je konzistentní vzhled uživatelského rozhraní aplikací a operačních systémů. V drtivé většině aplikací pro počítače Macintosh se můžete spolehnout na to, že lze stiskem kláves +W zavřít jejich okno, stiskem kláves +S uložit dokument, se kterým pracujete, a stiskem kláves +P ho vytisknout. Máte-li v plánu psát programy pro počítače Macintosh, měli byste se s těmito „pravidly konzistence“ seznámit. Společnost Apple je všechny integrovala do dokumentu s názvem „Human Interface Guidlines“ (Pravidla vzhledu uživatelského rozhraní), který je také známý pod zkratkou HIG. Tenké modré pomocné čáry nástroje Interface Builder jsou zde pak proto, aby vám dodržování těchto pravidel usnadnily. Kopii pravidel HIG najdete na této adrese: http://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/AppleHIGuidelines.
Obrázek 2.8 Přetáhnete-li objekt do blízkosti okrajů okna, zobrazí se modré pomocné čáry
K1775.indd 33
14.9.2011 12:21:39
34
Kapitola 2: Ahoj světe
Okno inspektoru Další důležité okno nástroje Interface Builder je velmi podobné oknu knihovny, a to do té míry, že byste si je mohli vzájemně splést. Toto okno se nazývá inspektor. Chcete-li jej otevřít, vyberte položku Inspector z nabídky Tools nebo stiskněte klávesy SHIFT++I. Inspektor je při prvním spuštění aplikace Interface Builder obvykle zavřený. Inspektor je kontextové okno, které zobrazuje informace o aktuálně vybraném objektu. Když klepnete na okno aplikace, inspektor zobrazí detailní informace o okně aplikace (viz obrázek 2.9). Klepnete-li na popisek, inspektor zobrazí detailní informace o popisku atd.
Obrázek 2.9 Inspektor zobrazující atributy okna
Prohlédněte si okno inspektoru, které je na obrázku 2.9, a všimněte si sedmi malých záložek v jeho horní části. Výběrem jednotlivých položek lze přepínat mezi sedmi různými typy inspektorů. Každý z inspektorů má také svou vlastní klávesovou zkratku, počínaje zkratkou +1 pro první ze záložek (inspektoru atributů, se kterým budete pracovat nejčastěji) a konče zkratkou +7 pro poslední z inspektorů, jehož záložka je úplně vpravo. Přehled klávesových zkratek všech sedmi inspektorů je v tabulce 2.1. Tabulka 2.1 Klávesové zkratky inspektorů nástroje Interface Builder
K1775.indd 34
Klávesová zkratka
Inspektor
+1
Inspektor atributů (AppleScript Inspector)
+2
Inspektor efektů (Effects Inspector)
+3
Inspektor rozměrů (Size Inspector)
14.9.2011 12:21:39
35
Inspektor atributů
Klávesová zkratka
Inspektor
+4
Inspektor vazeb (Bindings Inspector)
+5
Inspektor propojení (Connections Inspector)
+6
Inspektor identity (Identity Inspector)
+7
Inspektor jazyka AppleScript (AppleScript Inspector)
Inspektor atributů Začněme inspektorem atributů. Pokud jej nevidíte, zobrazte jej stiskem kláves +1 a poté klepněte na svůj popisek. Inspektor by měl vypadat stejně jako ten, který je na obrázku 2.10. Prostřednictvím inspektoru atributů můžete upravit vzhled svého popisku – můžete specifikovat jeho zarovnání, hranice nebo způsob posouvání jeho obsahu. Změna hodnot několika z těchto atributů však kupodivu nemá žádný efekt. Zkuste například něco napsat do pole Placeholder (zástupný text). Zadaný text vzhled popisku vůbec nezmění, že?
Obrázek 2.10 Inspektor atributů zobrazující všechny atributy popisku, které lze upravit v nástroji Interface Builder
K1775.indd 35
14.9.2011 12:21:39
36
Kapitola 2: Ahoj světe
O co tady jde? Když přetáhnete z knihovny do okna objekt Label, přetahujete do něj ve skutečnosti instanci třídy NSTextField. Instancemi třídy NSTextField jsou statické popisky i textová pole, do kterých lze vkládat text. Zástupný text textového pole je šedý text, který se někdy zobrazuje v prázdných textových polích a který vám říká, k čemu vlastně jsou. Příklad zástupného textu, který říká, že se zadaný text předá vyhledávači Google a použije při vyhledávání, si můžete prohlédnout na obrázku 2.11.
Obrázek 2.11 Vyhledávací pole v prohlížeči Safari zobrazuje zástupný text, který vám říká, že se zadaný text předá vyhledávači Google a použije při vyhledávání
Když však textové pole použijete jako statický popisek, není zástupný text potřeba. Jeho specifikace sice ničemu neublíží, ale ani ničemu nepomůže. V inspektoru atributů lze nastavit tolik kontextově-specifických atributů, že je nelze v této knize všechny uvést, ale rozebereme alespoň ty z nich, jejichž funkce není na první pohled úplně jasná, a postupně se seznámíte s většinou atributů, které budete obvykle používat. Pojďme společně změnit rozměry popisku. Pokud popisek není vybraný, klepnutím jej vyberte. Na každém z jeho okrajů by se měl objevit malý puntík. Tyto puntíky jsou rukojeťmi pro změnu rozměrů, které vám umožňují změnit rozměry vybraného objektu. Většina objektů, se kterými budete v nástroji Interface Builder pracovat, má čtyři tyto rukojeti, které umožňují změnu jejich rozměrů ve všech čtyřech směrech. Některé objekty, například popisky, pak mají rukojeti pouze dvě, protože některé jejich rozměry specifikují hodnoty jiných atributů. V případě popisku určuje jeho výšku velikost písma jeho textu a prostřednictvím rukojetí lze měnit pouze jeho šířku. Nyní popisek vycentrujte. Ujistěte se, že se jeho levý okraj dotýká levé modré pomocné čáry okna a poté uchopte pravou rukojeť pro změnu rozměrů a roztáhněte popisek až k pravé modré pomocné čáře okna. Až to uděláte, popisek by měl vypadat jako ten, který je na obrázku 2.12. Dokud je okno vybrané, otevřete stiskem kláves +1 inspektor atributů. V inspektoru atributů najděte sadu tlačítek s popiskem Alignment (zarovnání) a vyberte tlačítko „na střed“ (viz obrázek 2.13). Poté najděte pod hlavičkou Behavior (chování) políčko Selectable (označitelné) a zaškrtněte jej – sdělíte tak prostředí, že chcete uživateli nabídnout možnost označení popisku a uložení jeho textu do schránky (pokud to bude chtít udělat). Ve výchozím nastavení popisky označitelné nejsou, ale vy jste toto nastavení právě změnili a tento popisek proto označit půjde.
K1775.indd 36
14.9.2011 12:21:40
Změna barvy a písma textu popisku
37
Obrázek 2.12 Okno vaší aplikace v nástroji Interface Builder po změně rozměrů popisku
Obrázek 2.13 Tlačítka pro zarovnání textu popisku v inspektoru atributů s vybraným tlačítkem „na střed“
Změna barvy a písma textu popisku Nyní pojďme společně udělat poslední úpravu obsahu okna: změníme písmo, velikost písma a barvu textu popisku. Když si inspektor atributů důkladně prohlédnete, asi sami přijdete na to jak změnit barvu textu popisku, ale možná si říkáte, jestli je vůbec možné změnit jeho písmo a jeho velikost. Nebojte se, možné to je. Písmo a jeho velikost se však nenastavují v inspektoru atributů. Nejprve tedy nastavte barvu. Najděte v inspektoru barevné políčko s popiskem Text (viz obrázek 2.14) a klepněte na něj. Zobrazí se standardní paleta systému Mac OS X pro výběr barvy (viz obrázek 2.15), na které můžete vybrat barvu textu. Dejte se do toho a vyberte jakoukoliv barvu, která se vám líbí.
Obrázek 2.14 Políčko pro změnu barvy textu v inspektoru atributů
V Cocoa je naprogramovaný i samotný nástroj Interface Builder, který proto také využívá mnoho zabudované funkcionality prostředí, jako je například standardní paleta pro výběr barev. Inženýři společnosti Apple neměli zapotřebí znovu vynalézat kolo, stejně jako to nemáte zapotřebí ani vy. Při psaní svých vlastních aplikací budete moci používat přesně stejnou paletu pro výběr barev prostřednictvím pouhých několika řádků zdrojového kódu a v některých situacích nebudete muset psát ani těch několik řádků.
K1775.indd 37
14.9.2011 12:21:40
38
Kapitola 2: Ahoj světe
Obrázek 2.15 Standardní paleta systému Mac OS X pro výběr barvy se používá i při výběru barvy v aplikacích, které jsou součástí prostředí Cocoa; v tomto případě na ní vybíráte barvu textu popisku v nástroji Interface Builder
Dalším příkladem zabudované funkcionality systému Mac OS X je standardní okno pro výběr písma a jeho vlastností (viz obrázek 2.16), ve kterém můžete měnit písmo, velikost písma a atributy vybraného textu. Okno pro výběr písma otevřete v nástroji Interface Builder stiskem kláves +T. Ujistěte se, že je váš popisek stále vybraný (podívejte se, zda jsou stále vidět rukojeti pro změnu jeho rozměrů), a současně se také ujistěte, že je hlavní okno aplikace stále v popředí. Pohrajte si v okně pro nastavení písma s jeho vzhledem, aby přesně vyhovoval vašim představám. Protože se bude tato aplikace spouštět pouze na vašem počítači, můžete vybrat jakékoliv písmo a kombinaci jeho atributů. Při psaní aplikací určených k distribuci však musíte myslet na to, že byste mohli nechtěně vybrat písmo, které uživatel nemá nainstalované. Obecně řečeno je pak při vývoji standardních komponentů uživatelského rozhraní pravděpodobně lepší písmo neměnit vůbec. Konzistentní používání písma se významnou měrou podílí na konzistentním vzhledu grafického uživatelského rozhraní, kterým se počítače Macintosh proslavily. Většina popisků, tlačítek a dalších ovládacích prvků používá ve výchozím nastavení písmo Lucida Grande. V případě některých popisků můžete změnit velikost jejich písma a jeho tučnost, abyste zvýraznili nějaké rozdíly, ale písmo samotné raději neměňte. Jakmile bude popisek vypadat přesně tak, jak chcete, provedete v nástroji Interface Builder ještě jednu sérii úprav uživatelského rozhraní aplikace. Poté se vrátíte do prostředí Xcode, kde provedete několik závěrečných úprav samotné aplikace a spustíte ji. Pokud vám začíná docházet místo na obrazovce, můžete zavřít okno pro výběr písma a jeho vlastností, paletu pro výběr barev, a dokonce i hlavní okno aplikace (okno s popiskem „Ahoj světe“). Dávejte pouze pozor, abyste nezavřeli hlavní okno nib souboru (okno, ve kterém jsou ikony), protože s nib souborem ještě budete pracovat.
K1775.indd 38
14.9.2011 12:21:41
Editor nabídek
39
Obrázek 2.16 Okno systému Mac OS X pro výběr písma a jeho vlastností můžete používat ve všech Cocoa aplikacích; používá se také v nástroji Interface Builder, kde vám umožňuje měnit písmo, velikost písma a atributy písma textu, který používáte ve svém uživatelském rozhraní
Editor nabídek Pokud není editor nabídek otevřený (na obrázku 2.4 je vlevo dole), otevřete jej poklepáním na ikonu MainMenu v hlavním okně nib souboru. Editor nabídek vám umožňuje upravovat obsah lišty nabídek aplikace. Výchozí soubor MainMenu.xib má mnoho standardních nabídek, které jsou v Cocoa aplikaci užitečné. Práci s lištou nabídek se budeme podrobněji věnovat v dalších kapitolách, zde uvádíme pouze stručný přehled. Při vývoji své aplikace budete postupně propojovat jednotlivé položky nabídek, které budete chtít používat, s příslušnými akcemi. Když je pro položku v nabídce k dispozici příslušná akce, zobrazí se položka jako dostupná. Pokud ne, položka se znepřístupní (zobrazí se šedě). Některé z akcí, například akce nabídek pro práci s textem, jako jsou akce Copy a Past, jsou pro vás již předem připravené. Pokud některou z položek v nabídkách nechcete použít, je nejlepší ji jednoduše smazat. Prozatím nad tím však příliš nepřemýšlejte a pojďte upravit lištu nabídek své aplikace „Ahoj světe“. Používáte-li systém Snow Leopard, nabídka je již přednastavená tak, aby zobrazovala na relevantních místech název aplikace, ale jestli jste projekt založili v systému Leopard, uvidíte na pěti různých místech v liště nabídek a jednotlivých nabídkách text „New Application“. Všechny tyto textové řetězce pak musíte nahradit skutečným názvem své aplikace. Používáte-li operační systém Snow Leopard, můžete pokračovat četbou následující sekce („Vytvoření ikony aplikace“). Nejprve změňte název v nabídce aplikace. Nabídka aplikace je nabídka, která je na liště nabídek hned vedle nabídky Apple a jejíž název odpovídá názvu spuštěné aplikace. Nabídka aplikace mimo jiné také informuje uživatele o tom, která aplikace je aktuálně v popředí. Protože aplikace neovládá nabídku Apple, nezobrazuje se tato nabídka ani v editoru nabídek nib souboru. První nabídka vlevo, kterou můžete v editoru upravovat, je proto nabídka aplikace, která má aktuálně název NewApplication. Poklepejte na ni
K1775.indd 39
14.9.2011 12:21:41
40
Kapitola 2: Ahoj světe
a přepněte ji tak do režimu úprav. Změňte její název na Hello World (viz obrázek 2.17) a klepnutím na jinou nabídku nebo stiskem klávesy RETURN provedené změny potvrďte.
Obrázek 2.17 Změna názvu nabídky aplikace z NewApplication na Hello World v editoru nabídek
Pamatujte, že se název aplikace v nabídkách zobrazuje na pěti různých místech, takže zbývá nahradit ještě čtyři textové řetězce. Klepněte na nově pojmenovanou nabídku Hello World a nabídka by se měla rozbalit, abyste ji mohli dále upravovat (viz obrázek 2.18).
Obrázek 2.18 Rozbalení nabídky aplikace v editoru nabídek nástroje Interface Builder
V nabídce aplikace se vyskytuje řetězec NewApplication ještě na třech místech a nahradit jej můžete úplně stejným způsobem jako název samotné nabídky – jednoduše na příslušnou položku nabídky poklepejte, abyste ji přepnuli do režimu úprav, zadejte novou hodnotu a stiskem klávesy RETURN nebo klepnutím někam jinam provedenou změnu potvrďte. Nahraďte tedy tímto způsobem název aplikace ještě v položkách About, Hide a Quit. Nyní již zbývá nahradit pouze jeden další výskyt tohoto řetězce. Klepněte na nabídku Help, která je na liště nabídek editoru úplně vpravo. V této nabídce byste mohli nahradit řetězec NewApplication stejným způsobem, jako jste to udělali v předchozích čtyřech případech, ale místo toho se tentokrát celé nabídky Help rovnou zbavíte. Jedním z důvodů tohoto kroku je fakt, že tato aplikace nebude nabídku Help podporovat. Hlavním důvodem však je, že jsme vám jednoduše chtěli předvést, jak můžete v případě potřeby některou z nabídek smazat. Jednou na nabídku Help klepněte, abyste ji označili, a poté stiskněte klávesu DELETE. Nabídka Help by měla z lišty nabídek zmizet a všech pět výskytů řetězce NewApplication je v pořádku ošetřeno. Uložte nib soubor stiskem kláves +S, protože jeho úpravy v nástroji Interface Builder jsou hotové. Interface Builder můžete nechat otevřený, protože s ním budete pracovat při četbě následující kapitoly, ale hlavní okno nib souboru zavřete, protože tento konkrétní nib soubor již nijak upravovat nebudete. Poté se vraťte zpět do prostředí Xcode.
K1775.indd 40
14.9.2011 12:21:41
Vytvoření ikony aplikace
41
Vytvoření ikony aplikace Jednou z věcí, které potřebuje každá aplikace, je její vlastní ikona. Operační systém Mac OS X používá pro ikony zvláštní formát souborů a součástí sady vývojových nástrojů, kterou jste si stáhli, je i aplikace Icon Composer, ve které můžete potřebné soubory s příponou .icns vytvářet. Aplikaci Icon Composer najdete na pevném disku svého počítače ve složce /Developer/Applications/Utilities/Icon Composer.app. Ikonu musíte začít vytvářet v grafickém editoru, jako je aplikace Photoshop, Acorn nebo GIMP. Měli byste vytvořit svůj vlastní originální soubor obrázku o rozměrech 512 × 512 pixelů a uložit jej ve standardním formátu obrázků, který podporuje alfa kanály (průhlednost), jako je například formát TIFF, PSD nebo PNG. Jakmile svůj originální soubor uložíte, spusťte aplikaci Icon Composer a přetáhněte obrázek do jejího okna. Aplikace Icon Composer zkonvertuje váš obrázek do správného formátu a dokonce vám umožní i specifikovat různé obrázky pro různé rozměry ikony. To se hodí, pokud váš originální obrázek o rozměrech 512x512 pixelů obsahuje důležité detaily, které nejsou při jeho zmenšení vidět. V takovém případě můžete vytvořit mírně odlišnou verzi obrázku pro ikony o menších rozměrech, aby byly důležité informace vždy vidět. Snímek aplikace Icon Composer v akci je na obrázku 2.19.
Obrázek 2.19 Návrh ikony v aplikaci Icon Composer; všimněte si, že můžete specifikovat různé verze obrázku pro různé rozměry ikony
K1775.indd 41
14.9.2011 12:21:42
42
Kapitola 2: Ahoj světe
Poté, co importujete obrázek nebo obrázky, které tvoří vaši ikonu, můžete uložit výsledek do souboru ve formátu .icns, který lze následně importovat do prostředí Xcode a použít jako ikonu aplikace. Abyste nemuseli vytvářet svou vlastní ikonu, připravili jsme pro vás soubor ve formátu .icns, který můžete ve svém projektu použít. Chcete-li raději vytvořit svou vlastní ikonu, dejte se do toho a vytvořte v aplikaci Icon Composer soubor s názvem hello world.icns. Alternativně můžete také použít soubor hello world.icns ze složky 02 – Hello World, kterou najdete mezi staženými komponenty vzorového projektu.
Přidání ikony do projektu Ať už chcete použít námi dodanou ikonu, nebo jste vytvořili svou vlastní, přetáhněte nyní soubor hello world.icns z aplikace Finder do skupiny Resources (viz obrázek 2.20), která je v tabuli Groups & Files okna prostředí Xcode. Dáte tak prostředí Xcode na vědomí, že chcete tento soubor importovat do svého projektu. Chcete-li soubor raději vybrat prostřednictvím standardního okna pro procházení souborového systému, vyberte položku Add to Project… z nabídky Project.
Obrázek 2.20 Přetažení souboru do tabule Groups & Files je jednou z možností jak importovat do Xcode projektu nějaký soubor
K1775.indd 42
14.9.2011 12:21:42
Přidání ikony do projektu
43
Až uvolníte stisk tlačítka myši nebo vyberete soubor, který se má importovat, v okně pro procházení souborového systému, zobrazí se dialog, v němž můžete rozhodnout, jak se má soubor importovat. Nejdůležitější položkou v tomto dialogu je zaškrtnutelné políčko v jeho horní části, jehož prostřednictvím rozhodnete o tom, zda se má soubor zkopírovat do složky vašeho projektu. Pokud jej zaškrtnete, vytvoří prostředí Xcode ve složce vašeho projektu kopii souboru a potom ji do projektu importuje. Ponecháte-li jej odškrtnuté, propojí prostředí Xcode projekt s originálním souborem. Většinou pak budete chtít vytvořit kopii souboru ve složce projektu, aby byly všechny prostředky projektu pohromadě. Pokud však sdílíte prostředky mezi více projekty, může se hodit ponechat toto políčko odškrtnuté, aby se prostředí Xcode odkazovalo na soubor v jeho původním úložišti.
Obrázek 2.21 Prostředí Xcode vás požádá, abyste určili, jak se má daný objekt importovat
Ujistěte se, že je políčko zaškrtnuté, a poté stiskněte tlačítko Add. Soubor se importuje do vašeho Xcode projektu a v jeho složce se vytvoří kopie souboru. Při každé kompilaci projektu nyní prostředí Xcode přibalí soubor k výsledné aplikaci. K tomu, aby se soubor stal ikonou aplikace, to však nestačí. Součástí aplikace může být potenciálně i více než jeden soubor ikony, takže musíte prostředí Xcode explicitně sdělit, který ze souborů má pro hlavní ikonu aplikace použít. Uděláte to tak, že klepnete ve skupině Resources, která je v tabuli Groups & Files, na položku Info.plist a otevřete tak tento soubor v tabuli editoru (viz obrázek 2.22). Soubor
K1775.indd 43
14.9.2011 12:21:43
44
Kapitola 2: Ahoj světe
Info.plist obsahuje nejrůznější informace o vaší aplikaci a jednou z nich je také název souboru její ikony.
Obrázek 2.22 Soubor Info.plist otevřený v tabuli editoru; zde můžete specifikovat název souboru ikony aplikace
Seznamy vlastností Info.plist je speciální druh souboru známý jako seznam vlastností. Seznamy vlastností (property list) se používají v systému OS X ve velké míře, a ačkoliv se s nimi běžní uživatelé většinou nesetkají, pracuje se s nimi v mnoha oblastech vývoje v prostředí Cocoa a vy se s nimi budete setkávat velmi často. Tyto soubory obsahují seznamy záznamů. Každý ze záznamů na seznamu tvoří pár klíč–hodnota. Na obrázku 2.22 si můžete prohlédnout zabudovaný editor seznamů atributů prostředí Xcode zobrazující obsah souboru Info.plist. Každý řádek reprezentuje jeden záznam. Jak vidíte, seznam vlastností tvoří dva sloupce. Levý sloupec má hlavičku Key (klíč) a pravý pak Value (hodnota).
Poznámka V seznamech vlastností lze také ukládat pod jediným klíčem více různých hodnot. Pod jediným klíčem můžete uložit pole (seznam) položek, nebo dokonce i celou další sadu klíčů a hodnot. Tuto funkcionalitu sice začnete využívat až později, ale máme za to, že byste o ní měli vědět.
Na obrázku 2.22 je v otevřeném seznamu vlastností zvýrazněný klíč Icon file (soubor ikony). Hodnota náležející k tomuto klíči, která se zobrazuje v pravém sloupci, by měla být prázdná. Poklepejte na prázdné políčko hodnoty vpravo od klíče Icon file a vložte do něj řetězec hello world.icns. Poté seznam vlastností uložte stiskem kláves +S. Jste připravení napsat nějaký zdrojový kód? Myslíte, že na to teď dojde? Ne. Žádný zdrojový kód není potřeba – aplikace je hotová.
K1775.indd 44
14.9.2011 12:21:43
Spuštění aplikace
45
Spuštění aplikace Aplikaci zkompilujete a spustíte výběrem položky Build & Run z nabídky Build nebo stiskem kláves +R. Prostředí Xcode aplikaci zkompiluje, což chvíli trvá, a poté spustí. Po spuštění aplikace by se mělo na obrazovce objevit okno s vaším vycentrovaným a obarveným popiskem. Když se podíváte do Docku (který je u spodního okraje primární systémové obrazovky vašeho počítače), měli byste v něm vidět aplikaci reprezentovanou ikonou, kterou jste do projektu importovali. To však ještě není vše! Vyberte z nabídky Hello World (viz obrázek 2.23) položku About Hello World, a nejenom že se zobrazí okno About, aniž byste byli něco takového naprogramovali, ale dokonce se v něm zobrazí i ikona aplikace.
Obrázek 2.23 Vaše aplikace používá svou ikonu na mnoha různých místech včetně okna About
To však stále ještě není vše. Přesuňte kurzor myši nad slova „Ahoj světe“, která jsou v hlavním okně vaší aplikace. Kurzor by se měl změnit na textový – protože jste nastavili popisek jako označitelný, změní prostředí Cocoa automaticky kurzor, aby upozornilo uživatele na to, že může daný text označit. Dejte se do toho a poklepejte na slovo „Ahoj“ – výsledkem bude jeho označení. Když nyní klepnete na nabídku Edit, uvidíte, že položka Copy již není nadále šedá. Klepnete-li na ni, program zkopíruje slovo „Ahoj“ do schránky a budete jej moci vložit do jakékoliv jiné aplikace, která jej bude ochotná přijmout. Vyzkoušejte si to: označte slovo „Ahoj“, vyberte v nabídce Edit podnabídku Speech a klepněte v ní na položku Start Speaking. Vaše aplikace použije nástroj systému Mac OS X pro mluvenou reprezentaci textu a řekne „Ahoj“. Aplikace podporuje kopírování textu do schránky a nástroj pro mluvenou reprezentaci textu, aniž byste museli napsat jediný řádek zdrojového kódu. Bez jakéhokoliv velkého úsilí jste dosáhli toho, že se vaše aplikace chová jako opravdová aplikace pro systém Macintosh, má svá okna a lištu nabídek a reaguje na běžné klávesové zkratky, jako je například zkratka +Q, která ji ukončí. Hlavní okno vaší aplikace lze přesouvat, minimalizovat do Docku, a dokonce i zavřít. Aplikaci můžete skrýt nebo můžete skrýt všechny ostatní aplikace. Všechnu tuto funkcionalitu jste získali téměř zdarma, a to včetně poštovného a balného. To je pravá síla prostředí Cocoa. Pokud váš počítač již ví, jak něco udělat, nebudete pravděpodobně muset napsat mnoho zdrojového kódu, abyste mohli tuto funkcionalitu použít, a někdy dokonce nebudete muset napsat vůbec žádný kód.
K1775.indd 45
14.9.2011 12:21:44
46
Kapitola 2: Ahoj světe
Sdílení radosti z vašeho výtvoru s okolním světem Rádi bychom vám v této kapitole ukázali ještě jednu věc. Právě jste vytvořili aplikaci, ale kde vlastně je? Co když budete chtít svou aplikaci někomu dát nebo prodat, aby ji mohl používat na svém počítači? V takovém případě budete muset především aplikaci zkompilovat trochu jiným způsobem. Podíváte-li se na levý horní roh okna prostředí Xcode, najdete zde velkou rozbalovací nabídku Overview (přehled).
Obrázek 2.24 V levé části lišty nástrojů prostředí Xcode je dělená rozbalovací nabídka, ve které můžete specifikovat verzi systému Mac OS X, pro kterou se aplikace kompiluje, konfiguraci kompilace a cílovou architekturu
Tato rozbalovací nabídka funguje trochu jinak než většina nabídek tohoto druhu. V této nabídce můžete vybrat více různých položek, které všechny dohromady ovlivní kompilaci aplikace. Na obrázku 2.25 si můžete prohlédnout, jak nabídka vypadá, když ji rozbalíte. Nabídka obsahuje několik sekcí a v každé z nich můžete vybrat položku, která změní nějaký aspekt kompilačního procesu. V tomto případě pak můžete změnit pouze výběr v sekcích Active Configuration a Active Architecture.
Obrázek 2.25 Rozbalená nabídka Overview
Chcete-li aplikaci zkompilovat tak, aby ji bylo možné distribuovat, musíte provést změnu výběru položky v sekci Active Configuration. Ve výchozím nastavení při práci v prostředí Xcode pracujete ve vývojové konfiguraci (debug configuration). Když aplikaci zkompilujete tímto způsobem, prostředí Xcode při kompilaci k aplikaci přibalí různé doplňky,
K1775.indd 46
14.9.2011 12:21:44
Sdílení radosti z vašeho výtvoru s okolním světem
47
s jejichž pomocí můžete snáze identifikovat chyby v jejím návrhu. Tyto pomocné symboly vám například umožňují zjišťovat a nastavovat hodnoty různých proměnných za běhu programu nebo prostřednictvím debuggeru (ladícího programu) provádět zdrojový kód aplikace řádek po řádku. V této kapitole nebudete dělat nic, k čemu byste tyto symboly potřebovali, ale obecně vzato je dobrým návykem vyvíjet aplikaci ve vývojové konfiguraci a tuto konfiguraci změnit pouze ve chvíli, kdy chcete vytvořit její verzi určenou k distribuci. Aplikace zkompilovaná ve vývojové konfiguraci je o něco objemnější a pomalejší než aplikace určená k distribuci. Kompilujete-li aplikaci pro distribuci, je na druhou stranu obvykle o něco pomalejší její kompilace, protože kompilátor odvádí více práce při snaze optimalizovat výsledný kód a obvykle také aplikaci kompiluje pro více různých platforem (Intel a PowerPC). Tak či onak, chcete-li svoji aplikaci distribuovat, musíte v nabídce Overview vybrat jinou konfiguraci, konfiguraci distribuční – Release, takže ji teď vyberte. Jakmile to uděláte, zkompilujte aplikaci výběrem položky Build z nabídky Build nebo stiskem kláves +B. Až prostředí Xcode ohlásí, že projekt úspěšně zkompilovalo, klepněte pravým tlačítkem myši na objekt, který je úplně nahoře v tabuli Groups & Files. Tento objekt má název Hello World a reprezentuje váš projekt.
Poznámka Občas vás vyzveme, abyste na něco klepli pravým tlačítkem myši. Pokud používáte starší myš s jediným tlačítkem, dosáhnete stejného výsledku tak, že klepnutí provedete za současného stisku klávesy Ctrl.
V kontextové nabídce, která se zobrazí, vyberte položku Reveal In Finder – tato akce vás přesune do složky projektu v aplikaci Finder. V okně, které se otevře, najdete další složku s názvem build a v ní další tři složky. Ve složce Hello World.build jsou uložené dočasné soubory, které prostředí Xcode vytvořilo při překladu aplikace. Druhé dvě složky nesou názvy odpovídající názvům konfigurací, které jste použili při překladu aplikace: Debug a Release. Ve složce Release pak najdete dva soubory a jeden z nich, soubor Hello World nebo Hello World.app (v závislosti na nastavení aplikace Finder), je vaše zbrusu nová aplikace. Blahopřejeme, právě se z vás stali vývojáři. To, na co se díváte, je zcela plnohodnotná aplikace, stejná, jako jsou jiné aplikace ve vaší složce Applications. Můžete ji poslat elektronickou poštou tetě Miladě nebo svému nejlepšímu příteli, abyste jim dali na vědomí, že jste skuteční vývojáři aplikací pro systém Mac OS X. O druhý soubor ve složce se nestarejte. Tomuto souboru se někdy říká soubor symbolů a používá se při pokročilejším způsobu hledání chyb, který je mimo oblast zájmu této knihy. Pouze vás ještě upozorníme na častou chybu: když přepnete prostředí Xcode do distribuční konfigurace a pak se do něj vrátíte, abyste pokračovali v dalším vývoji, nesmíte
K1775.indd 47
14.9.2011 12:21:45
48
Kapitola 2: Ahoj světe
zapomenout opět aktivovat konfiguraci vývojovou. Když je nyní aplikace již hotová, měli byste to udělat – pro případ, že se rozhodnete v jejím vývoji ještě pokračovat.
Na shledanou Ahoj světe V této kapitole jste se seznámili s prostředím Xcode a s nástrojem Interface Builder – dynamickým duem vývojových nástrojů prostředí Cocoa. Navrhli jste plnohodnotnou aplikaci, aniž byste museli napsat jediný řádek zdrojového kódu. Naučili jste se přidat do hlavního okna aplikace textový popisek, změnit jeho atributy, upravit nabídky aplikace, přiřadit jí ikonu, a dokonce jste se i dozvěděli, jak vytvořit její distribuční verzi. V této kapitole jste také poprvé okusili sílu prostředí Cocoa, když jsme vám předvedli, co všechno můžete dokázat, aniž byste napsali jediný řádek zdrojového kódu. V následující kapitole uvidíte, jaké možnosti se vám otevřou, když nějaký ten zdrojový kód napíšete.
K1775.indd 48
14.9.2011 12:21:45
KAPITOLA 3 Světla, Kamera, Akce! (a také outlety) Je opravdu neuvěřitelné, kolik toho můžete v prostředí Cocoa dokázat, aniž byste psali nějaký zdrojový kód. Ale aplikace, kterou jste naprogramovali v předchozí kapitole, postrádala jednu důležitou vlastnost: schopnost interakce s uživatelem. Když jste při četbě předchozí kapitoly pracovali s nástrojem Interface Builder, viděli jste knihovnu plnou objektů, jako jsou například tlačítka nebo textová pole, které můžete použít v uživatelském rozhraní aplikace. Tyto objekty jsou však k ničemu, pokud jim nemůžete žádným způsobem určit, zda je někdo použil či do nich vložil nějaká data. V této kapitole vám proto ukážeme, jak lze jejich prostřednictvím umožnit uživatelům s aplikací nějak interagovat. Nejprve si řekneme něco více o způsobu organizace systému Mac OS X, abyste věděli, kde se nachází funkcionalita, kterou budete používat. Poté se dozvíte, co to je vzor model-vzhled-řízení (model-view-controller), na jehož základě prostředí Cocoa pracuje a kterým byste se měli řídit i při vývoji svých vlastních aplikací. Poté rozebereme koncepci akcí a outletů, které umožňují vašemu kódu interagovat s uživatelským rozhraním navrženým v nástroji Interface Builder. A nakonec se společně pustíme do vývoje další aplikace, která však bude tentokrát přijímat data zadaná uživatelem a reagovat na ně.
K1775.indd 49
14.9.2011 12:21:45