Xcode 4: projekt a cíle - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

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:

Seriály

Více seriálů



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):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Tipy a Triky  

 » Rubriky  » Začínáme s  

 » Rubriky  » Software  

 

 

 

Nejčtenější články
Nejlépe hodnocené články
Apple kurzy

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: