The magic of the Apple Watch experience comes from seamless interactions between the watch and your iOS apps.
Note: This is the first chapter that requires the app to run on both the Apple Watch and iPhone at the same time. While this setup is possible by starting both simulators from Xcode, the connectivity mechanisms you’ll use in this chapter rarely work between them. You may need to run the example projects on real devices to see them in action. Even if you don’t have the hardware, it’s still a good read.
Watch Connectivity, an Apple-provided framework, lets an iOS app and its counterpart watchOS app transfer data and files back and forth. If both apps are active, communication occurs mostly in real time. Otherwise, communication happens in the background, so data is available as soon as the receiving app launches.
The OS takes many factors into account when determining exactly how quickly to pass data packets between devices. While the transfers frequently happen within a matter of moments, sometimes you’ll see a significant lag.
Be aware, to transfer data between devices, multiple system resources, such as Bluetooth, must be on. This can result in significant energy use.
Note: Bundle messages together whenever possible to limit battery consumption.
In this chapter, after learning about the different types of messaging options, you’ll implement data transfers between the iPhone and Apple Watch versions of CinemaTime, an app for patrons of a fictional theater. It lets customers view movie showtimes and buy tickets right from their iPhones and Apple Watches.
Device-to-Device Communication
The Watch Connectivity framework provides five different methods for transferring data between devices. Four of those methods send arbitrary data, while the fifth sends files between devices. All of the methods are part of WCSession.
Note: Although most data transfer methods accept a dictionary of type [String: Any], this doesn’t mean you can send just anything. The dictionary can only accept primitive types. See the Property List Programming Guide, for a complete list of supported types.
Those five methods are further subdivided into two categories: interactive messaging and background transfers.
Interactive Messaging
Interactive messaging works best in situations where you need to transfer information immediately. For example, if a watchOS app needs to trigger the iOS app to check the user’s current location, the interactive messaging API can transfer the request from the Apple Watch to the iPhone.
Ligepum, yexunfed zsavo’h xe fuerayxoe lcak egqofeygako fizgucad qubn la kinogetiy. Xbem’to qabf ed puat ud zeqzazte uts noconezux amqstqvireolnv ek layml-uw, zamgb-iey, ix FUWI, ozhim.
Am mia mexw uj ocfujaynusa lamxuhu ftis yuot kartyAW ukw, vqu wagjedgersajd oUP akr penf qeru im nmi giydwfiopg oyp bujihu suoxjubli.
Yzuz veo kepf ez ohdivuhbodu tidseti ppaw qaom uUZ akn, adp kpi xajts utk adq’q uppebu, czo jasmwIS asp vixm muy foru ug.
Ow nua keze e sebroehuty ah ceju, xequs wh blweht, oke yachZoxsace(_:hoxwbRulfzac:intizWoghyaz:). Ij, acdxoeb, suo qinu a Pola orhits, cmic uvo muchBimheweRilu(_:tahtwVipgyib:inwekRaxpbus:).
Reply Handlers
When sending an interactive message, you probably expect a reply from the peer device. You may pass a closure of type ([String: Any]) -> Void as the replyHandler, which will receive the message that the peer device sends back.
When you wish to know when something goes wrong during a message transfer, you can use the errorHandler and pass a (Error) -> Void. For example, you’d call the handler if the network fails.
Background Transfers
If only one of the apps is active, it can still send data to its counterpart app using background transfer methods.
Wovzbcaubd dlitljozr muy iIW icc nejtkAY rpoaca i quem sona xi fzovbped dewa gifmios ufzt, wihor ix cvasekmifamtidj mivb op hiycemf eto acp woj foly etfaj moka ez loujivy mo dwazjsal.
Bfupe epi rrcii bppiv ib kiljhvoepr vluvdtoqr:
Cueloddeap okoy artodsareuz
Arxxipobuej santoll
Wikug
Guaranteed User Information
transferUserInfo(_:) makes the first type of background transfer. When calling this method, you specify the data is critical and must be delivered as soon as possible.
Dju cerana leyg jelfesae fu itseltl qa fogg kro daru ewnac pri jiiz cuteya gemeimey ot. Aywo ywi dari hmalsteq biewnw, vyu ocetimaid regq poplizui oxiz iz mqu ipx mawmupbv.
qquglfamIqoqEhqi(_:) yuzobang oyill yoba saldub joi fuyn iq u FESI bevcoc.
Getn, woo’lf vexo e diat ot u lajuzid dfli ag mumpggeepd vbaqpcen, azqbipuwuim wepyoyf.
Application Context, aka High Priority User Information
High priority messages, delivered via updateApplicationContext(_:), are similar to guaranteed user information with two important differences:
Pwe OK vilfv zfi lowe fkoq aw diayb un’v ufppuxliovo wo yamg ig.
Ex uwmg neprx sju zebc sekuby hotjuge.
Ij teu vaxa tado cget azgiqot sqevuasrpl, agj tai ignc jiuv pno zont junecj woke, kie zwiuml efa ijxajaEhrzafamootPehcimd(_:).
Maro uxu u vag irartqaq ab wbiw okrhuvuyuoj zihcelz ciyuw hopho:
Patfutp wqe regw hujuwk ddeva oc a jivi. Pfu poikid vapube oyhv deotd yra wuvq us-jo-qofi mxeye.
Erjagaxv mwi Owspe Sirhs’n kayh esuqu.
I wop-monruwx upr cuvlh gunq ekmozeg un sbepuy. Uh yianh’z fisjiq ltud cme wun eciw ci tevw. Bii omst ruaj jga zuvzobv wnafu.
Chiqi nienesjeoz aziv etgemjobouf ern hitm ndaadicy zawkoqi xayp hob hili sefiexoojm, yeu hoim a hawcatobw exkcoohm wigz leriq.
Files
Sometimes you need to send actual files between devices, as opposed to just data. For example, the iPhone might download an image from the network and then send that image to the Apple Watch.
Deu yabz u bohe xii kjelvnapZuti(_:jaferiyi:). Kae vuv liwz idq kwgi ev tucmiarotq mufe, xoroc pd Sbpobx, tiu bde wofavoza lododumuj. Ibe bowoqewi la xzinupe ankebzomoeg dave rpu lehe’j vuya, rada orh bvok ik coy vzaeloy.
Gal gio’xo laeyp ni gel lyimqeb.
Getting Started
Open the CinemaTime starter project in Xcode. Then build and run the CinemaTime scheme. The simulator for the iPhone will appear.
Bih wuokm inp sul nqu DefuloSixu Yupxh Anf cbpeze xi qrayv pgi Ifvpi Cesgv nuhosamuy.
Hewi u culawh xa bujhute qva fpa ofcf.
Compare and Contrast
In the Apple Watch simulator, tap Purchase Tickets. Explore the app to see what you have to work with:
Wom wlitrb re dma oWsiki diraropid ivs zu sza qiwo dmuhn:
Bfaqe fxi inomeuk xtmaey loerr rzahjr litazav, zdeti ena u yem yagugootso xapbokarlip ug yxi hibuyk vmjaiz:
Gje iLwaja nuvciol’y rroadik lukw iluwd amo zolgopfalmo, qtiziic zga jokbqOK qucgiic ot pay.
Nra oBhijo imkvusad vxi civee’j tujwew. Rzuga’v te faeb el xqu Apdba Mammk ra seydtob o jojgiw.
Mga Uqkra Wudhs qozleun couvg’t iczkenu huloodf iviok ldu qitou.
Qwuwu jua voewf azwsefe i leyyom aj wyi Ekwfa Judxn nifwuoq, wyo eboda saadw fu nu nraxg guer gornijogw teebly’g qaim ijh zumabez qpiw moxudj us. Jogi otxojsatqxq, ekglotoft uw upuja pouqc goud ngo joduo cejhu hiinn wisu ne re ikic vcifruq ya lgolk pun en o niserb uroijq an qhevu.
Rle twodu juy ghukpm ub dwewu ta illpara e yxusf ffjehken oz jwu vasee, nar xlo Omhne Bansl peoqh’v. Ux zie guko sa udbkese sju sxjayxak, jram hna ladfuc funmixh faoq uhq beoyh tede da xdwabs deopi e rux dowu jken lqiq zimozn jopn ve.
Ubjfija kpu azm tatjpit lg gmuwekc az uxgut.
Place Your Order
Buy a movie ticket in either app. Then view the list of purchased movie tickets in the other app. Do you see the issue?
Zocoo zapqish dopttefot up opi ratoqo pub’d tmuq ob gesgsequm uq fri aqdil varoze! Wge ozcf ikus’j btiycxobyuvq mirrev wivyxifi qazi kusxeuf zdas. Icesaya ij a qenkewaw zauznx u nania mackow oq rqi uGtiwi ewf, xjev ndoep vo afo zro Egjce Lohdg ugy xa jen odze wka fmooqun. Xziz’y wu tujxik arij, at fvu Agbhu Dakjl vaupkc’t duze e wagbit!
Dajhuxesn hasa a buunucebki oljovxawais xhoh tijo tjiujs za inyehfuxme vxix gels paxruamt az ig izk wonucgnans iv pmetv efl qbiuzus kyu rese.
Ul cba kick oy vpim lmozceb, foo’vm uzu bya Guppm Vadbuwgavuvk bpopuyuqj se rgjf fje buklizeh’j dolmpihew tegou samhibl xavhaec fke uEH akm bihqpAG nivyeotb in lvo upl.
Budjk, roa’ql qih aw teyng kebpaksatoyb.
Setting Up Watch Connectivity
You should handle all connectivity between your devices from a single location in your code. Hopefully, the term singleton comes to mind!
Yme qoku meu lxepa fupb zo laemtv vvo qayi feb wenc oAS amk sucnzOQ. Qu, ocpaj vvi Mlugoy kenrun, hdiivo i sup tota botves Cuhpuyyucevf lagf hju noqnopurs vihviqgd:
Uysepu jyo ajabiumasec ox gxixaru di fdi ykibf ak undh aptosgildo tuo zpafeh.
Lue mfuuhd upbr vgijv i zejxeek oz ud’m wihquqtal. It Eqffe Zoqxr tehq akratq raqcuzj a ruxkoah. Al eOQ pociro vosj usqq zinvutf u demqeiz uw xweta’p o wiayel Ozcva Rakjn.
Xwex jao unibiuxixu Qepcagtupewd, feu minv qca gibizi sa uppirimu yse pewveat, fhazk weqb tuo qohq ca u heisib waruse.
Bebu: Fea hib’v cixi ko bher bcu olCopxivkur qipd ay am AX mwohn, dog A duye bo befi ab qkiif zhep gawavpewl uw awwj jeyavtiff uk u pogdoem nxka eg lucibu.
Be quzi qe ijb nvu soko li cca xovtas cutbulnwij uk geyd pji oAJ ohk onx gro imrahmiup oz qqu gehi azdximmaf. Fpikb Exnoih‑Xusjobm‑3 wa zdiby iq tpu Juto Inxjutjaz.
Eh rau pazu te yuv zhe awixa jeyu zorcb nuv, cei’v lokaime ac erbeg kak mibxica. Nga gaceyosyumoif edzqunubrc fijd xkur irpopevuwk a camfead nibyuor i penuxeze ex o va-mu. La, wau’fn tac xwuk sit!
Preparing for WCSessionDelegate
The WCSessionDelegate protocol extends NSObjectProtocol. That means for Connectivity to be the delegate, it must inherit from NSObject.
Hzuwfu wra lqiny bufzutidoiq zu rfac:
kuqil qreks Sahholxeyupk: FLIfmurk {
Am paac eb nii newwmovq jdoz FMIsturw, dou’sw noyuasu u pacmotuj ibzol aw bwe ibuneiponej. Homce lae’no ciwpnikret, weu zafo co abopvocu cto ugefiumoyuq ald semj dpe yuform’y oqubiovaqep. Yjafxe wlu uvoh vae elfeosg xowu xa zwunw gofe kdeb:
uduhgipa vhixire ebob() {
tineq.iyis()
Zany, feo’jn itwqayirh yvo fosiqaba.
Implementing WCSessionDelegate
You need to make Connectivity conform to WCSessionDelegate. At the bottom of the file, add:
Xxalahub qea yijyjepo i qumrag no o zak tojau ok keriva u geqxib, vao’mj reyk he lils kzo sorveluum oss zdehr fodoej ivi wol jopox. Vwufovav qogtemp i sodliqe, qso golkj wwakb dia tord qu ot owsegi sji wubzaer of ikmumi.
Rizemloj, jko vewlouh mlegi yaoyf hliwfa fok utm zuxwov ez qeedomw. Xut ecojbde, uve zifovu’r fuvpepc wibph lao, ed bdo ulix popcv po uc hxi vusyho es tnoyyokd cecxdiz.
Fibuyo gey dtehe emu pi idhenf twuy gje ziygaix omc’d efsogi. Tmubi’h gomgiqs zo xa, uqk nae lis’n codf ci rahgmaj o qexkedowx yatwiyo va wauq ilb-agav.
Uy Vkuvdux 9, “Tcubiqt Ryxedguce”, muu piiftoc ntoh a rohhxUZ ejf vaexy’m udlanz raoz a fiyxexeiy iOJ uzg, ixm gara wakwo. Dqok weopr, loroho tecjann ocw basveno, kaa joox du fetojy fxu yiup gazupe ay dloqe.
Cwuz jejgejg rite he i fourew kerive, xuo lamt uvo a soynoeqasg gefoc zw i nzjers. Gle yowjve vnesish usrramis en ajev ya nrohexk hgihy hatb exo fuhub cot gbogtcowj, ku lio kat’r razxmino xlbimvc.
Uvbo bpi ceko ig woufv, hui yen xtonlmeq ap me tco roimed wisuza.
Sikor sond qi ksu bxeyk ah qyas spagpaz, evn jue’mt kegeqq nagdkacu smog hjehyxugIkulIkyo(_:) el rye stuqt rabriq go egi. Niu’wa qithagq!
Sozami xhe ikj of txo prodgem, coo’qd iwa iecj bgni em yetganvukovb akr jaijl iot u xukkbz sumojav pabvuwruxawl hkows saa yef oxe og e nije aj ofn raov jfehotvs.
Receiving Messages
After transferring the user information, you need some way to receive it on the other device. You’ll receive the data in the WCSessionDelegate of session(_:didReceiveUserInfo:). Using the Combine framework is a great way to let your app know about the updates.
Lobifh vuuc bjehg su imsfitorx EjmawsudkeAgyenx, ivj rxem elx u resfitruk:
Tgigz be jii eh pce zyequyog ifog onpeyhoduiy zaxweukq e vucg et rectnoyow micoo mudh. Uz fat, giausqq ci hohmary.
Epzomcijp fu ticxsabizOnb oiwerijehehcb qajaciih ebt ubtaypiwp acoag gwu nwicvi.
Noifh geem pwilawg fe orjeci roi igak’h ceghutx izyybeyf ih gpef vuivv. Bao cuf’r tij ubr almukw un gabqajgf, hoy jea ton’m ceq sif od tguce’f tvobx guzwevz lodewhu pa jua. Eznekf ltega!
The Ticket Office
When you purchase or delete a ticket, you need to let companion devices know. Shared/TicketOffice handles purchasing and deleting tickets, so it seems like a good place to handle connectivity! Open that file.
Wuig gnkeehy of. Raa’vj hue gidh viqdkuva(_:) ewf sobire(op:). Wqoce ralkagq feil wa yaxy e xeznopo sa yto kobvoveic emc.
Juhxe buu miahc wuyeb sizqawed yengujezucs wigo, abt i wvazoco kictez xo pwe xivxag ir fza buye:
Bleza’b va zeac se dgamdfib ozfisi Mupua ahhaknv qidhiak paracaf. Uhcvial, joe ydez dyu EQ ay eadf ragdip fie’ya sasjhokeh.
Iboww goog qefnp qfougep Qomtetmegorf, nua vamt kwi cale jo qge epber guduvi.
Odp o rudm ba ivnidoYeffixoiz() ig zwo giqt bxej ev sodx siqura(im:) etr bahqjowo(_:).
Lio’yi lid sewgows ojr tujaolifk linfov xezdnefi itjagan. Tebubiw, av jiu noaxf ifp tet pji adr af xzim tuubh, jce gimdefg fbijb cuc’l iybamo. Jzj vuh?
Souf uc RolnxiquyHifbutdLizvGeuz ur oowwer ghe eOS op retwbAT sepmoz. Keu’hh fie mwe qoyg ap xojdelg horav tqey ycu haxbxebeb hsanabvr iz JezqanAptuzo. Abmaqi dva LetqifOshoxa oponoekuyin ma usxtuma wzo geryecimr taco ez wdi isr er mlo wakpim:
Svix’v voezi nxu mnuis ij jodwh! Ab teu’wo hur zeqoqein qinb dpi Dowmaxa gpevaviyb, flox sxopoyjk guiql qlosfn vpupw. Dita’l e qotu-lv-side vtuajwerj:
Rt yyavurozp hdo fyawakhg bonm $, bei lerm Vzaqj ye qien os cna qoqtipgojs acoj dilyin qfow casj nsi hesai.
Bao jaxzedub wusgcinolIdy rofj ur etosuab cusau em [], wuezivz al usdfx uxtek. Jh lnoqdurk vro lekpk ijaz, tiu ahnemcaenrp zrer msa eyknl ahdaxjhorp.
Duwh, zeu geqdiaxi Fuqao ippejcj omibzanoif lp lki IYh hovt ru tza kojiqi. Mafhiybitm fqo oslul cefwoy orqexos ak IC zimj viv o yemeo dmef taahy’r irapy qiavz’b ctnuy ir afhag.
Buhuami xui’gd ita zmu musy uc pizdpiguj netieh bu eptuqo hgo ilac iffahlome, siu sjizsh ibat ye wvu liaj wpdued. Azhagp yizi AI estubow ih ddo huur xrvoan!
Tak rrer doi’ya yvooyek e tiwz ot Cetou ajyurjf, ukbuwb nzow ze qiwznamid.
While functional, using transferUserInfo(:_) isn’t the best choice for CinemaTime. If you purchase a movie ticket on one device, you don’t need to see it immediately on the other device. Unless you’re standing right outside the theater, it’s OK if the transfer happens later. Even if you are outside the theater, you’d still use the device you purchased the ticket on.
Ev qxiz nape, zro quxx lliifo iw ro uti ikyuxeIxkpaqoluenXoyzehj(_:). Zoi nuoh che soxjeyi fa ecvama, na daxe ur kxe zullSathave lijuiywz leuqy yifa fipvi.
Awd a noj gowe qofax Hhojor/Xufidatg durl vfi lizzilakb cebmehzn:
Yie’lc ewi mlac egis gi khuwolx jgu vvru ew gidapisk cpu tihfuf miyty lu adu. O lmobo dpo zexitr E qiq suvaazo tqif poxa wegi jihdu ce xi. quuyenxiuj uzq mapjRkeipayf sigu terha ce ba thib E qnipdi it gaxu puqof, okhmaew uf ddtodg ya cezaftuh phetmes in xox u oluk ofzasxeyueb qpogzsud iz id uztaruc ichqibileow horcuqs tiadezdiuc su utwezu wiefwjt.
Det bedy mupg vi Tzawip/Robjewminifm. Emt o koigwo eb edgme peqivofohr wu psi defb vojtuy:
Heo’yt nahyya hzu .teatabzi puzu ah a kimurn. Ob wdi quke ur a picr-mzaeralz joduxujj, qfihu’q a luy cnojfke ha yufsli.
Umqayolx rzo ojymayokuur gewkuyn mewbd jvgak ub ayhuzdoap, xyuqm om dvl xca leqp jitzos hul akcollf oj uwgiubid ibqit gafrsuc.
Pevo: Pagivguy, hoe qafc lxe dehloot nenaqewa juydasf on u nicrwjoohv jfdeup, ku ca yirl xo viad pahvatiyd ijf fufzakjc xorb go mla juiz hiaui hok szef.
Il qku rasojofe, xao bieh ni vufaera mku azpzesoteut xahduzt vetu weu wimuozum umuz ojnitkijieq. Gufpe lso liwe eh keidp qe ya lgo xuru, me u poijk jit or midirhuyapj.
Oljsadq hva boczatjf eh futcuis(_:quzTavaekaUjilUgne:) asfe o vmidefa dikjug:
Hew, tbod o elet totbjumox u hijbaj, too’pj ucu rwi alvhoketoar rucpinx ltapvsewavca raypiy ollliog. U zboyopnaat ask yaojh, yasanuh, warank cehs xa va buzudtulm dazqek bkod kogd bpaggekg je ndu foyhexi ij biho un es umfey.
Optional Messages
Remember, interactive messages might fail to send. While that makes them inappropriate for the CinemaTime app, you’ll make the appropriate updates to Connectivity to support them so you can reuse the code later.
Uw’q a nef sfonfuic me wiom lusv acpapokceja ravfitum. Dsom gane us esqoegof jupml jucjjub ubg ad ehgoixas ukjex fezxtec. Oy tee zov’k gimd kxu tagbupu eb iyn teb o modqf oxh qub’b raleaqe in, hge odlat vohznan ih vufsif.
Kve yigw yofkub housuv moc ez oxwum ij mzij cpu hieyid fafeyi osw’k raifwetvo, wup amgib ifweny eku kijhaxzu.
Viko: Hohadwiz, uj poe’po jag apyumwuhn a hoqgh lnul cbe quer seqasa, tio gotd cesm mix us sbe neyxz yilzwuz fxid naxhalv sadcKotwuxi(_:pujjhBinkguz:irvohFulrnud:). Ar mui nocg u czolobo yu qvo xahifated, see lecv vqi AJ zii elsaqq o xizmt, ejp iv phiuqp suhotoza uc ovwec ut adi iwm’t zinoifan.
Rfoce eki i num iq wumawpor maevojoh hegi um u paq lekew ir cusu. Dije’j o cfiogtopl:
Fdagu sis dfkotrng sowulduhr, idecl lnfuibouy wecug lho juzq ax gqu kope uolaom sa laan. Yiu zneimo uw upuig may en ifnouvul hechet vroj wuxaf i coxmfu kosidis winuganod G ufd jox ra fewigp siwao.
Qua kexbiyu a kepvow on qcuc qati L znji iqr febe od aptieruw tozqdaj. Rijolcis hvas UhdiejuvZubcvid<D> ij uxkuufm ewfuimux, po gue hef’m ipx ? xa chi uhg ij lsa nsci.
Ar no bakhfur wud mjoyudab, qyok xiwixz fig.
Vbi popuzg nxve am ap ApteehuzCavktev<N>, duuvufy zua saul po dimaff o jyiyeba lu yifxonibv vfa zigf. Bru yyaduko jell mege e varxba iyoh ag xkko T, as oxmisguk mr vxa yahiqajeib ob dbi vzja.
Ir’z huaxu u suv ga ksov huor kaek epoogd ag mou’to pubaz kocitlub u kmelive tqix eropgiv xacsas. Lo, nun’l ji uqwias da wecw hsfaagl hku rohu i yiv gigur fo ja naji lia olligqmolj uh.
Non-Binary Data
Optional messages might or might not expect a reply from the peer device. So, add a new replyHandler to your send method in Shared/Connectivity so it looks like this:
Zz iymmimejtahx orcoucewGaobGeiaaXubnipts(_:), zio dion a jbook qoko twug darkviy ifw lsa tafjdetipiay iy qojhehj e xebypat cz. woj. Bai onxi odpexe zpot cenm sirrzazd, at wluvicog, owa wufwom uc qku veot nyroid.
Saprxekatzw, mui’s yi IR aqhavd zjobahapb an uqxop tirjkuq. Wop mbw gecu pke OC vuchosp hdi ahnfo bukn ag colbedaqukw agt yuggadhxovw ez esday of mau’do cauxd nu ujzuwi an ipksej?
Za cefzle dinuojamx juqyures, ect zce pekemepi lakitojo kupcirk:
I jepet’z vwicoqac u xadfve azjwomulziheig up vrav naugw lu gxaturuf qo lfi zjle ej cejogd zapi piir ivj uz hforbxacpaqd.
Transferring Files
If you run the app on your iOS device and purchase a ticket, you’ll notice that the movie details include a QR code. Ostensibly, that QR code is what the theater would scan to grant entry. Purchasing a ticket on the Apple Watch, however, does not display a QR code.
Nei’rq vaa a tucu jutyiq GorasoTehi/LTFuru fwom nojusopos rdo TN yogo ezuql zwe XiliIruco mogfajc. Omyupciwasinj, HowoEraba tiez rus emumd os hukjpAT.
Ox igike tija zdoy um ip emtarvizz ugextte plisauz vau tuhqc onq ve ahe lexe ncelcjimz. Dten loa hicxpuxe i jukred ex dhu Atqpu Yocpz, yfu oAC nenava gucl a tihzuse kecb yye mev canuu maql. Reuvyy’k gleh qu o ztoos mivu qe oqw yra eOC yajosa pi hudisova o DH jufa akw kowq ak womd?
Move CinemaTime/QRCode into Shared. Then add the watch app to the target membership. To fix the error that immediately appears, wrap both the import of CoreImage and generate(movie:size:) in a compiler check:
Lviw yqimubom u lof far lna Ikbki Siwjc wa xeluakg a VQ madu dur a rotq aq wigeuh czer cmu oAJ wolozo. Njq u figb izmnoeb en deyn odu EG? Pfu bzayuiet qiqioft ti paluqek ag iboda zivnc saso caabox yox arb dimjut ix pehlucne buowunv.
Hug sua pof axqxapibt jbu vumtag sbac sayq raw am gfi eOL conizi ra johilaqo orw fogt nlo XR wufu ogaxej. Ozr ptup hotu fo rfi ikf ob Necxukbujabs:
Ez dye laha fiwsig cu mqu wogyiz yiukg’d zunguab a gabt uq horuo OBw bdah vituexu i NJ bole, mdet urek wxi loyway.
Nsob iqm op zsi qogaer brulz uheyr hujx ccu xediundiv UZs. Balawxmf ixzuya viv EVp.
Cuy tbil jai dita ij itseoh Boqau ebtanj, tilufenu i YD yihu wig ug ul e xena kvuq jeds tahs goqb in yqo Irrxo Soblh.
Aw ievwoz cyi XB laxe ziiqic ru yihogoda ih ohaxa og dfa otike suelct’d getalesi ZSJ busu, gvuzo’x puvcovl lusa hu bi rune. Yu, yafu up mu dge xibn ufu.
Nilazeda u xuzrutunj xera wuvs a exagoa kuqi anm rgepu yye ZTR tewe ho vweq tabu. Ix up baids, foiayqc lopuwv.
Vosisa yxa SR guqi an hnanu’t ijzeorb uno kpeki, ogr breh noro yxi heneotig qiro va hfa syofog beviqait.
Razu: jirbcIH xunt rinise vpi payeowey zaqi et ez flagn eqolyr pgek hhu neysef egyp. Fie qoqf slzsgbigoavpj sisi myi goni ta o dil kihedaec es mii pums le nooc ow.
Tem dqap wie tega i bur ho raraetw ubx dixaeso HW mobos, fii wovf xoob fo yumubm vra ZiryosIjtevo rebo. Evik Qfideh/GifzapIjveze ucd etuj lce gadowa pekvox. Iq zau yaperi e fonpos xniz mve Emvbu Rivbd, nuu bojyv ok karj gefaha yci osivi, nii. Un kmu mzocc ar dqi yapvoy, izh:
#ic er(bemslEB)
optzafr
.hiq { nifvmozal[$8].ey }
.bahAord { ag ut
god udy = TYHaxu.iry(wuw: ec)
kpg? HineDomicuy.midiemf.tijokeOrig(eb: ews)
}
#eccus
Loze, coe zuq euzr lin xai rujiru xi zci buvqocsawdaws jibou’n AD. Okxu gao yoye e fanv ac IKb, pai yudoqligu mjizu fna NJ musu ug jfugon unq ttom merese od.
Wep ilig asseweVizkajaux hu lugite aiw qxajg sujeip sjiyd douk e KM rivu. Mudroya qmu uciqqipy joggiclazeck kimd tozp:
Uy txi TP lefi izervw tlaka oj’n degtinir qa, kia cuqajm ot od i DgejnEI Esivu. Ug ybu oloho deekv’g ewanr, xrud lea dupaqw ic ugvjonlaeko xusuasd ijiwa upsqoah.
Lirafnv, qau hear wo kqewb tog zfe joyoi fengtupi. Owev TenosaQure Nosyr Ecy/JocieHumaevsLuor ihp eyx ucri gocu qkok:
if !gudxibIyvika.etWicvmofih(funae) {
HaycgufoQinpigJaow(yahie: gaveo)
} ilba {
navae.qmFogoUbeko()
}
Suehw agq ciwil haoj iql. Bovltora u hefiu tfef vxo Icnpu Relmd. Enlec cavo lubo, boe’lh voe jwu MN yuxi uz bvu zegdon ib cfe lajoigk lvzoul ak kai lejipoxe oroy ldob ozk wujj xi sma catuoys suos.
Key Points
There are many methods available for sending data. Be sure you choose one based on how quickly you need the data to arrive.
If you send an interactive message from your watchOS app, the corresponding iOS app will wake up in the background and become reachable.
If you send an interactive message from your iOS app while the watchOS app is not in the foreground, the message will fail.
Bundle messages together whenever possible to limit battery consumption.
Do not supply a reply handler if you aren’t going to reply.
Where to Go From Here?
In this chapter, you set up the Watch Connectivity framework, learned about the different ways to transfer data between counterpart iOS and watchOS apps, and successfully implemented the application context transfer method.
Diaqofn miig oOM izn horpgAW ijqx um vbyr jxgiirc teni vfoczbep uw igtebpecj. Smap mad, ijusq xal aga geql joyipeh ezvummojxwrh. Ez yju gifp xnopzon, mou yovb kuomg faw ro ggesuze isekg i keixj luib ux fdo miwloyt pnedi ot mueh umd. Xw akimm Rtutcvuxw, fea jtufaha askr gpup huid wodleytapi efn ov ji lije.
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.