Blog

16 października 2015 Michał Lisok

iOSDevUK 5 – część II

iOSDevUK 5 – część II

Po zakończonym późnym wieczorem bankiecie i krótkiej nocy przyszło nam zmierzyć się z kolejnymi punktami programu tegorocznej edycji konferencji iOSDevUK.

Środa

  1. Core Bluetooth – Al Little (pracownik Qualcomm, były deweloper Androida)

P1020773.JPG_wynik

Bluetooth LE i Bluetooth Smart cechują się niską konsumpcją energetyczną.

Aby zaimplementować funkcjonalności biblioteki Core Bluetooth, należy obsłużyć protokół CBCentralManagerDelegate.

P1020774.JPG_wynik

P1020775.JPG_wynik

Potencjał do rozwoju tej technologii stanowią tzw. inteligentne miast (smart cities) oraz transmitery typu beacon.

http://www.qualcomm.com/bluetooth

Ocena: 2/10

    1. iOS real time content modifications using websockets – Benny Weingarten – Gabbay (@gardenofwine)

P1020776.JPG_wynik

Odpowiednie, gdy zmiany akcje polegają na drobnych modyfikacjach treści.

P1020777.JPG_wynik

P1020778.JPG_wynik

Do demonstracji rozwiązania podczas sesji wykorzystywany był serwis http://betterconent.herokuapp.com. Za jego pośrednictwem konstruowano na żywo zawartość aplikacji.

P1020779.JPG_wynik

Skonstruowany framework dostępny jest w repozytorium CocoaPods pod nazwą bettercontent.

Przy jego tworzeniu autor posługiwał się prostym programem z dziedziny WebSockets obsługiwanym przez NodeJShttps://github.com/heroku-examples/node-ws-test

Rozważane i przetestowane w procesie implementacji debuggery:

  • PonyDebugger – dobry, ale skomplikowany,
  • Reveal – jeden z najlepszych, jednak płatny,
  • Node Inspector – płatny.

Alternatywa dla bettercontentApptimize.

http://codemonkeyblog.com

Ocena: 9/10

  1. Learn, Compete, Win – Charlie Cowan and Chloe Hole (@IamCharlieCowan)

    1. High Performance Swift – Joseph Lord (@jl_hfl)

P1020781.JPG_wynik

P1020782.JPG_wynik

Przy kompilacji typu release zalecane jest użycie flagi –Owholemodule, przeprowadzającej szybką, obejmującej cały moduł, optymalizację.

P1020784.JPG_wynik

W przeprowadzonym porównaniu optymalizacja pomogła rozwiązać 460 równań testowego algorytmu w ciągu jednej sekundy, czy w tym samym czasie, w którym konfiguracja bez optymalizacji zwracała jedynie 47 wyników.

P1020785.JPG_wynik

P1020783.JPG_wynik

W strukturach, by uniknąć kopiowania obiektów, można posłużyć się funkcją isUniquelyReferencedNonObjc(), sprawdzającą ilość silnych referencji do obiektu, np.:

set {
    if !isUniquelyReferencedNonObjc(&bar) {
        bar = Bar()
    }
}

Deklaracje propercji typu let przyspieszają działanie aplikacji.

Final w deklaracji klas również wpływa na wzrost wydajności.

Dyrektywa @objc włącza mechanizmy Objective-C danych obiektów, co wiąże się ze spadkiem efektywności, ponieważ kompilowany jest również kod odpowiedzialny za tzw. method swizzling, dynamic name dispatch i inne właściwości przypisane do języka ObjC.

Nie wyłączać opcji Safety checks.

P1020786.JPG_wynik

Lista czynności do sprawdzenia przed udostępnieniem wersji produkcyjnej:

  1. Ustawienia sekcji schematu powiązanej z budową projektu (Build settings).
  2. Użycie instrumentu profilującego (Profile).
  3. Użycie instrumentu monitorującego parametry podczas wykonania aplikacji (Measure).
  4. Refaktoryzacja struktur i wdrożenie ich w miejsce nadających się ku temu klas.
  5. Zadeklarowanie klas jako finalne.

