Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Software
Xcode 4: projekt a cíle
15. června 2011, 00.00 | Dnes si v rámci naší túry prostředím Xcode 4 doplníme informace o službách, jež najdeme v horní liště okna, a pak se budeme podrobně věnovat pojmům "projekt" a "cíl", vysvětlíme si jejich smysl a obsah, a začneme si ukazovat kde – a jak – s nimi v novém SDK pracovat.
V minulém dílu našeho seriálu jsme poprvé otevřeli projekt v Xcode 4 a ukázali jsme si základy práce s "navigátorem" při levém okraji okna a také služby, které nabízí levá část horní lišty, jejichž pomocí lze projekt sestavit a spustit – jistě jste si tlačítko "Play" zkusili a určitě fungovalo bez problémů:)
Dnes se rychle podíváme na zbývající část horní lišty a pak se budeme věnovat zcela novému systému, jehož prostřednictvím se v Xcode 4 dostaneme k atributům projektu i jeho cílů.
Zbytek horní lišty
Jak už dávno víme, uprostřed horní lišty je absurdní okénko, ukazující aktuální seznam procesů, jež Xcode spravuje, a také počet varovných a chybových hlášení, jež v projektu jsou (absurdní není obsahem, ale provedením, jež kvůli nesmyslné snaze o podobnost s iTunes zamezilo možnosti konfigurovat obsah lišty).
Vpravo zbývá několik málo ikonek:
Prvá trojice přepíná režimy editoru mezi standardním, rozděleným na více panelů obsahujících více zdrojových textů (nebo více pohledů na týž zdrojový text) zároveň – tato služba se nyní nazývá "Asistent", a oproti přístupu z Xcode 3 je velmi zmatená; ukážeme si ji až později –, a srovnání různých verzí v systému správy zdrojových textů (Xcode 4 standardně podporuje git nebo subversion).
Pomocí druhé trojice ikonek prostě zobrazujeme – nebo skrýváme – části okna, jež jsme si ukázali už v předminulém dílu: levý sloupec, obsahující "navigátor", dolní panel s výstupem laděného programu (a případně proměnnými v debuggeru), a pravý sloupec, zvaný "Utility", do nějž programátoři Apple brutálně nacpali vše, co jim jen přišlo pod ruku, především "inspektory" a "palety".
Poslední ikonka pak aktivuje okno "Organizér", s nímž jsme se již také zběžně seznámili; prozatím je pro nás asi jeho hlavní službou to, že obsahuje kromě mnoha jiných věcí (speciálně všeho, co bylo v podobném okně Xcode 3) také dokumentaci; časem si ale ukážeme řadu jeho dalších možností.
Projekt a cíle
Pro ty, kdo náš seriál nesledují od začátku, se krátce zdržíme u pojmů "projekt" a "cíl".
Pojem "projekt" často používáme v různých kontextech trochu odlišným způsobem; tam, kde je ale potřeba přesnost, je "projekt" prostě ten soubor (ve skutečnosti jde o "package", tedy složku, již ale Finder zobrazuje jako soubor) s příponou .xcodeproj, který jsme v Xcode otevřeli.
Někdy sice pro jednoduchost říkáme "projekt" i složce, ve které tento soubor – spolu s našimi zdrojovými soubory a podobnými věcmi – je, a také říkáváme, že "projekt tyto zdrojové soubory obsahuje". To je ale jen nepřesné zjednodušující přiblížení; ve skutečnosti tomu je takto:
• projekt je jen a pouze onen výše zmíněný soubor s příponou .xcodeproj;
• zdrojové soubory apod. v něm nejsou obsaženy; pouze s ním obvykle – ne nutně – sdílejí stejnou složku; budeme jí v případě potřeby říkat "složka projektu";
• projekt ale obsahuje odkazy na tyto soubory, spolu s informací o tom, jak se ten který soubor má zpracovat.
Je tedy snadno možné, aby ve složce projektu byly soubory, na něž vůbec v samotném projektu žádný odkaz není (je to poměrně běžné s různými "README" apod.) Součástí projektu mohou naproti tomu být i odkazy na soubory, jež leží mimo složku projektu (ačkoli ve většině případů to není příliš šikovné; Xcode to ale umožňuje pro tu menšinu situací, v nichž je to k nezaplacení). Konečně pak se může stát, že na místě, jež odpovídá některému z odkazů v projektu, vůbec žádný soubor není: v takovém případě Xcode jeho jméno zobrazí v Navigátoru červeně.
A co "cíle"?
Inu, již hodně dávno programátoři zjistili, že je často praktické pracovat nad "několika projekty", jež spolu úzce souvisí – a mnohdy i sdílejí některé zdrojové texty – zároveň. Typickým případem může být třeba knihovna služeb, pak testovací kód pro ověření správnosti této knihovny, a konečně pak aplikace, jež služeb knihovny využívá. V Mac OS X, kde máme mnohem bohatší možnosti než v iOSu, často takto spolupracující projekty zahrnují třeba pomocný program, který běží na pozadí a umožňuje aplikaci "neustálou pozornost" i tehdy, když aplikace není aktivní, importér pro Spotlight, umožňující efektivní prohledávání specifických dat dané aplikace apod.
V Xcode tradičně pro tyto účely slouží tzv. "cíle": jeden jediný projekt může obsahovat libovolně mnoho samostatných "podprojektů", z nichž každý sestaví něco jiného – tedy např. jeden onu knihovnu, druhý aplikaci, třetí testovací kód, čtvrtý pomocný program... – ale všechny jsou součástí téhož projektu, mohou snadno sdílet stejná nastavení a společné zdrojové soubory. Těmto "podprojektům" právě říkáme "cíle" (targets).
Uvidíme později, že Xcode 4 nabízí alternativní možnost "sdružování projektů", tzv. Workspaces; obecně platí, že různé cíle v témže projektu se hodí pro věci spolu úzce spojené – např. právě knihovna a její testovací třídy, nebo aplikace a její importér pro Spotlight – kdežto tam, kde je vazba volnější – např. skupina spolupracujícícho aplikací – bude obecně vhodnější "workspace". Tím se ale budeme zabývat až později.
Zpět k cílům: je to právě cíl, kde jsou uloženy informace o tom, jak přesně požadovaný výsledek sestavit – tedy které zdrojové soubory přeložit, jaké pomocné datové soubory k nim přidat, a jak výsledek zformovat do požadovaného cílového souboru nebo složky.
Projekt – náš soubor .xcodeproj – cíle fakticky obsahuje; cíl není ničím jiným, než záznamem uvnitř projektového souboru. Součástí tohoto záznamu jsou všechna potřebná nastavení a atributy; mezi jiným samozřejmě také odkazy na ty odkazy na soubory, jež se v rámci cíle mají zpracovat.
"Odkazy na odkazy?" Jistě: připomeňme, že projekt samotný neobsahuje vlastní soubory, ale jen odkazy na ně. Cíle pak obsahují právě odkazy na tyto odkazy! Jsou-li tedy součástí projektu např. kromě jiného odkazy na soubory "MyViewController.m" a "AnotherViewController.m", může jeden cíl obsahovat pouze odkaz na prvý z nich.
Atributy spojené se soubory
Před chvilkou jsme si řekli, že v projektu jsou uloženy odkazy na soubory a s nimi že jsou spojeny "informace o tom, jak se ten který soubor má zpracovat". Tyto informace si můžeme zobrazit (a do jisté míry je měnit) pomocí tzv. inspektoru souborů; v Xcode 4 je tento inspektor jedním z mnoha nešťastníků, již se musí vzájemně prát o ukrutně přelidněný prostor pravého sloupce "Utility". Chceme-li tedy znát informace o některém z odkazů na soubory, uložených v projektu, pak musíme
• zajistit, aby sloupec "Utility" byl zobrazen (např. pomocí ikonky v horní liště okna, již jsme si ukázali na začátku dnešního dílu);
• přepnout tento sloupec do režimu, v němž jeho horní část zobrazuje inspektor souboru – k tomu slouží ikonka vzdáleně připomínající list papíru s ohrnutým rohem;
• a zvolit požadovaný odkaz v Navigátoru.
Proč píšeme "požadovaný odkaz" a ne "požadovaný soubor"? Protože, jak už víme z minulého odstavce, Navigátor ve skutečnosti zobrazuje právě odkazy z projektu, nikoli skutečné soubory; je dokonce možné, aby skutečný soubor neexistoval – Navigátor odkaz přesto zobrazí, ale červeně.
Bude to vypadat přibližně takto:
Za samostatnou zmínku stojí následující atributy:
• File Type určuje typ souboru; podle něj Xcode pak rozhodne jak soubor zobrazovat i jak jej zpracovávat. Standardně je typ určen při vložení souboru do projektu podle jeho přípony; v některých případech můžeme chtít typ dodatečně změnit. Typicky tomu tak bývá u souborů obsahujících zdrojový text v Objective C++;
• Location je typ odkazu: projekt totiž pro každý z odkazů obsahuje nikoli absolutní cestu, ale cestu relativní vůči nějakému známému kořenovému bodu. Tím může být složka projektu, nejbližší nadřízená skupina (nejběžnější případ), složka, do níž jsou generovány výsledky sestavení apod.;
• pod volbou Location je řádek, v němž právě vidíme relativní umístění souboru vůči zvolené lokaci, a...
• ... v dalším řádku, označeném Full Path, vidíme aktuální umístění souboru, jež vzniklo složením cesty ke zvolené lokaci a umístěním souboru uvnitř ní.
Ačkoli umístění v lokaci nelze editovat přímo jako text, máme možnost je změnit: klepneme-li na malou ikonku vpravo – má asi připomínat okno Finderu –, otevře se lístek pro výběr souboru, v němž vybereme požadovaný cíl. Takto také můžeme znovu propojit "ztracený" soubor s odkazem v případě, kdy je odkaz zobrazen červeně (např. proto, že jsme soubor přemístili do jiné složky).
Konečně pak Target Membership prostě informuje o tom, v kterých cílech je odkaz na tento (odkaz na) soubor: pokud se nám nějaký soubor překládá v rámci cíle, v němž jej použít nechceme, vypneme zde přiřazení – a naopak. Mimochodem, pokud nám Xcode hlásí varování
The Copy Bundle Resources build phase contains this target's Info.plist file...
znamená to, že jsme nějakým omylem do cíle přidali soubor Info.plist, který tam nepatří, protože se zpracovává speciálním způsobem; najdeme jej tedy v Navigátoru a z cíle jej pomocí tohoto ovladače odstraníme.
Pro některé specifické typy souborů zde navíc máme k dispozici další pomocné informace: pro obrázky se zde zobrazí rozměry a formát, pro XIBy zde můžeme zamykat změny pro bezpečnou lokalizaci apod.
Uživatelům Xcode 3 se patrně bude stýskat po řadě možností; namátkou třeba
• zobrazit atributy více různých souborů najednou;
• zobrazit příslušnost k cíli pro všechny soubory z nějaké skupiny najednou;
• zobrazit všechny soubory, jež jsou součástí zvoleného cíle...
Bohužel, nakolik je mi známo, nic z toho skutečně Xcode 4 nenabízí :(
Další obsah projektu
Kromě odkazů na soubory a atributů s nimi přímo spojenými ovšem projekt obsahuje řadu dalších věcí – samotné cíle, atributy souvisící se sestavováním apod.
Pro přístup k v Xcode 4 prostě v Navigátoru označíme samotný projekt. V hlavní editační oblasti v prostřední části okna – tam, kde obvykle bývá obsah zdrojových souborů – se pak objeví specializovaný editor, zobrazující většinu atributů projektu samotného a také jednotlivé cíle (a jak uvidíme, aby to bylo složitější, ještě leccos jiného).
V levé části tohoto editoru vždy vidíme ikonu projektu samotného a pod ní ikony všech cílů, jež jsou v tomto projektu uloženy:
Chceme-li vidět atributy vlastního projektu, zvolíme zde jeho ikonu (jak tomu je na obrázku); chceme-li pracovat s některým z cílů, vybereme jej zde. V obou případech se v pravé části okna objeví poměrně složitý editor, obsahující několik záložek (s nestandardním grafickým provedením, aby se nepletly se záložkami na úrovni celého okna). U projektů jsou tyto záložky jen dvě, "Info" a "Build Settings":
Na obrázku zároveň vidíme to jediné nastavení, jímž se v tuto chvíli budeme zabývat – pod ním jsou ještě položky pro využití předdefinovaných konfigurací, pro volbu konfigurace použité při sestavování projektu z příkazové řádky a konečně také pro práci s lokalizacemi: to vše jsou pokročilé záležitosti, jimiž se budeme zabývat až mnohem později.
Naopak "Deployment Target" je velmi důležitý a proto mu věnujeme samostatný odstavec.
Co je to "Deployment Target"?
Při programování pro Mac OS X nebo iOS využíváme – nebo bychom alespoň měli – vždy to nejnovější dostupné SDK: v současnosti je to Mac OS X 10.6 a iOS 4.3 (pro praktický vývoj pochopitelně nepoužíváme beta release, byť i bychom již k Lionu a iOSu 5 měli přístup). Xcode 4 při standardním nastavení také vždy nejnovější dostupné SDK vybere automaticky (pokud bychom otevřeli některý ze starších projektů, v nichž se ještě SDK volilo přímo, bude třeba toto nastavení změnit; jak to učinit uvidíme příště).
Naproti tomu ale obvykle chceme, aby aplikace, jež píšeme, bylo možné používat i na strojích, jež obsahují starší operační systém; v současnosti má smysl podporovat Mac OS X minimálně od verze 10.5 nahoru (někdy – podle typu aplikace – i starší); podobně iOS je v současnosti vhodné podporovat alespoň od verze 4.1, ne-li 4.0. Taková podpora má dvě části:
• ta snadná (ale důležitá) spočívá právě v tom, že v projektu určíme nejnižší verzi systému, již hodláme podporovat, jako "Deployment Target". Vidíme tedy na obrázku, že náš testovací program není dobře nastaven: chodil by totiž pouze na přístrojích s iOSem 4.3;
• ta daleko těžší část spočívá v tom, že musíme být velmi opatrní při používání služeb, jež byly nově zavedeny v nových verzích systému: nemůžeme je použít "jen tak", musíme nejprve ověřit, zda vůbec jsou k dispozici, a pokud ne, musíme použít nějaký vhodný náhradní kód.
Druhým bodem se zatím zabývat nebudeme (mimochodem, je poměrně problematický, protože Apple bohužel neumožňuje snadno ověřit, zda volané služby odpovídají nebo neodpovídají zvolené verzi systému) – nyní se učíme používat Xcode; k trikům a postupům pro psaní kódu se vrátíme zase později.
Pokud bychom snad měli v projektu více cílů, určených pro různé verze systému, pak je na této úrovni vhodné nastavit tu, kterou považujeme za "základní"; pro konkrétní cíle ji pak budeme moci nahradit jinou, jako "výjimku pro ten který cíl". K tomu se ale dostaneme až v příštím dílu, kdy se začneme zabývat obsahem cíle a prací s ním.
Obsah seriálu (více o seriálu):
- Nastal čas na kakao...
- Tak nejdřív kakao ochutnáme...
- Programovací jazyk C: velmi, velmi stručně
- Objective C: to si vysvětlíme podrobněji
- Co jsme si o Objective C ještě neřekli...
- Nastal čas na kakao - Vznik a zánik objektů
- Nastal čas na kakao - Kopírování objektů
- Nastal čas na kakao - Skryté podtřídy
- Nastal čas na kakao - Základní služby objektů
- Nastal čas na kakao - Jak správně psát v Objective C
- Nastal čas na kakao - Jak správně importovat
- Nastal čas na kakao - Podtřídy, delegáti, vkládání, jak se to rýmuje?
- Nastal čas na kakao - Využití kategorií namísto dědičnosti
- Nastal čas na kakao - Vkládání objektů a přesměrování zpráv
- Nastal čas na kakao - Inicializace a rušení objektů
- Nastal čas na kakao - Metody initWith... a designovaný inicializátor
- Nastal čas na kakao - Inicializace: tipy a triky
- Nastal čas na kakao - Accesory: přístup k proměnným instancí
- Nastal čas na kakao - Šedá je teorie, zelený je strom života...
- Nastal čas na kakao - Více o XCode: inspektory
- Nastal čas na kakao - Aplikace RSS2: datový model
- Nastal čas na kakao - Aplikace RSS: implementace datového modelu
- Nastal čas na kakao - Aplikace RSS: parsování XML
- Nastal čas na kakao - Interface Builder a uživatelské rozhraní
- Nastal čas na kakao - Interface Builder: atributy objektů
- Nastal čas na kakao - Interface Builder: atributy objektů
- Nastal čas na kakao - Druhý kontrolér a dokončení aplikace
- Nastal čas na kakao - Drobná vylepšení a zdokonalení...
- Nastal čas na kakao - Ladění
- Nastal čas na kakao - Třídy Foundation Kitu
- Nastal čas na kakao - Třídy Foundation Kitu (2)
- Nastal čas na kakao - Textové řetězce: NS(Mutable)String
- Nastal čas na kakao - Čísla, binární data a další...
- Nastal čas na kakao - Archivace objektů
- Nastal čas na kakao - Trocha magie, aneb distribuované objekty
- Nastal čas na kakao - Málem bychom zapomněli: NSAutoreleasePool
- Nastal čas na kakao - Zpracování výjimek: NSException
- Nastal čas na kakao - NSInvocation a černá magie
- Nastal čas na kakao - Kakao v Tygrovi
- Nastal čas na kakao - Notifikace: nepřímé předávání zpráv
- Nastal čas na kakao - NSUserDefaults
- Nastal čas na kakao - Co nového ve Foundation Kitu
- Nastal čas na kakao – s Intelem, s Intelem, jedeme do...
- Co nového v Xcode
- Začínáme s AppKitem
- Jak MVC v Kakau vypadá doopravdy?
- Jak MVC v Kakau vypadá doopravdy: dokončení
- Přehled tříd AppKitu
- Nastal čas na kakao - Přehled tříd AppKitu 2
- Přehled tříd AppKitu 3: zbývající třídy GUI
- Přehled tříd AppKitu 4: textový systém
- Nastal čas na kakao - Přehled tříd AppKitu 5: hlavně grafika
- Přehled tříd AppKitu 6: dokumentový systém
- Přehled tříd AppKitu 7: dokončení
- Pojmenované vlastnosti objektů
- Pojmenované vlastnosti objektů: implementace
- Pojmenované vlastnosti objektů: relace 1:N
- Pojmenované vlastnosti objektů: řazení jmen a agregační funkce
- Sledování změn objektů
- Sledování změn objektů – ukázka
- Sledování změn objektů – zdrojový kód
- Sledování změn objektů: kód modelu
- Sledování změn objektů: přímý přístup
- Kontroléry a vazby
- Vázání vazeb
- Další vazby s jednoduchým kontrolérem
- Implementace a použití převodu hodnot
- Validace hodnot
- Validace a chyby, a jedna hezká vazba...
- Práce s polem objektů
- Základní vazby NSArrayControlleru
- Převodníky, přepínače, placeholdery
- Mírná vylepšení v mezích zákona
- Objective C 2.0 - novinky z Leoparda
- NSTreeController
- Programování v Cocoa - Pár tipů a triků
- Programování v Cocoa - Základy kreslení
- Kterak nakreslit modrý obdélník...
- Další služby pro kreslení
- Obrázky a písmenka...
- Události a myš
- Lepší práce s myší
- Události klávesnice
- Input Management
- Příkazy a schránka
- Další události
- Táhni a padni
- Byli jsme na tahu; nyní padneme.
- Zvolme si, jak vhodit
- Drobnosti a chybičky
- Speciální případy tahání či házení
- Kterak táhnout něco, co neexistuje?
- Jak na sítě...
- NSURLConnection
- Safari za minutu
- Služby WebKitu
- Kakao v Leopardu
- Druhé Objective C
- Druhé Objective C: různé drobnosti
- Druhé Objective C: kategorie a protokoly
- Druhé Objective C: nový příkaz cyklu
- Druhé Objective C: atributy a accesory
- Druhé Objective C: atributy a accesory
- 64 je dvakrát 32
- Ubicumque dulce est, ibi et acidum invenies...
- Irbis: že prý žádné novinky?
- Blok sem, blok tam, nám už je to všechno jasné...
- Bloky jsou i v AppKitu
- Irbis a Foundation Kit
- Kde jsou má data?
- Kde jsou má data? V NSCache!
- Soubor, jméno, URL, jak se to rýmuje...
- Další podpora NSURL
- Zabíjení!
- A máme tady i...OS!
- Systémové prvky GUI
- Programování pro iOS 1. díl - Rozdíly mezi "i" a "Mac"
- Programování pro iOS - 2. Začínáme programovat
- Programování pro iOS - 3. základní ovladače a propojení GUI s kódem
- Programování pro iOS - 4. Varovná hlášení
- Programování pro iOS - 5. Rámce a jejich řídicí objekty
- Programování pro iOS - 6. Ukládání dat
- Programování pro iOS - 7. Správa paměti a starý restík
- Programování pro iOS - 8. Dokončení aplikace
- Programování pro iOS - 9. Jak dostat aplikaci do iPhone
- Programování pro iOS - 10. Instalace aplikace do cizího iPhone
- Programování pro iOS - 11. Jak dostat aplikaci do libovolného iPhone
- Programování pro iOS - 12. Touching!
- Programování pro iOS - 13. Kreslíme na iPhone
- Programování pro iOS - 14. Udělejme gesto
- Programování pro iOS - 15. Další gesta
- Programování pro iOS - 16. Více prstů, více zábavy
- Programování pro iOS - 17. Podpora standardních gest
- Programování pro iOS - 18. Recognizery v iOS
- Programování pro iOS - 19. Další standardní recognizery
- Programování pro iOS - 20. Co nového v iOSu
- Programování pro iOS - 21. "Multitasking"
- Programování pro iOS - 22. Nulla est honesta avaritia nisi temporis
- Programování pro iOS - 23. Jak se aktivovat, jsme-li v pozadí
- Programování pro iOS - 24. Zbývající drobnosti
- Programování pro iOS - 25. Řídicí objekty rámců
- Programování pro iOS - 26. Jak se dělá UIViewController
- Programování pro iOS - 27. Kde vzít rámce
- Programování pro iOS - 28. Základní služby
- Programování pro iOS - 29. Práce s rámci
- Programování pro iOS - 30. Rotace zařízení
- Programování pro iOS - 31. Správa paměti v rámcích
- Programování pro iOS - 32. Řídicí objekt pro tabulky
- Programování pro iOS - 33. Řídicí objekt pro strom
- Programování pro iOS - 33. Více o UINavigationControlleru
- Programování pro iOS - 35. Ještě jednou UINavigationController
- Programování pro iOS - 36. Po navigátoru taby
- Programování pro iOS - 37. Více o UITabBarControlleru
- Programování pro iOS - 38. Dokončení UITabBarControlleru
- Programování pro iOS - 39. UIPopoverController
- Programování pro iOS - 40. Další triky UIPopoverControlleru
- Programování pro iOS - 41. Zbývající služby UIPopoverControlleru
- Programování pro iOS - 42. UISplitViewController
- Programujeme v
iTunesXcode 4 - Programování pro iOS - 44. Předvolby Xcode 4
- Programování pro iOS - 45. Práce v Xcode 4
- Xcode 4: projekt a cíle
- Xcode 4: práce s cíli
- Xcode 4: Build Settings
- Xcode 4: Build Phases
- Xcode4: Build Phases podruhé
- Xcode 4: Co jsou to Build Rules?
- Xcode4: taje editoru
- Xcode4: automatické doplňování v editoru
- XIBy chyby
- Více o XIBech
- Editor XIBů
- Inspektory pro XIBy
- Vazby mezi objekty v XIBech
- Vazby mezi objekty v kódu
- Paletky Xcode pro XIBy
- Xcode 4: levý sloupec
- Xcode 4: okno Organizer
- Xcode 4: okno Organizer, část druhá
- Xcode 4: co je to Workspace?
- Xcode 4: základy schémat
- Xcode 4: akční schémata