Blog

28 września 2015 Michał Lisok

iOSDevUK 5 – część I

iOSDevUK 5 – część I

Pięć dni, jakie było mi dane spędzić w uroczym miasteczku, Aberystwyth, wszyscy wciągnięci w rozmowę miejscowi opisywali używając tych samych sformułowań, które można byłoby wyrazić krótko, jako „szokująco pogodne”. W istocie, podczas mojego pobytu doświadczyć mogłem praktycznie wyłącznie widoku lazurowego, bezchmurnego nieba, a panujące wtenczas temperatury w zasadzie zmuszały do zrzucenia sztormowych kurtek, w które każdy odwiedzający stolicę środkowej Walii wyposażony być powinien.

Jako, że na miejscu zjawiłem się już w niedzielę, a pierwsze zajęcia zaplanowano na poniedziałkowe popołudnie, nie omieszkałem co nieco pozwiedzać. Efekt owocnych fotograficznych wojaży poniżej.

Aberystwyth - widok na promenadę

Aberystwyth – widok na promenadę

Ruiny średniowiecznego zamku

Ruiny średniowiecznego zamku

Ruiny średniowiecznego zamku

Ruiny średniowiecznego zamku

Budynek "Old College" uniwersytetu Aberystwyth

Budynek “Old College” uniwersytetu Aberystwyth

Walijska ulica

Walijska ulica

Panorama Aberystwyth

Panorama Aberystwyth

Zatoka Cardigan

Zatoka Cardigan

Lazurowe Morze Irlandzkie

Lazurowe Morze Irlandzkie

Moja skromna osoba na tle klifu

Moja skromna osoba na tle klifu

Wszechobecny heraldyczny motyw walijskiego smoka

Wszechobecny heraldyczny motyw walijskiego smoka

Walijska biblioteka narodowa w Aberystwyth

Walijska biblioteka narodowa w Aberystwyth

Na pierwszy dzień, który można byłoby określić jako rozgrzewkę konferencyjną zaplanowano rejestrację uczestników, którym udało się dotrzeć już na ten drugi koniec Wyspy. Wszyscy otrzymali pamiątkowe kubki sygnowane nazwą tego wydarzenia, plecaki przystosowane do noszenia, a jakże, MacBooków, a także masę ulotek z kręgu IT, miłych słów od sponsorów i innych gadżetów. Potem czekały nas zajęcia typu warsztatowego prowadzone przez Mica Pringle (@micpringle), na których przyswajaliśmy bardzo bliską sercu każdego „eSkyowca” umiejętność tworzenia aplikacji umożliwiającej odprawę online oraz podawanie informacji o zaplanowanych lotach, skierowanej na urządzenia typu Apple Watch. Co ciekawe, wykorzystywano przy tym znacznie ulepszone w porównaniu do poprzednika oraz zrewidowane środowisko WatchOS 2, które dostępne było na ten moment tylko w wersji beta.

Główny budynek uniwersytetu

Główny budynek uniwersytetu

Uniwersytecka alejka

Uniwersytecka alejka

Wydział Informatyki

Wydział Informatyki

watchOS 101

watchOS 101

Komunikacja za pomocą wiadomości w watchOS

Komunikacja za pomocą wiadomości w watchOS

Niezbędnik konferencyjny

Niezbędnik konferencyjny

Niemal wszystkie z prezentowanych podczas wykładów fragmentów kodu wykorzystywały język Swift, co potwierdza jego zwięzłość i skuteczność oraz to, że można uznać go już za dojrzały i w miarę ustabilizowany sposób opisu i realizacji wybranych celów programistycznych.

Poniżej umieszczam krótkie streszczenie najważniejszych wątków poruszanych podczas poszczególnych sesji, które mnie, deweloperowi iOS wychowanemu na języku Objective-C , a od prawie roku, czyli od pierwszych dni jego udostępnienia, tworzącemu w nowatorskim Swifcie, wydały się godne odnotowania. Niektóre z prelekcji odbywały się równolegle, co miało na celu prawdopodobnie pomóc uczestnikom podszlifować umiejętność podejmowania wiążących decyzji (o ile nie posiedli zdolności bilokacji 😉 ). Na zakończenie każdej mini relacji starałem się zawrzeć przydatne linki, a także moją subiektywną ocenę wystąpienia.