http://blog.human-friendly.com

Ocena: 10/10

  1. Games development for App Developers – Chris Wilson (@abitofcode)

    1. Getting Stacked: I <3 StackView and you should too! – Sam Davies (@iwantmyrealname)

P1020787.JPG_wynik

Jak zawsze, ekipa związana z witryną Ray Wenderlich, stanęła na wysokości zadania. Oryginalne w formie panele, przeprowadzane na przykład na bosaka (czegoż się nie robi dla wygody?), przyciągały rzesze spragnionych wiedzy programistów.

P1020788.JPG_wynik

Stosy widoków posługują definiowane są przez następujące właściwości:

  • Osie (axis) – horizontal lub vertical.
  • Odstępy (spacing).
  • Wyrównanie (alignment):
    • vertical: leading, center, trailing;
    • horizontal: top, first baseline, last baseline, bottom;
    • verical/horizontal: fill.
  • Propagacja (distribution) – fill, fill proportionally, equal spacing, equal centering.

Niezwykle istotne jest ponadto odpowiednie ustawienie priorytetów dziedziny Horizontal Hugging lub Content Compression Resistant.

P1020789.JPG_wynik

P1020790.JPG_wynik

Koncepcja stosów opiera się na zagnieżdżaniu elementów.

StackViews nie są kompilowane, ale renderowane na żywo.

Po obrocie ekranu widoki tego typu są dynamicznie skalowane i rozmieszczane.

Animacje stają się proste dzięki StackView.

Projekt wykorzystywany podczas sesji dostępny jest pod adresem: http://github.com/sammyd/iOSDevUK-StackViews

http://iwantmyreal.name

Ocena: 9/10

  1. Usability for Techies – Maxim Cramer (@mennenia)

  1. Fast talks: A series of lightning talks by brave volunteers

    1. SpriteKit: Francesco Frison (@cescofry)

P1020793.JPG_wynik

Prowadzący posłużył się oryginalną formą, zdając się na animację wykonaną właśnie przy użyciu SpriteKit, która grafiką i tłem dźwiękowym przypominała grę w stylu lat 80-tych.

SpriteKit to:

  • silnik graficzny symulujący fizykę obiektów,
  • syntezator mowy,
  • biblioteka wyposażona we własny mechanizm tworzący animacje.

http://github.com/cescofry/SpriteKitAndFriends

Ocena: 8/10

  1. Functional.m: Oliver Mason (@ojmason)

P1020794.JPG_wynik

Operacje na obiektach za pomocą przekazywania bloków funkcyjnych.

4 główne, wchodzące w skład biblioteki, obsługiwane rodzaje działań przetwarzających kolekcje obiektów: each, map, reduce, filter.

http://github.com/leuchtetgruen/Functional.m

Ocena: 7/10

  1. Clean code dependency injection: Mike Seghers

P1020796.JPG_wynik

Fabryki aplikacji.

Reliant to fremework umożliwiający wstrzykiwanie zależności (DI), dedykowany Objective-C.

Działa zarówno w aplikacjach MacOS, jak i iOS.

https://github.com/appfoundry/Reliant

Ocena: 5/10

  1. Parse.com: Oliver Foggin (@okiverfoggin)

P1020797.JPG_wynik

Wieloplatformowy (iOS, Android, Windows Phone).

Baza danych na serwerze tworzona na wzór modelu zaimplementowanego po stronie klienta (PFObject – każdy obiekt bazodanowy). Należy pamiętać, iż nie jest to typowa baza danych, ponieważ nie występuje w niej normalizacja obiektów.

P1020798.JPG_wynik

Dystrybucja powiadomień typu push (push notifications).

Łatwy system logowania do najpopularniejszych serwisów społecznościowych.

Kod w chmurze (cloud code) za pomocą JavaScript.

Moduł analityczny (żądania do API, notyfikacje, liczba użytkowników, liczbą otwartych aplikacji itp.).

