Xcode 4: Build Settings - 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: 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):

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: