Czy warto rozpoczynać przygodę z tworzeniem aplikacji na iOS? Jakie są możliwości tej platformy? Co muszę zrobić, żeby stworzyć i sprzedać swoją aplikację?

To są pytania, które dręczą każdego programistę stającym przed wyborem platformy mobilnej do tworzenia oprogramowania. Tym postem chciałbym przybliżyć Wam opis iOS, wraz z jego pozytywnymi i negatywnymi stronami, głównie bazując na doświadczeniu podczas pracy w Kainos.

iOS kojarzy się głównie z urządzeniami, na których jest on dostępny:

  • Telefony iPhone
  • Odtwarzacze iPod Touch
  • Tablety iPad

Wszystkie te produkty są znane chyba każdej osobie z minimalnym doświadczeniem w branży IT. iOS jest dzięki temu bardzo popularnym systemem, co można potwierdzić statystykami:

  • Do czerwca zostało sprzedanych 250 mln iPhone’ów
  • Do marca 2012 sprzedano 84 mln iPadów
  • Na App Store jest dostępnych więcej niż 650 000 aplikacji

Aplikacje

Użytkowanie iOS jest zorganizowane poprzez aplikacje (zwane też swojsko appkami :)), z których każda jest samodzielnym programem. Najważniejszy środek dystrybucji aplikacji, czyli App Store spopularyzował użycie oraz zakup aplikacji przez wielu użytkowników na całym świecie. Obecnie najnowszą dostępną wersją jest iOS 5, przy czym lada chwila zostanie udostępniona szósta edycja. Warto wspomnieć, że iOS to nies tylko środowisko do uruchamiania aplikacji zainstalowanych przez użytkownika. To również cały ekosystem usług – wspomniany App Store, iTunes Store z multimediami, iCloud (usługa współdzieląca dane pomiędzy wieloma urządzeniami), AirPlay – streaming video/audio, i wiele innych.

Ciekawostka – dotychczas ściągnięto więcej niż 30 miliardów aplikacji (tak – 30 oraz dziewięć zer). To tak, jakby każdy mieszkaniec Ziemi ściągnął ponad 4 aplikacje.

App Store jest dotychczas najbardziej popularnym rynkiem, który przeciętnie pozwala zarobić najwięcej dystrybutorowi aplikacji.

Środowisko

Aplikacje na iOS można tworzyć na kilka sposobów. Najpopularniejszym i oficjalnie wspieranym sposobem jest wykorzystanie środowiska Xcode do tworzenia aplikacji natywnych w języku Objective-C z wykorzystaniem dostarczonego przez Apple frameworku Cocoa Touch.

Czym jest ten egzotycznie brzmiący język? :)

Objective-C to zorientowany obiektowo język programowania, który bazuje na C. De facto rozszerza zwykły C własnymi konstrukcjami, co powoduje, że integracja z bibliotekami C/C++ jest łatwa. Objective-C został wprowadzony przez Apple jako kontynuacja NeXTStep. Jest dodatkowo używany do tworzenia aplikacji desktopowych na Mac.

Czy warto w takim razie zabierać się za naukę? Zobaczmy czego możemy dowiedzieć się z rankingu TIOBE (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html). Obecnie Objective-C zajmuje tu 3. miejsce w rankingu najpopularniejszych języków programowania. Na Stack Overflow znajdziemy ok. 200 – 250 tys. pytań powiązanych z iOS.

Narzędzia

Do tworzenia aplikacji będziemy potrzebować kilku narzędzi:

  • Maca – do tworzenia aplikacji konieczny jest komputer z systemem Mac OS X
  • Xcode IDE, czyli wcześniej wspomniane środowisko do tworzenia aplikacji
  • Apple iOS SDK dostarczany razem z Xcode, który zawiera wszelkie potrzebne biblioteki do tworzenia aplikacji
  • Symulator iOS, również dostarczany z Xcode. Pozwala na sprawne testowanie aplikacji bez konieczności podłączania urządzenia
  • Warto oczywiście posiadać właściwe urządzenie, na które tworzymy aplikację, aby przeprowadzać pełne testy.

Do testowania i umieszczania aplikacji jest potrzebne konto deweloperskie od Apple, które kosztuje 99 dolarów za rok. Bez tego konta testowanie aplikacji na urządzeniach jest utrudnione, zgodnie z dość zamkniętą polityką Apple w tej kwestii.

Objective-C

Bardzo zwięzły wstęp do Obj-C można znaleźć na cocoadevcentral.com (http://cocoadevcentral.com/d/learn_objectivec/), prezentujący najważniejsze elementy składni.

Najważniejsze różnice pomiędzy Objective-C, a innymi językami bazującymi na C (np. Java, C++, C#):

  • Przekazywanie wiadomości zamiast wywoływania funkcji/metod:
myString.length() = [myString length]
myString.find("what") = [myString find:@"what"]
myString.replaceOccurencesOfString("toReplace", "Substitution") = [myString replaceOccurencesOfString:@"toReplace" withString:@"Substitution"]

Ostatni przykład pokazuje zaletę Objective-C – szeroko używane nazywane argumenty, które pozwalają na bardzo sprawne rozszyfrowanie kolejności i przeznaczenia argumentów.

 

  • Przekazywanie wiadomości do pustego obiektu (nil, czyli null w innych językach) jest całkowicie legalne:
NSString *string = nil;

[string doSomething]; // # = Nic się nie dzieje

int length = [string length]; // # = Zwraca zero, kiedy oczekujemy liczby

BOOL isValid = [string isValid]; // # = Zwraca wartość logiczną NO (false)

NSString *subString = [string someSubstring]; // # = Zwraca nil
  • Nie ma klas abstrakcyjnych – sensowną alternatywą jest tworzenie abstrakcyjnych klas z metodami rzucającymi wyjątki w przypadku wywołania

Dodatkowe narzędzia

W iOS znajdziemy szeroki wybór dodatkowych bibliotek ułatwiających pracę:

  • OCMock do tworzenia mocków i stubów. Dopiero z tym narzędziem możemy porządnie tworzyć unit testy.
  • Kiwi do BDD w iOS.
  • Wiele innych bibliotek – Objective-C jest dziesiątym najpopularniejszym językiem projektów na GitHubie.

Przyszłość

Platforma cały czas się rozwija. Tak jak wcześniej wspomniałem, jesienią pojawi się szósta wersja iOS (http://www.apple.com/ios/ios6/). Czeka nas również iPhone 5, z jeszcze większymi możliwościami tworzenia aplikacji. Chodzą także pogłoski o nowym iPadzie mini, który zapełni segment pomiędzy standardowym, dziesięciocalowym iPadem a iPhonem.

Podsumowanie

iOS oferuje bardzo dużo możliwości tworzenia aplikacji mobilnych, razem z jednym z najbardziej atrakcyjnych biznesowo rynków dystrybucji. Dystrybucja przez App Store udowodniła swoją skuteczność.

Objective-C nie należy najłatwiejszych języków programowania, ale po pokonaniu pierwszych barier staje on się intuicyjny i pomaga w realizowaniu właściwego celu. Część rozwiązań w SDK bazuje na starszych, kilkuletnich bibliotekach, przez co czasem następuje nieuniknione mieszanie stylów kodu (patrz: biblioteka służąca do interakcji z kontaktami z książki adresowej).

Serdecznie polecam każdemu zainteresowanemu! Niedługo dalszy ciąg, tym razem stricte programistyczny :)