Apple Watch w pigułce: wprowadzenie funkcji dla programistów iOS
Opublikowany: 2022-03-11Wokół Apple Watch SDK, ogłoszonego na WWDC w czerwcu zeszłego roku i wydanego niedawno, było wiele niepokoju.
To dopiero pierwsza runda z ograniczoną funkcjonalnością. Apple Watch v2 nastąpi, ale nie tak szybko – więc myślący przyszłościowo programiści iOS powinni być przygotowani na kilka miesięcy.
Nastroje wśród deweloperów są niezwykle zróżnicowane. Wielu programistów iOS jest rozczarowanych wieloma ograniczeniami nałożonymi przez Apple Watch SDK i jego funkcje. Z drugiej strony wielu z nas jest podekscytowanych, podczas gdy inni nie są zbyt daleko od neutralnej pozycji. Ale przecież wszyscy najwyraźniej cieszą się, że mają nową zabawkę do zabawy.
Jedną z rzeczy, które rzucają się w oczy, jest to, jak określa się użytkowników Apple Watch. Nie są użytkownikami ani użytkownikami urządzeń mobilnych , ani użytkownikami zegarków ani (z odrobiną oryginalności) obserwatorami . Są po prostu użytkownikami . Termin, który brzmi trochę dziwnie, ponieważ jeśli użytkownik użyje , co sugeruje, że wchodzi w interakcję, użytkownik nosi , i brzmi to jak pasywne użycie. Oczywiście Apple Watch nie jest urządzeniem pasywnym. Łączy w sobie tradycyjne cechy zegarka z bardziej zaawansowanymi opcjami, które umożliwia nowoczesna technologia, zwłaszcza w połączeniu z iPhonem. Nie tak dawno telefony zaczęły być czymś więcej niż tylko telefonami – historia się powtarza.
Jednak pod koniec nazwa użytkownika wydaje się być mądrym wyborem. Przynajmniej pisząc historyjki użytkownika nie muszę w pełni określać „Jako użytkownik zegarka Apple chcę…”, mogę po prostu skrócić to do „Jako użytkownik , chcę…” – mniej dwuznaczności.
Urządzenie i interfejs użytkownika
Pomijając wszystkie funkcje Apple Watch, które nie są ściśle związane z rozwojem, najważniejszymi problemami, z którymi muszą się zmierzyć projektanci i programiści, są rozmiary – w rzeczywistości istnieją 2 różne modele Apple Watch:
- Ekran 38mm o rozdzielczości 272x340 px
- Ekran 42mm o rozdzielczości 312x390 px
z wyświetlaczem Retina w obu przypadkach.
Nie trzeba dodawać, że programiści iOS zapewniają, że aplikacja wygląda dobrze w obu wersjach.
Łączność z Apple Watch
Apple Watch komunikuje się z towarzyszącym iPhone'em przez Bluetooth 4.0, a także obsługuje NFC. Podobno nie ma łączności WiFi. Chociaż może tethering przez iPhone'a i korzystać zarówno z Wi-Fi, jak i komórkowego połączenia danych. Ale w informacji prasowej Apple wyraźnie stwierdza, że obsługuje również Wi-Fi 802.11b/g.
Interakcja z użytkownikiem
Interakcja z użytkownikiem (lub interakcja z użytkownikiem, jeśli jest to preferowane) może odbywać się na 4 różne sposoby:
- prosty dotyk: typowym przykładem jest dotknięcie przycisku
- mocny dotyk: aktywowany przez zastosowanie większej siły podczas dotykania i przytrzymywania ekranu. Podobnie jak kliknięcie prawym przyciskiem myszy na komputerze, wyświetli menu kontekstowe (zawierające do 4 pozycji)
- gest: przesunięcie w pionie, aby przewinąć, przesunięcie w poziomie, aby przejść między stronami, przesunięcie lewej krawędzi, aby przejść wstecz
- cyfrowa korona: wejście sprzętowe używane do precyzyjnego przewijania
Istnieją pewne ograniczenia dotyczące interakcji z użytkownikiem, w szczególności dotyczące gestów:
- są z góry określone, więc niestandardowe gesty nie są obsługiwane
- multi-touch nie jest obsługiwany, więc nie ma szczypania, aby powiększyć lub podobnych gestów wymagających więcej niż jednego palca
Oto przykład menu kontekstowego z przewodnika Apple WatchKit.
Interfejs użytkownika
Mówiąc o interfejsie użytkownika Apple Watch, istnieje kilka ograniczeń nałożonych przez zmniejszony rozmiar ekranu, wybory projektowe, a w wielu przypadkach jako naturalną konsekwencję podstawowego sprzętu. Spodziewamy się, że niektóre z nich zmienią się na lepsze w przyszłych wydaniach SDK, chociaż nie można przewidzieć ani przewidzieć, co się faktycznie zmieni.
Pierwsze ograniczenie dotyczy sposobu implementacji interfejsu użytkownika: tylko za pomocą scenorysów.
Nawigacja Apple Watch
WatchKit oferuje dwa wzajemnie wykluczające się sposoby nawigacji między widokami aplikacji Apple Watch:
- hierarchiczny model nawigacji, podobny do tego używanego w iOS, z widokami ułożonymi w stos podczas nawigacji
- model oparty na płaskiej stronie, w którym użytkownik może poruszać się między stronami, przesuwając palcem w lewo i w prawo
Niestety połączenie tych dwóch modeli nawigacji w tej samej aplikacji nie jest możliwe. Jeden z nich musi zostać wybrany i używany w całej aplikacji.
Jednak każdy kontroler interfejsu może prezentować modalny kontroler interfejsu, który może być albo pojedynczym kontrolerem interfejsu, albo wieloma kontrolerami interfejsów, rozmieszczonymi przy użyciu modelu nawigacji po stronach.
Elementy interfejsu użytkownika
Istnieje 11 różnych komponentów interfejsu:
- przycisk
- suwak
- obraz
- etykieta
- separator
- suwak
- przełącznik
- stół
- data: automatyczne wyświetlanie aktualnej daty lub godziny
- timer: wyświetlanie licznika czasu, automatycznie aktualizowane
- grupa: kontener na jeden lub więcej komponentów podrzędnych
- mapa: wyświetlanie nieinteraktywnej mapy, opcjonalnie z maksymalnie 5 adnotacjami
Układy
Komponent group może służyć do łączenia elementów interfejsu Apple Watch w układzie pionowym lub poziomym . Elementy zostaną automatycznie rozłożone w zależności od ich wielkości. Dostępny jest tu pewien stopień elastyczności, biorąc pod uwagę, że grupy można zagnieżdżać.
Niestety układ automatyczny nie jest dostępny. Ale biorąc pod uwagę, że interfejs użytkownika jest znacznie prostszy w porównaniu do odpowiednika iOS, to chyba nie jest duża strata.
W przypadku list składnik tabeli tworzy zawartość i zarządza nią przy użyciu modelu z jedną kolumną, podobnie jak UITableView
. Jednak nie używa wzorca delegowania — źródło danych jest dostarczane bezpośrednio do tabeli, najpierw określając liczbę wierszy, a następnie inicjując zawartość każdego wiersza w pętli for. Pozytywnie, nadal można używać niestandardowych wierszy tabeli (tj. komórek w żargonie iOS)
Spojrzenia
Przeglądy to widoki tylko do odczytu, jednostronicowe i bez możliwości przewijania, używane do wyświetlania migawki aktualnych i odpowiednich danych specyficznych dla aplikacji. Żadna interakcja użytkownika nie jest dozwolona, z wyjątkiem zdarzenia dotknięcia. Stuknij w rzut oka , aby po prostu uruchomić aplikację, opcjonalnie zapewniając kontekst, aby aplikacja wyświetlała określony kontroler interfejsu.
Na przykład aplikacja pogodowa Apple Watch może używać Glance do wyświetlania aktualnej temperatury, lokalizacji itp. Dotykając go, aplikacja otwiera się, wyświetlając bardziej szczegółowe informacje.
Oto przykładowe spojrzenie z oficjalnego przewodnika Apple WatchKit.

