Blog
iOSDevUK 5 – część I
Tagi: agile, aplikacje mobilne, Apple, Core Data, Interface, iOS, iPad, iPhone, konferencje, mobile, programowanie, relacje, watchOS, Xcode
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.
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.
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
-
Agile Apps – Amy Kinney (@amykinney)
Użycie technik zwinnych wiąże się często z nie zawsze akceptowaną przez klienta koniecznością dostarczania aplikacji w drugim etapie (iteracji)
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
-
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.
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
-
-
AutoLayout 101 – James Fros (@frosty)
-
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.:
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).
W swoich wyborach powinniśmy zawsze kierować się podejściem promowanym przez Apple, ponieważ jest to jedyna słuszna droga. 😉
Ocena: 10/10
-
Turning Xcode into Knowncode – Helen McManus (@InvisiblePixels)
-
-
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:
Zalecane 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).
http://pilky.me
http://mcubedsw.com
Ocena: 9/10
-
Scrum for micro companies – Steve Westgarth
-
-
Client – server apps that work offline – Simon Booth
-
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
-
Custom Keyboards – Honza Dvorsky (@czechboy0)
-
-
Syncing with Web Apps – Oliver Mason (@ojmason)
-
- 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.
Rozwiązanie:
- wysyłanie tylko elementów kolekcji (listy), zamiast całych zbiorów,
- użycie wolnych od konfliktów replikowalnych typów danych (conflict-free replicated data type; CRDT).
3 stany obiektu listy:
- sprawdzony (checked),
- niesprawdzony (uncheckecd),
- usunięty (deleted).
Ocena: 3/10
-
Rapid application development with third party resources – Zoltan Varadi (@iamZoltanVaradi)
-
-
While your app is sleeping – Gwendolyn Weston (@purpleyay)
-
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.
Ocena: 7/10
-
Core data: multi threading clarity – Marcus Zarra (@mzarra)
-
-
The State of UI Frameworks – Amy Worrall (@amyruthworrall)
-
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.
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
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.
Używa selektorów jako akcji, co stwarza mniejsze prawdopodobieństwo przechowywania cyklicznych referencji (retain cycles).
Stanowy.
Ocena: 9/10
-
Android for iOS Developers – Darryl Bayliss (@DazIndustries)
-
Modelling your data – Daniel Tull (@danielctull)
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):
- używany do tworzenia frameworku,
- w przypadku przenoszenia strony internetowej na urządzenie mobilne.
Model specjalizowany pod kątem UI (UI-specific model):
- używany do aplikacji posiadających dobrą specyfikację.
Model generyczny (generic model):
- przydatny, gdy mamy do czynienia z interfejsem graficznym ogólnego przeznaczenia,
- wiele serwisów dla jednego typu danych.
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.
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!