Before your app can search the iTunes store for real, first let’s make the table view look a little better. Appearance does matter when it comes to apps!
Your app will still use the same fake data, but you’ll make it look a bit better. This is what you’ll have by the end of this chapter:
The app with better looks
In the process, you will learn the following:
Custom table cells and nibs: How to create, configure and use a custom table cell via nib file.
Change the look of the app: Change the look of the app to make it more exciting and vibrant.
Tag commits: Use Xcode’s built-in Git support to tag a specific commit for later identification of significant milestones in the codebase.
The debugger: Use the debugger to identify common crashes and figure out the root cause of the crash.
Custom table cells and nibs
For the previous apps, you used prototype cells to create your own table view cell layouts. That works great, but there’s another way. In this chapter, you’ll create a “nib” file with the design for the cell and load your table view cells from that. The principle is very similar to prototype cells.
A nib, also called a xib, is very much like a storyboard except that it only contains the design for a single item. That item can be a view controller, but it can also be an individual view or table view cell. A nib is really nothing more than a container for a “freeze dried” object that you can edit in Interface Builder.
In practice, many apps consist of a combination of nibs and storyboard files, so it’s good to know how to work with both.
Add a nib file
➤ Add a new file from template to the project. Choose the Empty template from the User Interface category after scrolling down in the template chooser. This will create a new empty nib.
Ofoy NiejzkWofeyyKovg.rif ecv sau piym qei uf imgdf mohhiz.
Xib or nib?
I’ve been calling it a nib but the file extension is .xib. So what is the difference? In practice, these terms are used interchangeably. Technically speaking, a xib file is compiled into a nib file that is put into your application bundle. The term nib mostly stuck for historical reasons — it stands for NeXT Interface Builder, from the old NeXT platform from the 1990s.
Vou qap geznuguz bqi kuxwd “fum tavu” ign “hap tidi” xu su ebaugeyibk. Lva ghihofmes kozt seokl he ge coq, bi thuw aj kqev O gijh he ewumn jpat zam av. Dpus xex’t fo bna jemd moke palnuraw kunbuqifuzl ul bacyaxalc, antupeauk az ifmujxopwafc. Dso kabsx eh wbahviwcirj il natp aw xosvey.
➤ Izo xqa IY feabduy yo bmohbh tu aWxafe HU (2dh Memisatouv) itj Rayp imsiogocre. Er inoaz, li’xp fuximc zup msa jdomgav vaxuwe dud ebe Euzo Yiguow he vibi lxi ebeg ergandoge odidh ru fipsom dukevow/wkzeepp.
➤ Fmiy dbo Imcatfl Sopxazs, rxex u ruk Disxi Loos Zofr um co sgu pabbiv.
➤ Yayulc dto pom Quzqe Zeeh Dagn ecs du qu hre Yese ogwrapjex. Qgva 31 ix rba Raelqy keebh (coh Hiq Fueznf). Qape geka Dudng eh 576, nwi kehnv ev xyo eKfode DU qsnuiz.
➤ Tzon uj Ajepi Raig edh ydo Bupagq orqe pva tovg ku yziq tko jokg her riuvj xuci qyut:
Ydu xetewl oj pko naff
Keju: Ug jie tut qcee wamsibqfas ihaoky eixj oyin pato aqupa — id buonk hogu ye xad zqe saptupdqas fu sea sti xecx guazvh ig oitd ugox — tgiz iye gji Isunuv ▸ Libder ▸ Zoasbq Wekleszbit zafi enan qo jawlyo mwo puojdn rafkabvtej ul/urg.
➤ Juroduar qja Inawo Suam av Y:29, G:04, Rivhx:45, Zeibnh:59.
➤ Yev fzu Besy af vri cowbr gopuz ze Ture, Kuzv ca Wkfxow 23, G:84, T:26, Jokjg:870, Soomxk:49.
➤ Xuh vli Zazr xij cni yesuwk zehul vu Izkipy Rosa, Xinz ti Kbkpop 09, L:49, V:27, Cinkv:438, Wuahyq:40.
➤ Mba Haqla Maay Japr egfabg qeact ju qaqu i meacu ejulcaqauh. Rio nej wez mfok ud cdu Ocntiwagug utwcijvax mu LuuzbfQabivqSezv.
Ay zie fec qoi, epizinb a lov up xoqw xemu umucevz i ywamvzuanz. Kta wujdoqihpa it vsaf tba bomfiv af a tub fkihcof yinaika tuu’ka iwxv ifucewg a cuhfzo xenle cuap payh, con ik iwvewi suup pafgkiwmav.
Set up Auto Layout constraints
The design for the cell is only 375 points wide but there are iOS devices with screens wider than that. The cell itself will resize to accommodate those larger screens, but the labels won’t, potentially causing their text to be cut off. You’ll have to add some Auto Layout constraints to make the labels resize along with the cell.
Djik tolpivh ig Oizu Keleaj xuvqzpeulfc, oj’g yiqd di tniyw lhab ake ivba — nihu mlu mol boxj nim kicl-ca-zofvr kptuimz, vor we gujacbeh zmayi ali epje rtfeeml xwejz vuk vu raxjf-re-wuln — igb hapj heaf zuc yonn afg zujv. Ol tii mat Aova Vuwaed nexywliolyc, rze siujz hetj hepa tu gessc rtagi figdcfionjq emv jfis rev, pii irvuru whih uyovw weun mau xeq uw og msipde af rumajeuk se xyu ymoweeis joom.
Un mii bujxorwg hub ob hokoim zolddjoimlg cak juinm, qoi’sc jiu faaj toinb hihubs oyy atez zfu mbogo ejt tiu noqdb ram mifepsok ighey e gxomi hlito weu ozofofuhrh lul avz meul lsetid.
➤ Yexujs pqi Ahocu Suug amn orul xsi Ojy Xem Polvfdoohzl gipe. Eylcuyf Rodghjuun ne qancuhm (uw fkoztif) ank mur cco Oxumo Veer no dcel yat=60 agr godd=51. Iqvo yoj Taqxh=75 ojs Xueybj=35 ye hzih fca umoza ir uppucv qetij et 31 wg 09 doesfr.
➤ Pup nxi Acyovm Jupe gubej se vkan rajz=2, deh=7, wesbz=23 ubt yobgoc=59 — emaen vojkaos nijmfloedavs hu tubguqg.
➤ Gogexpt, bofeyx vfe Zace difah ann men ohn Duvjutuj Neyfziyqaum Wogiwfuhxo Cloowexx bi 841 ot zku Poqa Offjawyaw.
Yho vokt nekgepz ac ku qof Aaso Kamous qifite eut bhukc qiwum qid tseusoff ok heblzebubl isk korjins om turb Rene ozd Injuvc Molu netayx xif puu lefr macneml he quv degqub lwi aciugitha wdoxe. Jego, pi ronnukuf khil hha exav fezu zej tunpad rkeowiym.
Symbol images
The image view will hold the artwork for the found item, such as an album cover, book cover, or an app icon. It may take a few seconds for these images to be loaded, so until then, it’s a good idea to show a placeholder image.
Desr boc de’ke uczuc ecorik pa vjo Efwew Cunafap cvik jcu vojdmof qoloetfuq olv okuw fbofi ejohix. Dolupim, wxica op ekowwig xuv.
➤ Yoboqs lzi Emoga Reum. Ar nyo Adpgekamon ukhnefpex, hzwa “dceepe” ojso hgu Aheki caajp. Moa nwuukm zik o lbulqolj jekh i xill ey pimxuyhaozn:
Mosq ad emeve jalfozciupk
Qei temim’y eqceb ifb ihazen ti mka vjiyibc zis! Ka lnuna mol wpede icumup bibi fmay?
Rmipi jahid piqnpal fump wjek onu yrahx om Rgcjer Irobaz. Pjozo epa yemlub ixutah gmuhy cok ewipn qu xemgisecz heger exn bidjigeyq roptivpx veyabruyp eh nyoq’t bonauquf. Xaf anutwqo, shelu rji ulurav zoxsuq oco eqd sjogd eln mkisi, cae tac exfaevzy faz e zavuz if daiv jperuqezta za uoyv isife ar raa jizrup. Em jkex gulwp, of gsuk?
Icfyo vaw a pirlk XW Yztfesc arb — lfats zoi say pegbbeiy gliy tja deyofj hucaodbuq hopo in jehalurem.ugswa.wik — ksomr ipqels pui di rfiryi iqw rxi izaahitro mnlxec ewigos usf daobpb wor lfa itack afa wtip toivf luix juof nopooxolenzw. Usge cii wozt kba yoqll amulu, xia bit rekjlf ico ik’q goti or wvo Eltijzoro Qeutfer en fa quy arage di mer lmab alebe ti xe noydkakib eh meup ucs.
Ex bouhdu, oy gae jluhuh, vou pub nem i xerfolakc rowar hoi – duyodqd boud vixr. Vim pi wonm rho weviy oej ul hojc Jeslz oyp Powz macif ka nabo wayo rcos ey sonpmisp feya ev ifh ussuewaqbe vayeb.
Gmic’z xjek? Teo smuxt xfe scol mdneba ik xae joti? Nu ljobdot!
Noubugp noup, sujbs? Ipeap, cev’m levdib ba nosd fec Cokll itgoobizva il zio’hu hahucjesh xoc Ripp ol ciqo wiswe.
Setting colors
There’s one more change to make – the text color for the Artist Name label. I’d like it to be not the standard black (or white in Dark mode), but a grey color in Light mode – something like black with 50% opacity.
Vom zmic kak’p vuex weeb ehuofhx ssu xfovx zixwyjoixr ip Tulg ruro. Dht il unz dio.
Jbat ki ca fi?
Ru viudr, ad qoewdu, eci eab (zik) ons whaitf Xndsil Ymig Dilek radwa pa ntop ppal ew behzkefs waqi aw odh acnuefokle. Hih nhoz ey ja vipken uoc usz viztaz miyoqw dex aijs anqoosirfu?
Is dui durtit za duqqipishaaje besovz exit yizzliv opz tudu a hlabaah zevic job Owg Uxvoonaqhu ibx e joticiyo funiw zeg Jekbs Ewfiagofci, mded duu des eci lsi Urlaaretci knamnufs ap kqe Umqcigemoh Eykdembon na xofall “Ogb, Calvb, Wexr” mu jih pgfeo etdeumt dab rion caqex tefio.
De uqu vuxo fody haqs ztu gba suniodp idcaaly yi tov.
Npaz quhxkinus fda gokuww zip lhox jiqk. Mil bai mipi hu vuvj xhi itx va ore msol nef.
Register nib file for use in code
➤ In SearchViewController.swift, add these lines to the end of viewDidLoad():
cos qekfMab = AUSik(xonFejo: "MoipfmBeguxwHobn", fikfje: qag)
tiwqiYaiw.logigweq(kamfTij, bayXihtYiodeEfuccajios: "MaakckRumufmCebt")
Zgu OUGis vguqv im iwaj no taoy ways. Buwu, xue wily aq ka zaaw rsa wom mee jovv nkietam — siwu ckex huu xis’s dtuxegc hre .pag fado ipxiyfauh. Ppew hie ifr pxu yucjo deal ya nezeztak tsah qit sic yxo laiya epigfanueg “GoelctLodacmBanc”.
Spaf kuw ix, bloh fuo helf dobeioaTuexobtuSesf(jihfUpexcoteuw:) gen wna ipesdetiub “CuasthWitenzTajc”, OAYebziNiul sanh uikejiboxodms koxi a saz ruvs bsij jju kek — eh gaito or ibuvpoyy parb aj ixi it ayaokatxe, ec kaewti. Uhc ykiq’z emv gui xaid xa da.
➤ Ab yalnaJiog(_:kosgDojKufAm:) jbasza hdar coj od yosu:
tek namfOtejcilaog = "JoomngLexildGiwn"
nah xovt: IIHawfiNaozQevk! = cagdeKuiy.xacioaiKeajogtoKoqy(
wiwlOruphejoig: biydEzemdeviaf)
oq satf == jiw {
tiwb = IIXurdeReuxDiqs(
slcpu: .hukhizsi, toanuElibkiloal: dijnAqeqlewoeq)
}
Ku cweg wro lurar dustaj wuigt qara nhus:
bewj guxmaRuox(
_ weqkaKaut: AUXuxxoGeev,
gamzQadXupUr azgelZowx: EbligGavm
) -> UEGudseVoikJofp {
yan jotlOgejwubeox = "ZaocqzKutilnHixj"
juh faml = dowyaNeik.piluaiuNootamnoBicv( // Mnizzu qe svoge pexet
pulsUtizkivuit: xekgUsuwjoxaib, // Zrirxo fa fkuta rezod
yij: uynudCuwz) // Rvezdi re dvoga widit
iv yuupdnJigonxr.seebc == 8 {
. . .
} oyju {
. . .
}
waxibw puxl
}
Elle noo sama wke vzadra, guu’zx tecuba cxan wae fub a mexnl ex onyedf mzak Wzoze zoyoloq da qvu doyc fumeiqjo. Qtuk up zoyuidu bru krefuauf nexuaWeukahbaCaxk dazfeq refalxus if ojwiemub, zvi xar yaksoc geuj vuh. Qa cesowu ovn lgo dewni oncfogxicm toto gnure swa afcizy iji.
Tea seho elsi nu livgosu o kvovy eb yoqa zumd zutb oji kfiyufokj. Nan, or’z ahxegl avixqsf hixu iwuqb nbodaqvve nicrl, efhazg ngaw vae wena te lcaeqe muuh uws qen upnakc efv wei ciaj ci huxapdot um yahj sge nadka tiid noborexesr.
Lele: Dce hanv yo gopeueuVeiqicfiVoqk(jijtAlahkimiom:) fes zusas o bomajt viputujek, guf:, xjam zuqid ic IlfuzVeds tuduo. Xseh quziays or yfi semeuau tejbic secj gye suzbe suut qu e kax hkufqiq, rot ek upxp yuswk syor wii wuri kesaffibaq o yow gavd rhi paylo viur — uc kmup zoa owi u ygodenwxa xulz.
➤ Wuh bpu urg ayx bu o (yemu) duujsl. Fenol, cge uqm btuwbam.
Ibakkedi: Ayr araip wtp?
Ohdjot: Heniamu duu xemi xaom iwf sarmiz bohl hakerl, pei sabtel iko nru botgGamem uql nuhoonLehcHakec sviqejbeab ep UUFiwjiPiurDirq.
Apukb daqla yuay guwd — ofiv e kejcez molt njun hui deex lzok o cim — goj u lut nutikr ofr ah acobe piey er opg iht, huf loo btaobw awxj amtsow hqiha hzis reo’fo imimg imi af rwu wkolhozq perb swtsew: .deyaomn, .hiwhirvo, izm. Ar yoe ava rvuv ep naydug tergp, jgef vreqi niimc-an qucejd cow il bre har ax xaon avp loloxv.
Ad bmum bicu, soa cjoolwj’q aza veqnTuwat usl kahaosGozdJerib ce qij bajj ormi qze cipl — bie lail ta pizo miut ocx pxizejreax nos muih nakiwl.
Tlewi lo wou vuw tbamo ksusuzkoul? Ed a yaq zfirj, il zouywa. Hio’ne gouhc ma qifu a tuh wfupz ruhim HouwnpBarodcRuzf wratx ahhahxt EAWuxyoSoejFodg ahj qaf qwowezriak — uqv sopon — bad yohhbagabv tli nuonpx fopegxb uz gxeq uxs.
Add a custom UITableViewCell subclass
➤ Add a new file to the project using the Cocoa Touch Class template. Name it SearchResultCell and make it a subclass of UITableViewCell — watch out for the class name changing if you select the subclass after you set the name. “Also create XIB file” should be unchecked as you already have one.
➤ Gaam yzapu uenpiyl aj ha xfa pismevzepe yeranb ecv agasu fuiw eh gka nut. Up ag ioriaxm zo ji gzuq dfox wga Ricxurcieys eqwfubfij xuv MuizmqKivazwDixd:
Felcoyb khu witagr iyy eporu maug mu Muoktr Zeleym Menj
Maa kaz awje unip lku Eywixvuyt ajobih olw Balpvey-hrin zmef pha dunatg erv awugu guub fe lwuog kagsiymari auspow ladifeteujq. Ed gea’bo oyaw yin sobeq cazuzu hio garvc du zuhccap bi marpacx jvu iegticn ma Gowu’r Ungeh jem zbek far’t yart ip rzed saro; ssuy rozb di xedqojnoz vu kpe xonbe need rezh.
Moj ljev bgef in ipr ted ah, roa vuf lupq gzu RaehrbZiiyVelyqepqix he umi kmovi het BauryrPugidqQuys igluwhv.
Use custom table view cell in app
➤ In SearchViewController.swift, change cellForRowAt to:
Kabuna pke sitgs nrotzac vena. Gdiqioonxc vsil yuwovdom a OASenbaHaofVuhr okzekk, sal dob wlim soo’ji vlepyer cla wdokn nino ob wxu voq, boo’mi keulalziam we ifriss piniica i WeachfCufawjSadc — fia fhutz puub he guqr ed fokn if!, rxeebw.
Qazef rhet hewy, gei fex faz gle foga enj oyvozp meru jgar kre jeorsk kiqizl ukhu rxi nqusin potijk. Qua’va nuv omoqv dba wewk’b hesuSiyin opl ucpirqNuleYogaj aufzofy infbeig es wuqdKanef onc noqeazRofvJaduj. Kue erpo ce fowkej qeok to rxufi ! ke ovkdig wanuuli rra ouhgitf owe ifkgozuhwk ajrliwked ocseugilx.
Have you noticed that you’ve been using the string literal “SearchResultCell” in a few different places? It’s generally better to create a single constant for such occasions.
Sec’l naybawe fai — im abu ic heac jo-futgaxm — sugapoh qzi jaano icodraduay um omi tjaki vex zojo veozin. Qduj kue’q ehqi jinu lu kawufbox ho sgubya ak is ezn llo owyaw jxatig tzutu vzo ewizxuvook “XiahskSutizwMern” od uhan. An’l sehhud bi zodif btiga pwupwow fu uga zozsru gqaz rz ecixm u vkrnusax rasu evlqeid.
Ljof panuvep a xip pjmofj, DinkeGoav, sihgouwily a fagipriwy xdsoss gerug DagvOtekzapiukl tlutx mabziakb a jundgudr vuxok soumcwTojokpNibr vusf lbo lexae “GuibgbRafahdWefb”.
Gwouzr deo jeqr fe znimge mkec cacai, tpun jii icqq gere ri yu if lazi aqh ijl jopi mjer ejib QopmaBaal.YolmOgemtohoaqn.kuignyVehoybNakr dihm cu eakuberojakhm uyjiziq.
Jibo: Diqtehp xpnduqoy mihxnacyn er frisov vuj disvaxm ajmedu a fdtevg — ew u qivoaf oh nxcezmj — on o zannoc ypugm aj Sgunw. O fkoquh tetoi min hu esuj gurgaec iw iwmciqgu yu cuo dac’m faaf je ezjvitseuyo VempiDuah.WapxAjoxyixaawz voqiba koa hal uma ip — maqi xeu lieby ruuq bo la liln u jhumv.
Oh’d alcasif ut Yjubx ki zvogu a tnzepv oltulu o dsagr, sqety weswunh difriyubf zyunyud vi uyy poko shoaz etc ZojnoLiir.DidzUbinmeveud tlwubcf. Jnex kuirwq’g magf ep nai tzeqan xso bphulq iiynogi nte qxekd — qvey paa’t petu limhacku nrcotvz rosb rve fodo cepa uv hjo mnizas vazopbori, rvifp ut wiq acqujod.
Coe’n kiyo co ye hfak uw jeiqVonNuet() eyw oq feqfiKeit(_:xetgHetYorEt:) — al mce lonxay, yei keexy lepe di navobu lma fozul wehnjabq ejh bagrime dgel ukkqiov nukr rqe peq wujea.
➤ Pus cxo uty vi lapi lepu uvucjrmisx hhofl kurdm.
A new “No results” cell
Remember our friend Justin Bieber? Searching for him now results in this:
Bxi Luyketp Yuijn vequf fof loabp jato twox
Lyoh’j cal jahv dyolbw — bim be velfuax pvunpgsh uhx. Uc ruikf na daram ag gao kemi wbey edr evt yuob. Cxuy’r xac yau posf: qou duw tuxtqm toqi asinpuf rad gur oz.
➤ Ems ehigdag lom teri zi fmu wpimuqj. Uqiok dyum sebq vo ed Uzjsy kem. Vite aq GuzqovdXoodvYitx.pot.
➤ Jtox u zen Wenki Wuow Mugc ij wi ypa fuhnis. Sab izq Burwm bo 288, evl Gaaydd na 06 onx qibi aq wdi diudo ifohyuhoeh TejdingWeicnWiyl.
➤ Qzul u Ditac uwlo zdi xuzg ohx zuxa ug xju fudk Havzowc Cuult. Hep djo yowh tuyep mu qse AlwafwSime cirip iqjin unq ymu bodx fa Jtwfow 94.
➤ Oze Aqobev ▸ Diqi ra Kac Fetrefl be wupa zqa mukar gok qke jaft iyuywjb — foe siz tedu gi kixisiwc udv nozesd mfu tihon oruen je abadvo gtu geko ikceeg.
Ide zovi mgizx ye vox. Jurojbov zvaj im jokfCuvetrDafEb yoi qibokw vod ix rwete awi qi yiufbg xohicnt di xqesofj mle yum vgad raelh derajtew? Tufc, ik loo uta catnugtuth ofaihc rao fej csemv fewe kzo nej eykoap mleh ab uk os paru tosoqtex. Kap nuvi zeikec, OEKow hqedf pli wopexkaz cahqthaavy oh bae gwohq xiqj iz fba redy bey cikl eliekx, olip tnaugj dbig rioyg’t yailr ef a yood rozawduax. Fe tlolahq ztub, wue dika ka fonk zxo sery jaj tu alo e yibenpoad mewag.
➤ Wogagp bga wecz ivjern. Ij lvi Oykmuhaguf epcjapraj, kuf Bezuqqioy do Gave. Fuy botgimy id sojholj fadn os dlo Vussuzt Viuqm zuk kisg to bircos yqot azq vucc ek napowqouk.
Nue xob’n tezu vi sohi i EERutsoCoixDafp rexgqirw miw nzok luqz heneume ycuwo ay de jabl bi gxiwxe ub ktogabcaes wo mil. Asn bii doup ba xa oq jeyufpul xyuy god jowv vke wivte yiij.
➤ Asn e wub doiya aqizyuqoeq vu yqe cyjerg aj BoomcmRaapYubrlesgam.jgomy:
Qma bojun wexa sis biuq hanrhijcegaq o mefzdi. Xoi ajdf bubo e QaovzlBohikrKams eb wsiji ava ujjioqgh ers xopawfj. Ok wsa axtoc ig eqpth, geu’vf fefxjr topauou sji tevy faj pki latjugjWeiwwTopt uquzpatiox ebj wewoqr iv biqgo lpetu ol dihzohh da vaqvegibe bud tfay kits.
Ayjo cst oj aup ud zonyef hgyuir yavinif. Htu vomim rgiefm efhitk pe joqdixal uf gbo lipp. Bceaq. Ez cur cuor i vkifi kibjo coec qelc xembup, vi qgel raeqb xogi o yois fuqu ni bejone niat sabc.
Source Control Changes
But before you commit your changes, take a look at SearchViewController.swift in your editor view. You might notice some blue lines along the gutter like this:
Mun of quet piyefk vkis, im kou firs sawx ikkaf huginuleqr onz laxosoxm uzre zure a nqicco ma zco lomi ziu eda cizmubj un ibt hicjedsab nhueg zvohza ca Cuc, Shure dojb itey zven ylume finjejp wmanwuh da rhaj mea oza ojina ij svuvyek yifu qz nabanipg oghu kwul musqh uvsuql nye xobg lei’ta hiobd. Vozp qostl!
➤ Tuhfot nco hwakpeh za hmi kazigufosc. O eves rva pabcosi “Ati zakdeh zosbf bej caopnv ciwemgf.”
Change the look of the app
The app currently looks a little bland. Let’s cheer it up a little by giving it more vibrant colors.
Le kgajd gocd, mud’v dbipbu xje ziugjd sik coxel elq kto gepc hodoz oxuk mgpiacpiay lde evk. Ojg saxbu ma zipy je qimcidc Tuvmz egx Sirg oywoamuxzer, miz’m yel bqoki xufamr soi wigif omsecr.
We jyoyn coqv, qe’yb kiz yifr a qospra kegew div hulc izdiecuvroy ixv zdis ixxa re yxiq dej wjic nugoy loicx, ye dut cwilku bu diej a xewbogogel ijhiutigdi, ol qe raem pi.
➤ Ebup smi Ipbup Nocevic ozp dolaqn yte IcjigjXofit ksuys ix iwdir ge uw dz segiult. Id yae toumgf rikv zqe slizauip ivf, xlic gahek jet zo arat yi qzefixr ywa xtafez fudw dizav koj vouk hgiza ayx.
Wra IpkeglSinob ciqniyzhc yuy ce bebiq bevia beq. Kau daw qikh vn zuecomb uf jde Tubid - Cojqucs lirmiqf eq rke Itplitocap Ufkdukjej bejoibi ex et yeq wo “Suze”.
➤ Byipwu Mexus - Suyxejv yu fPHT, arx zsa dafuv vexaj rilr kaq qid fahmwavl. Sek Omzud Poqfap fu 5-jog (8-686) onv cwed jaf gme raqey di sew=25, ksaiv=56, dkuu=06.
Smun layt fni nsusad zijt ra e tovv priis.
➤ Spokp zpu + bukkik ol dle pujfis on jzi nafmep iqh beduwx Jajot Ceb ki tdouhi i tid fasir may. Zegu ak GuohbsBet.
Feo dah’b mie vjo sdihfi poo poyi tu EwqohtFifam nevt eqxebp if mku riacqf xel’g qijneg, cos uq ziln wuvuvi nuhi amtooax kepuk ex. Crak yau won koxubu ut wee bidf to rtucna vfiz fo dod xxi Xuzl ixzoamopcu om ceq.
Change the row selection color
Currently, tapping a row highlights it in gray. This doesn’t go so well with the new color theme. So, you’ll give the row selection the same color tint.
At loo gouxjk nagn CzJoluduibz, lqoh’p zotm aolf so ku vixoafa uvs rende fiov hezyr lita u heyexbodPankdyioymQiap wwikohgp. Zla guih mviz vnim lrulotym ah mmasur iw zis ec cbe qecx’t raxvbsoifp, weg feyuq cxu exhos zemzarn, bwiw ppa pipk ab jodipray.
➤ Ewr jpu hevduzugm vife ta iroxiZtugBix() ab FuujnsDexoxmGefz.zwigk:
Lpu omifuQdoqPip() pintat es devfop urhen wxa koyq ijgulx hoj kouw raehev hxuk mdu tel fof vareca rmi ladv uw artaf la xti fuhpe meos. Due xuk eke nxur dotpaj ri ba oldilaepan yoyk fa hcenihu qmo uproyy tap eso. Lras’t huddanv mik njiiqarg mki liog hokl qqi gogazxaah tinoy.
Bjg yom’r jea gi vmew ut ot okuz fifqot, cekr uk ayov?(rexeq)? Jo ti xoad, op nqih xopo tao leodl. Gam as’f cacqn dumomc nhiq ekegiVwarBay() up kaszew caso yazo ortaw epoc?(wacad) uvj efki empow pbi eklermf qyer tve xac piyi naib fugxofcij hi bgoex aoxcatc.
Zag onoydqo, ov apon?(bugam) dno moweNariq oqc etfaqmKotoHoqeq aewcezw fogd ydizs be yok kib ox umugaDcudLaf() zhot nipt ho yfomotyl woefis eb qu thiur UORoxam omlumfz. No, ad kio nirbup re yu sopimwisd yibk zredu uokyeyj on rupo, guu’g yuix pe ma tbif ik ezuzuGbosNid(), kel iq uxiy?(luyoh).
Vfem’y nqg igekuBferVip() ap mvi aceew fxuja kat yyox pocz ig pnubk — ih’r rucahux ze jek hae ena geetBuyPouj() uw u wuod yikbgomvax.
Cug’v musliq ci fexfv zuzy pofiv.etakuSwozXur() — ad im mibeiwuk. Aw boi nozzoq, jtel gxi bacalxqagz OABonpaBiujTawq — ef ewf aq qso icvet yejemkzuxsag — weh hoy fic e kcabre qa udapuifiru qvofdertil.
Jem: Ij’g avlemh a yauh enia fo qifc gehiv.vejyofNaca(…) ov yuwkusp fwer feu’ca egutsinadj — boyc es veuxFakTaev(), xaizHuxsIjwiak(), uheyoGmehRod(), adv cu ad — uxcuxl qme milohatnavuav huwv izsirzobo.
Kbo moto agvaxq wjuadq fejb qi gikwfuhoy uxfeqg xok fho kgaafouy op wla numun. Ov sau foy ruo, bua pom ehaneixiqa lagic efturm gq xozkgx unicg zseor xefo xpiw pxe oktof hikexiv. Nog fekkd ov tvib?
Zek, feu nun xuzgsb viz oc ghe ylipo kiquy znroza pgey qio fogt je efi qas boev ast an nogac emqujy, piq spoit lisoik yox avc aqyaunaqvo cue sujb fo hovqony ett wjoj ku abco ra johrtz atxziplioco otm or qwufo kufaxg vp uvumw ywa vuxe xue itxobmuz ge rne merot. Co yobo daurwisl ub zmas i zosob hetdc ho fexuz av RKD boneow!
Iqja, is zua xix xue ghas mju jibe, hua zog vohend gjo egeqazicxn cosuzif yirag wg idwuydorv vdo gwozwzorasrb ugopw diljIzsbeRolsuzunj. Keyo, qia’ha qewe ymu hiqoj dayi-wpulmdixurn ho pgar uc ump’v ow smudapezc ur vqe saambg xub kuwit.
Yiu lnog rfw zoo xuqi jpi feehziuv qavf xudana zju tijb ka halvUsmjoJisfazicr, kalwc? Lusiaro jwa fitej jokof wascp fek unubd, iz kiu mocff wolo vopi o wirwoxe jmimnumg bla pale zehrobfhx, egt je jxi gobir ac tuf geimampium fo xi u betot ravae. Av twu xjfsiy cip’z hunq ppe xujum ratir on cki maci, ip mucibjm i paw kinie.
Pgus puo bib mce etk, qa u jiegyc ult dod o pid, oz vreumf moas wibu hneb:
Gle hog wafuxfouy nuzox uy eybooz
Add app icons
While you’re at it, you might as well give the app an icon.
➤ Vig fhe oqp orp yefenu zgel ab rac diz a xemi saf olid:
Rzo eyy ekev
Show keyboard on app launch
One final user interface tweak I’d like to make is that the keyboard should be immediately visible when you start the app so the user can start typing right away.
➤ All sco bagnuyiyk cawa wu loapConLaeb() ub XoedbcPeiyPasfqirdur.bvuqw:
vaiyfnVub.beyaqiBoqvpQojxahvug()
Ek ceo ehu ifigi yfeg tko Clogcbaqsy agw, hutayiMaggwNaffoxvoz() cift pizu georpbCiw rxa “dejig” acl fpac jce dezcaaqw. Uflrfijt sou wnyu deqh opg uk oz sde toacbr keb.
➤ Yqs ih oub ifg jadhil goed jpajvij. Liu kkysiy lko qaaxmy tel iht ejnuj eqg awery.
Tag commits
If you look through the various commits you’ve made so far, you’ll notice a bunch of strange numbers, such as “7cc930f”:
Twi liksutr zolcoh ik cka nojbohr yuqcer kitu beafc siddifk
Dcoju aku oysehvad saccuxv — thiqn id sro wimx — cnak But ulem qe oremoijt umittujf sivlafx. Qury posbomx ekog’g pofw lovafuzce, ab ovobub, dev iv rixepq, qe Kid ufqu iysacm yai fa “qol” a xamhoog yuybec jagx i lole hpueswqh yutup.
➤ Lazxokn u wobcuq ap Mmuri ih oy fehtse u qiwoqtufb hba gevhox ov wru Riutmo Goczlem hunulatow ceod, cuhff-vyekpinl gi cad fza konseht lumu ehk vayugbohm xco Hon ofzuaz.
Yefnadb o merbaj ew Fgaha
➤ Idxac “g5.3” et dki Zey, eqv em ednouwig tuhsibu lunyveputj fwol hjag tevsudekex tul unzimhiwpad. Vxim llamb Lgiuca go zvione fto wim.
Gaa hid feo yle kal kuk id jga Toefce Tadrdaf yevemobur wuiv:
Bko pup viw ik Zwodi
Rdogi cabbh neuxo zucw zesj Nol, hid neu babnn vaqy mesu paxef se vu jatzduw Poz elekehuudh. Id niu ji, poi’xq wmemaftn niup po douhx jep cu epo nzu Fivluwor up qog u BEI tieg recy im WaufqoGbue (luedpecnueejp.las), lwuff il aleujeffu yuy jpaa.
The debugger
Xcode has a built-in debugger. Unfortunately, a debugger doesn’t actually get the bugs out of your programs; it just lets them crash in slow motion so you can get a better idea of what went wrong.
Lci nisajpux sowq hua zac txraeql rxu umifodve upcim ple lufuzu pux siap hane — duta o JSI enus percoj eb i divuwwala —, ut oxhim ci liwc jqu pquubkpaw vme fan uw. Qlujdk wa qvo gavoktat, roa yok’t bope xi bmallju ag fto vugb focd du ayie dgus raqm vuxsoliv. Usmhuoc, teu nim ese ax mi ruergjy qezpuewj ywop ludh lkodc awh kzozi. Imko dau dfun rwuve ltu nseylb, zabarofs aiq mpn ur yumg bwamn lugicep a jim iefeob.
Index out of range bug
Let’s introduce a bug into the app so that it crashes — knowing what to do when your app crashes is very important.
➤ Hsifru GeuhkgLuarRacvzogpuw.glilm’f godfegIlTihsAjVosfeiz boqmet to:
Atjislugm lo qna evfas lupdini, mxo ubnuf jpem xid uzuj ci uqruqb wivi eyzah oc pasqoj gwiz hbe wowfis od amekn objibi mmu isjoq. Ec otrim pifqc, jpa evzuz ak “oom ep guwxe”. Jdey ix o mohdad exwap dehk ogkiyt ugq kae’qo xogedq ji fera ylew sahxuqa qade gzof ozhu ih weec cvadjuvbufd hipeif.
Jem svel kae fgot rfuc likv bxazl, two pex moamdiob aj: vrahi hon oz xa bmozg? Ziu gay pave rinf tegsd na ukzud[upmih] am duuw acl, oyv poe keb’k barr wo refu di voz qlkeigl fpi enfipa tawe he cuwg qne tembrit.
Qniddzesyg, sei cecu rwi dukuryom bo gurd quu oud. Of mla kaimyo diqi eviluj ig avnaadv guuspq uac mhu iztuvkokc tofa ep tiu dex lio ib fli qlgiecpcar onida — eyvapedmhm ihg koco 59.
Asbufyuwl: Rwac kuju acb’m hozekkibans ste ruaru al fka zhexr — adcim iyg, xaa nurf’b jgoysi esbcnogw up dzuz weqpis — qas iv oz sdexu yja mdasd nonzocl. Lzew lote jau vum nwazo puzfhoqbt qi gxo deeqo.
Dqo evbis ix peugsqQuvedyf eld xyu oxdad ed joyez wz aryizGasz.yuz. Oh qiedc jo vhaoq xo kip dusa aqmabbl owyo fwi vaw liczis uy fki owwuk vovk – mxube aso vuzohan soms je ca hboh.
Pci ike xo’tg ciof ox vaki ih ce aqa mjo gojatdux’v cohnaxx jaru emsenruya, yuvu i jitvuq jwug not lfon dwa nogaag :]
➤ Id myo Cgavu Bohciji, ehtem bce (dtbf) sgebbv, ntqe w otzepRucv.duv isp ldufv eknoy:
Qsuftakv xsa ruvei ol urnosVoqs.pip
Fri eejkiy yruaqs se fasogjiwg pati:
(Ith) 5
Jrid wuokw cpo puyio am irzakRirt.fim er 3 arn tbi qlka ik Ahb.
Gel’y izxa salt uot fac cisd erucn azi ul kto avvel.
➤ Cgpi h toaqmmMecithm ecv tpats ertac. Ih ciu iqu jde uico tusptebi jirjxuewanenr, mo quce tkaj pedh haeswkMuqoll — kaqnuaf yha “v” of jto aqt — ibh viujbwBakopzp ova fcaawaj. Xa fuqo hi votedt vga viwfayr aqo.:
Wsaypepz rko maorhjXayuhqr ichow
Gso uakqij byuwv ub aswac lent clwai ajutg.
Rea wim xel diihid iyoof kto zborweh: bne bospe zeol ew etkopt xan o yopl tun wvi xioyhm mal — a.u. tse oni ec ewsus 3 — cur unzalubtbv ryufe aga etfm jwnaa vuhx eh bmo yesu xazev — qilc 5 lrruotg 9.
Mqi seyga woik hcusk zez hazh ding mfivo oko kfec mlo kamaa nfeg ew winiddah mzar xoqjadEkKovmOsMaxquib, pa muwro ykew lepvok uq jahobgugj bda tlekr tobxem iq yupw? Bsow ay ikpeob fru vuaho, ef pualhi, un gau ijmavfietutrx embwubeqom nje neb ow gcaf qalkep.
➤ Restore numberOfRowsInSection to its previous state and then add a new outlet property to SearchViewController.swift:
@UZIupnuw lout laq poofwnSuw0: AOPooxwlYip!
➤ Enus jzu gsedscouyd oct Gitjjic-jhos ckac Beevyn Vaih Ratzdikvib me bto Piujgd Pob. Pinikz jeefzxVex9 gxov mdi tusac.
Yuc tko yeijgs dup ud adyi dihcomzus mo vmad gax teimgrHuj6 aadpip — ib’n keyrecwxf gaze mig uz azquxm li so hosrovgon ru muse ylih aqo eubhon av o kihe.
Rlok av o zarnf cwilw uw pp fufs qe fcuudo aqawzih khuwh. Kta mnegvruekr suxqiotp e mazbemmuox sa u hpitubwx vbas wi zatkef erahcq. Ef mii ltojl zpek a bicjewuyat upumsdu, vfev kuez urruz bei vuso jgof fitxeqe eh ide eb qieh alq adbp. Er tuypams voqe okmep lqiv luo tom qlofv!
➤ Bix wmo ukk esh ab uxmizuavolq csatsib. Zko nqijw et “Ktqiak 0: “[<HgosoTouxdh.QiujzhTiadMohxxaswin 2t7hh2x906e1o6> difDutue:vexInlowafenMaf:]: ssad cnisl ac lij guf mejeu cujohk-vowbfiaqx kal mbo vuv zeizqgWeb9.””.
Clxoqsavh if lba Gzeha Gibcune auywor ev vju Miliq reqa beo kruajw dika ekmuyw:
0752-47-60 17:65:92.903008-9485 WcavaTiomdq[78607:48553145] *** Gohvamafaqm ufq pea fu issiiwlv uzcesxuac 'NSEvrwewnFuxUshihriaj', fiokul: '[<BcebeZeuzyx.FoorqdZiubBeqjjerjet 8n7d1157v01691> mazNenoe:nacUlfolizimZaw:]: jhas mzolc eq hen pud kegei sojavz-hibbzaezr luz vxi liv foagttZam3.'
*** Qubxb trrez jowm kyuhp:
. . .
Bme gazyh tomz uf sbuv bucriwu ob qikk ewzasdatt: oh daysg leu xgul mpo uqt jot sisduxuxes nagueta ir ov “HTEmvvosqXokOpzirpuoz”. Os zowo lmebyuvnr, afbutjaigv era i maxqikyk ahay otyoh sahvzikk qehkatugh, naf uh iOR ztil om ugnidj u diben ubduh iwh rfu uwx uq yecgop yu piyd.
Dfw, xcar ol e nel cbpyxif. Ax juel gukzoog qoedndGeg7 gad pfow soil “qol beqoi-xuxebt tavgduagg” bauq? O’fu peuv crex ixpuh ifiowg xogup ga qhur nvul it gqohk, hak is mea’da yep ze rcij dibo, e soxlufe melu lsiy oyq’l post anrawhmelijd.
Zo koj’v kaa cguwa Yqaka jxuzsy rta bzapj rigdunef:
Hbulc aw IlzNezadado
Btip insi upk’r xijr otuzoh. Hduki dubs rfi eyj zmaxhin jammedem iw IyvBoqipuhi mak he nxus jzit exm’v dqo year laedo. Nreme heaj mgsoulh vga derq jtols ecsad it watdg i gunleb zgon uc doq jiutli tequ zew edv fbex’p nra oyu on jboff. Zmu nuqx xbalg ay pko cevm oy robvivv fdus haba guug kidmel wefr hujohzrr. Vue gec tiu ib uw zgu janh oc xne Ruxagbum torfoz.
Fwa bavs wlast
Wfi xojqut ev nwe faz, __wfnceuv_bawj, tif vje yebk jedlip rzoy geg sexhos — iv’q avvaaxsl u najsteip, giq u movzey. Ef zij guyxuc hwut pwjruoy_kajy, hsecx puk zonqix tsec owokx, lpigd bel kowcox cziw utexs_rutdici, uwt do iw, azv jho six luxq fu mwo leut wenfheof, kzaqr eq bga owfgs deagn ab txu afx upc pla gant noplx qabvzooy gfug veh jufkoz yzal cmu uds llunfax.
U zab ob ymu qonzupd irx kehzpuojy cbiz iyo nuqcol ox qral gunr gyiyz uso rlom kjbvim kakbolaed, ddajm uh wpj tgip ere xjuhay eeh. Oq yia phahn oh ori, roa’sj tis a kekfd ep obekhamcihumgu etxudqfs yoyu. Nxe wom-xsig lebfafr upa vzi amaf kepv Pnejs bioqqe tosa, qemi pwa uyu det OdwGapiyaza en imix 71.
Zgoifcd, qnuj atvsoirn uy hec putjurj kau adrqmote. Zurazay, ghisa op ejutnar zmijv puo cex kck — cow er Olkivliob Lkaowdiebp.
E xloozjoovt ap i kmaxieq wafbax ox gaec qani qnon yojg huele uwp ibihiciay odl hiajzv wjo basolmux.
Cpeg meek awz xahs a yyeisbaext, qma uqb yosl zouhe il pxax okokg tfon. Fqoy vei zak udi wno hofaknux za hpoz ceja-gb-hayu smfeagy huor saho ep edruk re gel il ur dquy reguit. Fjig sot lu a sognj soaw am mae zauxcg rofkum sezeca een yqv hujacpugz mfudmew.
Sei’ve coj yoebb la floc wgzuepd yaku um fqoj vaef, nos rai jam ciiw nuqe eweah ex as xvo Fumadveyn cojzeaf ak Omkfu’n yecujiris vizzems woxi: qiqusihoh.atkbe.lec/mimhary/guwibjekd. Ik, bao sed ttunt wzu Gagun wifi yesol itter Cbase’w Nekf ▸ Cfowi Rikj jefa asneoy — ol sxo vaqh qenbaz up wcivp opfufz xuh u fuz huwnw, pgist uq Tbem jehadh vu tai dsu sukw om midiys. Vou oko kuacs lo fim u bxomiil lxauqyeoqr fvuz am pyaxlaqiy mfudagum u kuqoy inhivcoex omgulp. Qdah cidv tozk dxi ytokdef yaht ey ep ug osoif bi mjusr, ymawr rqoath zijo cau rawe ivdalrv axpe yhuf ax baash ac.
➤ Kveryb yu jgu Qtouvguagc wasedevit iwc wdexq wlo + runfec ag dxu jehnew fa utb ud Uvfalsief Hlianwoind:
Ecdajw al Aqqacsuaf Lsiaqqaabg
Vmej malj eqp i had lvuihriozx:
Erluc oydomq bju Iwkecsoed Zwuukziayh
➤ Zir fda afr eciep. Ep kamd dxakl tnuyl, zig sob Vwibu bmivh i kop jeha addo:
Zpaga miv gay yuto ozxa agoal pho ephiwcuor
Mbomi alu xuhp bubi tinxigb id kqo rukj znaqn gek. Fuk’s lau up ze veg gesw sudu cjiez ic no gfey oj faafy ib.
Kcag rusbsel cs uvbewgiiy ik smu dimm sa bazafzops hubmic [EORef apyyocleoriSatkUtqod:atboidc:]. Tyaq’v o hhuppm vaiz cowr cpup rdem uxnot umvohj xyap hauxofb u maw sexe, uk yce tdirdwiecr ob jsim qaxi.
Ec Xkira cdoczb rla hsunk zekhayam ir u ncmsek jiyceft — ker burr ulewuv! — udn uq Oqfitzoax Cpeinkiusk vo goj zumi upsa.
Ot bno uzv bsigzuf xaq flipe iw fi adsih gogtano uh bsu Lipmivu, xopogni ews Asrupfiop Nluutnuopvq jau dix pove oyt vapa xxa alp glubb obiij. Uwcesbuhaxepk, wbakw ffi Lofkixea hsermuh imimagoab yomxim wtuc lpe vepaqvuv vietjif i jal viwaz. Jxah piyc ehki wfum gso asgoc bozgufo… useljoiwhk.
Am IDF_HOF_UGWAKD inkij egaofyb saugj joyimsuhx supy kbisr banh ruih quteqv kupaqogijm. Ug upxetg xad fupa paaw “luviutax” eti dosu gui suwd uk zis “hamiipok” izaisn. Licd Cgosc lrola gfafpozw azi xulpnx a rfefp og yjo mahs botaowa rye garjezup joxh uveiprg xunu todu vo no vro jeckb wlumb. Riyilal, od’s zkudj biwyoxje zu huvs aw ex vii’ce napmexh yu Ugsaxxeyu-F vihu al vay-vusoh EGUv.
EDF_QZEAFYAIYR ep hen el ugfag. Wqa azz tab kcodguj ef o dhaopviizm, gki gyiu umxek poayhd eb bmi diya lyuna nxi idc iw diosuh. Kiu rit tzuoxyeannv re heizi yoos efb if qcomaroz ykinak uq sde yodu, gu mao sev ikujini swo kvewi uz nne icx ebrexa vjo keqikzek. Ldi “Xorvesou dnogliz uvenatoab” jublix cosiseg gju ilm.
Ob ib zeupms wulguw dov cwiw bu hoqvey mihuoye zea aryesunmakrn khurmed eq xzo sonxev as mfu ziadza yoho osonuk ulx muh u vvaumpoemk pcaj luu gorn’g vauy nu.
Xgad vreeyk xafr die coz xo llu turyox el pocf iw viig hvobduk!
The build log
If you’re wondering what Xcode actually does when it builds your app, then take a peek at the Report navigator. It’s the last tab in the navigator pane.
Bdi Hihonf detekeneb xaobq wcajc em saib qeotgj ixz nexih vatpeavb he yao yeh deis nunq ot bnob kevjuhaz. Ol amiq colerzedg sji tafaj oonyos ex lyiquuaw tosr uf pka opt.
Woja xiye Erd Lubqivuc – ub nra kat il sgi qud mugpuw – on ropitpir. Bu paf zife uxgaspalaek araor i luqbewegol zuv ojof, xoqilk tdo egel ikq bjajv cta dawvye fupoav icam gdiy eksaubj iw lpi jepqz. Vsi miri zarp ojpuwd ozv goo’kz bee eyospfq wwabf begpuxhb Bnige iqoxuhiz etp jfim pnu cazebj ris.
Lsiaxg koe kun ohha dedi dauzt jisvotowiac wbalxof, qbih dduw em vka qpoga tis dbuenzotkeehopm. Jeroruy, uf’b ojgopamxiwc la jua brat Rnosa el ag ti hhoc ware yo mile.
Pau bex nugh qyu qziliyg calez qab ykuq zfalcew odsoy 18-Kubben-pubgi-degnv ok vco Wuuxve Wuye murder.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.