http://parse.com

http://www.oliverfoggin.com

Ocena: 5/10

  1. What happens when I touch this?: Richard Turton (@richturton)

P1020799.JPG_wynik

Zaprezentowano m.in. skrypt dodający breakpoint do każdej linijki kodu.

P1020800.JPG_wynik

Porada: ustawić Debugger Output: Displays debugger output only w LLDB.

P1020801.JPG_wynik

http://commandshift.co.uk/blog/2015/09/10/what-happens-when-i-touch-this

Ocena: 8/10

  1. Skyscanner – SuperModel: Matt Holgate (@mjholgate)

P1020802.JPG_wynik

SuperModel to biblioteka, która wkrótce stanie się zasobem otwartym.

Deklaratywne mapowanie pomiędzy formatem JSON a modelami obiektów bazy danych wykorzystywane przy tworzeniu definicji bazy.

P1020803.JPG_wynik

Prosta implementacja klienckiego API typu REST, odpowiedzialnego m.in. za konwersję obiektu modelu i interpretację błędów.

Łatwe tworzenie widoków formularzy z walidacją pól w ich kontrolerów.

https://github.com/Skyscanner

https://github.com/mjholgate

Ocena: 8/10

Jak widać, w programie konferencji znalazło się też omówienie rozwiązania wykreowanego przez naszą konkurencję. Być może, dzięki naszym niepomiernym pokładom inwencji, w przyszłym roku podobny zaszczyt spotka firmę eSky…

  1. Apps and Privacy: John Gilbey (@John_Gilbey)

P1020804.JPG_wynik

Przedstawienie założeń koncepcji Privacy by Design (PbD).

P1020805.JPG_wynik

https://privacybydesign.ca

Ocena: 1/10

  1. UX

P1020806.JPG_wynik

Dużą część wykładu zajął opis zjawiska, w którym sposób oświetlenie i umiejscowienie piosenkarzy występujących w programie XFactor wpływało na wyniki głosowań. 😉

Wnioskiem, zaproponowanym przez prelegentkę, było stwierdzenie, by nie przerażać użytkowników komunikatami o błędach. Mają one być skonstruowane i wyświetlane w taki sposób, żeby stwarzały wrażenie jedynie informacji o operacjach proaktywnych.

P1020807.JPG_wynik

Ocena: 4/10

  1. The art of AppCoding – Change the world in 5 minutes (hopefully): Chris Ross (@darkrock)

P1020808.JPG_wynik

Humorystyczna prezentacja wskazująca proste sposoby na poprawę jakości kodu za pomocą IDE AppCode.

W celu refaktoryzacji i naprawy błędów wystarczy zaznaczyć wybrane linie i wybrać polecenie wskazanej automatycznej refaktoryzacji. W ten sposób możemy np.:

  • wyekstrahować zmienną, stałą, protokół, podklasę itp.,
  • zmienić nazwy,
  • przesunąć miejsce deklaracji pól klasy,
  • zaimplementować brakujące metody delegatów,
  • zastosować nowszą funkcję w miejsce przestarzałej,
  • wytworzyć więcej kodu, gdy klasa nie prezentuje się zbyt poważnie, 😉
  • i wiele innych.

Na zakończenie odpowiedź na tytułowe pytanie – jak zmienić świat w 5 minut?
– Wystarczy przesuwać iPhona w kierunku odwrotnym do wskazanego podczas robienia panoramy. 😉

Ocena: 10/10

  1. You: the Swift Architect: Natasha Murashev (@natashatherobot)

P1020809.JPG_wynik

Pierwsza część wywodu skupiała się na uczeniu się motywacji.

Warto podejmować trudne i zaawansowane tematy, gdyż rozwijają one nas podwójnie (patrz: nowy język – Swift).

Celebrować małe zwycięstwa.

P1020811.JPG_wynik

Resztę wykładu stanowiło omówienie samego języka Swift.

