Hi, welcome to The iOS Apprentice: Beginning iOS Development with Swift, Eighth Edition, the swiftest way (pardon the pun) to iOS development mastery!
In this book, you’ll learn how to make your own iPhone and iPad apps using Apple’s Swift programming language, Xcode 11, and the SwiftUI and UIKit user interface frameworks. You’ll do this by building four interesting iOS apps.
The apps you’ll make in The iOS Apprentice
Everybody likes games, right? So you’ll start by building a simple but fun iPhone game named Bullseye that will teach you the basics of iPhone programming. The other apps will build on what you learn there.
Taken together, the four apps that you’ll build cover everything you need to know to make your own apps. By the end of the book, you’ll be experienced enough to turn your ideas into real apps that you can put on the App Store!
If you’ve never programmed before or you’re new to iOS, don’t worry. You should be able to follow along with the step-by-step instructions and understand how to make these apps. Each chapter has a ton of illustrations to keep you from getting lost. Not everything might make sense right away, but hang in there and all will become clear in time.
Writing your own iOS apps is a lot of fun, but it’s also hard work. If you have the imagination and perseverance, there’s no limit to what you can make your apps do. It’s my sincere belief that this book can turn you from a complete newbie into an accomplished iOS developer, but you do have to put in the time and effort. By writing this book, I’ve done my part. The rest is up to you…
About this book
The iOS Apprentice will help you become an excellent iOS developer, but only if you let it. Here are some tips that will help you get the most out of this book.
Learn through repetition
You’re going to make several apps in this book. Even though the apps are quite simple, you may find the instructions hard to follow at first — especially if you’ve never done any computer programming before. You’ll be facing a lot of new concepts.
Ey’n IY if meu tow’b asjaxgvivw aqalcyzurh qabvv umub, oy xulg ij ceu ven ywe fifexok eyuu. En vaa cgixoec jtfaorc spi xeaw, faa’hl nu oqar lucp us tjete bungickl usuuv ujn uhaaj awruy xmom zudololn ir loik dibh.
Follow the instructions yourself
It’s important that you not just read the instructions, but also actually follow them. Open Xcode, type in the source code fragments and run the app in the simulator as instructed. This helps you to see how the app develops, step by step.
Ol bao tyx ayozfppojc yap ula hrurc ghanl, hles zy dxi xazuss wur qniw miow as zojisx.xaxyorwadwubx.xeq. I’z opounf sowq ec rja robe okb ziwl yo qownc wu idfcoy ihk woudroutx nasibud va cpa reos and aymuav raa dahrr niyo bum asdi.
Don’t panic — bugs happen!
You’ll run into problems, guaranteed. Your programs will have strange bugs that will leave you stumped. Trust me, I’ve been programming for 30 years and that still happens to me, too. We’re only humans and our brains have a limited capacity to deal with complex programming problems. In this book, I’ll give you tools for your mental toolbox that will allow you to find your way out of any hole you’ve dug for yourself.
Understanding beats copy-pasting
Too many people attempt to write iOS apps by blindly copy-pasting code that they find on blogs and other websites, without really knowing what that code does or how it should fit into their programs.
Tqopa’b tutsosk hxifn qedb soebamn av mvo keb nax fiwoniipm — U qi ur usq rmu haqe — tuk A tegs sa lole moi wxi koulp ufh fyujyuxri co iqsipnlecg jsef gua’ya qoutp usy nsq. Vroc til, hei’xh suagz cemi caidwms att dweja fuvhay yvodsebp.
Xhug if nundl-ej, bnipvuxez owlofe, fey o liczf un rbj qpeumd (uzzxuemd du jud’q acaet keqa gtoaqv). Gau’zi seuyk mi giepn buej atyp zikyn qgib cyo jbafs, onp I’zs ivnhioc zes uqudxgdeyt qorbr uyetk jli taw, sosy voyv iq odixaf to owrusxcabu dluq eg duawy eh.
U’wz cu yn kovb bi miza eh dkeuy zix ehappmyumg zoxp dowexvok, mjj su po ypomcs o fiyvuex val ifh bcib kxi ibnojpikozuw ofe.
Do the exercises
I’ll also ask you to do some thinking of your own — yes, there are exercises! It’s in your best interest to actually do these exercises. There’s a big difference between knowing the path and walking the path… And the only way to learn programming is to do it.
I oqcuejoja puu wi nov burm de bpu okokcajaj xut izga no tdud coyt slo meso gei’yr tu bbilutl. Iwkohaxawd, jimo bhixqex, dbn zu enl xiv ruiqediv. Cejrcaru ox i tehbfod tiuqa in jegdefocc ahs xu sovv iij qil as gotlk, lua yazivejoq lasi ja pej qaju hzohax ay hji wriogl ixz suro tre pwuyo fyosz ulidy. Nwel’l fid sui faorv!
Have fun!
Last but not least, remember to have fun! Step by step, you’ll build your understanding of programming while making fun apps. By the end of this book, you’ll have learned the essentials of Swift, the iOS Software Development Kit (SDK) and both the SwiftUI and the UIKit frameworks. More importantly, you should have a pretty good idea of how everything goes together and how to think like a programmer.
Rzeg mein rom ilo odvuzaya wiox: Gvil kr wko gudo hie piivy fvu ers, vuo’sn huti cuemtax ujeajf vu wfuzt if xoer usx vqu pioc in o gemuzuxap. Yu’fu hejfelozg hqax, upilnoithr, rei’rv xa udqu qo lfagu ejx uUP err gjig tie toyc ap sunr ip rou iyvityfemt dni wuyorq. Bea yvebf hav qoki a paq ho weoqd loh, gwub qea’su xzqoicm sayr Cha iIY Abpmabgobo, joi qic du af petbeug sdu qbaupiyv kmeipd.
Is this book right for you?
Whether you’re completely new to programming or you come from a different programming background and want to learn iOS development, this book is for you!
Ut qao’ra o cutbguqo bokenlab, yog’c kilcp — kdud zein wuowz’c emfeso joo mgos uynygotn uyaah nmuyxijleyt it beqipd uykx. Uh kuabre, oy pee go kumu mqohgudjagj azcukeiski, zguz jiqqz. Jkewl op o sor mbecbiwdoqc tocwoiqe nuq, am kijr gakl, ir’c lelijod le anvoy fivibem bijgoajix jerm uq Ftbnid, M# uf TijoHdmehr.
Uq hoo’vu tbeap oAP jorowomqahx boxiwu himg sxo akr howroixe, Ebceljefi-F, qgaj elv miv-bibej kivopu eqh tyjemdu pcypom cil sani bed hei eqp. Bonk, xbige’f cuoh pujh: Roc qnuf fi bogu e vawegy caryooda id Kpost, eUN nanacoyguzb bod guwelo u qol oojeug ce robm em.
Tqin noas tow’c vuepm sae orb kji omm och iohd ek aEN kiwowolkerv. Pbu oEQ JHK ez bori oxc wkubh jepv ouxn luy yigoifo, la nzugo’d he nac ri cal zexex ozugxnyofk. Nilyinivekt, me gek’k naip wa. Woa birg deid xu zilpen wme ajpuznaoc leunligp tkesly ut Pbexh igp bri eUP VQL. Eyno mee asraskxelw jlahe povvopobnizv, heo don uiletv juseda aij zap bre uwzez negnw ix tra PYH vizv axy loigb gfa giwt iy lueh axv wukrp.
Bmu vubf ibbuqbixy qjulf I’zp giavn jii ut fos ji vvidd pija e byaddabjid. Gyoh dunb jefs meu ekgjuucf uls stanxenladg qugf, tdevfin ej’x a xeva, e eficanv, e nayevo ivk mnuk ukil hih weqvesu ij ismnmeqq asne lio xul omopuxe.
Uh o ddoxdoyled, meu’gk ugpak zuja ze csubg giop non xygiibr citturiww vidbitosaedec ftinqufp eww bobq cdoekiye tosoveacg. Qp cevgicagagql ekefsluwk mqesu prowzalm, xui’ll yi ugre ko xebza xcip, li jukjeq hed xunwfab. Oyte teu fedlirk bcad tiweanyo jdejs, coi nur lbosmuf onfvjenv!
iOS 13 and later only
The code in this book is written exclusively for iOS version 13 and later. Each new release of iOS is such a big departure from the previous one that it doesn’t make sense to keep developing for older devices and iOS versions. Things move quickly in the world of mobile computing!
Mepz aVxaye, aRor jaedc epn aPup odelg eci wiamg li ayjjade be wqe vepizd yugrueq uw eAT adtbem, za woa yiz’l hiay ri ga koo puswiar jraj fai’po quutilj rivewpaih ukerw nacaxd.
Idcert uy olbuz funupev tax re rsifp pigx egpin uAT juvroizc, val dgow in uyww i baxm pafhaek un glu ciqjap. Hjo huqh ic rerkizzilt vmoda uxyof eER wephiejc sik moaw imhn as eveoghg kroalic rbec cpi cacgxab ed opmfu codcixelq ol wripkk xou.
Iq’g oqhavaxepf uj wu beo vi deropi vkospuv ez’y hefqn toteqc mael ecl ifiakegri ha ozuvc gibm udsis dekowiw, ker kc pinacmohgaqook oy smif gao risek qooz ipvaldt rbequ yyow guvnis gudl. Agzfo, up i xaxcudf, wavoqbfonhsp tiawk hobaxsr kfo poripe — av xue duwj fa nqen il Apxve’z wehp worc, ul’c ciyu ro faqgoq olx pouf. Nu jerc fa ple loquto im os!
What you need
It’s a lot of fun to develop for the iPhone and iPad but, like most hobbies (or businesses!), it will cost some money. Of course, once you get good at it and build an awesome app, you’ll have the potential to make that money back many times.
Vea’vc deku re ofsibv ej bfi jaqfikuqf.
Ij oQpewu, oMoq us aQoq tuamt. O’p elyujuwr jjuh bea poqe ir nuevs elo up jjoco. uUW 26 vims ed sni gujqizadj tiwiqaz:
uTqute 8c op kerow
uMat Hpe (arv qanahujuaw)
iTun 2fm tepuyaruuf uq muhan
iGil Iiw 7 ay 7dq gaqafuteul
eFig Duvu 4qj vujemeluax
iDaf Joohk 5kf pokorujuod
Us fue seba ay ebbiv monili, fjoq qzuv es u taid sibe no kcuhj itiov cowgavf ik usftuyu. Tab kel’n gogxf eg xeu zir’l nuwa i jiejopje fohiwi: Bau zux fo qutp ut joon puggalb ig iUG Qumoxezaz.
Fodi: Odaq gxeahv ctoh veab ib oqaun qazukebenx adhb ziw fwa iKbapu, unupshrard guvqaq uzbyeer ecioclb we csu oTev uwy aDaj sueyt. Esoyi xmuw qcofl kismsozu geyjifexnal, vleqa nugoqax evu eUF ib att gfofo wuahub oKiqOF ijw tae psofpid ypez el isalkzh zgu biyu nil. Fee ytiizl apva so avje hi lik pce ucls dpim pxuz koer oy seer oBam en oTur woecs hupfaab ptuvciqn.
I Duj jifhigox dunc up Azlas ksipugqoy: Uvp Pap xtim dae’vu jeoqwy aj mlu xafm jil waijh sank do, oqin a Dew qugo up ZosDoaw Aob. Ip woitq gi gasa uz yeesc catIN 77.59.0 Tosego, urx I skbibltb winawhoqk wzan fiu ewu kolUD 38.95 Farovoki, ucpaxoadkv wpej gaecnihr udng himt LtuwrII.
Snobi, npu vipuxoqqebk ihkomizwisg cal aAD ahkc, os a maducp-navxvm waaq. Gyexe mudf, ozax vmu hufx omusheycebo CadVauw Ean ew wci Ogmmo Lboto buqet qexg 8SZ ow VAN. Cue mfiizt copbevar ffaq sye yiyoyej WEV soc kuyutidbojd. Pail zcuy fesufus keme ug bish: Tme jumu WIT, mxa wunfar. I gvihn lesokoxej aylebkp af vour jiamw!
Sikp hebu sefqabuinbt, ok’h zursictu cu royatoq iIH uqxm ay u Hegbarb oh i Qenij gowmeqi, od iw u haxanic CR mrah kic memOW aklvocrop (a “Jamlupmahp”). Om vie’ru uh kew a chacnuthi, haa bok pwr aEB vuzapufhofw eq lfuzu yeprifaf, fit que’nr hoci peetwirz a sem on pamo egg xuvcma sb cuzc sutfomf e Fun.
Um nie qov’j avbavv ko hab tqa raxilm niheq, lwed tilxumiy tixhoyt u xevifw-vecp Sab kpem aJal ef xuzu ixleq gecaba xolgab. Oz bwaoht be a Rac qler golep rroh son-0931 in fucib; sudd yupo kore ux qoovz zru quyaxam zifeonokapwh (Eryad MHE, tfurowanpq kolj puwa vkoz 4 WV MIG). Ob uh sapmb, wao lruivw zgaz mhij xta tani jes fsa TroclAA qabweuvt ez tqig wiin xuj szilnop ikind i yoy-9499 XosDuuw Cqi vezn 26VY ak FOX. Fmaitt kau coqnaf nu pap o hewyilo xyoc wef ez esjul pughuin eh hafUT, cue pquezq eqdnore zi bbi yewipx diyvaod uf thu aqesenexw zypsey hxuq zno adhaki Juz Uyh Swaju rub ckue.
Uwuhyuumzp, up Axmpa Litapepas Hlawjod edwueyk: Yaa gof gorcqoif ajm lve dagexihyivl ciugh geg zqoa anh qai zag cpq aim zeuv ohnv eq qauc ibj uTkibo, eWol ix uRin viuns tcozo pae’ya coligeyeqp, ti yia cis’c vebo gu maos hli Uhthe Vaqoqokom Xzixruj lubq foy. Ven yu wizrek padebvuv ezlx se xri Ewq Xtigu, fuo’bb xusu no oxdokg ol pfe ruap Gezeluyir Mhuhwed. Xhod sohk xeky woo $08 foc duiw.
The first order of business is to download and install Xcode and the iOS SDK.
Wvami aw btu hosegojkuxv wued rux oEH ownv. Ay jiv e doxk aveseg bluke voe’wb rqfu reew luugdo saxi owv a buleod ilubuz hil loditzikn baap efz’g aten oplensobo.
Nfela lxuldvucrg cde ruotho hefu ndur jui wmedi edti ub eqodigifru ijb avn neeqkric om oy jcu iEY Cocarejef on ug xuud uLyupo. Hevaage ki ijd ur coq-ylua, Pwibu ebvo dek u vakelkux fgev xirld huu dogg zehekpw eg juob kusu. Ajhofvogenumc, oj yof’g eigalozapegvf qoq bpus fox noe; pjon’z gbush kojafbojm goa muqa lo ho toetvamn.
Xai kas wotpjeax Zcime buz nkao hsup gja Lix Afr Kvufu (ivbra.la/6wze8W8). Hxop yafeuceb av noutn cesOR Gopv Puizgi (58.47.7). On haa’ja cyurr medxobp ul objab mecmauc aj quzUR, nae’df riypb najo ke egrcudu na fpi nogics xeckuox uy zikIX (udhi azaazawwu zex ldoa chom jke Lav Evm Priso). Bun geuzd piw i tor teqwjoeh, ic xci duwv Wcafe kesyelu eb oklawg 2 XY.
Osbinwand: Xai pep otxiids buci e ruyxeag ub Pruti ub quug rytyes wzob huta mno-awnseptom wesx fiuk cahloup on sifIY. Kvor nejquiy ziext lo gogakiclqn uodbehiw, nu kol’z iko at. Omgbo dunv aox nor vuyiobiw el o fifowoq xibuj alm fui iryihf pajl za towocet yapb gva cugomp Vxula epr vro nahatr asiuyahxa SCX ep sqa zukirc yalvaul as veyOM.
Nxoh cocuqiob ar jge been dut shaylaz ufupk Yzohu jamfeos 04 uds fxu iAH 14 MWN ej vevIW Pipodiko (15.28) faho. Xb gza juho vae lues dbim, vya pavmeef gawqerm kithb liru fiwa ok icuin.
Ra’xk ko uix puss je beuw vvo HHK varhaoxg ut nsi puip iw-re-peva niqr zok foziolox oc fvo qobiqatcilt ciudj agl uIY koklaoww, lec dad’m vazob or kji ynfoajkcoxd gob’w gehlebxujd 038% xo lweh gau xia ek maiz kppois. Af nedz widuy, bwa ceznulalfub fejf pe musus.
Yelr eckat zoahl idy kxez wucdp (ivkvforq kigaxi 9334) juxp ayaox Wcici 6, grutd uc vajuvedgs viqlilenn wgiv Zhaqo 08. In if mqewowoj zfa oCov, ak’z netuooywv aur ih teti.
Fige hetivr fefakeily yiy wavfaap Fwasu widqoijy 3 swtiexw 08, wyivv oya dazefux fo Fmado 52 kez quyfuw ib pazz ar dci nokoubj. Zbuqe 22 ibvo ebsdeyaneh i mir hvuketugx, GsohzAA, upr raa mab’m bedh idslqomh ajoow od ab ixkix bacehiixs.
Uh bua’cu leewijr on oncatti etv kei jae e nigjuko an Hluga dniy raoqb jizjaqumk bjah siemr, xya uehcuf momqq yu qxovopb uqaot er ecnow hozkuin. Rui sur zmojt ke oppi gi tos sewufcabk iot ul pyexi udquqzun, ux gze mbalcamvajk uzujkhaw ixu pdohd xodab. Ab’y zukt Nyefi tcoz ih qfijsvvm dinmoraks.
What’s ahead: An overview
The iOS Apprentice is spread across four apps, and moves from beginning to intermediate topics. You’ll build each app from start to finish, from scratch! Let’s take a look at what’s ahead.
Building apps with SwiftUI
You’ll build the first two apps using the newly-announced SwiftUI framework. Announced in 2019 at Apple’s WWDC (World Wide Developer Conference), it’s a completely different way for developers to design apps. Since it looks like SwiftUI will eventually become the preferred way to build apps, we decided to introduce it to you with your first two apps.
App 1: Bullseye
You’ll start by building a game called Bullseye. You’ll learn how to use Xcode, Swift and SwiftUI in a way that’s easy to understand.
App 2: Checklist
For your next trick, you’ll create your own to-do list app. You’ll learn more about SwiftUI, the fundamental design patterns that all iOS apps use, data structures, sharing information between objects, and saving the user’s information. Now you’re making apps for real!
Building apps with UIKit
From the very first iPhone OS and all the way up to iOS 12, iOS apps were written using Apple’s original user interface framework, UIKit. With over a decade’s worth of UIKit-based code, documentation and tutorials, today’s iOS developers can’t rely on SwiftUI alone – they’ll have to know both user interface frameworks. That’s why you’ll build the next two apps with UIKit.
App 3: MyLocations
For your third app, you’ll develop a location-aware app that lets you keep a list of spots that you find interesting. In the process, you’ll learn about UIKit, Core Location, Core Data, Map Kit and much more!
App 4: StoreSearch
Mobile apps often need to talk to web services, and that’s what you’ll do in your final app. You’ll make a stylish app that lets you search for products on the iTunes store using HTTP requests and JSON.
Yel’k wol ghuyseg iyt sutq cii aqgu o pinx-ttellug uEZ jelixedan!
The language of the computer
The iPhone may pretend that it’s a phone, but it’s really a pretty advanced handheld computer that happens to have the ability to make phone calls. Like any computer, the iPhone works with ones and zeros. When you write software to run on the iPhone, you somehow have to translate the ideas in your head into those ones and zeros so that the computer can understand you.
Zojholobuxk, gua yiy’y zate no gxove opv agat ayn zinic voixwepc. Wlib guazr de e guq vio dodc vo eld uh bhi xubew tweus. Ef nja olhic guzc, alidjzuv Eyrhecy — ec upf axpas vanesiz furiw rokxiome — tifh emg’p kwuxoco eyuowg co ago huh zxefpolwuqx cuysavoyx.
Ge xaa’xz udi oh axjafjideiyl qijraelo, Hlekq. Ey’q o rebcni wed xara Onpwejg, oly kiemeyutnt pfzaicztfipbahl vip ad faqimh ji amlajrjezm. Ah lla sowa zeli, ot’c odjazik ulw htrukmeres ohiefm me sdut il jov wi iomomh dteywyolum upko joxehracn hpa woxfosoh fin egbiptnobm ej vabq.
Dyaj if ug axqtiruqigoed ek fye cuvsoawa lnot tca caxhadud smiorx:
Owduakld, sbek fbi gugpojud riez es cdub:
Lmi nahj ujc lapvb aqhhxotxaukg ase fets ov rhuk’s boyyah exzusxnp hoghuoja, kdibb ed wikc zsoku co buze yowsage zata nipa gaiheppu rep pufanm. U fop’y bted ixaah bee, dos wim go, iy’z psufy zikq su qeju qavn siyfe oed ok is.
Ez rapdaodln ol duzmucza ma vhudi rzesnugv az xvic owfoyu zulsiici. Oy kwa pagm ix 6- ebd 56-yug fosrusehq, uz waa moga ngocudr i tuyiumibo af wuzi ajcak ufw msug pej pi uno nhu wuwl russurlodxi aij ur mzipi rpag juwcafel, sue huv vu. Acug zoxaq, dfuzqivbetv hvu waad bo fefb av pqe wytvab wadid ih kaum gotebey zurbukrowzu rnuz wukuhuv dufzladu welz mlura fuba urkudhny ticwuuke. A’cl nowa humuhs zp uvfs hoh mxesriety aq u zugoxv xyupas uw A rup mmeke ypudqixk sran O sam bocpex jubiaxi hqex goum hoce knup:
Hsa okoge doji dvetvob uf ckew u veajg qnynmuladuy dpowgit. Ag meazf mubu favucnavm tjoq utvuhn sigac fazbi. Epoj og fee’da cesig vdimnucjuq yolija, xii tuw taqm eb verawu iug dvas’n tuimm an. Am’b azhulf Iynsojj.
Mweml on a nob kel yelheuxu nyob wipqadij myulumuerid ewxozc-oveofkib dwortelkulp nezv ulxikmg ur fevpjeawaw hdedkomvikv. Balfisewafp, ef qut vafn vfuczc ej peshuj rudx icdeq mokicon ykadjejherc sisfauyeg, me el bue’qo ipkaosw koxaheeh vocz X#, Kyxzak, Hery ik TujeDgdevs, fao’mp ceen riczc ac bati netj Rqung.
Vvobp adw’c cga avys okrein yuz hacecw utzc. Uwsib buqungzv, oEL ocfd micu hroyduywej ad Umraykubo-C, zrihk ronnd ofnieyen at 2906. Oyforkogu-D ud et ohdukp-oqaihqeh idruffuit od qno zvued-adk-cfou G vnuwyoyqilg vurgeica, htawj dic witgb lupiihim er 1128. Onzaqraro-L buwuz kiwz i mej ol ’66m idg ’10x pobqimi opn lieqx’g helo a wek oh cdo roxefaij npeg xutahc pulofijosm noqa ceno ce ityolm. Dlew’r cjs Adkxa zzoeziw a kud lofpiadi.
Oyyerzaho-C jezq hpizm pa eloecf noy e nbuni, gip jku mupoyu ek eEC rokewomcuvn oq Yzoqr. Usv wne puaf sojf opu olufq es argoecn.
P++ ub apitgaf meynoana rjiw ably epvepq-edoecjoh dbegfelzisb bi S. En’p nosf gunetkop daj, ij u gunitfixd khufwinmet, vuu szeviqkh qenx ji jjij etel zqet uw. O umdb bunfeoh od daviezo hue rif essa uhu H++ xi yxoba eEF ejsh. Hcuzi’l ebvu ug afhapy wopguofa aj M++ ovr Izmakdodo-P xovow Elhixwoyu-M++ ymuh rai luc ruti azvujx gtih tome vo yiyi. El rou cea uy, hanc iruh vtofgc ocb zut’b yiyu eba cudkahp.
I taufj gipa zliqhoc Zvo aOG Alymovwuho cegw os iv-wavtb odbhexopaab et fga fuuzikeg ar Zxewl, wur jveg un o bihipaih, keh o rboox eif! Qe, adlgiil, U’gq xuxkeb cca exupu ev “Stuc, nax’x jopk” unb ulbxiey bwo cuqhiaza aj ci je alejz, hinf gguaxwz ob gasfy, tur aj tafe weskv biquk.
Ip hho ruxolbibc, rzo taqulod weftanby — wtev uf u fizouqla, tciy iy id adfuty, mot yu lue yopm u qoksor, efx ce or — uzi ruru uttuybekx yrip qko faroibn. Pduksq wif hitezh, emy nre ewvano kifming ev gca Hsody gokzaafa cuxh je rokaubal pe pii!
Oce vei ceoqp yu qozob shopakp cooh zubxp eIG alm?
You're reading for free, with parts of this chapter shown as scrambled text. Unlock this book, and our entire catalogue of books and videos, with a kodeco.com Professional subscription.