In the last chapter, you learned two techniques to keep users engaged with your app. Animations help provide timely feedback to the user, and custom controls help immerse your user in the overall theme of your app. Both are part of Apple’s HIG, or Human Interface Guidelines for iOS.
If that first number surprises you, you’re not alone. Many people have invisible disabilities, such as color blindness.
If you extrapolate that one in four statistic to the entire world, that means there may be many people who have some difficulty using your app.
When you use Accessibility technologies, your app:
Becomes more accessible: This one may seem obvious since it’s right there in the name. A larger number of people can download and use your app.
May become more appealing: When a user with a disability can use a more significant portion of your app, they may choose your app over another one. Conversely, if your app doesn’t have accessibility features, it may get overlooked by that same set of users.
Luckily, Apple has put a lot of foundational thought into design elements over the years. There were some hits and misses along the way. Users had a mixed reception to skeuomorphism, which made the UI look lifelike. As much anger got thrown at the flat look that came out in response to skeuomorphism.
However, Apple does get many things right, and they provide a great base UI for developers to use. They also describe those in, you guessed it, the Apple HIG.
On top of that foundation, you can use Accessibility technologies to make those elements usable by more people worldwide. Even better, Apple has integrated Accessibility technologies right into many user interface elements. As with other parts of the HIG, Apple suggests using a set of best practices for Accessibility.
Best practices in the Apple Human Interface Guidelines
Each iOS user interface component has its own best practices for design and accessibility. Before learning about those, you should be aware of three overarching principles, as highlighted in the HIG.
Designing for accessibility
Software engineering principles place design early on in the development process. There’s a good reason for this: Design is a direct result of performing requirements gathering. These requirements include analyses that identify models, schemas and even the needs of your user base, all of which you do before any coding takes place.
Zlkazap bezakh hxihogzup lonuy uh fwo acayehozr uz fauw erab ovzopliji, ijybocoyg cihizg fica pno isuh jiz uhgohyvaxf dakaeeb rovcm redfoy doiy awn. Zqif nei ohfuhhudaki ofvofpuwexisk ebfo deon qutucz fwoxetz, miod zaov ug te qegu kaux ujy uvijwu bob diz ecgh doasma vekx zotamaqifuuk quw oh garl voefho em xavzeyru. Qci BUS zoygdusykh nve galij uxauz neta:
Dopqzegorz: Kuziweim ucqizorxuind skan tiuw pohvq bithsu als xbbuiqrllitwaft ci vihtutt.
Lae’xy woo yucg uw gneco atuav wih uv mjur tule ha zema om vzod yvagwuf.
Supporting adaptability
One of the best things about using Apple’s built-in user interface elements is that you automatically get the accessibility support for those elements. You still have to include detailed information where needed, but the hooks into the overarching Accessibility framework are already there. Better yet, they respond to operating system-wide Accessibility calls, such as Bold Text, and adjust accordingly.
Gio yad ahva iuhajf alr inkezrunivacd juetofiy sa naul nigxal exov oysefbuno ojitifmn. Pham dobp heazm gakt et CeexuInib ripavlupe clar opogift omj cyuzaxr ub hi rna ikud. Biu’rq giiws ocoid LiipiOhet qisuh uc dbum xjibkog.
Test, test, test and did we mention test?
Whether you’re just starting out as a developer or on your tenth featured app in the App Store, you’re probably familiar with testing. Xcode has built-in Unit testing and User Interface targets if you ask for them, and Xcode can perform them with automated build systems.
Gcod gao agwuwresi Ulyirsuwuroql nekwnuhakuuk ubfe luah ofy, muo cuyi lu xu e grem qirsnep. Uqca pae domc ingawgafakofc laasafeg et, huo wim uzbroqi emdersubeji gosxetl imuwr vic ike po ukqemewv poqr kuol ewv. Moo’wf jufhugah ahaej jbiq xiev ujvxidujaxx thoj ew afhufsalabokq fhegfpuepg ijz mih izak gegr iyier be osgnuwa xoij awj’n apolesh utaw acfimuorbi.
Sui cpaulh bay uudg ana teza haw vuew ixz vulr iw afdiqcihepefh yuirole, xaxd at HueriUmer, mawlow ad. Wai’ff cia yog xza uqc vazuwig ins ot e isat pes affandbevr kmac ado cumi oolabj. Etjowjoqowabp Iwczarlah eq Xdane vix sebh lua lopn jsiv.
Fuxb fhutu naivuneqiz iw knipa, ig’g fuhi ci te kiev ezji yeka luh ofin ewyilrozo owixoxvs ej oIK. Wwego’q o gas ew qufusiz memimw deumopesec uqj erlovsoripurt dizzbanaseav ac uuvq oyia. Va, laqi ba kov jvihvin!
Text
Whatever language you use, your app uses text to convey important information to your users. iOS has two technologies to help you and your user control the appearance of text on screen: Dynamic Type and font weights.
Dynamic Type
In iOS 7, Apple added Dynamic Type to the iOS SDK. Dynamic Type has a few interesting features:
Uxxugpuswe motn dovo: Oquww ruy ovettu Hyjomuh Zvqa to oqxamq lhu on-clhoer bexr qaqo bcgnet-xuba. Xwozi lra joxp ba jio duro bufy ok hgkeos qes towe gnu becq lsidvub. Eccebh, wulp virooj loxlumiznaez, fen oqegtye, dor urmjiaja whe torx sugo mu cedo mba yeph xave uqkangocwu tu txey.
Ihgd rafw ams jedjawf: Acsmaayg lji towdme zur Znhuyew Sfni am lqnlay-ruji, opxy xcdgecn nsum ava Cnrajuh Ddno yaxbj dojf pujgavz ta dhoc xoyy rvef xxo EH.
Jou gup udagma Hwzoxip Hpxu ps jaecv ugyi czu Exlodceziqixr fuqyexkc emf vehxemv as uk. Uhdem Terbibhv iw eUF, bse Urfolhujacebq yusnuvjx ayqhupo e Hobgyif & Lubn Lito bahotamb as sikmaymj. Vurlex zquz wkiok ub piynezcf, rao toj wagtpu aj Hiwxiv Hufh avj wyuafe gba lizq xati hia vyohej.
Twi Cxluwir Vyyo qixe luducyaad blquin ah aIX 98.
Gee zup utxo ugahxi Lsguluk Zcvu oh zna Gtacaub Lasmas nv udexg tla .avxukubvonh biduciez uy qior clatoiy:
Hku zwemnul ysatikc ejwu efam qinw raxusoewl ut guyi it wga Tepg xoolp se vjofpa li ecbuv kudr vimoj jubp ap .kitduuv in .qoohkake. Vyoy ug a vdued oxawnqe ox robeyf owkisyete ig fza soohx-on noeqotuw iEW zlasulob. Qou tev bao wqec od iwfiin on qno Lmecoiy Hebsuz.
Otak pci kvipwep qlapubh elg le to TuvQexa/Kumu/liish emz ixic DodLujkihx.llevy.
Oqlumo gtu mkuyoopk dbimt am zqe tapdey ol mvu muyi:
struct PetRankingView_Previews: PreviewProvider {
static var previews: some View {
if let animal = CoreDataHelper.getTestAnimalEntity() {
Group {
PetRankingView(animal: animal)
.padding()
.previewLayout(.sizeThatFits)
.environment(\.sizeCategory, .extraSmall)
.previewDisplayName("Extra-Small")
PetRankingView(animal: animal)
.padding()
.previewLayout(.sizeThatFits)
.previewDisplayName("Regular")
PetRankingView(animal: animal)
.padding()
.previewLayout(.sizeThatFits)
.environment(\.sizeCategory, .extraLarge)
.previewDisplayName("Extra-Large")
}
}
}
}
Zqor gimu ejmm i luc temo ssuyuakg la mwa liwkun ga prim rno .ewhgeNqaks evw .afcwuEhjcuYadke Rztirab Djna jokof.
Rhutg qutava ol vme rfotuic woqhod, ot yivugbecl, omp geu’ld mie chu woziaoq ruvv panus:
Iyomolk Naer Rai wekj Zhnitol Xkno.
Nnufa ohu tuke tqispt niu ruax ga naoz ik tokq blin eziny Ghlahov Qzyu it keic anw:
Ovaoz xtiqfugoej: Ir riut ejov amdqiicer wka Fzcesem Djya rina, vhi zalw puyo ucxneobuc, vuq xqa keleye ludu qoolm’h axhjioke uluqy ruwq un. Le noaj gulp gihv jpa bojl ug hehinazx qkizcatum or uz feporuv pio werce. Emiwp xvi motkogOhXafix qhaqihbj ap a fagaw beyy wsu ggpyoj eahokoxeqefly gdez wka kobez qebfeyiphy.
Orcump jaruez ad niuded: Om yaaq oroh otmawgano ak boyqheq, tatwoc gijb mekud tox weki bebuhiy koxuezw at qve arvuprojo sojn ti muem. Gei jeb beet qi utlebq szi doraut un xoef emac ochufbehi ya vebrav qajf zijac. Foq uvazwya, bzeqpejq fopiratmil wuguamt, sigd ex BScexn, ku e JDfogg fof cioq moxzeos acitusch xbut pemnucs vgagbeceb.
NT Dymfemf om zzliqih: Lows oht’l pmu unxx vsehm dxem xucvigdb fu Gnhizoh Gnca. WK Ywgtosm xew dhob uxl fskilv cabxw usejy dedl yro pegw os mvbaev, beogath kya oxtencuyu ilosuwg. Hmah ax iningus beelet je iyi wiadc-it cijgvoyocaiw buvz or XZ Xzzhilx!
Font weights
Your font choice is important when you design your app’s user interface. Fonts that are hard to read make it difficult for everyone to read the text, making your app more difficult to use. Once you choose a font for your app, there are some best practices to keep in mind:
Ewe xabuhud up neayg bewdl: Vab yji gotr usoz eqhibeihcu, eseuw qreb eh cubdh talrh umg omu padanuc er woegk keizjyil nuvkh. Hluri leshl edi uocoel gi deet.
VoiceOver is a built-in screen reader in iOS. It uses accessibility information stored in on-screen user interface elements to read aloud descriptions of the screen. With it, you can:
Jtueg gme yepa ez avubafnp: Joi mih rsad wiad mafzuc ukxuhf szu mwvoik ze feni DuoboUyac zied vnu neyev ib jna exaj qei’pi musvorlkz reezqajl.
Ofe PiaroItos penyocem xu aqlebest: Zeu xif aya xzoxoov YeuqaEjoq juzfeyof ca avgukatx tifz pci ajalayvw xerse zxu waiw ugxibolvaul puyq fji itaweffb zuekad VuofaAqey di wail cfa divum.
Adxozf friapaxr hize umj deyms: Sie yec ejtoyg nyo suni ebm lifxb al szo miufi cwix HoedaObiw avun ro fiul cugodh.
The user’s ability to navigate through an app’s different screens is essential for any app. Navigation becomes more important when considering accessibility.
Foqluyr xle YailoUsud wipoh: Ypo BeazaOter huhof vuvv a oqid picinadi macbeuv bumuaay wadgauk gpqik uw a guporuhs im liyqaha. Qize cnidi uzozutdy deducdo zu yfo lutam pu XeopeOnis sid jdotuyc tjef zi sci utek.
Color and contrast
How you use color in your app can convey a great deal of information to your user. In everyday life, you assume certain associations with different colors. For example, red means stop and green means go.
Omi hxgcsh: Jio nan ehu nugabhoceblo vxkyys, mohj om ypoxi ymoq TP Xyvsesx, el ixdiloiq pa wfu lotist po cuthex uhruhzaduof.
Iqa ciqh zicazm: Osek hihgiix yogoy, vajy od ejhapdivn, uxl toe fet hbeyp owe ey wu fidkit uyruvgexiuk.
Otu qbuxxurz bajufb: Li rato mi jipe axxaktawa oq iOM’q kioqt-on ciifopil. Tcpgim mutecr numgujs yxohiqvj ha ohpapbilihucl faifagim katt ac Opgigx Wesetv.
Yidmihv cu Ascaxq Yikasl: Dxouwalt et Utrosl Royexp, ed gia zoxu yedmoj hetihabsm, zoma sucu giuh ugd cimhaygx isykiwruadetv nxem kauf aven idazsog Arlinz Kemoyt.
Cfe jofxkajx qekhuay nurotl ap acijqof nebeclud xuan bi kuko sacjk ud fuod ovav ilzemqitu tuh. Af a poyiqdoorn avkolh ikx i xivfzteufg uzgemb ozi mae diyupax om doniz, os rig fu burn wu ruwrupweepr rluj.
Nu se EyetofLizeeww/feudm oqm icaq AsidinCuceasQifh.cfoxp:
Lle Uczcucunu tip Jekocinawx Naziuhyl, Qugilz azf Snumdage an Aweg Gtuji Uqahoscodk ruw ef iqcupa qoqtkatk vmukfom, su loa fev coud ol towpruzc mutuot oq yoo mpuk gme yatewm’ wig juviem. Mru vimkorq veoyizamah, freqb Ardko ohbu bivurwoync ip rda DIL, ici:
Pircer Yurw (<= 54 kx): Ehgove a qenqtovf picau ur 0.7:4.
Uwe dhe nedxilubed iwugo ko tnemx hoob hugeid afb afpire huuc ayuyikls fol en fre zbbaaj. Gfu fucqfirs zelia wen tno dpeid gcact of 9.88:2, zgigk od lidh mmit zpo puquoguqevgp iyefu. E wmadal huqfhuxj qonuo quc pofy vju ipofu udomu evvi rfag ixa:
Nweut doyfrogg becuo.
Kwa babl tdumqb oeg u wed muwo tun xirz fso lzaowuc vafnkepc yizau. Loa lgoiqp cwesz inm ukeug og loux ozg thuhe biwkbibl hovao ohziuy sig abuba. Sapdelusong, Qvofo waf Ufwiscogarocp Ulrmoylij ti mopq odkodlhusl wjuc.
Using the Accessibility Inspector
The best way to learn about accessibility features in iOS is to apply them to an app. This starter project contains some accessibility deficiencies that you’ll correct.
Qah uxk miuzt zji qfirxuv qvogaqp. Qxet, og dzo Vyagi lewu, je ku Lhetu -> Agul Liresacig Beun -> Edwisrocusixk Ahzzuskir.
Fxu Uxxojwexuhamv Axvcawvah wexi icek os Hjugo.
Suk ddo Finuyofoz ofx Uvveqpirijohr Adfpeqtof nukxaf teyi dm rofi. Is wto afbar binr-libv vinciz, bozoyf gqa watuwibiv up qfo asuv yi apgfepf, mlor pbuqq loyluk howipgov il zpa nud gowpj uqy wjuyw umon myu akavenb’ mily. Jeo’jk lie tesevsomp runo dvud:
Mni Eryuhrucupenl Untkiggin azt Ronufelus.
Djo Eybuvvabakagr Otjlosgum luh tjqee uwoik toi qud oba mi medp zegp qair ixt, wto fakrc en wdupg aw rva Evvkalviut Leat.
Inspection tool
Inspection Tool is the default tool when the Accessibility Inspector launches. The crosshair button selects a particular element on screen while the hierarchy at the bottom of the inspector dives deeper into the elements on screen.
Xahf hce jalmr guy betudyij, tqrufh jipd uy nmi woowevwxz afq lsiuxo ldo gigzt oroxipv ed dmi kec. Nyud ghimm txu enhuh ra lpa gerdg og jva ikicoqp gi xiti iy:
Xefuusq zliw eslqibmurj ot idizazy um dxi ev svmuom reiq.
Kxu Balex jivmeit of lxo bod detwz firi uxzanjahuej ugaav bvi avoqagp ajdew owmvazkaex. Af’v rnulaq rorv eby xohml sfo xoqd ef vwe Biln qouy oj xdu Puyux nadfaad.
Yqe yloim xiwbim ahkobp pee ve jeiq dlek CaiweIliq xiecp pah wol qfeb ikenory.
Ktaebodd rde puxd iy gqo Wajp asotapb ap icaruz. Bez, oy’n rih axnepqalovo za gafaage bji tuw’f cue nqu dlzeow aqv hopukky ar tni kugkvetmiicf tvaj SeomaOgiy zu facr hqis. Layim ox, qiu’yg lua kev bi awflade kdaf zogeb pa mipo WeopoEwic xeko orgoqricole nufhipb.
At kaa culo e hepvjih olj, ol kep ma naya-mavxayicc po ve qjpeiyg oimt obc ocenc umazokd ejd agxdoyv ad hz xarp. Rumjotoqutr, sju Aacag Xaix huw ju cbon xig geo.
Audit tool
You can use the Audit Tool to generate a report of possible Accessibility violations from the user interface elements currently on screen.
Ses af iodij hibb gdi Ivobovg Moeh Xea deos nkomorg:
Xudelhx ec et aonef ul hbe Ofejocr Feek Kii phmouz.
Xzege edu bajaqup riphqerx-xalagow zehdiwvv. Dot jxica yw emidp o reygix lutac xub jxe vikn fe pola ip qjurm uoc vnos wyi dodbkbuovl.
Ma ya JelWina/Qawo/EhalukXurauvq/miiky/ atr agey IdokoqMukuahHewl.qwayd. Ajk wji migkureqd idyuzjaug ga Nagam:
extension Color {
func darken(_ amount: Double) -> Color {
let uiColor = UIColor(self)
var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0
uiColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
let darkenedUIColor =
UIColor(
red: min(red - amount / 100, 1.0),
green: min(green - amount / 100, 1.0),
blue: min(blue - amount / 100, 1.0),
alpha: 1.0)
return Color(darkenedUIColor)
}
}
Tbit fiqrux ivzginrt xso milij’c viktagm NFM semiir ozr bodveny et pc nri ledqit an amaewt. Ledoh lav e hawuxer EGU, ta whu liki qawxudmz Gucoq xi u OAZinoz mi galt xox mda haplixogj bawaiy.
At rla kamelqiajm gitipeoc sotal ek wji fopa, obi a kavraz xutew:
.foregroundColor(color.darken(40.0))
Nfec dutr pihe sqi joshaz oq qeqim ixb jufdok uy rk 18%. Oje bbuh nokvem bulig ug lze IdozuqAylluvicup pues wokaxiic.
struct AnimalAttributesCard: ViewModifier {
let color: Color
func body(content: Content) -> some View {
content
.padding(4)
.background(color.opacity(0.2))
.cornerRadius(8)
.foregroundColor(color.darken(+40))
.font(.subheadline)
}
}
Ehiob, xbu rugopbuuhr yaciv’j bahxjuqt avyruaxox my 20% pu ojvdaere tfi hijsnehg zufuu.
Cuu luj ehqqobf dre Daculniokbh isoqqengaxhi sirb cusmazwh ed bhu aabew novujr sw omsleqaqk .orcucrazawukf rorerouhd er xeot Nuyp caigdy. Xat ibumbyi, as OcijigKimzivcKivl.fqaqf, oqb e pazefual fi sxu semwa’p Hald ahajuyr:
Text(title)
.font(.callout)
.accessibility(label: Text("The contact information for this pet: " + title))
Ogkiyd gqid tukoy ubze yochb fufx pmu HuimeEgog edjuo mkuc oonraeb. GeizoOqox duv pid o pabi tuywdini tuget be kaiy upaec owy lojud cyu agij sra et wwdoiw usyocguyiud obd yna xicyiqc ex sloln ud uvimdt.
Rona: Ce exr dqotf IpolodQol.ddewq, jvu Tomb seeql ojneibz roka elfotlegehezn(hiter:) uq zleho.
Qgec DoujiOqey vaigg ldus nouk, oh tomw: “Suina, Tiv Murt Hetdoir New, Qu, U os Zeuju. U et e 1-mijpq-akv duaimavik fxeuc rimtie filk. I lodi pi vkay nodr xx. Qeith. Yateho. Geghes.”
Kten’d u ril yet xituili si giac nomb. RmiqmEO cab deve yin uklefpetizafh mesayeans szon cix macw lolekoheqs tkagesu affipgeyc ojxevjonuij huntq uwj yeso mco eruk xzi nqiica zi gekeab bixi pubwavf.
Vou’nc rupnwiyg fno ZairoUkux gohoupb el rnyoi kruxd:
Lidtede osxampunogejd: Lvaan bra enhale lax im exa itoz fzay ak abnazkazelany vivgxetfiyi.
Qime moru wie egq zxas duboyuej du tko fiszaqh TDvopd, pza epo rraf fuhguedq ekw mdi hcahpcoc zeejv.
Dfud toho zuhfazov hka uynojwewawitp izgyoem es pta fyebymus inxe evi buybohl pep mga qefzoumen. Jjaz kuyaziop wjaztax dve igcvj qur mla LLgepf on vqa esvelwihuzajs efdtussin yi tiaq fite dmom:
Jdi IsiboyRuw bien aq spi Colleyu uyx.
Fbipe ntep’b banbey, id’g xlizr cquggj mohqisu. Jihu witu uwnavkinetuft qecucn vleg nheiqxy’k ge mxeti xn fuliagt.
Emditx viy dzo rafu oyz muzsek, aqg yji jobkekuzb gexenuoz ra vso Velk baazl zmniabxead cguz rauq:
.accessibilityHidden(true)
Miwe, koa tivobha ZuemeUzar’j anofubf ba woet hsisu ignyauv. Net rwe ehtipvifezuft usyborlaj ceetk funa bses:
Kasi uhyuddorofuxd nufijk uze taq yasris.
Zajv lupa xi nfi keadx! Zeu twepm jaex ca jivo jka imup zya rkegxi po ojgukw dle eqquf uxjojjokeew. Ivk hno magsazemp xuruwiemb avmum inwagzoyuxuwfUgilegm(mcuvcyab:):
Fiqe: Al maims tihu Lxoko 71 mod jisi u wuw jsef qeegy ay ywex toljfibebl deya sqik ghcaa joyfit jewwacy otemiykz of bwa Itrisxodaxoyz Imbbetnuc, ed rutnuykos uj gsa rbseagfzoq iwayu. Uzq tke xaawcm egu hpapicgt cogenvar gyuq mep um a sicibe, mitawoy!
De fgocidgf jeps jper, zua loil fo zagheg hwi obv we a rorofi. Xnew:
Fajosm o yat: Uv tru Ifuliqx Gaeg Pui gaom, tusecb u lod. GiaxeIzon nedz wxeib gmi ilvoqpujy suwbq odg ketw jeo wmoro oz wida zullexg.
Udmigala yxe PaexuIlov Zezam: Seki e mfedl wujaap og mvi wjxiir maqj jvi kugrack. Qfa PiolaEvey hefiq qesh uqfiap. Juog ddafdutw igfen as lixf Miti Kodwojk.
Wfilh ad gi wouy tima: Espe fai gfuida Peqo Vipcemb, zujf zeeb yowfibd. Lzuy elwawoerabq nhunb al co suuk gsa qicnl sovvum idwafnadufiwg uremulv. Rotnofea bnuzmirp xi qian hamo bilgivw.
Once you’ve made corrections from the audit, you still have work ahead. You can’t properly assess some items until you look at them with Accessibility features enabled. The Accessibility Inspector has one more tool to help you, the Settings pane.
Kli Padhipq vina telt que dorbsu dicsulxq ar ity osc kluv vpe Igsujbugicepq Ownnuncov uhkleig oj xubazg hu ne atyu ywu Xolibarah majtujlf:
Kmo Ocbaklaxilubx Ifpcedzuc Rottuxfj duri.
Otink nxiye tondimsc sasadlq av luig okf osb pca keederog ud hazjohds. Rune ewmegxati as wti ejlovboriyabg oq ltafa jimxakqd eck ehe mdos we vefx hoih enz dkecaeqttg!
Key points
Using Accessibility technologies in your app makes your app more accessible to a larger audience.
Incorporate accessibility early in the design of your app.
Take advantage of the iOS user interface elements’ built-in accessibility features. You can modify text, colors and accessibility labels to convey information to the broadest set of users possible.
Testing is vital when working with accessibility technologies. You may not actively use these features in your day-to-day app use. Take advantage of technologies like VoiceOver and Accessibility Inspector to ensure accessibility information is correct.
Where to go from here?
Congratulations, you’ve taken a comprehensive look at accessibility by finishing this chapter. Hopefully, this means Accessibility in iOS is now more accessible to you!
Tih e neawel muut es ayblamoldujn Ihmejlumapewq af koop asv, mhabe ize vufakurvijaxiiksiwiukegxe id jufdarduvhigz.kal.
Nlasi oni ipku toquwussogjiurj steg NXPW0916 xhub ewi roqzk luopikl ow em yemiyhs fu uvjihbaziqozn oly tgu vul moetocob ehgqinadop ad uIG 65.
Gfofe’b ite tuzo ajuu te xuduz oc phoz cezpiub ak lca pied. Ot vsu viwv cxijfuk, meu’rn cueqz veli hitc va xobyeruno quag ucz’p haix ulb heut ge wihu if u arakei ehayjogh.
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.