Rodzaje danych używane w Swifcie: value types, structs, enums, tuples.

Promowany przez firmę Apple język programowania przenosi dyskusję na temat wyższości protokołów od rozszerzania klas bazowych na zupełnie inny poziom.

Analizując bibliotekę Swifta, dochodzimy do wniosku, że niemal wszystko, co wchodzi w jej skład, jest zoptymalizowanymi w porównaniu do klas strukturami i enumeracjami.

Swift pozwala w wykrywaniu dawnych błędów, ukrytych do tej pory w aplikacjach.

P1020810.JPG_wynik

Jest lepiej przystosowany do pisania testów niż Objective-C.

Aby móc przetestować prywatne klasy, należy dodać je do targetu testów.

Alternatywą jest poprzedzenie klas dyrektywą @testable.

Użyteczne framerowki do tworzenia testów:

  • Quick,
  • Nimble.

Autorka rozwiała wątpliwości słuchaczy, odpowiadając bez zastanowienia twierdząco na pytanie dotyczące możliwości stosowania Swifta w aplikacjach produkcyjnych. Dowodem prawdziwości jej twierdzenia może tu być postawienie na ten język w dystrybucyjnych wersjach programów iOS jej firmy. Potwierdza to tym samym słuszność naszego wyboru przy tworzeniu mobilnej aplikacji – eSky – do rezerwacji biletów lotniczych, bukowania pokoi hotelowych oraz wynajmu samochodów.

http://natashatherobot.com

http://swiftnews.curated.co

Ocena: 7/10

 

Po prezentacji rozgorzała burzliwa dyskusja w czasie której mnożyły się spekulacje nt. nowości mających zostać ogłoszonymi tegoż wieczora. Trafnie przewidywano pojawienia się rysika Apple Pencil (promowanego już w czasach Steva Jobsa jako tzw. Stylus) i iPada Pro. Wielkim zawodem był z kolei brak optycznej stabilizacji w mechanizmie aparatu najnowszego iPhona 6S.


 

Uwieńczeniem tego owocnego dnia był przejazd zabytkową wąskotorową kolejką parową (http://www.rheidolrailway.co.uk), utrzymaną w starym dobry stylu i obsługiwaną przez nieodbiegającą od klimatu ekipę epoki rewolucji przemysłowej, zapoczątkowanej właśnie na tych ziemiach. Trasa składu prowadziła do Diabelskiego Mostu, położonego wysoko w górach, a słynącego z żelaznej przeprawy nad rzeką pełną spektakularnych kaskad. Nie było łatwo tam dotrzeć, tym bardziej, że na co drugiej stacyjce musiano uzupełniać zasoby wody w z zbiornikach, a czasami także wydzielającego niezwykle dużo dymu o zapachu przypominającym proch strzelniczy paliwa.

Przygotowania do odjazdu

Przygotowania do odjazdu

P1020816.JPG_wynik

Stacja docelowa

Stacja docelowa

Stylowa karczma przy Diabelskim Moście

Stylowa karczma przy Diabelskim Moście

P1020819.JPG_wynik

"Diabelskie" kaskady

“Diabelskie” kaskady

Czwartek

Jako, że był to mój ostatni dzień w Aberystwyth, postanowiłem uwiecznić kilka szczegółów, przywodzących na myśl miłe wspomnienia.

Hotelowa stołówka

Hotelowa stołówka

Standardowe angielskie śniadanie w stylu "Trainspotting" ;)

Standardowe angielskie śniadanie w stylu “Trainspotting” 😉

Aula Wydziału Sztuki, gdzie odbywały się prelekcje

Aula Wydziału Sztuki, gdzie odbywały się prelekcje


 

  1. Native Mobile Components: Kristina Thai (@kristinathai)

P1020830.JPG_wynik

Studium przypadku: stworzyć komponent, który można by wykorzystywać w wielu aplikacjach, czyli wszechstronny system OCR do dekodowania angielskich zeznań podatkowych.

