Урок за споделяне на данни между iOS и watchOS със Swift и Xcode

Въведение

Търсих в интернет добре очертан пример (в Swift) за WatchConnectivity.

След като търсих известно време, не можах да намеря това, което исках, така че реших, че сам ще науча темата чрез документацията на Apple и някои други източници.

Надявам се да превърна тази тема в поредица, тъй като, ако има нещо, за което не мога да намеря добър урок, ще използвам документацията на Apple и други източници, за да науча темата сам. След това ще създам демо приложение и ще напиша история тук, за да покажа всичко, което съм научил.

Също така ще оставя проектните файлове за този урок в техния собствен раздел в долната част на тази публикация, така че можете да ги изтеглите и да следвате заедно с този урок.

Какво е това и с какво е полезно?

WatchConnectivity, в основата си, е лесен начин за споделяне на данни от приложението за iOS към приложението за watchOS и обратно.

Създадох няколко приложения в App Store, които ще се възползват от това като функция. Би било хубаво да можете да „синхронизирате“ (поради липса на по-добра дума) резултата, който имате на телефона си, с резултата на часовника си и обратното.

Сега, след като научих как да използвам WatchConnectivity, определено ще го внедря в игрите си.

Изисквания

  • Xcode 10
  • Swift 4 (и по-нови)

Предполагам, че вече сте инсталирали и настроили Xcode и сте готови да започнете, защото това е малко по-усъвършенстван урок, отколкото просто да ви покаже, че можете да отпечатате променлива в Xcode.

Приготвяме се да започнем

Първото нещо е да отворите Xcode и да изберете iOS App with WatchKit App. По този начин не се налага да се забъркваме с цели по-късно.

В следващия екран изберете Product Name и попълнете останалите необходими полета. Можете да премахнете отметката от Include Notification Scene, тъй като е отметната по подразбиране в Xcode 10.2.1 и не ни е необходима за този урок.

Сега имате празен Xcode проект.

Интерфейс

Винаги обичам първо да изграждам интерфейсите, тъй като съм човек, който обича да вижда напредък в нещата, които правя, и изграждането на потребителски интерфейс винаги ми помага да се чувствам сякаш съм постигнал нещо.

Първо влезте в Main.storyboard и плъзнете Text FieldиButton върху сценария на iOS.

Конфигурирайте Text Field и Button според вашите изисквания. Отидете в помощния редактор, като задържите Command-Alt-Enter и направете IBOutlets в ViewController.swift.

Ето как изглежда моят интерфейс след добавяне на Text Field и Button.

Сега отворете своя Interface.storyboard, за да можем да започнем да конфигурираме начина, по който ще изглежда нашето приложение за Apple Watch. Едно предупреждение е трудно; потребителският интерфейс няма да изглежда страхотно, защото исках да направя най-простия урок, който можех, и не исках да се вкопчвам в външния вид.

За приложението Watch всичко, от което се нуждаете, е labelв горната част на екрана, за да направи същото като приложението за iOS и да свържете етикета към IBOutlet в InterfaceController.swift.

Потребителският интерфейс на моя Apple Watch изглеждаше така, когато приключих (тиретата в етикета са само пример за контейнер, който обичам да използвам за тези ситуации).

Кодът

Създадохме минимален потребителски интерфейс, но сега е време за това, за което сте дошли тук – кодът, който кара всичко да работи.

Първо, нека започнем с iOSстраната на нещата.

По-долу е напълно завършена версия на моя ViewController.swift. Исках да видиш колко малко всъщност има, за да направиш това да работи.

Под кода ще има обяснение на всичко във файла.

  • Ред 3. За да накарате вашия часовник и телефон да си говорят, трябва да импортираме рамка, която ще позволи това, така че импортираме WatchConnectivity.
  • Ред 5. След deceleration Class ViewController: UIViewController, трябва да позволим на приложението за iOS да използва горния оператор за импортиране, така че добавяме WCSessionDelegate за приложението, за да се възползва от рамката WatchConnectivity.
  • Ред 9. Това е само изходът за Text Field на Main.storyboard.
  • Ред 13. За да направя достъпа до класа WCSession малко по-лесен, го съхраних в променлива.
  • Редове 20–22. Задаване на променливата от по-горе на сесия по подразбиране и задаване на WCSession делегат на ViewController и накрая активиране насесията WCSession.
  • Ред 28. Това е действието за Button на Main.storyboard.
  • Ред 30. Това задава променливата txtна Text Field, която в момента е в самото поле
  • Ред 31. За да можем да изпращаме данни към часовника, трябва да създадем речникс данните, които искаме да изпратим. За този урок просто изпращам низ(txt) на часовника под клавиша message.
  • Редове 33–37. Това е методът, който всъщност изпраща данни към часовника. Също така допуснах грешка при предаване с print(error.localizedDescription), но не е нужно. Просто прехвърлете променливата messageв метода wcSession.sendMessage() и трябва да сте готови.
  • Редове 42–58. Това са само методи по подразбиране, които идват с делегата WCSessionDelegate, но не ни трябват за този урок.

Така че след като приключите с това, приложението ви за iOS трябва да е готово за работа.

Страната на нещата от WatchOS

Сега нека да започнем отстраната на нещата от страна на watchOS. Ще намерите пълната версия на моя InterfaceController.swift по-долу, но все пак ще я прегледам в относителни подробности.

  • Ред 4. Точно както в ViewController.swift трябва да импортираме WatchConnectivityза да можем да използваме тази рамка.
  • Ред 6. Трябва да добавим WCSessionDelegate към InterfaceController (това отново ще дойде с методи по подразбиране, които няма да използваме за този урок).
  • Ред 10. Изходът на етикета от Interface.storyboard.
  • Ред 14. WCSession променлива точно както по-горе.
  • Редове 26–28. Същият код от ViewController.swift, който основно гарантира, че WCSessionсесията започва веднага щом ViewController и InterfaceController се стартират.
  • Ред 37. Метод от WCSessionDelegate, който позволява на часовника да изпълнява код, когато се получи съобщение от приложението за iOS.
  • Ред 39. Задаване на променлива, text, към съобщението, което приложението за iOS изпраща. Методът didRecieveMessageпреминава през речник от данни. Този речник е същият речник, изпратен от приложението за iOS, така че низът в скобите трябва да е същият като ключа в речника в ViewController.swift.
  • Ред 41. Това задава етикета text на стойността от речника, която е предадена на метода didRecieveMessage.

И това е всичко за кода на watchOS!

Стартиране на приложенията

Сега всичко, което трябва да направите, е да стартирате схемата, която внедрява приложението в Apple Watch. След като приложението Apple Watch се зареди (първият път може да отнеме няколко минути), щракнете върху приложението на началния екран на iPhone. Сега трябва да стартирате и двете приложения.

Всичко, което остава да направите, е да въведете съобщение в текстовото поле и да щракнете върху бутона - и да гледате етикета на актуализацията на Apple Watch в рамките на няколко секунди след щракване върху бутона. Демонстрация на това може да бъде показана в горната част на страницата.

Заключение

Беше ми приятно да пиша това парче в Medium. Аз съм доста нов в писането на уроци, така че, моля, оставете коментари или отзиви по-долу.

Мисля, че това беше страхотно начало за писане и експериментиране с някои страхотни неща! Благодаря за четенето.

Проектни файлове

Ето връзка към проекта GitHub за този урок.