Powiadomienia Apple Watch
Istnieją 2 typy powiadomień: krótkie spojrzenie i długie spojrzenie .
Powiadomienie o krótkim spojrzeniu służy do ostrzegania użytkownika, że coś się stało, i jest automatycznie odrzucane po opuszczeniu nadgarstka. Układ jest bardzo prosty i składa się z ikony aplikacji, nazwy aplikacji i tytułu powiadomienia.
Trzymanie nadgarstka uniesionego przez jakiś czas lub wyraźne dotknięcie powiadomienia o krótkim spojrzeniu zmieni je w powiadomienie o długim spojrzeniu . Ten rodzaj powiadomień dostarcza więcej szczegółów i wspiera interakcję użytkownika za pomocą konfigurowalnych przycisków. Te przyciski mogą wysyłać powiadomienia do aplikacji. W przeciwieństwie do krótkiego powiadomienia, użytkownik musi wyraźnie odrzucić powiadomienie o długim wyglądzie, dotykając przycisku, który jest automatycznie wyświetlany na dole widoku.
Więcej informacji o korzystaniu z powiadomień Apple Watch można znaleźć tutaj.
Rozwój
Architektura
Pobierając wersję Xcode obsługującą WatchKit (obecnie wersja beta 6.2) i próbując rozpocząć pracę z projektem WatchKit bez czytania jakiejkolwiek dokumentacji, programista może czuć się zdezorientowany, ponieważ nie ma szablonu WatchKit:
Nie ma samodzielnej aplikacji do zegarka, a aplikację do zegarka można dodać tylko jako nowy cel do istniejącej aplikacji na iOS.
Powodem tego jest architektura i sposób, w jaki aplikacja zegarka współdziała z powiązaną aplikacją na iOS:
Po uruchomieniu aplikacji na zegarku automatycznie uruchamia się towarzyszące rozszerzenie iOS. Oba działają w synergii, z aplikacją zegarka wyświetlającą treści użytkownikowi i reagującą na interakcje, podczas gdy rozszerzenie iOS robi wszystko inne. W rzeczywistości na zegarku nie jest wykonywany żaden kod aplikacji: całe przetwarzanie jest delegowane do rozszerzenia iOS.
Model ten bardzo przypomina model przeglądarki <-> aplikacji sieci Web, w którym logika domeny jest wykonywana po stronie serwera, a strona klienta jest odpowiedzialna za wyświetlanie treści użytkownikowi i reagowanie na jego działania.
Aplikacja Watch, która jest zainstalowana na urządzeniu, składa się ze scenorysu i wszystkich powiązanych zasobów statycznych, spakowanych w pakiet. Ten pakiet jest statyczny, co oznacza, że dodawanie lub zmienianie jakichkolwiek zasobów, widoków, obrazów itp. nie jest możliwe w czasie wykonywania.
Ten statyczny model klient-serwer nakłada kilka ograniczeń na programistę iOS, który chce dodać aplikację Watch do swojego repertuaru, i jest to prawdopodobnie jeden z głównych powodów, dla których niektórzy programiści nie zareagowali pozytywnie. Inna popularna uwaga dotyczy animacji: są po prostu nieobsługiwane. Jedynym sposobem na naśladowanie animacji jest pakowanie pojedynczych klatek do aplikacji zegarka, a następnie symulowanie animacji poprzez wyświetlanie obrazów w sekwencji. Dobrą wiadomością jest to, że poprzez sekwencyjne nazywanie ramek można zautomatyzować animację bezpośrednio z Interface Builder, chociaż to samo można zrobić z kodu za pomocą jednego wywołania metody kontroli obrazu.
Jednak Apple już zapowiedział, że w przyszłym roku zostanie wydana nowa wersja, z obsługą aplikacji natywnych, dla których nie ma jeszcze dalszych szczegółów.
Struktura Apple Watch: szybki przegląd
WatchKit nie używa, nie dziedziczy ani nie specjalizuje się w UIKit. Zaimplementowano nową strukturę, specjalnie zaprojektowaną i zoptymalizowaną pod kątem zegarka, jego małego wyświetlacza i ograniczonego sprzętu. Framework składa się tylko z 15 klas, z których 12 to komponenty interfejsu użytkownika (etykieta, przycisk itp.).
Najważniejszą klasą ujawnioną przez framework jest WKInterfaceController
, który jest odpowiednikiem UIViewController w UIViewController
. Więc to, co w iOS (i OSX) nazywa się kontrolerem widoku , w Apple Watch jest kontrolerem interfejsu .
Bez zbytniego zagłębiania się, najbardziej zauważalnym ulepszeniem w stosunku do UIKit, z punktu widzenia programisty Apple, jest ustanowienie wzorca do przekazywania danych między kontrolerami interfejsów. Szybkie spojrzenie na inicjator:
Swift init(context: AnyObject?) // context from pushing controller or nil
ujawnia, że możliwe jest dostarczenie dowolnego obiektu do instancji kontrolera interfejsu (nazywanego context
we wszystkich interfejsach API), upraszczając i standaryzując przekazywanie danych z jednego kontrolera interfejsu do drugiego. Jedyną wadą jest to, że obiekt nie jest typu ogólnego, ale nieprzezroczystym AnyObject
, który musi zostać obniżony do oczekiwanego typu wewnątrz inicjatora docelowego kontrolera interfejsu. Jest to prawdopodobnie kompromis, jeśli nadal masz (i prawdopodobnie także chcesz) nadal korzystać z Celu C.
Cykl życia kontrolera interfejsu jest uproszczony w porównaniu z odpowiednikiem kontrolera widoku, składającym się tylko z 3 przejść:
-
init
: wywoływany podczas tworzenia instancji obiektu -
willActivate
: wywoływane, gdy zawartość ma zostać wyświetlona -
didDeactivate
: wywoływane, gdy interfejs został właśnie ukryty
Oprócz wyświetlania treści użytkownikowi, kontroler interfejsu odpowiada również za:
- obsługa interakcji użytkownika
- zarządzanie menu kontekstowym
- koordynować działania związane z przekazywaniem
- odpowiedz na powiadomienie
Czy Apple WatchKit jest gotowy?
Z kilkoma ograniczeniami, zestaw zegarka może wydawać się produktem niedojrzałym. I w rzeczywistości tak jest. Nie obsługuje natywnych aplikacji do zegarków, nie wspominając o tym, że na rynku nie ma jeszcze urządzenia do zegarka, więc programiści nadal nie są w stanie testować swoich aplikacji i mają prawdziwe wyczucie i informacje zwrotne na temat działania aplikacji.
Ok, jest symulator, który w rzeczywistości nie jest niezależnym symulatorem, ale dostępny jako zewnętrzny wyświetlacz dla symulatora iOS (poprzez menu Sprzęt -> Wyświetlacze zewnętrzne). Ale symulator nigdy nie zastępuje prawdziwego urządzenia - dobry podczas programowania i debugowania, ale niewystarczający.
WatchKit to tylko podgląd, wersja beta, przystawka, która będzie ewoluować z każdym nowym wydaniem. Twórcy iOS dostali pierwszą wersję, pobawmy się nią i spróbujmy wycisnąć z niej jak najwięcej.