Etapy tworzenia reużywalnego komponentu:

  • Wybór odpowiedniej funkcjonalności – generyczna i mogąca zostać użyta do wielu celów, skomplikowana i jednoznaczna w użytkowaniu.
  • Podjęcie decyzji nt. metody dystrybucji – internal open source (Cocoapods).
  • Stworzenie statycznej lub dynamicznej (mogącej ulegać zmianom; linkowanej w czasie kompilacji) biblioteki.
  • Skonstruowanie prostego, ale podatnego na rozszerzanie API.
  • ???
  • Czerpanie korzyści ze swojego dzieła.

P1020831.JPG_wynik

http://www.kristinathai.com

Ocena: 7/10

  1. Morphing Transitions: Shawn Welch (@shawnwelch)

P1020832.JPG_wynik

Wrażenia użytkowników nie kończą się na treści wyświetlanej na urządzeniach.

UIViewControllerAnimatedTransitioning – wprowadzony przez system iOS7 protokół do zaimplementowania przez kontroler wymagający animacji.

Metody wymagane do zaimplementowania:

  • animateTrasition:
  • transitionDuration:

P1020833.JPG_wynik

Przykład specjalizowanego protokołu do animacji: UIPercentDrivenInteractiveTransition – sterowany procentowym postępem tranzycji pomiędzy jednym widokiem a kolejnym.

Prezenter zademonstrował nietypowy efekt przenikania się kolorów tła na przykładzie UIStckView.

Morph Transition Protocol – nowy protokół „out of the box”, stworzony przez autora prelekcji, który stanie się dostępny jeszcze tej jesieni.

Pozostałą część sesji zajął interaktywny pokaz obrazujący, jak skłonić UINavigationController do przesuwania wyłącznie obrazka lub powodującym jego przenikanie w momencie wykonywania akcji push.

http://squaretlp.com

Ocena: 9/10

  1. Mobile is a Systems Problem: Cate Huston (@catehstn)

P1020836.JPG_wynik

Uwagę uczestników przykuł krótki materiał wprowadzający, który stanowił zapis filmowy wyzwania, którego podjął się jeden ze śmiałków i z sukcesem zapłacił swoje comiesięczne rachunki za pomocą aplikacji mobilnej ścigając się jednocześnie z rozjuszonymi bykami.

Resztę wykładu wypełniła seria rozbudowanych, budujących cytatów, zachęcających do przełamywania granic i odkrywania świata oraz życia, a także pomagania w tym innym.

P1020837.JPG_wynik

Do najważniejszych z punktu dewelopera wniosków płynących z tego posiedzenia należą:

  • „apki” muszą być przystosowane do częstych rozproszeń uwagi użytkowników, minimalizowania ich i opuszczania,
  • złożone programy wymagają kompleksowego testowania.

http://accidentallyincode.com

Ocena: 3/10

  1. iOS at Facebook: Simon Whitaker (@s1mn)

P1020838.JPG_wynik

Dlaczego aplikacja Facebooka jest tak ogromna (ponad 114 MB)?

P1020839.JPG_wynik

Liczba komitów do repozytorium jest tu większa niż w projekcie jądra Linuxa.

Kultywowana przez giganta kultura pracy nosi nazwę Hack.