Wtorek

  1. Agile Apps – Amy Kinney (@amykinney)

P1020724.JPG_wynik

Porównanie tradycyjnego procesu produkcji oprogramowania do metodyk agile

Porównanie tradycyjnego procesu produkcji oprogramowania do metodyk agile

Użycie technik zwinnych wiąże się często z nie zawsze akceptowaną przez klienta koniecznością dostarczania aplikacji w drugim etapie (iteracji)

P1020727.JPG_wynik

Wyróżnić można następujące cele projektu:

  • stworzenie dobrej aplikacji,
  • sprawienie, by klient poczuł się usatysfakcjonowany.

http://spr.com/agile-adoption-adopt-agile

Ocena: 7/10

  1. From App to Infrastructure – Marc Weeber

Produkt powinien zachęcać do pokochania życia, wyjścia na zewnątrz, odkrywania świata, sportu, hobby i podejmowania szeroko pojętych nowych aktywności.

Autor prezentacji zajmował się tworzeniem aplikacji służącej do ostrzegania o zniszczonych znakach drogowych.

Polecane, dobre API: http://inessential.com

Nie należy zapominać, że model danych to tylko reprezentacja realnych obiektów.

Powinno się preferować użycie bibliotek zewnętrznych wyłącznie w wypadku, gdy jest to naprawdę konieczne do prawidłowego funkcjonowania aplikacji.

P1020729.JPG_wynik

P1020730.JPG_wynik

Podstawowe narzędzia freelancera:

  • Rejestrator czasu pracy.
  • Moduł księgujący.
  • Program do fakturowania.

Upowszechniający się nowy model freelancingu – multi indie (projekty kolaboracyjne z udziałem innych freelancerów)

Ocena: 6/10

    1. AutoLayout 101 – James Fros (@frosty)

P1020734.JPG_wynik

Mijają trzy lata od wprowadzenia mechanizmu AutoLayout.

Nie powinno się go dłużej unikać.

Constraint – relacja pomiędzy atrybutami (typu horyzontalnego lub wertykalnego), np.:

Components_relationship

Do wygodnego tworzenia ograniczeń relacyjnych można stosować łączenie komponentów widoku przy aktywnym klawiszu control (ctrl + drag).

Unikać używania nieprzewidywalnej w skutkach funkcji Add missing constraints.

W celu łatwiejszego manipulowania grupami obiektów (np. wielu przycisków) i ujednolicenia sposobu ich rozmieszczania zaleca się ich zaznaczenie, a następnie umieszczenie w obrębie jednego widoku za pomocą opcji Navigate -> Add to view.

Aby uniknąć ręcznego dopasowania rozmiarów przystających kontrolek można zastosować przeciągnięcie z wciśniętym klawiszem control i na referencyjny obiekt i wybranie właściwości equal width.

Mieć na uwadze tzw. wewnętrzny rozmiar zawartości (intrinsic content size).

Intrinsic_content_size

W swoich wyborach powinniśmy zawsze kierować się podejściem promowanym przez Apple, ponieważ jest to jedyna słuszna droga. 😉

http://ios.topcoder.com

http://github.com/frosty

Ocena: 10/10

  1. Turning Xcode into Knowncode – Helen McManus (@InvisiblePixels)

    1. Debugging AutoLayout – Marting Pilkington (@pilky)

Używanie

view.setContentHuggingPriority(priority: Int, forAxis: UILayoutConstraintAxis)

w celu sprecyzowania dystrybucji komponentów w obrębie widoku, gdzie view to np. A:

Components_distributionZalecane jest stosowanie ustawienia

view.translatesAutoresizingMaskIntoConstraints = false

Analiza logów z konsoli pochodzących z interpretacji interfejsu graficznego.

iOS 9 wprowadza wyświetlanie nazw (identyfikatorów) obiektów w logach konsolowych.

Używać UIDebugger podczas uruchomienia aplikacji w Xcode.

Profilowanie za pomocą Instruments: Instruments -> Profile AutoLayout (narzędzie Cocoa AutoLayout).

