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:
Informace
Xcode 4: Build Settings
29. června 2011, 00.00 | Dnes se podíváme trochu blíže na snad nejsložitější část atributů projektu – na "Build Settings".
Minule jsme se seznámili podrobněji s prvými dvěma záložkami z editoru cíle, který se v Xcode 4 objeví zvolíme-li v levém sloupci Navigátoru samotný projekt a pak napravo od něj vybereme ikonku cíle. Dnes se podíváme na asi nejsložitější z nastavení, s nimiž se v Xcode občas musíme poprat – na třetí záložku "Build Settings".
Oč přesně jde?
Jak už jsme si řekli minule, "Build Settings" obsahují "všechna nastavení a atributy, podle nichž se sestavování výsledného produktu řídí: jsou zde tedy věci jako přepínače pro překladač či linker, volba překladače (LLVM nebo GNU C), a přemnoho dalších" – včetně neobyčejně důležitých předvoleb profilů pro podepisování kódu.
Co to ale znamená, "nastavení a atributy"?
Inu, v podstatě jde o velmi jednoduchou věc, vzdáleně podobnou souboru Info.plist, s nímž jsme se seznámili minule: existuje spousta standardních jmen – kupříkladu "INFOPLIST_FILE". Každému takovému jménu lze přiřadit textovou hodnotu (např. "iOS39_Sample-Info.plist"). Xcode pak při sestavování produktu bere tyto hodnoty v potaz a řídí se podle nich – v tomto případě tedy použije právě soubor zadaného jména jako vzor souboru "Info.plist".
(Vzpomínáte, jak jsme si minule slíbili, že si dnes ukážeme, kde v projektu je uloženo jméno tohoto vzoru? Právě zde: je jedním z nastavení v "Build Settings", pod klíčem "INFOPLIST_FILE".)
Toto by samo o sobě bylo velmi jednoduché, že? Situaci ale značně komplikuje to, že
• těchto nastavení je hodně (opravdu hodně, Xcode jich standardně "umí" více než dvě stovky, a lze přidávat další);
• hodnotou může být nejen jednoduchý text, ale také skupina textů (to nakonec známe i z "Info.plist");
• nastavení existují na několika úrovních, jež se mohou vzájemně doplňovat – požadovaná hodnota tak může být uložena přímo jako nastavení v tom kterém cíli, nebo může stát v projektu a sloužit všem cílům zároveň;
• navíc existují minimálně dvě různé "konfigurace" – běžně "Debug" a "Release" –, z nichž každá definuje vlastní sadu nastavení;
• a ještě k tomu Xcode opět "švindluje" a namísto skutečných jmen přepínačů zobrazuje jejich "přepisy do angličtiny". Ono je to dobře, protože např. "Strip Debug Symbols During Copy" je rozhodně srozumitelnější, než "COPY_PHASE_STRIP" – ale přidává to přec jen další úroveň složitosti...
Už teď je to velmi komplikované, a to jsme se ani nezmínili o tom, že nastavení lze navíc definovat podmíněně např. pro specifický typ produktu, nebo že často užívaná nastavení lze uložit do konfiguračních souborů, jež mohou být sdíleny mezi různými projekty... a ani to nijak podrobně rozebírat nebudeme, neboť těchto možností se využívá jen výjimečně. To, o čem jsme psali výše, si ale vysvětlit musíme – protože bez toho se při práci s jen trochu složitějšími projekty neobejdeme.
V praxi to pak při sestavování funguje zhruba následovně:
• sestavujeme nějaký cíl, a sestavení vždy probíhá v rámci některé předem zvolené konfigurace (volíme je ve "schématech", o nichž jsme se již zběžně zmínili);
• kdykoli tedy Xcode potřebuje znát hodnotu daného nastavení, podívá se nejprve v rámci zvolené konfigurace do nastavení daného cíle; nalezne-li zde hodnotu, použije ji;
• jinak se podívá v téže konfiguraci do nastavení projektu; nalezne-li zde hodnotu, použije ji;
• jinak použije standardní výchozí hodnotu pro danou konfiguraci.
Editor "Build Settings" v cíli
Celý ten zmatek vidíme v editoru v nastavení cíle, přepneme-li jej v záložkách nahoře do režimu "Build Settings":
Lišta pod záložkami umožňuje si trochu zjednodušit život tím, že si zde můžeme vybrat pouze zobrazení těch nastavení, jež Apple považuje za nejdůležitější ("Basic") namísto všech asi 250 (ta bychom viděli po přepnutí na "All"). K možnosti "Levels" se vrátíme za chvilku, a textové pole vpravo umožní jednoduše filtrovat nastavení podle jména – hledáme-li něco konkrétního, je to velmi šikovná služba.
Skupiny, nastavení a konfigurace
Nyní se ale podívejme na tabulku pod tím; prozatím se nebudeme zabývat čtveřicí sloupců "Resolved" ... "iOS Default", zobrazujících hodnoty, ale soustředíme se pouze na obsah prvého sloupce nadepsaného "Setting".
Především vidíme to, že nastavení jsou rozdělena do skupin ("Architectures", "Build Options", "Code Signing"...) – to nám opět umožňuje se v té spoustě věcí poněkud lépe orientovat, protože skupinu, jež nás momentálně nezajímá, můžeme pomocí malého trojúhelníčku vlevo uzavřít.
Uvnitř skupin jsou v levém sloupci tabulky jména jednotlivých nastavení – takovým jménem je "Architectures", "Base SDK" nebo "Validate Built Product" (nebo "Info.plist File" – odpovídající nám již známému přepínači "INFOPLIST_FILE" – jež vidíme při dolním okraji obrázku).
První, co nám komplikuje život, jsou konfigurace – již víme, že každé nastavení může mít odlišnou hodnotu v každé z konfigurací, jež projekt podporuje, a že konfigurace jsou minimálně dvě, "Debug" a "Release". Editor proto umožňuje libovolné ze jmen nastavení otevřít – vidíme, že např. nastavení "Validate Built Product" je právě takto otevřené –, a tabulka pak zobrazí jeho hodnoty pro všechny konfigurace, jež jsou součástí projektu – v našem případě tedy "Debug" a "Release". Kdykoli kterýkoli řádek tabulky označíme – na obrázku je takto označený řádek "Info.plist File" při dolním okraji –, objeví se vlevo vedle jména "trojúhelníček", který umožní si jeho hodnoty pro různé konfigurace prohlédnout.
U neoznačených řádků se obvykle trojúhelníčky nezobrazují – pokud ovšem dané nastavení neobsahuje různé hodnoty pro různé konfigurace: tak tomu je třeba u "Validate Built Product", jež má v konfiguraci "Debug" hodnotu "No", ale v konfiguraci "Release" hodnotu "Yes", nebo u "Strip Debug Symbols During Copy".
Je to jasné?
To je dobře. Tak si to ještě mírně zkomplikujeme: uvnitř kterékoli z konfigurací může být více podmíněných hodnot, jež se použijí jen za určité konkrétní situace. Tak tomu standardně je v nastavení "Code Signing Identity": zde je (v obou konfiguracích stejně) použito podmíněné nastavení, jež platí pouze pro "iOS SDK" – pak se podepisuje identitou "iPhone Developer". Pokud by se ale překládalo v rámci libovolného jiného SDK (např. pro simulátor), podepisovat se nebude vůbec ("Don't Code Sign").
Pokud je to ještě pořád zřejmé, můžeme se podívat na zbývající čtyři sloupce tabulky :)
Nastavení cíle, projektu, výchozí hodnota
Připomeňme postup, jímž Xcode postupně hledá hodnotu daného nastavení (uvnitř zvolené konfigurace) v cíli, není-li tam, tedy v projektu, a není-li ani tam, použije výchozí – přesně tento postup zobrazuje čtveřice sloupců v pravé části tabulky:
• ve sloupci "Resolved" vždy vidíme "skutečnou" hodnotu nastavení – tedy tu, již Xcode v dané konfiguraci doopravdy použije;
• vedlejší sloupec, nadepsaný jménem cíle (na obrázku "iOS39_Sample" s červenobílou ikonkou – bude zde vždy ikona aplikace, má-li jakou), obsahuje hodnotu, uloženou pro dané nastavení právě v tom kterém konkrétním cíli. Tak tomu je v konfiguraci "Release" pro nastavení "Validate Build Product", kde je hodnota "Yes", a v obou konfiguracích pro nastavení "Strip Debug Symbols During Copy" (zde má každá z konfigurací hodnotu odlišnou). Žádné jiné nastavení (z těch, jež jsou na obrázku vidět) v cíli žádnou hodnotu uloženou nemá;
• předposlední sloupec, nadepsaný jménem projektu (u jednoduchých projektů, jako je ten náš, obvykle totožným se jménem cíle) a s projektovou modrou ikonkou, obsahuje hodnoty nastavení uložené na úrovni projektu. Vidíme, že v projektu jsou uloženy hodnoty pro většinu nastavení, jež na obrázku vidíme – např. nastavení "Architectures" má v projektu hodnotu "Optimized (armv7)";
• konečně pak v posledním sloupci "iOS Default" vidíme výchozí nastavení, jež se použije v případě, že žádná hodnota není uložena v dané konfiguraci ani v cíli, ani v projektu – na obrázku tomu tak je třeba v konfiguraci "Debug" pro nastavení "Validate Built Product", nebo v obou konfiguracích u nastavení "Installation Directory", kde se využije výchozí hodnota "/Applications".
Zeleně je pak pro lepší přehled prostě podložena ta hodnota, jež se použije – ať už je to v kterémkoli ze sloupců. Další pomůcka, již Xcode přináší pro lepší orientaci, je tučné písmo: tučně jsou zobrazeny ty řádky, jež obsahují nějakou nestandardní hodnotu; naopak ty, jež "spadnou" až do výchozího nastavení, jsou zobrazeny obyčejným písmem.
Editor "Build Settings" v projektu
Možná si vzpomenete, že editor projektu měl také vlastní záložku "Build Settings"; my jsme si ale tehdy řekli, že si můžeme klidně dovolit ji přeskočit. To proto, že zde vidíme právě nastavení, uložená v projektu – přesně táž, jež editor cíle zobrazuje v předposledním sloupci!
Editor "Build Settings" na úrovni projektu je tedy téměř zbytečný, protože vše, co nám může ukázat, vidíme i v (kterémkoli) cíli – spolu s informací, zda (a čím) je to v daném cíli překryto nebo ne.
Jsou dva možné důvody, proč bychom mohli chtít editor "Build Settings" na úrovni projektu vůbec otvírat.
Prvým z nich je případ, kdy chceme některé z nastavení na úrovni projektu zrušit: to je jediné, co editor v cíli neumožňuje (naopak měnit hodnoty v něm můžeme bez omezení). Pokud ale chceme do projektu zapsat informaci "zde žádná hodnota není, použij výchozí", musíme odpovídající řádek označit v editoru v projektu a stisknout "Delete".
Druhým důvodem může být to, že pro někoho je kombinovaný pohled na všechna nastavení najednou nepřehledný, a lépe mu vyhovuje pohled na nastavení projektu zvlášť a cíle také zvlášť – podobně to ostatně bývalo v Xcode 3. V takovém případě můžeme pro nastavení cíle použít variantu "Combined" namísto "Levels"; v ní se všechny sloupce skryjí, a vidíme pouze to, co je uloženo přímo v cíli samotném:
Editor na úrovni projektu sám také umožňuje přepínání mezi režimy "Combined" a "Levels"; v tom prvém v něm opět vidíme pouze to, co je v projektu nastaveno. Ve druhém navíc ukazuje výchozí hodnoty a sloupec "Resolved", tedy podobně jako editor na úrovni cíle – jen má ovšem o jeden sloupec méně.
Práce s editorem
Vlastní práce s editorem je jednoduchá: kdekoli chceme nějakou hodnotu změnit, klepneme nebo poklepeme myší. Je-li známý seznam přípustných hodnot, otevře se jako rozevírací nabídka; zadáváme-li text (nebo více textů), otevře se překryvné okénko obsahující malý editor (u více textů navíc s tlačítky [+] a [-] pro přidávání/odebírání hodnot).
Jediné, co není na první pohled zřejmé, je právě rušení hodnot, o němž jsme se již zmínili v minulém odstavci: k tomu slouží klávesa "Delete", jež smaže hodnotu pro zvolený řádek – v editoru cílů ji smaže na úrovni cíle (a úroveň projektu ponechá beze změny), v editoru na úrovni projektů ji samozřejmě smaže zde.
Skutečné názvy nastavení
Poslední, co si dnes ukážeme, je přístup ke skutečným názvům nastavení. Na rozdíl od editoru Info.plist, který – jak víme odminula – lze přepnout do režimu "Show Raw Keys/Values" pomocí kontextové nabídky, v editoru "Build Settings" žádná podobná možnost není. Přesto ale trik, jak si zobrazit skutečný název existuje: musíme aktivovat pravý sloupec "Utility" a přepnout jej do režimu "nápověda" pomocí ikonky s dvojitou vlnkou.
Pak se v něm vždy zobrazí podrobný popis i skutečný název nastavení, jež je v editoru právě označeno:
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
Diskuse k článku
Vložit nový příspěvek Sbalit příspěvky
|
|