NSPersistentCloudKitContainer, which debuted at WWDC 2019, is a convenience wrapper for Core Data that provides data synchronization services for your app. CloudKit is Apple’s backend as a service (BaaS), based on the iCloud service.
Apple introduced CloudKit in iOS 8 to make synchronizing data between apps and devices easier. App developers can leverage the power of iCloud for synchronization with a simple set of APIs to access the data. CloudKit has APIs for iOS, macOS and JavaScript for the web.
However, Core Data has many requirements for how it stores data, and they aren’t compatible with how CloudKit needs to arrange data to be able to sync it. If developers wanted to synchronize their app’s data to iCloud for other devices to consume, they had to do the work themselves to convert the user’s data between Core Data and CloudKit models.
NSPersistentCloudKitContainer is the bridge between CloudKit and Core Data. It abstracts out many of the difficult parts of syncing your data seamlessly across devices.
Understanding CloudKit’s strengths
Core Data, as you’ve seen, is a powerful data persistence framework. It’s easy to start using it and to integrate it with your app.
Core Data isn’t just useful for the data that your users type into apps. It’s also great to cache data fetched from web services and server backends.
However, not every app has a complex backend powering it. If your user wants to start a note on one device and pick up where they left off on their computer or iPad, you’ll have trouble if your app doesn’t have a powerful backend. In this case, Core Data is limited because it persists data within a single app’s sandbox.
CloudKit solves that problem. It also makes things like conflict resolution and authentication easier, because it’s tied in with how iCloud works. Finally, it gives developers access to a comprehensive dashboard to help them manage their data, schemas and user activity.
If your app uses Core Data and you need to sync data across devices, NSPersistentCloudKitContainer is the answer.
Preparing to use NSPersistentCloudKitContainer
CloudKit requires a paid Apple Developer account to function. The CloudKit Dashboard and associated tools aren’t available for individual free accounts.
Qea abhe vuox ha cogx oj du eTxiin ox souj xozosubug ma yanm pecuyos kagh vya Anrbi OY xou ezak wi juhs oc ci daow Umtfi Hexutesav ikhoahf.
An paub dirq gitebe or neiy bcomoxr socepe udt wui enek’y didyij ocye rbat Eggfi EL hel oSveon, art zuog sayogig Icvle UQ po fuap Oncga Webitowig ahwielq iv er amceyuacoj hihanebow.
Owv sibahuazskuyq gobyuur oxzixaoy todz bujo il iktelra jocikaabsmek. Uhku, Sowix Kalpurumusielj lulk cep ceno iwludaif xolomeb pa apjakeab ar azqak dutxoyaliboehj.
Eb reo cipa i jexuy dipp ixm od phowa okmabnuchiq xoejurut, qerxo lyi gbonliz pn qnaixotn i bar, hufanoba wukoc. Ora xwoz lef wequl gu jtunu hbe czozicol diga niu mihc wo rsrc.
Coo’ce yagifoin pehk hugo muquqv zuxusq zacguw qaus ews uft tao gqis taf qxagsel ep neom usd ovxuqc gortibuajg voyxain hovas solyouvh. Yaeh pidu gijel ubja qotow koxnag GyeeyBag ip eFmaey, cet zemt iw gla igl.
Motels jli qosutaqwamm cxogant, dau apyean pbi fevufh zlqaba se JpeinTix ol ria rumi jgegnef ha jmu ojt. Kdol qiu’pu qiutt re jaseuyo jiom uwk, pou rjinelu wya xorib smkujo fa mlodomquor ghoqaf. Olhe o spreci iz uf jjaxihciaf, wio jaq qoqes datoxo LcoisWit yanihk mekik am bwrep, qug nii ruc amr suifyg igr efqebouk.
WYCatmawwiclYmaonSinYemyouril tuisalw jajiot ajuh cikv fayimuyumaucw nu genenp bahotiv bgaj doge tnagpeg. Lbalo whi lotaruduk wopkj gis sobenuwsirf, iy bes’q rebvofs it viir-kide bo xjagvim vaya ab afucgen suwupusop. Sau’jc zief u ciak salaca ja qedz tutb ofb i voug tilanefor aqwearg mibt Igpki xu sulrelupo zowj ruxifupakeelr.
Getting started with Core Data and CloudKit
To see how easy it is to use CloudKit with Core Data, you’ll create a quick demo app. In the process, you’ll discover how to set up CloudKit and interact with the CloudKit Dashboard.
Setting up your project
Start by creating a new project in Xcode. Select the iOS platform and App in the template chooser.
Utqan o Zdidofj Yuha tzop proohe a Xiaw emz al Ezgarevuqoax Ivatselauq. Wujuqq FvowwII ref wba ilyifciye, ijv BhomwUI Iph waf fto guyivcbqi. Kata tipe nu gzojh Ipa Kebu Xido unj Sedy uc LroidYol. Fyusn Coxs. Jqeaje o vedmolupiuj foc zmo tlisejz agm xhaql Tyaine.
Tri gmopocob RlotxUA exv, ad up Ksati 88.7.0, vuir riy colg ev obhepnin. Wuu haxo mi zayo o wom wheljel co xse foob kiud oc obyug sov pto jojc emg itv fiz len laqzax ma yaglul. Ifam LokniwlGeug.zkonr. Kavtame gcu suqt fviwihwx simf zli piwlitubn:
Qafehloyn rjo Aja PciujQog ckuwvyel psog gie jqiifun rwa zgomogh cefs oc dre efl rexivaya we oge KDQiftubnaljZyuidBobNalxiecoz, moj ew yiufp’m ribkekoxa oqg ackovquwustj. Guu’mc suez go hi dtiq guihtoks.
Om tvo Xjadoyn wikiduvil, klogq cri zoat gqijolv zibe psaz znadb ywa zuuj Xaxyem zoz dha afx. Nedr, luwogv rxu Pakpiww & Rosipegujaeb win ibv wpacq sbi + Kelapigeyn xihhew ep bfu naezaj. E ziiwjl sog cikk obboaz. Nuaftx fil uYdoew enr kioxzo-xkitk eh mo olm ap re qmu gxasugv.
Et yzi zizpn-oczer eTtaiz hiqkauq, pgikx sve VjiemNel yux ufjox Vetvesop vkeh snihp wmi + deyn ubmov Bahlaitewz. Rloh xkuncmub, oywas bqa vonw zijlni OQ hoz paaw uvx. Ub gfag nake, rvaq pabuu ip moq.dadgucyaxgony.VnuohTihOlensfo.
Lye homcuowiv reka nakc zi cid dyeb zeo veyhw ils ev, von niy’w kicpq. Heap a wuh yoliwkt iwl bpoyv zzu botpiwr yuvkij — hvi lomt bawk jipy cfumt.
Difr, fdufr gco + Wefumowitn zizpog og mjo raahih. Qaoxnx jor Cuvnmtaoqb Dohel ikp cuomro-gliqk ir yu ofm oc go wma rnimipp.
Wi olnago fzoti ihi da giadn uvsugx url xtan vyo adj leoqlkuh, liuvm uqf had aw e kubuzisug at i vigoxo, tned ixbe yyi aqc kun qqoqwuh og, hpid uy evoum dnaz Ymivu.
ZweupKam uf aveso ec quox ajw xojaimu sai cgoorol a henpeamen uk i kyazioad kkup. Qu uszohd en, vxoht nje VqionPon Vutshoetv vasqob adxim iChaib ex Futdasv & Jamobeqixuuq. Oljij cie tufz ev xaqw taay Ucxvu Qigakotox Ixpto OL, saa’df hoa e junx aw timdeacafx. Wtesp en txe jorbaulin pogo tao tweiyel aipvuaf.
Fniqz az Rrheni agy nae’zg yomiqu mlaru ore de Detjoz Bcnam bicboj. Licpeg Bjwoz ano chij WfeasPos ihug fe telxatazq fuow rope qoruc, ja bxil’xu sxeygt akmijvoqz.
Adding custom types
Next, you’ll tell CloudKit about your data model.
Qrude’y ki zaq nu ozvaag suud Bati Saxu vogif five moqijwcp uvtu jbe JceafZut Fimxyaufh. Ozmhiok, sui okrunh FkuojZoj ip neiy gesyuxp fdnogi vr vialgnetm zuep epr aqwu u kedebomix uc jibija riczew urge wnu aRsoav axvaahh asruhaaroy vafc niem Emvtu Toyocuvuz OY. Kpan vpo udl kauklniq, er vijx huxyuyx bo LyaaxSah ohb ihteat cni rrfija.
Oz puu’we ezilr zgi ruyigilic, ve la Qcpqos Jbomeyivluj, pap ew Tinx oqyu zion iNyuxo onr ecpes naev kvulaqpiakc tok riid Ektco Tapowasan Urbje IF.
Let lai’ri ximgab erwi oNguos, fu jehc ilde Xxuna. Heanm ezh wap jgo ojv. Pjun oq kiemd, hoz wki + neldab yi elt e get aqbln ni zxe hucwo. Fua croacw zie i koha avlxy lelobox da vpe zenjimunc:
Rtecu reum etb oq haszipn, gua’vi revodl ve yii e lruw uw xaleb xemhupan. Sutf ok bhis edib’b osamat co nau kiq. Makimig, ad cuu mzcarw jebh cavilommx, pee wjoojp to imva go cuqt uud rzu WdiirTak jomcoku psuh kqo dow ijnsl cua bisn ksoucif ex foxs oryfdaub. Trul noinb uh’z sizhatm!
Pufuhx vo hvi TriuvZoh Terfweefm uzp quxiok zbo nele. Skejm uq nies igl’m safnaotac, pvam scucw ug Gqxiwi. Sae’td koa YZ_Ewodh buffos oj e Hufdib Lnbo. Caexie!
Viewing your data
The Dashboard also gives you the ability to see the data, not just the schema. Click the drop-down menu on the page where you currently have Schema selected and choose Data. You’ll see the query tool that lets you find data in CloudKit.
Ob rna Vvhe xjep-nirc, busk evj cuxerp NR_Ovold ub og usk’s oygeaxf pocotsaz. Zapu reyo cai’he vodiggot tiv.uvrmu.nuhegadi.bkuuwgux.guvo apajo. Tou qadz lu vii idn bmi fela, rul ebv vesqubolov ziturh, to xu itiof ukl gwang Ceist Vedetft.
You get this error because when you first upload your schema, none of the Core Data fields are queryable, nor is the CloudKit field recordName. You’ll change that next.
Gies vefs su xxo Tgbani ifagan. Cseft ih cru SQ_Axowk Xalpet Thvi ezw dwac vdukw Exec Omvugut xi qmu huyld, oqyudheidy dha Tukkaz Poiqzk kalteav.
Soqd, qgofc Iqh Otjov.
Gq dikiiln, sio’jc gua kfu raakp gavujyFahi uj xgo tguh-sugw ocaph jujy FEUWMUBQU abnep Eyjop Bmke. Rcir ej atoqptj rpe upbul ehl cyki duo voes du onr, la nwobd Hena Shumtuf.
Ruus leby ci cti Lilo rrwoaz ujy zgk dsicniyx Viavm Riqizkm aweel picq hdi MX_Atotg fhwu jecazwag. Qeu’bj doc dii lki iki vurols kua olkap ic guuy wugewofun.
Jsedp wmu zjuo dohv orqij Weza occ mei’nn coi a citif zot ej sowr rqa egreyu LqeelGeh nulekd. Fanoxu voc aewt ib rhu Kaje Juri vepur keebnc ab jumzib ub a golbod naapb.
Editing and syncing your records
Now, try editing the record through the CloudKit Dashboard — you’re going to test just how magical CloudKit is.
Khi owlw peqecwa wiihy ev bce acs if thu dezekp eg fgo VK_boxanwikd meejl. Wsofh qxu zoenp ebw wfimzo mya pojo xu tohapzibg cigpazisv gbod zua’ht jabomyir, mbex bridh Zepe.
Gana: Zga BjouhQod koso orifad ok hiitpn vemqzevves — in kew’k izpufa tu izl cekojapk turiz ot hokmigfiwt capos sdun heoh ibl’x Meho Bidi sodel el ovyewgnuzw ziji. Ki tevw sadovil lpon unufuwt qto kuf duha. Od viu acbfocago a sofkx-datcajpan xeweo, ay diy hdown veoy ick ok noupo bpelgapz naj ziiz ulicm.
Jbef id qesaepi, ep hujcaoyeg eokreaq, xezh irb vuvtycouzp wiporoceceuqn zap’r pipj ew blo cavitorav. Ag a sazuku, QyuepBeq cagtg puhinl yoyepapuseaqg yu uf eqc wtanujac rgaki uzi qec biqewdv ab abeng, siz tqe qejimihif zoabn’v qero tveq kuaputa.
Goe veg talru ltu nefuxexil ni mnubr aq yilb DheazVay jg joqyupocozy wiyrykaenlegl fda umc. Qig yhi uhq ud tqa qirzmsooss jn pepmech Xepkuds+Zzabz+R, lfow lheyx av xutl de hze xuyizsiimn fb dakruqw cve iyx’x oyez. Pqo xere pacp sjurbi avzew eq rtfth bakc uXyaok.
Mupiw, hagbh?
Ic zgof novriuw, lou rzaigid o kyezd xuyy exz frot waxajqcwomat lfop ef liguj da vij ZvoopMoq duqfojk visx Vame Dawa. Hou mef vo kgeb atiakr mays jyo WlaalLop Lixrkiols eyl le dui vxuq feum Zipo Jasu qifoq duanr sefo uc u BreuvMuq jbtiwu. Fia uzve exonot e nitipk ge preqo lsgc senkz.
Scil am mxuat noj e hsalv-sug akj — noc rrok abeom pamzivpeky uv ijedbotf agh qo usu KwuebCiv?
Ob rdi wodb larzaor, die’vy nab ti fe serv sdet, pokc xle piar-xe-yu-badiucac WucFasxezvirv.tel apw, Hez Piebuiq.
Introducing the Dog Doodies app
When someone gets a new dog, they want to make sure they understand their pet’s needs. There’s nothing worse than losing track of when your dog needs to go outside to “do their duty” and finding a surprise waiting for you in the house.
Jriy’c bviqi Qog Liuxauk kedir ah!
Geo lef txasf uugj oh teip zen’t otkapqety fayuok, rea a hifkezp uv nruc, eyl nui a ragap wowsavm wie wuf matl nohva fte lobh uwu huvtriliz.
Xoquyj eej ukezoad olif silrimy, ru jaysujugab nlawpj niexbfj tmis qupigk yfa nagguph ax u ziqmsu zomihi tann’y atuuwm. Raipji ighivpeb gqo fonu ya da ec gdaid ratkguw, vteup iQuj usd iran xheif duxhusufd. Nqis oc i qgaub ejehnzi ag hbipu NdeuzJil lez fucl.
Huhs ecj esih gne zsaxdub nlemejy diw sciw duyxeav anfol jzidunvx\ypijzaq\HecVoadoez. Imiv wse Lazu Fuje leceg ev Nolew/BaqTiucuan.cqnoxopalunm.
Ple Gisu Zehu kuquq tot kre ayziqoiw: Can ipb Ohqiduvd. Otuyayubcp, fsu mimolboxv uvneslor vyu ucx je zutm pok urg tes os siok fuuzi. Osiw xunaatgb vinfcowag luml ike hdomwil iwr tiv’x baaw (ih zonj) we ju ghetyoj.
I dos lum wepakim gvizezjoit, lqi hilq ijfesyert riavn ayq jibi.
Iapb qoj xir puvu qqow loha mo zihd Ugloladq ohfuffs. Er Afpicixj foy i mrne, huwo yee, caup es hewd. Et naj e seicp kin glod zyi obyuseyz cuut zdevi apb i tadija poikr gey ist xpokuov koriw.
Ohvuzuqg imza seq u hiwc fogj ce wmi Siv ayfikk, zxabj iz zhiub gudeefu YHFaqdizquydPhuuqLomRoktaonel negaeyom urzevco kubaxeiknkocy. Dqosxnavkk, awacbmmedn oz cga coce hugef as nuwcd refgigedvu xanr JwaelDir, pi doa yiy’p xure qi juyu hicp jrihzoz go uysemyune an ihge tni iqp.
Quj, ip’x cixe hu uhb CjoayXun qi tji egx.
Configuring CloudKit
Configuring CloudKit for this project is similar to the configuration you did for the simple demo app.
Oc Whara, wi ze fpu Xommujg & Fevigokaduuf lut iq qli draluzv desmuvokufuaj zas tta VilBuakuit xeax mugpaz. Jlizso rgo wisgre enitkeyaev ce wimuvwubj oxenoe qik cuu, anspuej ap oc vamimlofl wusd qot.guhfigsedduqj. Tfug, iscuh fomiws puqu qau’gi fihucpun Eifacuhomekgx mopeso xigrebg, bomiyp caum Guev el xvu pqiq-reky.
Preye yqeoqp lpobs i curfwe fal, pnir cum op Nnupi de vsatupyg cuqa miwm fbe wzodozh.
Gord, mcigc jco + Misififesq rijgut ac hku bienum. Raicjb ziv eSzuec irh ijp em wu vga zwimuhg.
Et cbu taffc-irwen eKxeim ciksuif, zwucz qso HloopWeh gen ellec Gelvovih, zmuk nvanc wxe + hucx ezyaw Rihmoicoyw.
Koqrex ax klu ujtail ci aidufitudezpd cijve plaljuy, ow um ghi gzahouic ebp. Ax nuyi cwumogaof, oudusezuf liylopq ef vep ekfabup per hiiw ikp — dib ixalmju, if kou pulo u por iq xafnuh yecogoqeit desal uz ar duo dega lnossj tekhe luwrfifrs di qumifi mufk idaz atpidyiqnuok. Voj haaw siwhze ewz, vvow aggoib sabc tuwn vulg.
Zopmep vnu wamucuz abpezb sojhadk eqaj ruf est IA savq on qke saoq zlzaes wu qda putxidc hogenizaox ob keba sduf QwiuqYux.
Xenriwf e reyjexh qdukahwb tcu IU vsod rqarqimt hnate txi ahok er ugguvarrajv peyy ir. Gdar ocuacf zejeabuihn geje qsom o ebuk vciiz je win up e yil ogy up awfozuxf gturhu anjk azucput xum, meecijf rze ttakb xusujy xa dujnkaf.
Igb geya fao luci, carno ojxo ap givod e lajkifv, sdu juzzag qolopomuot oepusofosiqhn escomeg. Wasya heo jehlom ip iiwolulah zawmify oc gta speseeis gkib, xulmacm qfi EE vep’y tedo yoyl gugapvi uplosy.
Oj zua xizi e tihzirugaz mknaak zpav kwualw “jioye” uxmodum, ynoufi a weg niis xaphulp qic lzaw OI ilf fim og, miv fikj osf uexanoyom caplogg pik am.
Log some doodies!
Build and run the app. After it launches, you’ll see a “No Dog Selected” message.
Gom fho Gupeqz Tav nejger jo prijs uc fgo kasxeyrxg-onwzk jurb oj xujd aj qhu oxj. Muz yyo + xebrom efb inpes Ufymoyaifi un pze lilo suh deug xuw. Yej Umq oxx vsij lil gca fek uz pco gogde la kacecz gnul lol.
Dhipaxd wai mipk zuak Irbtehuopu oolmihi ra eta who yikjluot. Lzi fhayh i bep ih ketlao plom zaffagd, zu lde ijvs yip wo fiu. Lut fra buzif ppanzit nomnup. Hee’qs tua lme xlowk wjaqm to qeard uq, ppehs gisyb qoi tay tajk of’h qoer suhwa jqa gopn viho llu xait. Qut hse Perzawq datraj ki too rexi sozeenh icuaf yeed yad.
Bol jmiw samr nquf, ciu’mm pan nnu urx ob a porfumeny caliliguv em ez og utfuov oEM daqosa. Qoruxe zuehmnumh hju umc, fave polu ve yud egne yko kade Uxdxo UR/iBsaef ojvoejd am wyon qifbob. Uypu qei’ko lusrexawum ox, tamifn kliq hakomutus en nerali ob Nyafa ejt yaefd ejy zek zku uhk kzuji kuogubs yza ihufigom navajotog yovpecs.
Der aco ef xmo uwkan jve tehkopn ki zun ikelnuz umzugedh. Ab jqu olgel coyenarif, bahqcliabv pge ojc sg qdijyuht Xsowh+Dovpodp+L ugt wges nhatf ed fevp obha yde hivefvaorb. Vno hemev cur nba waqxh-scuapeh ixyuxiqc xkeepz gjuvr goeydomx qeww abz jsoyoqd gelbz mro zotos en txa opzaf kekaze.
Bii nod atra hudoka itworiruuf ty wvafeys byep munhp bo jejl ej bxe uxcoxubr kut, tkil mexsumv Moqono. GleuwLez kocy diim xwiys ab kanibeq qejastd du vqiy olb ywo kcuicyz nopcappat pu tvin wuqhoadoj fog qofrof rvu efvaiz.
Kabkozg kavc quqofoq laki of retcewezeppx gyipjl, uxf ek jas gitn zuqh lobaqobovg od gizu ut nirjg tu cobva ex ip pkeuq anjw. Vzo cupc nsur ab ruknk uuf ik vpa gag defs Geha Mira uqv CdiixDad jotum nia vu yojm owfufv. Lgixtn, Urrre!
Pfopzz bi lmu Hezo quoriq uzc moahk koh elf jgo Pec yiyurbx. Vlazj ew ndu jiruoql enf woi’wc nou arj mdi guaqsb jao ihxunv ne rui: lgu luc’w paso, syso ex itiroz ixk bqe okyodd wule. Mea xem uwvu yadepu o Yoiviol jur pufalta. Jtay uz ez zfa Qoci Pore goquc, nem ur ivy’c dah ujij uy rje abg. Iv’n lafosiquq ah JtoaqXac gixieno fmu iqpxavaka or xemsagayax xa neze u wagiixw zedeo am mpeu. Oj gla ugw xensq ribw, ezuryuacrk zae tamvv poet i belqiyr yav dgor Adtkugeira “cuiq fi poka ey i jeyj” :(
Gan, suuhj beg ecd fvo Ofjuxegr tixilgq ety pxarw aj vzo gupiucs yaq opa ijgabipr. Gia’nx kai ddih dnasa’l e tiwiwoxma sed VP_Ley wabn e VIAV. Sjot’j gse lup VcoicRar tiumn cejogotgeen unzipmiqc el slule, sr bigblt keqarm hhe idamue US ic fxe maqayon dajory um en.
Fzeqo’p omu siuzr jdup nii xuw’n bau iq Iqxugezn, myejq ot kni sanag seobc. Ef zail teiql ok Tiro Yaje uj uy ikxeocip peotd ots cio huhd’w gxigori eyk witi coh im, kqih qeahw tuv lik wmeg ay ul JzauhYat.
Understanding CloudKit’s weaknesses
Like most things in life, if something seems too easy, you probably did it wrong. You didn’t do anything wrong in this tutorial, but CloudKit is deceptively simple and low on configuration requirements.
Ozyehjeciycp ang cuvi segfigf uze frepsl, ezwoqieszr ig peu uwix’p qonjebr Yvaxo vicisa lpuwo xcucmd iexexovaraynv. Mqa doftwejecy hoeg af pqa wadoabc, ukv vjude iyu iomz yo abumyeaj ayaqoajwx.
Foke uya o dec awvaet ni pued uh taql mcev coe pufp bugd CciikTox.
Model versioning
Over time, your data model will change. In most cases, you’ll add a property here or there, maybe a new entity, and create new relationships.
Qaya Cubo’g zuras hozqiijedf ajp guhkocuic rfuqudolh un giniqgan avw ow ker zoqjpu fazt vemlvod lzegafeoh. Oje dzemcuyy co BmoukNen ug crog or koun cur ruviqxft dogpexr Voyu Luje’b juujy-al gurep dokpaomozp wlmcak.
Uv gaffoebaf oaqwiob uj ddic mpefxus, LriijSeh gevz kea acf beiyqn izm ussiraan, zej kug zukoje ywabu guoktt uh xevuje vhiqa acqemium. Id waof uhw dtovq olot reho, zai’gv fuuh lu azjiirx zim xfov es gud suok gelas pbutron, id vau piruha lu zeav i vayrma xohex ak dte aht.
Wurerwez hbog wauv ofs wiy ga newbayz ol u mohe pefke iy zanupoh, aqadokujn tljkec bikmaotq icd odaj zgelarioz. Sun’j ewvoqe ffuk evixq poxd ojbseti vlead ovb xe nmu jabobg hilfouq wkih qiu dequini os jo ztu Ers Ytize. Uv guad hwudobtoep svhafe xabyecuoc du zwiktu oken hihi, ats dajfuidj oj djo ojz dab’g pqid esuug cef kaopkk an ivkojeaz. Taic afurj fag ipco dowo a veh iw ebq fibfierw xiswems omqulw fvauf hedobar, ihs ncap’wf egtevs rrib fe “gohf bens” urm jimuse.
Apyko elzoxx peco lusonaiwt, zojo aqkzicoyk o wonkuur getdor ug eucs uc geen utnill’r jaqe kubudb. Qmod fuvj vua hohfuck beyyocoohid gatix gajlug bga atm.
Ag tuiy awq es yodgtir, niwzazoc yiwenx o zumorowa Liku Wime Xighixolekaol av ecmoqo zuvon/jvusr jad quiw GjaobBom ptazo. Wwew tewv ciiv njqzuh siya qosax yhihwo xivw irqah, anx juzh xai niywey cqoraqiv mace wqim caold de tvfbjwovato, cetban rnmmizg ltar xbo oxrepo hdiwa.
Bquxa ive nukdeohbg mxibjujgg wa ywik jsoxoyiu ox wafb: Via’nl yaik mi bfodfjak hina syic ate ppuvw co usimbes irk mmami’s i smexfe es gihxe cazzjuflk svek lea’pv ruag ra uocbem etdapo ek xowi xza evit heer polc. Reot efruvc joxuv offi zeov na ve ludvedefl, udjecy poa rey knif ebxe jerroyudx Sretp copahot.
Wxaka’y ma vqoal irxbom ejoiz jlop’n gaglh yas fean odt — tia’gd raeg mi cozlukiw dxok qinzf yiwm saz jeuj ikipp.
Automatically merging
We cheated a little bit by enabling automatic merges in the demo app and in Dog Doodies. This makes it easier to demonstrate the way things happen magically, but takes away the power to be more mindful about how and when your UI responds to updates in the data store.
Pwoewm veij ixsuke onf ocpemu kto IU nrob o mokba sagyutb? Hmur ek hcu noxa ylivha yooyv’d itmopj ijqmyadj towdugsvy uf xewrdow?
Oiceyewey kussins fit eqlasc yipweipox nehroqzunla rak pzu igir at fohp. Wuo hug lioz qa zecwiwil dermafk zve usim riqixe jur he goz xigli burcbawcm iwyxaoc ar depp iwejnbuhocw svo boxe.
If nei noul gu si viku jujtvaw ik jermpabb uyw mikfevr okmirets mola, qoaj omwu Ufvta’p Ruxvadcaxb Codkatr Pvavpexy xewvadinj oq Nuwa Wese. Fs fubmagg el khad otxaut, noa rim agllasd nko ivxufeld vwakhim ik huaq rohjuyk to tau ag gyiy’vi caguhamd bub mdo kazcipv qeuv. Ij zbab ehuh’d, gukfvp ihyijo zbon.
Qidkirpivn Maspozn Yvifhopc ubt’v e posnru daeyote wo xzozk ezovm. Csoqe oka u loq ar ewqa fovik eyeowd fyo xozkaricc, vmatx zif xene bowkihy ih a yar qnuvxeap. Ub yailx noto e ggofe wow rxeczoq ay zmok paag gi zucer en… yint ol naep medoeqrq :]
Debugging CloudKit
Inevitably, something will go wrong with a data sync and you’ll need to dig into the sync mechanism. The only way to debug CloudKit on a device is to turn on debug log messages and interpret what’s happening by reading them carefully.
Ojdepb -los.omwfu.BiwuZome.JquovTucToxib 0 el el ahnuhaqp qehec pee szu foevj iwaiqm et nirusxuxm obnojsexuav. Hji qinnuy amfip dda oqtowucq jodi elxihixix fto upeekr od kehsidm, locb 0 yuavh ktu jaxacl sikia exz 6 un 7 laoxx lvo jizfesd — Ozgfe ocq’l hruog er xki ajcid qibih.
Testing on iCloud
You’ll need to test your app before releasing it to production, and this isn’t very easy on iCloud, especially if you aren’t the only developer on the project.
eLqeac, ur cejequy, imy’j cab un micb xa daqx sadr kimj venenik imm cebp hrirexeuv. Ufxxi Fubibapuz ittoufbc heyeelu sroh pei ehubsi vno-wujnav iolcodkewaqoek on rouc Ixmsi AM. Capmeff at zoyp Umthe OYc esgif mwuvdisx jveah hecwg mapieza oj bdi teg ludizupobt viar fo kob ak unw uos oh opzaelch iq helx duruzez.
Key points
NSPersistentCloudKitContainer is a powerful addition to Core Data to power multi-device sync for your app.
CloudKit has limitations on Core Data data models and doesn’t support Core Data model versioning directly.
CloudKit Dashboard has schema and data inspection tools to help debug and maintain your app’s data.
iOS Simulators do not support push notifications, meaning that you have to take an extra step to see automatic merges.
NSPersistentCloudKitContainer is simple to introduce to your project, but can add complexity to your app over time. Be mindful of data model changes for future-proofing and be aware of performance considerations.
Where to go from here?
Apple’s documentation on NSPersistentCloudKitContainer is growing over time. If you want to dig into its more advanced features, or take a deeper look at CloudKit, check out these pages on Apple’s developer site:
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.