Wyróżnić możemy 4 typy błędów definicji interfejsu graficznego:

  • niemożność spełnienia nałożonych warunków-ograniczeń (unsatisfiability; np. automatyczna i określona szerokość egzystujące jednocześnie),
  • wieloznaczność (ambiguity; np. brak opisu właściwości podwidoku),
  • niedookreślenie (under contraint; np. brak szerokości podwidoku i prawego marginesu przy dokładnie wyznaczonym lewym marginesie),
  • nadokreślenie (over contraint; np. wykluczanie się sumy szerokości marginesów i podwidoku).
Debuggowanie z poziomu konsoli

Debuggowanie z poziomu konsoli

Wykrywanie naruszeń spójności interfejsu graficznego

Wykrywanie naruszeń spójności interfejsu graficznego

http://pilky.me
http://mcubedsw.com

Ocena: 9/10

  1. Scrum for micro companies – Steve Westgarth


 

Wygłodniała ekipa walcząca o lunch

Wygłodniała ekipa walcząca o lunch

P1020744.JPG_wynik


 

    1. Client – server apps that work offline – Simon Booth

P1020745.JPG_wynik

P1020746.JPG_wynik

P1020747.JPG_wynik

Tworząc tego typu aplikacje najczęściej posługujemy się frameworkami RestKit oraz CoreData.

Stosuje się cykliczne sprawdzanie, czy można już wysłać zaległe zmiany.

Zademonstrowane, przykładowe rozwiązanie zbudowane w oparciu o serwer Ruby on Rails i aplikację iOS: http://github.com/percysnoodle/going-underground

Ocena: 7/10

  1. Custom Keyboards – Honza Dvorsky (@czechboy0)

    1. Syncing with Web Apps – Oliver Mason (@ojmason)

P1020748.JPG_wynikProblemy:

  • wysyłane wiadomości mogą zostać zagubione lub opóźnione,
  • odpowiedzi mogą zostać zagubione lub opóźnione,
  • otrzymywanie komunikatów w złej kolejności,
  • wielokrotny odbiór tych samych wiadomości.

P1020749.JPG_wynik

Rozwiązanie:

3 stany obiektu listy:

  • sprawdzony (checked),
  • niesprawdzony (uncheckecd),
  • usunięty (deleted).

Ocena: 3/10

  1. Rapid application development with third party resources – Zoltan Varadi (@iamZoltanVaradi)

    1. While your app is sleeping – Gwendolyn Weston (@purpleyay)

P1020750.JPG_wynik

Próbując wykonywać procesy pobierania danych w tle, możemy stosować kilka niewygodnych podejść:

  • zmuszać użytkownika do wyłączenia automatycznego blokowania telefonu,
  • monitorować, czy menadżer systemu nie wymusił zakończenia aplikacji wykonującej zadanie trwające powyżej 10 minut,
  • zmuszać do funkcjonowania programu na pierwszym planie (w trybie pełnoekranowym).

Zalecane alternatywy:

  • wykorzystanie jednego z poniższych
    • NSURLSessionDownloadTask,
    • NSURLSessionUploadTask,
    • NSURLSessionDataTask (przy operacjach krótkotrwałych);
  • oraz:
    • NSURLSessionConfiguration (określanie polityk);
  • a także:
    • zastosowanie persystencji danych.

P1020751.JPG_wynik

P1020752.JPG_wynik

P1020753.JPG_wynik

http://www.plangrid.com

Ocena: 7/10

  1. Core data: multi threading clarity – Marcus Zarra (@mzarra)

    1. The State of UI Frameworks – Amy Worrall (@amyruthworrall)

P1020754.JPG_wynik

Historia sposobów tworzenia UI w systemie iOS rozpoczyna się od tworzenia widoków w funkcji loadView(), przez zwykły Interface Builder, a kończy na AutoLayout’cie.

P1020755.JPG_wynik

Czy istnieje lepsze rozwiązanie?

  • deklaratywne UI (określamy, co chcemy mieć, zamiast jak to ustawić),
  • enkapsulowany stan,
  • stos widoków (stack view),
  • wielowątkowość (dla zwiększenia wydajności).

Mobilna aplikacja Facebooka używa następujących frameworków:

  • React Native

Oparty na JavaScript i React.