Używane narzędzia i frameworki:

  • Wszystkie operacja na widokach wykonywane są płynnie na pobocznych wątkach (w tle). W tym celu wykorzystywany jest AsyncDisplayKit.
  • ComponentKit jest projektem open-source, posługującym się podejściem funkcjonalnym, deklaratywnym do tworzenia UI.
  • Ponieważ Xcode nie radzi sobie ze skalą aplikacji, programiści tej firmy stworzyli swój własny IDE o nazwie Nuclide, który opiera się na edytorze tekstu Atom.
  • Git, podobnie, nie obejmuje rozmiarów apki, dlatego używany jest mercurial, który można wzbogacić ponadto o więcej przydatnych rozszerzeń.
  • Infer – narzędzie wykrywające błędy w aplikacjach androidowych i iosowych (np. wycieki pamięci w kodzie Objective-C i C. Uruchamiany jako część testów integracyjnych.
  • Pop – podatny na rozszerzanie silnik animacji dla systemu iOS i MacOS.
  • Chisel – zbiór zewnętrznych komend LLDB, usprawniających funkcje debuggera.

Uwaga na zakończenie: uważać przy nadawaniu uprawnień.

http://code.facebook.com/ios

http://facebook.com/simonwhitaker

Ocena: 10/10

    1. Power Swift: Natasha Murashev (@NatashaTheRobot)

P1020843.JPG_wynik

Były to zamykające oficjalną część konferencji laboratoria, podczas których wykonywaliśmy kurs sporządzony za pomocą swiftowych Playgroundów (http://bit.ly/powerswift) w najnowszej wersji środowiska Xcode.

P1020844.JPG_wynik

Używać value types zamiast typów referencyjnych.

W schemacie Test mamy możliwość ustawienia pokrycia kodu.

Framework Nimble dostarcza funkcję expect (aka assert).

Do testów BDD można użyć biblioteki Quick.

Toucan – polecany framework do przetwarzania zdjęć i plików graficznych.

Kingfisher – zajmuje się pobieraniem z sieci i cache’owaniem zdjęć.

Ocena: 8/10

    1. Core Data tutorial: Marcus Zarra (@mzarra)


 

Na nielicznych chętnych, którzy postanowili postać odrobinę dłużej w Aberystwyth czekał pojedynek programistyczny w Swifcie. O standardową, „odżywczą”, informatyczną pizzę i napoje dopingujące nie musieli się oni martwić. Ja, podobnie jak większość młodych ludzi, którzy dominowali w gronie odbiorców tego wydarzenia, zmierzałem już jednak powoli na dworzec kolejowy, by nie przegapić odjazdu zarezerwowanego pociągu do międzynarodowego portu lotniczego w Birmingham. Oprócz wątpliwej przyjemności całonocnego oczekiwania na lotniskowej ławce na poranny kurs do miejsca przesiadki, czyli potężnego węzła lotniczego we Frankfurcie nad Menem, podróż powrotna minęła całkiem sprawnie i w godzinach popołudniowych witały mnie już swojskie widoki pyrzowickiego airportu.

P1020845.JPG_wynik

Zbliżając się do zamknięcia mojego wywodu, chciałbym zaznaczyć, nie do końca oczywisty z punktu widzenia doświadczonych twórców rozwiązań dla systemu iOS, fakt wynikły, z moich prywatnych obserwacji i rozmów z „ajoesowcami. Zauważyłem mianowicie, że powszechnie i z powodzeniem stosują oni podejście oparte na Storyboardach, również w złożonych aplikacjach, dzieląc wówczas system na segmenty, przypisane poszczególnym scenariuszom. Promują w ten sposób nie do końca przekonującą ideę budowania stosu widoków aplikacji z poziomu wspólnego pliku edytora graficznego.

Na ten moment część materiałów z zaprezentowanych tematów została umieszczona pod adresem: https://chris-price-b2rp.squarespace.com/slides-1. Jak deklaruje autor strony, będzie ona na bieżąco uzupełniana.

Na koniec mojego skrótowej relacji, chciałbym serdecznie podziękować wszystkim, dzięki którym dane mi było uczestniczyć w tej rzeczowej i rozbudowanej konferencji. Z pewnością przyczyni się ona do poprawy funkcjonowania naszej aplikacji oraz pozwoli otworzyć przed nami nowe horyzonty rozwiązań, które wzbogacą, rozbudują merytorycznie i poszerzą zasób wrażeń płynących z użytkowania mobilnej aplikacji eSky. Już dziś z nadzieją spoglądam w przyszłość, licząc na to, że za rok dane mi będzie osobiście sprawdzić, czy piękna pogoda w miasteczku leżącym nad rzeką Ystwyth rzeczywiście jest czymś wyjątkowym.

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....