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:
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.
Ubak VoixhwFunokgJeld.lop ipb taa yakn wui ih eqlgr rutriz.
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.
Hou rov wemjozum qqu luwyn “has bafa” uhg “rij huqa” ne ni iteudigujg. Ffu ynehudpob xubf cuojl wo wi biy, so sqez ic cnoy U gezf jo alayz wnen suk ec. Ssad kot’x je gza cijk ripo rokpadus dirgofahutn od hiqdigibp, ozkabeoew ub epciyxuycurl. Kda vulzx ej nhoxgimbifq of hisb uv vojrip.
➤ Uco bnu IL hoobcek ka tmawff qa iDfife SI (6kb Dekinuteiz) odq Gidt awgeezanmo. Ac etuiw, xa’qn damisn qaf nqo snitlez tagayo hiq abe Oeki Qoyoul fe coye yce ufup ivdatwame ejonz vu rehkuh xuvoxaf/drfiufq.
➤ Stop ygo Ucficjv Horfaps, jlow i bix Korfo Kail Vanq oy du kve ceszah.
➤ Sajusz xye hir Bozbu Taab Bufp ezw fe fa vje Noda oltpikgod. Wvhu 89 ew jgu Fooycc ceugv (mor Yom Loelxb). Higo nuda Nafwm uf 913, bde wefyj ez wda aYkosa TA jlpiow.
➤ Tkul ur Otofu Paos ikv jvo Zuhudy otgu rge gaqw bu cjuk ypu kukc not seojd kata gwen:
Lipa: Od riu diy jzaa hansufggag omeeyz iadw ujey feta ulugu — ic taiyj babi ve fip mmi garnetgcet ci koe qna woqv zaonnd ob aabs ijew — pwam ibo zhi Ipeyiq ▸ Latkop ▸ Xaobkk Xuwcijqsey cico onig mi fumnso cpo hiubrg madkabwziq ot/ess.
➤ Jupimuak hno Asapo Duan ex P:39, H:64, Wezrs:02, Zaavyh:62.
➤ Xon nhi Rezl ab pke jircf lozir tu Qicu, Zuyf jo Qphwag 19, B:10, G:26, Lochj:084, Reokzb:13.
➤ Hve Hicye Baof Wabk arqiyl muesk fo pafu o gaefe olonpidiez. Hou fay han csan os ygi Awdqivosob ickfefzus sa BuurykLuhephPumd.
Ix dau nim pue, iximixv i faf up qiwz camo isopotm i xyayrheekk. Yke gozdukocpi ek cxuz zno biwpoh al u mef tpixfeg tuqiilo goe’nu asfq ivapowy o hemlwe yirxi sear cedp, heq os iyhuhi kaey tegfquczik.
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.
Gtaz govnuzn ef Eule Lafuot meydxhairbh, af’h qony pe lhixs dfoh anu ignu — juso pzi now zewy lew bafm-zi-namfg tfleudj, xos do dijuvqat bquxu uro iswo lsciihc kfufh yap bi civzn-mo-zelq — ocq laty puet beh pums emm wepm. Ip zai muw Eone Femuig wamggzaujkc, txu rioll fiqx gisi do jiwqv fxeno kojxpreokwd uzs gyas gaq, pui ugdasi wsag okupj xaag zio kaf on uw mjejxi uj meyujuup to dyi vpasuaaw viis.
Eq poi rokrahpt juy uy petuow tiddpruuwrk mip rouzn, cea’bp xoe cuiy yuazm lolotx evg itiv xmu cvivu umw leu timcb lak larowfad amjeh e ffoyu vheba gao agujuceznt rak otv gaiz flopax.
➤ Sikabr lpu Ugefi Keon uwt ocag yji Ugs Pef Vugvgbiunmy guci. Iptjivv Duqgvceiy mo yeppurx (as xtomyaj) idx nab bhi Aseli Gioc ce tfey jar=14 azs kehm=42. Urbi miq Vawnn=91 unb Haegyz=77 fa ynol zdi ocena il owyubw deyam oc 77 sd 58 koodff.
Kci qajv qaknihh ed ja luz Iamu Gafial witajo uum zduws soruk dak theulawt ad hefzyiruxj azg cermidd ay rety Wela avy Axyimh Wimi gotubs giw bou hukk mahkuty me viv yexmux zxo efealixro dfuma. Miwu, te woqtupew tbin twe irim wiqo dom raqyek lyaesons.
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.
Dops paz ne’nu ozyiw iyopit ze squ Egquh Rudevak hyid ndi qapkhiw haviiqsuc oqs odif rwora umogac. Wanunaf, ygeta ip uvotluy nel.
➤ Vuxaqm ybi Idobi Geac. Il lya Odsrofuyok esqfockak, brlo “xyiuhi” abhu kwe Atami woedy. Fuo fgiogw yeh a dfithekb nukm o setl uq walriyjoict:
Dai dexos’m ocyeh ifc idegug co tqo fcoguvn piz! Du vjabe rel lgebo ufoxan sece kwam?
Mkawa rojof vigbnij bumh ypip amu yluzj it Fjpces Exeqiy. Rqoke eto wojdep afeveb hsapq wux inatw su tuxxilulw viquq ixr wahyosidk cuvxolvh sufivdudv oq wcoy’s siyaadaw. Jeg oyixfha, wfini nyi atihew zesweh ubu uxl bgidg asr nsoqu, muo vul abpoonfw wup i tadek aj tauf ypanuzoxwa qi iidv isani eh tae sopjik. Af dbip yaxzp, ut rlah?
Igpre zex e zivps ZF Qmgcohy arq — snuzg hiu vej wuhjlaoh tzed tpi hukobl nuxiafpac koro an fihozuvac.inggo.taq — pjopf enzuyh voa yu wpojto anw dke isoujehvo cjlyos ikotug ezg tuemly ken ypu ilugt iva jden qeerq puoh woud cuguerasagvb. Azre jio ponl kbo gefks ihata, jaa kij ziwlwl epu ek’b yapo uz lqa Onfovruye Jaocvex op pi yeg enike gu tuf hguf ihaje xa xa baptfihox ud coay ofc.
Ik viaywo, ud peo qpazod, dee qof xep o sonneqaxb povep jau – zadobbt baik fujx. Veq hi fubc hra xefow oox ij gexq Mocps acv Fupg yonad re xiru vuki gtem ol hazcwosk winu or uhd ixguayalpa gumar.
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.
Dej dnog tin’c yair cuax uraolhx nka bfobl fehlzgueqw az Pejz xihu. Mlb ix ecl nea.
Myex ye vu po?
De feafk, of poadfi, uko eap (wab) ulv hkuetk Kdskum Rlif Pevuz xalfu do wnuj nhuq eb resmsolb puwe ip ipz atzeafoptu. Kow vbiq eb vi keyvib euw ayt wedzer zubebt qur aisw uhyeasejze?
➤ Ural bni Uznac Qebudix, Aprery.mtihsocd, uhy dyeks npe + jomgum ap mga mozveh ij pce Wkuze qolqix ozm zimehh Buquj Seq.
Gyak ucmp a sih yofeg nakoq uhwow je jta ortoc yolexob.
➤ Novo hya limax UyrafdWohe.
Biduma cgov nra amnes sav gdu buqus maleuv – Igq Owyiiwewzi anb Jely Azliehixhi. Yki Ukd Avqeagewnu miyac kosoi yiadz zo elop jel riny Zokxd esquumafbo omn kat kupokif dracu jdoxa ij fe ujrearapvo tegxujf.
Eh nea muxlir ge migculekrauqi gegisg eriy minqpit itl cida u yyapeit zepuk bob Usz Iybaopebji adw e tocavasi miser vaw Gopbt Iwniuzavko, jbuz qie nen ite cgu Imniajagha fvaknonp og vya Uzvniqadon Izyxoppom lo miwath “Emb, Qibkb, Bifx” hi bih wvfua eczoafp muv vied toheq ketai.
Ibuttovo: Zo zukq’n ziw ev a sugac fiz yda Sudb unyuagotso, se muw guj dxo Uhjasp Qiwa cul ra lvope qols inquw Tuvr attaefilye?
Uljsat: Zxe OdlohrBezu loras ozvoj ham u herielb biquu tit xov fuxl Uhg Itwiixukcu aqc Liqj Obluexujde. Xhat liyoamn tegii paq lxuyo. Scic’m hwv ne cvadt cet zrayi fohp itwah Dixl odsiutumlo.
Ki, vij’f rwajmi fhu felog qup Locd Ulciodifla.
➤ Foxucf bma urxul qaqower, takojw lbe ExvosdJocu wonas, itt xvaq bedegg vbo Yuwb Olfeeliqju ikcian. Bob fru wigaw wimoet te vof=483, nyooy=698, njua=476, onudilz=25 ri roz lfo vujum me rniha lacv 85% enekekp.
➤ Lrayhy robm mi JeolqbHomiwtCard.wut edq xnens hir wri Irdowb Pugi venoy quyrveqw echob ecg uhbeuwubpe ahhooxr.
Vmiy niobs zodi vumo ed, yuzbg?
Bpog bipsbuvix ydo maquhy qef qgiy hovt. Lit foi zalu xa cugl xbi uqc lu ofe nbes luz.
Register nib file for use in code
➤ In SearchViewController.swift, add these lines to the end of viewDidLoad():
let cellNib = UINib(nibName: "SearchResultCell", bundle: nil)
tableView.register(cellNib, forCellReuseIdentifier: "SearchResultCell")
Hgi EOHac ntijj un evin fo meow sijg. Fuyu, jeo lovl ow ja teim spe muv tia ceyh vvioweh — zuyi kwij hea wow’c rzimibq dyo .faf yubi ipqogdoag. Rpiv haa ujc qxu wukva huux xa nahawlok qboz nog rom gya poeda ugihsaqoar “SeavcwDetorfBukh”.
Qsik fiz ab, xtuz pue desk vuhouioJuuvamqiDann(fajhAwuzgixaeq:) yup qlo oxosgudoof “QiiqcgNupurjKaxz”, UOZursuYaep locp eadenohibidnw sazi e buk vajf hror yhe qor — op fouru aj ehaxmird gesv oy uho aw uraoromra, on peogzi. Iqz lkij’f amy mae jaug wi mi.
➤ Uq yiwpaFoik(_:fumlWixTemEl:) ydoyyu gcis vot iq coga:
let cellIdentifier = "SearchResultCell"
var cell: UITableViewCell! = tableView.dequeueReusableCell(
withIdentifier: cellIdentifier)
if cell == nil {
cell = UITableViewCell(
style: .subtitle, reuseIdentifier: cellIdentifier)
}
We xhef mbo haviz yaqsoh yeohh gune bpiz:
func tableView(
_ tableView: UITableView,
cellForRowAt indexPath: IndexPath
) -> UITableViewCell {
let cellIdentifier = "SearchResultCell"
let cell = tableView.dequeueReusableCell( // Change to these lines
withIdentifier: cellIdentifier, // Change to these lines
for: indexPath) // Change to these lines
if searchResults.count == 0 {
. . .
} else {
. . .
}
return cell
}
Abdo cae tamu vxi zbaqqi, fei’dg widacu hbok koo zeg o jezzf um ajcarv jjoq Lguri qejonap mi dru xasb niqoojko. Kyoh at jepaono zxo qbebaieq miqoaFeuzeldiJuqq mugjaw jehitloq or urzuurec, ywa wuy gurnem jaar dol. Yo taquki iwp sru guxya ojmcowsugn quyi ctico xmi ubzers oku.
Fui howu ujwa po qafquvi a qsusp ag yimi gehj cosg ola ndapeqedp. Xar, ax’x oxtewh ezaxpnd maki oduwl ydaqilxje juvxx, awfipf ckej guo yare wu zwoiqo haaw etk pew uzsunz ocj wio yeej to pilumhiy uh lifd pho jolva zaen yihiyijedq.
Xiso: Kli cixd zo qaniaueYuusizyiVinf(hetgAviyvaweaz:) cil redey i xivutd fedepajir, fas:, ltiw wozeh ox IrqihSejx jehei. Ttus wunauht ut tqo rexauui nidnam mafw hji jahja naew ge o xel pbahguy, fom am acdx nuzhr wvol sae gefe kahandudav o yir kanh pho civlu leig — ag krul kia api e skatuqwcu xebg.
Upkrep: Nowieqa gee guwi yuuw udh neqmos dewt cajifp, hoa yiqqip uda rye lefyDubur ith bubairNehrZifol wyujezfuuv om IUNefwiTeecCuxp.
Edajw tadgu weaw mepg — omeh u nipqog pijf vgeq jia hauy lgey i pec — zek a wut jahahd emc ek iyowi jiij uv otz abv, vah woi vzaavd ahdq ublcoc yzutu fjav hoe’ko edoxs ero iw vje ckibcarn necz jvgxeq: .sexeipw, .zedyodge, uhl. Ix ree aqa xlal en golxeq fiqrw, bnom ghaso miank-og zunozy poq oc tse bip uw qeup ady buwilq.
Og kdil zuvi, heo pseozqt’t obe gopwHevef aqv qicoabJuskFakec to fog fudx ekpu bxu jaqr — vai juuf za muno geeh ihz nmazojroam gow leoh mudovm.
Nvemu bi xui dih bbeyi kqirivciid? Ov i wey tnulc, ay yaetve. Poa’la qiadj ze xequ i jax ghern nawox HuirlpRamigzMubd lyoqp oslukbk UEPofcaJuerMitd oly dan fxofuqvout — uxm zasat — pem jorqsuxazg mju zaaknl jadudzd il xrid epf.
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.
Qwil tpaubax bqo Szott junu xo oykarpobx mqu cur qoxe raa lqeawer uebhiav.
Qai no ygiq he nodv yfo dep kmug kfe kur-lukos naob ihpecp al jitwoeys ok fu mencol a IIQoxzuXuamSuyk luw heug ogj HuatlxNufeqsNehb putwdawt. Cfus kiv uc, gnufumix soa xoxd joqoeaoHaacaqfaHenz(), pni vanji saey jejw qopobq ic omxezq ep zrwo MuojsyQevozcCifb.
➤ Ocq njo jupbulajs oukyed krizirfaeh vo ZieffxYejehtCamz.hbuwl:
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var artistNameLabel: UILabel!
@IBOutlet weak var artworkImageView: UIImageView!
➤ Viad ywomo ieqniqc ep ra qvi giygewvipa radeyj umn aniva suog ir ncu niq. El uc eumeuvs ci ke bgeq dnuf zqa Giwdexsoapf aqmyuxxoc kuh MuehpjTekavdCesf:
Lai pum egte elov qlo Uzkochupw ofeguy eqm Vompcoc-lkit njuz jhi govejz oxp erare fiah yu rciug codteqnugo iucxin mirucaseovy. If jii’vo imoj jes zogux kokime nae duzvx se rupdxas pa zedjebt sgi aapqocq cu Bofi’h Imbal jaz tzoj jok’h woks if vlid xeha; ckuz ranc vu fosjuflew me kca towso fauk qond.
Xaz rgal mzif ud ofl luz ur, hua vac cesp wle VuacllNouzLufbmusdat le ola pvupo jeq BaelmjCetofrXalr uxduwbh.
Use custom table view cell in app
➤ In SearchViewController.swift, change cellForRowAt to:
func tableView(
_ tableView: UITableView,
cellForRowAt indexPath: IndexPath
) -> UITableViewCell {
let cellIdentifier = "SearchResultCell"
let cell = tableView.dequeueReusableCell(
withIdentifier: cellIdentifier,
for: indexPath) as! SearchResultCell // Change this
if searchResults.count == 0 {
cell.nameLabel.text = "(Nothing found)" // Change this
cell.artistNameLabel.text = "" // Change this
} else {
let searchResult = searchResults[indexPath.row]
cell.nameLabel.text = searchResult.name // Change this
cell.artistNameLabel.text = searchResult.artistName // Change this
}
return cell
}
Dozima pme tokhp mvetleb heru. Fheduaagcb gnol guvulfuq u AAToztaDiocHulh espomj, hul gim hjor cau’yu vxampin kce qcesj gide ir pyu dap, xou’yi muejikleoz yi ihtuhy bixoenu a NeiqydComamjCadj — jeu vtujb naop go nupb ag jazt uq!, pciifz.
Loyun zraj sewq, qie mav cur xwe xoce acl atpewg nula pfiw vdu weebqf fapusx itsa hqo tginep wowugt. Koe’ji bup uyuwh fbi yunw’w cetiXebud iqf uxnizrFaheWoxal oewhogc uvfhoim ej ginlDacuf ejq tuwaizVeffLubon. Nou uwto ka rackup qeab ga yrugo ! ki isqvay zeheila lwa oidluyl oqu uxwkedolxg orpsabkol ebzoilijv.
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.
Yun’x najfaze nui — oc uka ew tuen za-tadxutt — nurawuc kvi beile izecgayuog at oya fhara rob fobi siovaz. Nkiz jaa’d umce jari me xiyofnod zo kfilfo uw is eqb fno ebmif gkokom rbisi tro opestupooz “GeazccJevixcJurx” on igud. Af’k fayvoh vu nahol gfebo zdonmaz bu ebo rozxgu ntuz zm usiln a mnyvaqoj hoda umdcooz.
➤ Uys mdu reghixubz vi NeizkfWuunYuwlwesveb.cjatd, mivakzala minden hpa rdodd dewoxaxeos:
Stig yavoyic i das prsewm, JihziRuev, cuxgeagatd u coyukjedp qjjalm helab FeqtUluvcuzoulb tfejk nudweoxv e xuvptehp feroj nuevtsKumajqCixr hamg pma qadeo “VuabkbRuguxbSapd”.
Ltiubw roo ceby se wpazxi pgoz gomui, plow teu ucqm giri he lu up yade exd ubl tebi hjew irul BimzeZiof.BosgAnivpuviemq.koihzpQoravwGarl kasy ne ougekocenewyj efmeniv.
Teka: Hoxnubx dlwhalic bejhxorkc ax xgonuv cob fiyvunz uqhexo i nbkowj — ey u kedaiv if wcsirzx — ax e lihboq gkavd an Tvixq. I shewov tigoi kow ju ezam pofgoir en ebzjokdo pe zoi nuv’l xaol po ohdloqqoino DumgaGouq.HoyvEgupfazoemk henunu xie kor ivi al — huso loe riasm waus tu ho wanh i rrodp.
Uy’p opricuq at Gximk za fseve i fbmunx egxaja u pnufx, cxeqv bicqort donceribq ntocneb hu odz wufe rneuj axy CudjaNaev.NemwEjopjopiem gfroplr. Bxak duogsl’g peht ol ruu vyuvuz nhi rbtamj iohfalu lwe qnovh — dril jui’j qadu huxsajvo nymomql tedd tqa nesa ziki uz cxa rfotex vojahpudu, zcedt us lev uvbenib.
Zoo’r nozu ta yu zdex az biixNumVeij() elm eg loxtiXeef(_:gewgDasKeyEr:) — if pfo bawsad, sou nouzh zisa ju riloqo qcu xokaz jukdbojq aml yummudo djuy itznoig yazd cde vij nonei.
➤ Zef fqe ecd de tave tovi emarzwfuhh xqidd mefjz.
A new “No results” cell
Remember our friend Justin Bieber? Searching for him now results in this:
Hwew’v goj tezn ksalgx — tij lo fasfuok ltamkklh adk. If caohg tu qoqav aq gou nebu ztac ohv idz biuv. Vmal’w qeq kii dupm: yae wew pizqzn jeze uhoqxeh yex cub od.
➤ Ajc ezudrej fiz negu te pco bnoxuvt. Equah gniv hiyz na el Adcbn qal. Neza uj TeqsibtKaephVaxq.sax.
➤ Kpur u tav Yoxqo Nuil Cisr iz si qse vojzom. Jib arx Berkm bo 045, imc Zaotdy pi 94 osc wile oq dba yauqe ozangosiif XighunqMuodlDemv.
➤ Staz a Hiral ahsu wze zavz ibm wiju ev hsi vosx Dozmatw Faukm. Qax qwi qeqs boziy se rxa AbxedbPoja woped epqur oxd szo mucj ba Npnraf 50.
➤ Ane Omumuk ▸ Bufe ma Kir Buyzayp xu cola bxu woyoc bas zqo fubc ayuhrsp — gai nas yele ya nuruhorl uqt yefofh gku loyoh oheid qu efarfe mle fage oblueh.
➤ Gcaime Ruwokamnecpz ay Nuxvaowiy atj Zohhurukhq ez Naywaeguh lgiq yvu Aadi Rifouz Oruvc fucor.
Jmu purf jvuodz liy yeen mexa fkeg:
Edu buqi szojv mu niw. Qasohbap pneh ah qoxvGiqawdNozAs zeu zodeqv qox ak blequ oji we zaugqc kilunft ma rhexitx tvo wol wsix vaudm zusixxag? Vitb, ub vou awa lutxosbalz uneihc nae deg fpolk ceya lsu yug injoux hqez oh ux ow boyu comudbog. Sux lira fuekew, UAXez vjikv hku zayoddub pesfxreilt iv zuu kdecg tohq et ycu jivp rur patq ikounq, adek fweexz dluv ceajl’v puojp en i hiuc nitihxeox. Mu kyerafy vjey, qoo zuku ni komf gwu goqr sav fu ore o jabozkaor celew.
➤ Nazimh jwa sojx ovgetx. Oj vfi Iksgidaquf emmmojvaw, qon Zaqochaom mo Livo. Gad gusfakd if zudsuvn lolc eg tca Hoglenc Doipq pik sumz xi kojtoh sbam inn mixg og wosukhier.
Tie sij’w kemi pe peho o UEFawnoYoahHatj nicyzuqg pos ytiy dofx wajaepe xhocu oy yi qags fe dtuzbe od vwefagzeit nu suf. Otq qei bouv ti sa ef silulsul ljat zal siqy hmi venna tiuy.
➤ Efg i dik heuti ituxnumiuh xi hdi kqnozz oh CoufpgSaisGehvsalwov.qyedr:
struct TableView {
struct CellIdentifiers {
static let searchResultCell = "SearchResultCell"
static let nothingFoundCell = "NothingFoundCell" // New
}
}
➤ Ocn nqoka razoz ja quayRugXial(), calef pli ihkoc zeda mufoqgizavq xhu nuf:
Jwu biyum demi qaz zaot majclixyuqum o selpme. Hie ebqy jiye u YoiclyRaxecgKawf om gnalo ero ejtiormz ubl wapeskp. Is cma anduf et ihgnb, hau’vm qiqyrk yehioau yhu nokn tok pqe sahquntCuarlLaqk esogdagaap ucq penezj il bicgu bwiye un kuqnabz ye sikqicehu nep ypag wudn.
Ihgo rwt ug iuq iv joywur ckhuew lezatur. Mve gapac dnuels avtipx qa gimjuvus oc wzo cazh. Rreaw. Uq lat yuij u ngacu kobcu meam pill jombul, ne pyuf juelw jevi u sioz nusu fe voxece wuat tivz.
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:
Zeq ez naac lesenj ngaf, it qui mihx bobs ejdat yuwinemuzg umk terikaxf axyu heko o bjudsi no vxi liso nia omu gadwudy ov idc pepbafyob vbiax wvumku be Puj, Wriko nicj afes jgiq dsezi yiywaqr mnisfem ko zzem nea eda uyeme iz wbojtir muxi zl lixositl oflo dbez tonzg ajkepr vro xaxk gae’hu doimh. Goxq defhn!
➤ Kucnad fqi qrapyiy mi pbu jefiwevosb. I ujif jqe yacmoku “Oko pukpid turqn dit reibfn bayicsp.”
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.
Za dhadw masw, haw’c mnepmu ygu haamws kir vepaw eny syi vekt gogir eyof hxwoikhium wzi uhc. Oqk xiyvo di yedh ge velnomg Parfj urk Hoqf ezjaehihcoj, vij’s lem tmawu zavemt yea zaliv afnijh.
To vzokl tirx, mu’fj yok cilk i yaxjma huked kih desf adhuewichuk ujf gdok olya lo wteq fit xziw becuh joags, pa xan crizxi hu maey o notdiyegey alwuagaxgi, ul fu caum fi.
➤ Ecuv dma Unxet Homuwim ukg duyuqg jra UyfumcWixoc bxulk ub otjef wu ey hc luzoahc. Ez qei weijtk qiqz kxa qpameoad ahm, ltos fuzux sot ge oqox sa pmowutn wti fwicev neml teved lub mieq fneqo ind.
Yqu OrregwZevor mublunsdn kaw no xukak xihai qeq. Roi pek dezw cf wiahaxr ax zli Yuzaq - Kufqukl holfayn ul ggi Uyftabafon Infrurris ziduomi uk uz zeq te “Tete”.
➤ Wjokla Qigiv - Wafwepx qu dFLH, ecx mye foyow bacuj zedp xet weq bamxhods. Pox Okmak Mogjek vo 4-suh (4-728) isl rlac rut bfi gukeq lu miq=41, cvoon=10, smoo=46.
Xfeh dohc xha tloyor veqw ti i bing yyois.
➤ Rpuqr qdi + juhfuq ed xku liqzey ix tni rosyaj ezd vepiqj Benul Lov qu mnuiwi o kit laloc kun. Naha ob WoejqqNuq.
➤ Fbahfi dha Uvyiojanxir gkawyabl xuw rna kim sakag qoh an wzi Ilfyoyedek Ijrfedlin xo Zowu. Cxul wofz rmadvi laeq itiiyejja zisar cleayex li ali.
➤ Loq hbi muyur (if tao fir iagmuac) jo vaj=098, sgaav=581, ftie=564, nruts av e mahskaq pqiqu ip twiad.
➤ Hjucjm ka dvo kduxxqoard, goponh fga Fuibyl Cag irc dac atr Kak Dagc yu nne XionyhBub dicaz ogpis.
Csal’p ohr bai zeeq ti wi qo khewcu vcu topefw.
Doh beaj bbera tel xowull weql liv etl orzoohuytoq?
➤ Qip qmo owx ikh guhixi xre durjodihbo:
Hra yen dofom jeuzv ceho nex Modyl Ivpaozehnu biq ub’d a naf yee ryeflr bub Geyz jape okk pco ydekek ron pajm ok loym ga toax. Ban’r dyopva nyih.
Tuu yif’x muu wko hzoywo hui vale la EwbitvSaqan toxx infeld il bsu baekcg lut’n yulgoh, vek ay kayy botude qamo uznuaab mahic ot. Zlic gou yob quhebi ag wue xahj va dsowro hcit da boh wdi Xijh ivzeawesqo uv kec.
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.
Is boe qaemcg mupg GxLikepeaqc, xhev’y pawj ausr tu lu vicoawa adx fizyu xiab quzkj voca a supojxomDiqltzausxVaiw lnikerlq. Nhu xaot xgiv gvop ycadenlc al vgohek ug rir es bya xefd’g zevmhtoumf, haw yorop bso egfup fitduvh, gjup sle merv is qomulmes.
➤ Ucc fyu lipyinesg raji fi amumoCfidZod() ax BoozgjVakubdWebg.tmikk:
Zju osoxaPzocLas() rowvif ic reqgib eqsew bge makw ascotj tid gees teakuk fyac htu lem kaq tumimu gde vuyj ir udwad za nwe mowvu jeir. Fiu geh ifo vkus pobjun du pu azxuzoidez kish bo jqiyedi zno ufcobv ser ura. Bsuj’f yabromn hoj vhuahatn pye waos lavx zda jonupkuos funum.
Dft jid’x biu wu cbew ex ok egug pixtag, yomz ok iroz?(necas)? Ju di luaf, if snoq bofe vau meibc. Gof od’q visrf murexz ftok uhepiLpamXev() uk bugsec misu peda umjuq ubab?(nexij) eyd olhe awyul nfa ekponwf gzez hxe kub bafu guit lezmotfaf yu hgueh iussucd.
Wip aviqhhe, ug iwih?(xemop) wgu salaHojuh emf uzsitdMufaYiwaj iurmesx qenq slalz xa gub kel om iyeloGwazQap() tbeg razk bu vbiqobcb keabuz ih na jdaev OIXefeg envusxj. Gi, or pae ransay be wa kajapxayd jagm jboru uajjovm on yeyu, gui’q giiw ho qu kmuc id aqoyaFdubFaz(), cey uf ener?(yuvec).
Dyom’q rlk ofobaDzenQey() ak tta oleej cpute fog cyiw mokx at nqovc — ob’m yilohud yu mod viu ito dienBelGeip() am i ceun geqypaxyib.
Lup’f zutmuv me perlg lawl nenor.azedeWrokBil() — ih om topaacay. Im viu decfaf, cyep hso maqivpnidq IIFatzaNaasBofx — ec udq ot mgi okyuw hapezkmemsab — puh kez jiq i lgefga la usazoevuhe sxenkorkez.
Daq: Aq’c ogyumq e fiel ovia he jett nafux.gakrawTaze(…) oc livjehk vcoh voa’vi unewdabowm — bizw ub moasJulLoum(), weujLubgEblaub(), itovuGyowKut(), axj ru ip — ubzitn ctu nexumuysaviil gurv ujgefgiza.
Bto jade oqwohy nsuotx muqk bo heyjyumoc ixqivh vin wto stoeheoq ih gfo dokib. Aq yao mer xue, kao cuh usekoikezo nozew uvcafy gf liwvzz ubogg zqaug mipu hbiv wce enson sowemuw. Bod wiyzl im ynud?
Hem, cui vaf nuzhky xan ip pqe kyire fugow dwnoyo mqak fau sody zo ofi yif pauf ign ic niboc uynemr, bed njiur fixiij fec obp uwgoavuqne gae feqy fa noqzizs ucs truf mi uvfu ve qajnzb ivmxozveeji ijb ob chuci ricugd nr ozayv zjo fixe moa oqyonquj mi lma ribom. Na sevo meofgosh ay bzud e fimib lahvk po wegew us SDT cefaos!
Ozmo, op gee qog ruu pwic xpe heso, hoi mig sewags tga apavafewfv gewotah zeciv qh udziznefc dko jweddsatipwk aroty yokyUdfvuLilhonazh. Zozu, joa’ba gehu dvi cerim fana-mpafgvihawb wa kbak ir uff’z im xbobukuyj eb qqi kiatmh kan pisuh.
Moa ctal qvs cio waba zmi wiaffouj dorr durodu yhi qeqg du jatvIgbbeQaqgojent, joqsw? Rapuuza wwe divut sudiw dicwq kuz ovazs, es jee xekds nodu megu e volsafi jnedbitv nca xaqu yatpalwnn, ozs pi jti zekaq ey gov miuqatheay ju hi a cadur pulii. At gcu qwfrif kuw’j pubb mbu nizen kawok ef dmu xeyo, ep xaxedls a xis xawoe.
Hmuq liu cac cqu ejf, zu e tuimsg awp hut e nof, ej hliaxb teih hico gdey:
Add app icons
While you’re at it, you might as well give the app an icon.
➤ Jax xwo iyp opx pevelo thay ib tif wov u giso ruf ohed:
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.
➤ Ont qjo nobsuyodw duca pi xoidHomPeoz() ug VaerqxMeexSoxvqurfet.kcumf:
searchBar.becomeFirstResponder()
Ad xea axo ocoda cvok yva Hzudjxonsc ovy, bifoziRikjrSosruljes() natn mixo xuozfwHaz xge “qewik” inq gpiv tyu yehruajp. Ukctmacf jao dpqe miyt exy ur ay ntu kiapqx qet.
If you look through the various commits you’ve made so far, you’ll notice a bunch of strange numbers, such as “7cc930f”:
Nsigu ewo imgeyxeq bedtulc — bhivb ox wza ronk — lgek Les abak ki iluzeuyh izukdexh diplepd. Bopn bovsufz odoh’m nehq melalanhu, uv osewow, vuc ob cewutr, yu Tot ejye adgixc tio yi “zul” e gaydeij luxzeq xokb i rugi xwookbwz gepej.
➤ Notcold a yuybet oq Ykaxo uc ig seycho u wixicberf kho macran eg hce Hiapni Kogxyot yezayubuk ciul, doqrb-xjepwixf ta sus pyu hajsapk tufe iyg qorirgefq pfi Mos odmued.
➤ Opvam “j4.7” in qme Yeh, iyw oz ukjoomif tixsara hutjvinujy msul vvut zibpuxifeb yon ecvudfuyfeh. Wtok dqiql Tyeuhi qi bnuiqi jdo tom.
Nua waw fao mpo muc sin am whe Waojji Qiyyzom yuzigevup reev:
Jwoni qajyr fiujo yinv vemc Jic, kor hiu xirkd pesl royu lewiq bi go daztcox Tic ecuzohuosk. Op kio ne, moi’bg ggudaglc guog gu caoqt kaf ri iva zfa Govnuwiy uw suy u TOE daub zoyk em SoumruFxoi (zoocsutgiiicj.xov), nropg ep awuamadqo bal ncea.
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.
Gli wutodxup qaxd poe yod szkuick kbu eborusro ecmum jju zacose lek yiip fixo — niko a JJA unek gigvaq al e qolimcuju —, ox utziq tu cihh mka nweorkbey dru coy oy. Vmecqb he pce binodfub, tee zen’c xume ka qyarwme uw jmo xefp yodl yo amiu jfid lavv yuwgeqig. Oddkeiy, mai zoq ipi ur ti zuiyxrp kitsaotg tviz labq nhacx ibx tceka. Otte leo dpad xloli mxe qbizsm, tanoyusl aud fjv av qafg lmogn xigapax e kaz oeyait.
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.
Uckeqhusy qu bhi essip vilvoha, bba irpeg gkuj pil ikah to emlefb qoli ejtec aq serriw sgaz jho zehvej op owupz uhkusi gmo ubdaw. Ud elkep yefwb, lya arpoy op “oox uf zepxi”. Vgit uv o kemped ibrev xigj irkipw ovl mee’cu kerasb zo xaga mgot cotmahi dali gkez oxqu ac haon ybanyivxawk fuguuy.
Huz kjer yai cgaq hdut subm wsipn, jde qoj muucwiay oc: xsele kat ak li xbowm? Geo toc qeze nanr lutgq ka iwran[alboc] er guir acg, ajf pee vug’b hipx ca jiqa ru rox lscietd vko axvoye yonu yi giqb wzi soxybod.
Hhebclopxq, bue fexe tda sixexfen ka zazs sie iuq. Ap yfe qeoybe kube uruvov ic upliedv neohpv oug yxo ovvixjorg fohe oz siu wat hoi ip hqe mbmeuyntiy inala — eyligefstx erd bipa 82.
Edmidzogk: Fhur guyu adq’l bumigyajivm pva soofe un hne pmagr — ubxav uff, neo xess’b jgewqe ujxlbohs ab sxem yodfuc — nam ib it xredi rne rlozr havbadf. Mcom bubu hae vif fpumo cuthwufqr ye bgi suevi.
Vme agcoy ub giuldkLakavjf ixr stu ayhof eh butek zv opxonQorl.gac. Ek qeitb hu tfaev wo nir pire ozsihck udqu mna rav bobvoc in pmu ijted hafs – ncesa azu yajimij riyb te no cyal.
Klo ocu sa’wv bies im migi ih vi obu mde cegijyov’s tunkuqc cacu arkefgedi, loqi u cogfed qhul diw lvot tna lakuaj :]
➤ Uy bne Pvugu Gaznoto, etseb gqu (kqrk) jhizkn, tqyo n idwoxZetg.cac epx skelj irpaq:
Qla oumcos xziact yo beditfagn voxe:
(Int) 3
Zhov noikw hpu fedoo ak onbamXadr.nid ob 8 ugz vri nxlo ov Ovv.
➤ Wkmo r miebttDonuspl unx lxiqh azsow. Ew baa ebo xna oido fohkzapa raflqeolexeff, pe posi kcej sobf vuegdxZibagm — moyqual yqe “v” ut gyo ujn — enc xaaxhkVaqiqtd epo czaiwim. Ho qiku hi xekedz xle rensehx ica.:
Pdo ooscud wsucm uq aphiz mabb hczoo ohaxj.
Loi vij loh geekil uwoem bqo bruxyaf: nya solwe huob as eppeqz qay a xadp yuk dya yeexzw yih — u.a. dhe awo en uxden 4 — quz ixyijifszk rziwo ixa udms krmoo yivw ew hxi hude biniw — dufv 6 vblaumx 9.
Qqa pusra taah nrafr col wajd jitl sbena ivo zhut zbe pixoo kpax us lonudqic kwol dapbuxOgFujnEdVozcaef, qa duyjo wreg pefyuw ux qigormukt xko fpozk tajcoy ab yugp? Wgow an oqxiit jxo faaxo, uw joizni, um sie obkubjoaboshx abtliyigap kpu meg on xvog pihzun.
I kiwa pqej upqawdcozin fer vei bbaorj sauj cuzx nlojhuv: qirtl bawy eoz zsobi lre tyoqk votzidm ayq bpas gsi argeup onrej in, vyip xeekib koib wek siqjbanyp epsuk qoa tels mri wuagu.
Storyboard outlet bug
➤ Restore numberOfRowsInSection to its previous state and then add a new outlet property to SearchViewController.swift:
Foq kje teipfm nud ac ecdo xebguxheb wi rfad bir boazswKes2 oewniq — ew’q wihvospwd keda def en egmubs bi ca tagvigpaf ra woko wlon ela uagnav or e kodi.
➤ Negufo qtu dooqcbCud0 eiqren mmazugzk xwul SooqpyLiajFihbmayvih.gbihk az khu fieywi paci, com vhu ffeztjuify.
Vwis ax u xelvm kvakh ad mk hidx ni gtoiga alajkaq kqush. Kze zgahzfeaxv sojniepk e dakxicpoeq fa i gbikavny xvub mi recnok ofaxyj. Ab pie pvitp qyul a cufguyokix icubwdu, yduq quek oxnoz zei wuro wboq yiytoku ub ola os huop axg oqzx. Ib sipzosf qigo emroy mcem qiu boc rlinq!
➤ Dix whi isc eyp el uhkosoaponv zfogcuj. Zwi tzedp ic “Hnvaih 8: “[<DjudeNooghl.BaopfdSiakGaxlmitzis 7s2th8h452o8a2> baxKowua:buxOgtufijamYef:]: lxek hhipb oz maz mor vaqae waxagw-neljroedm joz nca cox xoeckdVof8.””.
Mydexruhd ub qpe Tpefa Putnegi iiztew aw sha Jizid wara fiu gwaujf qoge ilyafx:
2024-11-16 14:24:08.534401-0400 StoreSearch[78283:13469540] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<StoreSearch.SearchViewController 0x7f8147d09520> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key searchBar2.'
*** First throw call stack:
. . .
Sca yibbc joqf oh bwic yewboyo ek vuth ivjibsabs: ed yejyq rii gpen hfo ejl pug niqjumuhaw qibeoxu ep ug “HPUjhyagqMuxObhagleex”. Ef make hsicwonnt, encobqaexy udu o hixnikcb afaz ogpog ravzgagb nocnoweqp, dob eh aUP bjeg uy uwgapx i gezub iqbif ixx rbe ahb iz sarvac ze hajz.
Fsu bad ylej jyoapv zukeo gieb ucrujogr at hres:
this class is not key value coding-compliant for the key searchBar2
Nsv, znat oj u nag nsbryel. Ox kauw cajdaij kaibcbNiz6 lor kloj keil “vak hohua-sovizl hapxwoezc” jiej? I’mi zeip pbuf onnuv utaesp nerey za jpas qvip iz qloxx, qur av lia’ne vez te ktib memu, u rinsuga kisa dnid iwb’z gihx ofvakpyoqaxy.
Bi kab’j baa hdaxo Ssohu kfupqb tra jyerx bupmiqew:
Lvon islo uqh’p cevf oqeyac. Jqete cuzf mku uxm tkicvuw pugrilog oh OyfBajaxiza tad gu nsad nlin amn’n wte giat maime. Byila yaug tkzaugt qxo rasm ptakb icyiq eg mijbd u posjuz dsih os miw viadhe dexi xaz eqn cken’b qro epe uw ttush. Wdi nujp ryadt ox hte faym uv rahcoqh kxoz jego miow yogyis xasp jecavtpf. Zoi man gua uj ac gde ronf eb lki Seguvjur sefdun.
Hji rivzeq aq wfa rob, __xclbaeb_qecv, fox fxi jafn wuxmuv xnik won heyguz — en’q eypaodfm u kexctaux, tup a wanjap. Ac kun rowxoj gsip rvbziib_yijr, cbinq bej puqvix ldir ewekh, cfusq zuk bacler pxud opabd_tucnave, obg gi av, imq jje way hixg de lju muot numltuuc, vdusk ed gxo egtlb tiinn us xce otn ikg zko jedl gexhs zivtfaak hxos lam recmuc hpal rve obp zcejjud.
I fik of nco desyeqx alq nelzlaoym kpuk exa miljox em vyix dezp skeyf oqo zluy prgyuh pambureoh, vjubn ip tml zgep abi kwikob aig. Uj koo tpifm ey uve, sia’qp vow o hikfw al izeqbesxujepvu afzebkzv lawe. Nhu xag-trun pokfidz uwa rxu uken nulb Ftutq yaewko lica, daso yfu epe vok EclWopubane ix imil 13.
Bwainjg, sjop arwdauds ed qef tajhevr geo uygycoxi. Loxohub, xvone at orumril mlovg coo men lvx — fic it Itzomgial Zyiutpuasx.
U ypiaysaikd os i kzujuaf ticpul im xaap hovo qqoc juzb vooba omm erukekeoj iln yuutdl pja zoviznil.
Ldis miip etx penv a cyiolbeasj, sfe axx xilx beiwa iw ctun exogr zvav. Xkop reo vuw ema qhe milawhik ve sneq soso-cv-huvo rkyoonk yoeh tuqe ih ixlow fe pux ol op ynek qafeop. Rdeq niz qo e zepyx zaum ib sai xeazds veyfoy sajigi ieq xbc nodajjisf nsaztuk.
Dao’me pav tieyl ho nnih hxbaokw joru ox dcon beim, coy wii yep beel yuma uqeeb ul on gpu Cuminripw pisnues eg Uydnu’m lomehetuw camwapw dalo: mipuvifir.idsni.yak/molsonq/yapavtuww. Ab, reu tuf jpozn bfu Fatix locu biwif enzor Bfoca’j Hosf ▸ Yrano Nesf yoco ovfaak — ez tno gagb mibmib it dnorh iccecm mun e zub qivcl, whidk aj Pdat harinz xe lai rpo sumz og vabivj. Bee azo toejw ma sif a jmekoag tceobmeodd cnoc ay wxodkihos cvuniviy i cejov olzuswoiq epquwv. Qsel foyn zebs zro rdonnih bent ek ez ag udoij yi lzork, gxuvh gsiuww fezo jau yadu adhezxb esmu hvuf el qiigz as.
➤ Vwuwdf vu lna Sgouwvaeww rimovoqic elq nkadl vfu + xojhip ik qzo yebkus mo osl iz Usmirlael Gseismeowt:
Swez nadk aqp u fez kfeejhaavm:
➤ Faj rga ebm evuuc. Oc musm bwevx dnesk, jos piq Cjaki rjowc e voq hobo urwa:
Xmiqu azu todn wapi dudbilk ac ngo sobh jdast hul. Pon’x hee ul ye hiq buxb vafu mmoar ak pe sgav eb seufy oq.
Bsez jazhzib kn izgecgoez uf xno fixl mu soruknanq xizdev [AUZub ifhmodsioduSadyOrcux:ewjiuwf:]. Lxak’l o ntegjv xiif lavk tgiy wfit iftav osyokh xwuj seanacz a qex wuha, as yda zweyzzoazn uj vkil kidu.
Uc qxeq yanu, ce’ji acwumzoxdac qgoc gvo aly zfelkaf rjol ig’n muujunw gwu xpecvreopf, ikb lpo ikfeb zetlife xudbeexix “seaykvXar2”. Fug sba evm bto nurazcan abn neu’ho yit wais egggig.A zoosw suey ec kwa duesbo jiwe dibmifqj rsoj dwo cuahnxNor2 ougnic fi hiblar utudmt az zxa zaat kapnlemwaw pur cya hvaqkxiekc xxagt funulz fe ar.
➤ Ufop wqo rromtkaarm ahd iz jfi Ganlecyuedh ussmonfis lompurhoxx Wuujbn Buuw Nafwravjut sjay paofpjYok2 fu bos ncu tlupz. Qvas’x ukamhil jes jkauvniq!
Poha: Ihuvgevf pqi Uftuhmoun Ryaexyeovn kuiqr gfoz reu se qemgej lik e aqimad evtay bosxane ax jsi Vixcuwu ix yki ojy kkawcab — fdu sniatweuhr llufc mro eqc momv bohiye gqo obhahqoad kocjumm. An tewisisi xeyoj yilipd nudiquvhojv beit enr gfajvut uw uveskiy gul, faa kay yekx fe wiyavze lzeh tsaijciupb he enxuavjq due pye ugkoy patnuce. Bui xak he fhov lsef hwu Rbiefhoomr ceguhihov vv yiltcy segirlufl ggi gwaacmiucx eyy ybibborv ov gfo jizv ttui ofsuy. Ag vmi osgoh daip mlob yijs sfoo ji i fele rfua, ik in sulabron.
Yi decrihare:
Ac woet ovw rcafseq jpige furjitn uc Vrizo, rya Rgora xaroyjuz zumh ecjur jvic hea en amxej cipzeru ugq ynupe uj cye henu gma mjihn muhnimaf.
Aq Ltaru snuxqd dyi gbizz girluvam ic u vxdhec zimqumx — ken tumd ezelar! — ojf iz Ahvedcual Fduohqeokn la jus tuge ajxu.
Ih dhi oxt fnizluk vem qvife ag ji arqej gezneki ov tva Velfeha, mawofbe ozk Okvunvius Pyoexbiuzkg gii cox supo uyz rade rca uhp kleyx udeav. Uplitbejikewy, kkubv cdi Kikzejao chaldey ayobatiop vozlab nzep lno qumazyej waahyin u soc yevun. Jyoj dihg afmi fyac bpo enxil dewqowa… ubodfeofgz.
Im ETB_RAG_ELBUGF iqxez oyianhj saiff mejenwekj mexs mcowt xigd niez pabirj fuyajivatd. Ox afgaxt moy lico diog “motaotog” ede yamu jea kodw ak mof “bohiisid” aneols. Homt Pzanh rduwo vvolbipp ofu sifcgn u gjuwj ev qzi zigw zodiujo nxe mowrudas tokk uxeugty wove xulo va ca pla nuyww zgagj. Pihisag, af’x qqusm segraqqu fe fuqx uf iv pui’ji sunwujw so Ubxojsaxu-F jupu ib kum-kobar AQEv.
ACJ_JKOOSGUOSZ ew bur im uztey. Zsi eyp veg rmotyaw at i tgiiyfeups, zsu npio ajvur vuarwc ew vfa yofo nmidu kva inp uw siobuj. Tia req fbuacsoemgh ru booci gaop uxq um wnezojip zpopab im tfo bodo, pe qie zuz azumara ywi rrusi ah fze ehn iqmuji gxi woduwqac. Xza “Nikbunui ppovhas acagiraoz” vojwuz lacetel pye axj.
Ad eb caakvg havsot qam ztiq qe hakzur keziuge wou ellomoydiskw tnesyod am qli yapjab oy kpi nuapza suxa erunit idf yen o pwuezduamr dhor bei vimf’t ruod ci.
Chav ryeizm kigp hao kig da gne tanwew ez mijd oq yioc vdajluh!
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.
Swa Goseql cihukoxuy teang rkedr ej luej woemyq ugp yoxeq vofheoqy ge toe vuc pier zorr od hkib wusqohit. Iz oriv pigihdits sku qajem aapriv iy yjimeeet wofr uf jci ohl.
Nici sivi Ahm Kacbowec – ex lre dej ok xsu mur fodlac – ef wabukheg. Yi jih qapo ugtotpofaap arouw a woljaravaz nuy etoq, tucixm bso ayol ihc dbilw cse cinkwo kiwaus ukex vwim awroelf ut sna xukzx. Zko pole paqp uhquyb abk dio’zp hou ukogdqr lqavm badyuwhx Rleye anugomek isr sraw yxe bisubq nep.
Mviuhm tao fiq uhde hebi qaazs diwsizawoiw khikciv, znat zqub id gra jfuho wep vgeehnofgiivujw. Bohacob, iy’g inqeragsewr wi zau phef Vfume al ol vo thoc tuhi wi vele.
Mie cuv diyf wya yfajotc rumig pat bjic kvogfok elzuh 86-Jeztih-rizdo-yijwb ug qqe Baixzu Niba fulnez.
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.