W pełni natywne UIViews.

Brak etapu renderowania kodu HTML ze strony przeglądarki.

Aby zainicjalizować projekt (MyProject) wykorzystujący React Native, należy z poziomu konsoli wykonać komendę

react-native init MyProject
Przykład użycia React Native

Przykład użycia React Native

Ponowne uruchomienie w symulatorze aplikacji ze zmienionym kodem wykonywane jest bez konieczności kompilacji.

Stanami widoku zarządza się z poziomu kodu przez wywołanie funkcji setState() , np.

this.setState({isLoading: true});

Interfejs graficzny wykorzystuje koncepcję flexboxu, czyli dynamicznie skalowanych do różnych rozmiarów wyświetlaczy komponentów.

  • ComponentKit

Stworzony w Objective-C++, a zainspirowany przez React, jednak go nie wykorzystujący.

Lepsze rozwiązanie od React Native.

Używa natywnych widoków systemu iOS.

Prosty w użyciu.

Oparty na składowych typu CKComponent.

Przykład użycia ComponentKit

Przykład użycia ComponentKit

Używa selektorów jako akcji, co stwarza mniejsze prawdopodobieństwo przechowywania cyklicznych referencji (retain cycles).

Stanowy.

Ocena: 9/10

  1. Android for iOS Developers – Darryl Bayliss (@DazIndustries)

  1. Modelling your data – Daniel Tull (@danielctull)

P1020758.JPG_wynik

Prezentacja na przykładzie integracji Github i Bitbucket w aplikacji mobilnej.

Optymalne rozwiązanie – serwer i UI pracujące w oparciu o ten sam model danych.

Pełny model serwerowy (full server model):

P1020759.JPG_wynik

  • używany do tworzenia frameworku,
  • w przypadku przenoszenia strony internetowej na urządzenie mobilne.

Model specjalizowany pod kątem UI (UI-specific model):

P1020760.JPG_wynik

  • używany do aplikacji posiadających dobrą specyfikację.

Model generyczny (generic model):

P1020763.JPG_wynik

  • przydatny, gdy mamy do czynienia z interfejsem graficznym ogólnego przeznaczenia,
  • wiele serwisów dla jednego typu danych.
Porównanie różnych typów modeli

Porównanie różnych typów modeli

http://danieltull.co.uk

Ocena: 6/10


 

Wieczorem czekała na nas wystawna kolacja zorganizowana w hotelu znajdującym się tuż przy reprezentacyjnej, bulwarowej ulicy Aberystwyth (http://www.gwestymarinehotel.co.uk/). Nie zabrakło wykwintnych dań rybnych, sałatek i regionalnych przysmaków z owczym serem, a i drób też przyplątał się w te nadmorskie okolice. 😉 Każdy więc mógł znaleźć coś dla siebie. Wszystko to mogło się odbyć dzięki hojności sponsorów konferencji, takich jak topcoder.com. Podczas posiedzenia miałem okazję poznać deweloperów, z których jeden pochodził z naszego pięknego kraju, zajmujących się tworzeniem brytyjskiej aplikacji o podobnej tematyce do naszej, skupiającej się jednak głównie na dokonywaniu rezerwacji hotelowych i organizowaniu całych wakacji.

Marine Hotel

Marine Hotel

Sala bankietowa przed...

Sala bankietowa przed…

... i w trakcie

… i w trakcie

Przystań zatopiona w ciemności

Przystań zatopiona w ciemności

 

Ponieważ jednorazowa porcja zbyt wielu wrażeń nikomu nie wyszłaby na zdrowie, kolejna część mojej relacji z tegorocznej konferencji ukaże się już wkrótce.

Bądźcie więc czujni!


 

Część druga relacji

Zobacz na blogu

09.09.2022
Marcin Jahn
It’s Not Just HTTP It’s Not Just HTTP

In today’s world of cloud-based solutions, distributed systems, and microservices-based architectures, network communication is a...

23.08.2022
Adam Mrowiec
Konferencja IPC 2022 Berlin Konferencja IPC 2022 Berlin

Pandemia wreszcie się kończy, dlatego w tym roku postanowiliśmy wrócić do naszych wyjazdów na konferencje....