More

    11 bibliotek, które powinien znać każdy iOS developer

    Przez dwanaście lat, App Store mocno zadomowił się na naszych urządzeniach mobilnych, oferując coraz to większą różnorodność aplikacji. W tym roku ich liczba dobiła do prawie 1.8 mln. Wszystkie z nich zostały stworzone przez iOS developerów, którzy budowali je przez wiele godzin, nie tylko z wykorzystaniem swojej wiedzy, ale też z pomocą ze strony innych programistów. 

    A jak taka pomoc wygląda w świecie informatyki? 

    Oprócz jakże znanego Stack Overflow, istnieje ogromna baza gotowych rozwiązań w postaci bibliotek, które ułatwiają pisanie kodu, lub są komponentami gotowymi do użycia. W granicach rozsądku, sam z nich korzystam i poniżej przedstawiam listę 11 bibliotek, które wyjątkowo przypadły mi do gustu.

    Alamofire

    Mało która aplikacja nie wykorzystuje siły Internetu i zdecydowana większość komunikuje się z backendem czy pobiera grafiki i multimedia z sieci. Apple udostępnia deweloperom narzędzie w postaci URLSession, ale i tak wiele osób na jego podstawie tworzy własne rozwiązania, bardziej dostosowane do ich potrzeb. 

    Jednakże równie liczna grupa woli korzystać z Alamofire, które udostępnia własny poziom abstrakcji, bardziej dopasowany do potrzeb developerów, konfigurujący większość za nas. Jest on młodszym bratem równie popularnego AFNetworking, tyle, że jest w pełni napisany w Swifcie. Ponadto, wykorzystują go też inne biblioteki, takie jak Moya, dająca w pełni rozbudowaną warstwę sieciową.

    SnapKit

    Pomimo udostępnienia w zeszłym roku przez Apple nowego sposobu budowania interfejsów o nazwie SwiftUI, wciąż wiele projektów (również świeżo zaczętych) opiera się na znanym od lat Interface Builder. Wykorzystuje on mechanizm Autolayout i pomimo, że udostępnia łatwy w użyciu mechanizm drag & drop, to wiele osób preferuje budowanie interfejsu z kodu programu. I w tym miejscu następuje pewien zgrzyt, ponieważ Autolayout z kodu nie jest aż tak przyjemny do budowania.

    Ale nie ma się co martwić, ponieważ jest SnapKit – wygodny DSL do budowania constraint’ów z kodu. Nakłada on pewien cukier syntaktyczny na istniejące API, co sprawia, że napisany kod jest znacznie czytelniejszy i łatwiejszy do zrozumienia.

    Domyślnie
    SnapKit

    NSLayoutConstraint.activate([view.centerXAnchor.constraint(equalTo: container.centerXAnchor),
    view.centerYAnchor.constraint(equalTo: container.centerYAnchor),
    view.heightAnchor.constraint(equalTo: 10.0)])

    view.snp.makeConstraints { make in make.center.equalToSuperview() make.height.equalTo(10.0)
    }

    Realm

    Aplikacje w głównej mierze służą do wyświetlania danych, ale gdzieś muszą być one przechowywane. Na iOS jest kilka możliwości dla persystencji danych, jak UserDefaults czy property list, ale dla dużych struktur lepiej wykorzystać bazy danych. 

    Apple oferuje CoreData, lecz można się też pokusić o alternatywę w postaci Realm’a. Jest to baza danych ukierunkowana na wykorzystanie w urządzeniach mobilnych. Jej struktura jest przedstawiana w postaci klas obiektowych, ma możliwość łatwego szyfrowania i łatwej synchronizacji między platformami. Ponadto, Realm w płatnej formie udostępnia jeszcze więcej możliwości, w tym własny hosting baz danych i zestaw narzędzi do jej edycji.

    Kingfisher

    Dzisiejsze aplikacje składają się z dużej liczby multimediów, a większość z nich stanowią zdjęcia i obrazki. Nie zawsze jest możliwe, żeby wszystkie były zawarte w aplikacji zaraz po jej zainstalowaniu. Zdecydowanie częściej, są one ściągane z Internetu, co może być problemem, jeśli dane zdjęcie będzie co chwilę się pojawiać i znikać.

    W tym celu potrzebne jest cachowanie. Sam iOS nie ma do tego gotowego mechanizmu, jednakże społeczność developerów już dawno temu zaradziła. Kingfisher automatycznie zarządza zapisywaniem obrazów na dysku i ich czyszczeniem. Ponadto, udostępnia opcje przetwarzania obrazów przed wyświetleniem, różne opcje ich pobierania z cache i skalowania by jeszcze optymalniej wyświetlać grafiki użytkownikowi.

    RechabilitySwift

    Malutka biblioteka, ale zdecydowanie ułatwiająca życie. Nieraz potrzebujemy wiedzieć, czy w aplikacji mamy dostęp do Internetu, czy nie. Apple co prawda udostępnia sposób na sprawdzenie tego, ale jest on mocno oparty na niskopoziomowym API, które nie łatwo jest zrozumieć, co może powodować nieprzewidziane błędy.

    ReachabilitySwift pakuje je w przyjemną, łatwą w użyciu bibliotekę, z kilkoma funkcjami obserwowania zmian dostępu do sieci i rozpoznawania sposobu połączenia z nią.

    SwiftLint

    Często wiele osób pracuje nad jednym projektem i równie często każda z tych osób jest przyzwyczajona do innego stylu pisania kodu. Z pomocą przychodzi SwiftLint, który pilnuje, by cały projekt był napisany w tym samym stylu. Gdy wykryje naruszenie zasad, to wyświetla ostrzeżenie lub nawet błąd w przypadku reguły o wysokim priorytecie (np. 800 linii kodu w jednej klasie). Biblioteka ma predefiniowane kilkadziesiąt reguł, ale można również pisać swoje własne oraz wyłączać konkretne, kiedy jest taka potrzeba.

    Sourcery

    Kolejny mock lub fake do napisania, kolejna enum na podstawie stałych źródeł, kolejny kod do napisania po raz setny – jak wiele razy każdy z programistów wypowiedział te słowa przy tworzeniu kolejnej aplikacji…

    A co jeśli to wszystko działoby się automagicznie? Właśnie to nam daje Sourcery – napisana w Swifcie biblioteka, generująca kod na podstawie odpowiednich szablonów. Wystarczy by klasa rozszerzała protokół danego szablonu i już, kod sam się generuje. Jest kilka predefiniowanych szablonów, np. do budowania mocków czy automatycznego dostosowania do Equatable, ale można również pisać swoje własne szablony.

    SwiftGen

    Kolejna biblioteka do generowania kodu, lecz trochę innego typu. Jej przeznaczeniem nie jest generowanie kodu do już istniejącego, ale raczej przekształcanie zasobów w proste do użycia enumy i klasy. W ten sposób mamy łatwy dostęp do używania translacji, wykorzystywania obrazków, fontów czy kolorów. SwiftGen również zawiera kilka wcześniej zdefiniowanych szablonów, lecz także daje możliwość tworzenia swoich własnych w języku Stencil.

    DBDebugToolkit

    W każdym projekcie znajdą się bugi, które później trzeba rozwiązać. Nie zawsze jest to proste i im więcej narzędzi, które w tym pomogą, tym lepiej. Jednym z nich jest właśnie DBDebugToolkit – trochę już zapomniana, lecz wciąż funkcjonalna biblioteka, napisana przez Polaka, któremu zaproponowano pracę w Apple. 

    Biblioteka pozwala na podglądanie żądań i odpowiedzi sieciowych, sprawdzanie i modyfikowanie danych aplikacji, nakładanie interfejsu usprawniającego testowanie, oszukiwanie lokalizacji i na kilka innych funkcji. 

    Quick & Nimble

    Unit testy są w stanie w łatwy sposób zabezpieczyć projekt przed pojawieniem się regresji w jego kolejnych iteracjach, dlatego też coraz więcej programistów uważa, że powinno się je pisać. W projektach dla iOS, Apple udostępnia framework XCTest, który jest nie najgorszy i często wykorzystywany. 

    Jednakże, wciąż można go opakować w jeszcze przyjemniejsze do używania narzędzia. Tu z pomocą przychodzi Quick, który – jak czytamy w jego opisie – jest frameworkiem do pisania testów sterowanych zachowaniami, czyli klasyczny schemat Given-When-Then. Dzięki niemu, testy są o wiele bardziej samoopisujące i stają się wręcz dokumentacją kodu. Quick, niemal nierozerwalnie współpracuje z Nimble, biblioteką ułatwiającą pisanie warunków asercji.

    Podsumowanie

    Powyższa lista pokazuje, że narzędzi dobrej jakości od innych deweloperów jest całkiem sporo i nie ma co się ich bać. Stosujmy je kiedy ich potrzebujemy, a w niektórych przypadkach po prostu zawsze, ponieważ automatycznie zapewniają nam utrzymanie wysokiej jakości kodu. 

    Warto też pamiętać, że większość bibliotek są open source, więc deweloperzy tworzą je poza godzinami pracy i nic z tego nie mają, oprócz sławy w wąskiej grupie. Warto więc ich wspomóc, najlepiej poprzez poświęcenie chwili swojej pracy i ulepszenie tego z czego wszyscy korzystamy.

    Piotr Wadowski
    Piotr Wadowski
    Piotr Wadowski – iOS developer z 3-letnim doświadczeniem, na co dzień pracujący w Droids On Roids – Mobile App Development Company. Fan Apple od pierwszego iPhone’a, lecz pamiętający, że nie jest bez wad. Miłośnik zwierząt, w wolnym czasie gracz i podróżnik.

    Latest articles

    Automatyzacja z Pythonem – pobieranie kolekcji filmów z YouTube

    Automatyzacja czynności, które są czasochłonne, to według mnie największa zaleta nauki programowania. Często zadania wymagające od nas klikania, czekania i przepisywania captchy...

    Programowanie funkcyjne w JS

    Jeśli bierzesz udział w rozmowach rekrutacyjnych na stanowisko regular lub senior developera, to pewnie niejednokrotnie miałeś lub miałaś do czynienia z takimi...

    Własny plugin do Figmy w React.js

    Jeśli udało Ci się kiedykolwiek pracować z Figmą, istnieje spora szansa, że narzędzie przypadło Ci do gustu. Tak przynajmniej było w moim...

    Wykorzystanie Virtual DOM na przykładzie Reacta

    Virtual DOM to bardzo popularne rozwiązanie znane z Reacta. Co to dokładnie jest? W jaki sposób działa w Reactcie? O tym opowie...

    Leave a reply

    Please enter your comment!
    Please enter your name here

    Related articles

    X