ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 127
Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 32
Abonament PDF

Experimentul cu WATCHKIT SDK

Chertes Cristian
iOS Developer @ Telenav



Korosi Csongor
iOS Developer @ Telenav



PROGRAMARE


O dată cu apariția WatchKit SDK, mulți programatori pe iOS au început să experimenteze cu acesta și au scris articole despre provocările întâmpinate în timpul implementării.

Urmărind acest trend, articolul de față descrie prima noastră impresie după abordarea WatchKit SDK-ului și provocările întâmpinate în timpul creării aplicației de navigație pentru ceasuri folosind Scout SDK-ul nostru.

Arhitectura unei aplicații Watch

După cum se poate observa în diagrama de jos, o aplicație pentru ceasuri este compusă din două parți: o extensie care rulează pe telefon și o aplicație care rulează pe iWatch.

Aplicația pentru ceas conține doar interfața cu utilizatorul - un fișier de tip storyboard și imagini statice care sunt afișate în interfața aplicației.

Obiectele de interfață afișate pe ceas nu sunt obiecte moștenite din UIView, ci obiecte proxy care moștenesc din clasa NSObject. Aceasta înseamnă că randarea customizată sau animațiile nu sunt posibile.

Deocamdată, customizarea acestor obiecte este foarte limitată comparativ cu obiectele UI folosite pe aplicațiile iPhone. De exemplu, unui obiect care afișează text i se poate schimba doar culoarea și textul, în timp ce pe telefon sunt mult mai multe customizații posibile. E posibil ca acest lucru să se schimbe cu apariția următoarei versiuni a WatchKit SDK.

Interfața cu utilizatorul a aplicației de pe ceas poate fi actualizată cu ajutorul extensiei care rulează pe telefon. Extensia poate să comunice cu aplicația iWatch prin _outlet-_urile legate cu obiectele de interfața din iWatch - toată logica din spate rulează în extensie.

Configurarea proiectului în Xcode

  1. Pentru început, trebuie să aveți instalată versiunea 6.2 a aplicației Xcode.
  2. Pentru adăugarea target-ului aplicației pentru ceas la un proiect existent, adăugați un Watch App target (File -> New target)
  3. Cele doua target-uri noi vor fi create. Una pentru extensie și una pentru aplicația pentru ceas. După cum se observă în imaginea de mai jos, target-ul aplicației pentru ceas include doar un fișier de tip storyboard și imagini statice care vor fi afișate pe ceas. Logica aplicației va fi implementată în extensie.

  4. Selectați target-ul Watch app și rulați aplicația. Asigurați-vă că unul din display-urile externe ale simulatorului e selectat.

  5. Înainte de a trece la următorul capitol, mai este un lucru de făcut - comunicarea între aplicația iOS și extensia WatchKit, care este posibilă doar printr-un fișier comun. În primul rând, deschideți secțiunea Identifiers de pe https://developer.apple.com Selectați ID-ul aplicației și activați opțiunea App Group. După configurare, regenerați profilul care folosește acest ID. Notă: vă rugam să folosiți app id-ul propriu pentru activarea App Groups.

  6. Întoarceți-vă în Xcode și configurați bundle identifiers pentru fiecare target pe baza app id-ului configurat pe portalul Apple.
WatchKitDemo: com.skobbler.WatchKitDemo

WatchKitDemo WatchKit Extension: com.skobbler.WatchKitDemo.watchkitextension

WatchKitDemo Watch App: com.skobbler.WatchKitDemo.watchapp

7.Selectați secțiunea Capabilities a target-urilor iOS și Watch app. Navigați la secțiunea App Groups și activați-o. Ar trebui să vedeți următoarele:

Aplicația WatchKitDemo

Prima dată, să aruncăm o privire la rezultatul final:

Aplicația WatchKitDemo pornește o navigație între două locații de pe hartă folosind Scout SDK.

Cu aplicația rulând pe ceas, iar extensia și aplicația mobila pe iPhone, utilizatorii văd instrucțiuni vizuale și distanța până la acestea.

Când ecranul ceasului e atins, se afișează o imagine a hărții cu o rută și poziția curentă. Aceasta este actualizată la câteva milisecunde.

Comunicarea între extensie și aplicația de pe iPhone se face printr-un fișier comun. Pentru aceasta, programatorii trebuie să activeze opțiunea App Groups în iTunes Connect și să configureze bundle identifiers pentru fiecare target.

Pentru că nu este vreun API pentru comunicarea directă între aplicația de pe iPhone și extensie, inițial am vrut să folosim un NSTimer pentru actualizarea informațiilor afișate pe ceas la câteva milisecunde.

Aici provocarea era că nu am fost notificați când fișierul comun era modificat. Soluția a fost utilizarea unui obiect MMWormhole. El notifică aplicația și extensia când fișierul comun era modificat, astfel încât nu am mai avut nevoie de NSTimer.

Obiectul MMWormHole trebuie inițializat atât în aplicația de pe iPhone cât și în extensie:

self.wormHole = [[MMWormhole alloc] [initWithApplicationGroupIdentifier:@"group.WatchKitDemoGroup"](mailto:initWithApplicationGroupIdentifier:@"group.WatchKitDemoGroup") optionalDirectory:nil];

Pentru a trimite și primi informații între aplicație și extensie folosiți:

//send message from the app to the extension
 [self.wormHole passMessageObject:imageData identifier:@"image"];

//listen for messages in the extension
 [self.wormHole listenForMessageWithIdentifier:@"image" listener:^(id messageObject) {}];

Aplicația creată este o demonstrație a ceea ce pot face programatorii cu Scout SDK și WatchKit SDK. Câteva scenarii posibile sunt:

Proiectul demo se poate descărca de aici.

Rezumat și observații

Sperăm ca în următoarea versiune a librăriei aceste probleme să poată fi rezolvate.

VIDEO: NUMĂRULUI 126

Sponsori

  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • Connatix
  • BoatyardX
  • AboutYou
  • Telenav
  • .msg systems
  • Colors in projects

Chertes Cristian a mai scris

Korosi Csongor a mai scris