Upload
phamdien
View
226
Download
0
Embed Size (px)
Citation preview
AKADEMIA GÓRNICZO-HUTNICZA IM. STANISŁAWA STASZICA W KRAKOWIE
Wydział Inżynierii Metali i Informatyki Przemysłowej
PRACA DYPLOMOWA MAGISTERSKA
pt.
„Opracowanie własnej strony i przeglądarki dla iPhone”
Imię i nazwisko dyplomanta: Mirosław Suchy
Kierunek studiów: Informatyka Stosowana
Specjalność: Systemy Informatyki Przemysłowej
Nr albumu: 204653
Promotor: dr Magdalena Kopernik
Recenzent: dr hab. inż. Krzysztof Banaś, prof. AGH
Podpis dyplomanta: Podpis promotora:
Kraków 2012
Oświadczam, świadomy(-a) odpowiedzialności karnej za poświadczenie nieprawdy, że niniejszą pracę dyplomową wykonałem(-am) osobiście i samodzielnie i że nie korzystałem(-am) ze źródeł innych niż wymienione w pracy.
Kraków, dnia …… Podpis dyplomanta…………….
2
Spis treści Część I.................................................................................................................... 5
1. Wprowadzenie.................................................................................................... 5
1.1. Wstęp......................................................................................................... 5
2. iPhone..................................................................................................................6
2.1. Ekran.......................................................................................................... 6
2.2. Komunikacja............................................................................................... 9
2.3. Aparat......................................................................................................... 9
2.4. Funkcje dodatkowe.................................................................................... 9
2.5. Brakujące funkcje..................................................................................... 10
2.6. Podsumowanie......................................................................................... 11
3. iOS..................................................................................................................... 12
3.1. Core OS................................................................................................... 13
3.2. Core Service............................................................................................ 14
3.3. Media....................................................................................................... 15
3.4. Cocoa Touch............................................................................................ 15
3.5. Podsumowanie......................................................................................... 15
4. Framework....................................................................................................... 17
4.1. Core Foundation Framework.................................................................... 17
4.2. Foundation Framework............................................................................ 17
4.3. UIKit Framework.......................................................................................20
4.4. Podsumowanie......................................................................................... 21
5. Objective-C....................................................................................................... 23
5.1. Wprowadzenie......................................................................................... 23
5.2. Historia..................................................................................................... 23
5.3. Charakterystyka języka Objective-C.........................................................24
5.4. Objective-C język..................................................................................... 25
5.5. Podsumowanie......................................................................................... 30
6. Zarządzanie pamięcią...................................................................................... 31
6.1. Podsumowanie......................................................................................... 35
7. Narzędzia.......................................................................................................... 36
7.1. Hardware & Software............................................................................... 36
7.2. Xcode....................................................................................................... 38
7.3. Podsumowanie......................................................................................... 45
8. Architektura Model-View-Controller............................................................ 46
9. Projektowanie strony internetowej dla iPhone.............................................48
9.1. HTML....................................................................................................... 49
9.2. CSS.......................................................................................................... 51
9.3. PHP.......................................................................................................... 52
9.4. JavaScript................................................................................................ 52
9.5. MySQL..................................................................................................... 53
9.6. WebKit......................................................................................................54
9.7. Safari........................................................................................................ 54
9.8. Projektowanie witryn internetowych dla urządzeń mobilnych...................56
10. Cel pracy......................................................................................................... 58
Część II.................................................................................................................59
11. Projekt Aplikacji............................................................................................ 59
11.1. Opis ogólny.............................................................................................60
11.2. Widok..................................................................................................... 62
11.3. Model i Kontroler.................................................................................... 70
11.4. Test......................................................................................................... 73
12. Projekt Strony WWW................................................................................... 77
12.1. Opis ogólny............................................................................................ 77
12.2. Zastosowane technologie....................................................................... 77
12.3. Funkcjonalność...................................................................................... 78
12.4. Podsumowanie....................................................................................... 80
13. Wnioski i podsumowanie...............................................................................81
14. Dodatek A .......................................................................................................82
15. Spis tabel, ilustracji, bibliografia..................................................................84
4
Część I
1. WPROWADZENIE
1.1. WSTĘP
W styczniu 2007 roku Steve Jobs ogłosił zmianę nazwy firmy Apple Computer Inc. na
Apple Inc., tego samego dnia, świat po raz pierwszy usłyszał nazwę nowego smartfona -
iPhone. Pracę nad urządzeniem, mającym być połączeniem telefonu komórkowego oraz
komputera kieszonkowego z dotykowym ekranem trwają już od 2005 roku, jednak dopiero
29 czerwca 2007 roku iPhone został oficjalnie wprowadzony do sprzedaży. Tego dnia zaczęła
się rewolucja w świecie urządzeń mobilnych [1].
iPhone oraz inne urządzenia tego typu, np.: Samsung Galaxy, HTC Wildfire, są
określane jako szczyt możliwości współczesnej technologii. Urządzenie wystarczająco małe,
aby zmieścić się w kieszeni spodni, pozwala na wykonywanie rozmów telefonicznych,
wysyłanie i odbieranie wiadomości SMS, MMS, wiadomości email, odtwarzanie muzyki oraz
filmów, reaguje na zmiany położenia, pozwala na robienie zdjęć oraz filmów, granie w gry
oraz wygodne korzystanie z Internetu dzięki wysokiej jakości wyświetlaczowi. Ważną cechą
iPhone jest możliwość instalowania aplikacji, które można pobrać ze sklepu internetowego
AppStore lub co jest jeszcze istotniejsze, można pisać własne aplikacje [2].
Pojawienie się na rynku smartfonów, a następnie tabletów z możliwością korzystania z
Internetu, m. in. dzięki wbudowanym kartom Wi-Fi, spowodowało zmiany również w
Internecie. iPhone posiada znacznie mniejszy ekran niż laptop lub monitor komputera
stacjonarnego co sprawia, że strona internetowa napisana dla użytkowników komputerów jest
bardzo mała i mało czytelna na smartfonie, bez jej powiększania. Wymusiło to na twórcach
stron internetowych zmianę sposobu projektowania stron WWW, tak aby można było
korzystać z nich w wygodny sposób, zarówno na komputerze jak i na innych urządzeniach
posiadających mniejsze ekrany [3].
5
2. IPHONE
Obecnie na rynku jest dostępnych pięć wersji iPhone, z czego trzy ciągle są dostępne w
oficjalnej sprzedaży. Poszczególne modele różnią się między sobą przede wszystkim
dostępnymi zasobami tj. pamięcią RAM, mocą obliczeniową procesora, procesorem
graficznym, itd. (Tabela 1).
Tabela 1. Porównanie parametrów różnych wersji iPhone [4].
2.1. EKRAN
Praca z aplikacjami na platformie iOS jest znacząco odmienna od pracy na komputerze.
Na iPhone tylko jedna aplikacja może być aktywna i być wyświetlana w danej chwili na
ekranie [5]. iOS wersji 4 pozwala na chwilowe działanie aplikacji w tle, ale jest to
ograniczone tylko do specjalnych przypadków, zadań i nie może trwać zbyt długo. Oznacza
to, że do dyspozycji mamy jedno okno jednej aplikacji, poprzez które odbywa się cała
interakcja z użytkownikiem. Ponadto wielkość tego okna jest stała i równa wielkości ekranu.
W iPhone (Rysunek 1) [6] mamy do dyspozycji bardzo dobrej jakości ekran. Już w
chwili wprowadzenia urządzenia do sprzedaży był to telefon z największa rozdzielczością
ekranu stosowaną w produktach konsumenckich. W iPhone wersji 4 zastosowano
wyświetlacz o nazwie Retina i rozdzielczości 960x640 pikseli, starsze wersje urządzenia mają
ekran o rozdzielczości 480x320 pikseli. W 3,5 calowym ekranie pomieszczono niewiele mniej
pikseli, niż do niedawana posiadały komputery z 17 calowymi monitorami CRT, w których
standardowa rozdzielczość wynosiła 1024x768 pikseli.
Najważniejszą cechą ekranu jest to, że reaguję na dotyk. Jest on wyposażony w czujnik
dotyku i przystosowany do obsługi jednym, bądź kilkoma placami (Multitouch [5]), bez
6
konieczności używania rysika. W produktach Apple nie ma nawet możliwości użycia rysika,
urządzenia na niego nie reagują, ze względu na rodzaj zastosowanej konstrukcji tj. ekranu
pojemnościowego, który reaguje na zmiany pojemności elektrycznej dotykanego ekranu [1].
Rysunek 1. Zdjęcie telefonu z podanymi wymiarami [7].
2.1.1. Technologia Multitouch
Stosowany we wszystkich urządzeniach iOS ekran z technologią Multitouch [4] to
jeden z głównych elementów przyczyniających się do tak dużej użyteczności tych urządzeń.
Ponieważ ekran daję możliwość wykrywania wielu dotknięć na raz, oraz śledzenia ich ruchu
niezależnie od siebie, daję to ogromne możliwości interakcji z aplikacją wykraczające poza
możliwości interfejsu graficznego.
Typy interakcji z ekranem i ich obsługę można podzielić na kilka kategorii [5]:
Zdarzenie - jest generowane podczas interakcji z ekranem. Dla każdego
zdarzenia jest poszukiwany obiekt który może na nie odpowiedzieć. Odbywa się to
poprzez przeszukanie łańcucha odpowiedzi. Jeżeli pierwszy obiekt typu responder nie
jest wstanie odpowiedzieć na zaistniałe zdarzenie przekazuje je dalej. Kiedy kolejny
obiekt odpowiada na zdarzenie, przeszukiwanie łańcucha dobiega końca. W
przeciwnym przypadku przekazywanie zdarzenia odbywa się aż do samej góry
7
łańcucha (Rysunek 2). Jeżeli zdarzenie przejdzie przez cały łańcuch odpowiedzi i
żaden obiekt nie będzie w stanie obsłużyć zdarzenia to zostaje ono odrzucone.
Rysunek 2. Fragment hierarchii dziedziczenia z korzeniem na dole (fragment zrzutu ekranu programu Interface Builder).
UIView jest podklasą UIResponder, natomiast UIWebView jest podklasą UIView. Każda
klasa posiadająca UIResponder jako klasę nadrzędną nosi miano respondera. Zgodnie z
powyższymi rysunkami wszystkie widoki oraz kontrolki są responderami.
Gest - dowolna sekwencja zdarzeń, które wystąpiły między dotknięciem ekranu
jednym lub kilkoma palcami a zdjęciem tych palców z ekranu. Od chwili położenia
palca lub palców na ekranie i przytrzymaniu ich niezależnie od czasu trwania tej
czynności, mamy do czynienia z gestem.
Dotknięcie - oznacza umieszczenie palca na ekranie i przesunięci po nim lub
podniesienie go z ekranu. Każde dotknięcie jest śledzone, niezależnie czy jest ono
wykonane jednym palcem czy kilkoma. Użytkownik ma możliwość położenia pięciu
palców na ekranie, a system rozpozna je i będzie śledził niezależnie od siebie. iPad
jest w stanie obsłużyć do jedenastu dotknięć.
Naciśnięcie - naciśnięcie dobywa się w chwili kiedy użytkownik dotknie ekranu
palcem i natychmiast do podniesie. System jest w stanie rozróżnić pojedyncze
dotknięcie od wielokrotnego. iOS śledzi liczbę dotknięć i jest w stanie podjąć akcje w
zależności od liczby naciśnięć, o ile znajdzie się obiekt będący w stanie na takie
zdarzenie odpowiedzieć.
Obiekt rozpoznający gesty - to obiekt typu responder, który potrafi obsłużyć
strumień zdarzeń wygenerowanych przez użytkownika i rozpoznać je, kiedy następuję
dotknięcie i przesunięcie po ekranie w sposób odpowiadający zdefiniowanemu
gestowi.
8
2.2. KOMUNIKACJA
2.2.1. Łączność bezprzewodowa
iPhone 4 posiada możliwość połączenia z Internetem poprzez wbudowane Wi-Fi [2].
Urządzenie jest w stanie połączyć się w kilku standardach: 802.11b, 802.11g oraz 802.11n
(niedostępny w 3GS). Podczas wykonywania połączeń telefonicznych lub przesyłania danych,
gdy nie jest wykorzystywane połączenie Wi-Fi, iPhone wykorzystuję komunikację
GSM/EDGE inaczej określaną jako G2. Dla szybszych połączeń, wymagających większej
przepustowości można wykorzystać połączenia poprzez UMTS, HSDPA i HSUPA, znane
jako technologia 3G. Pozwala ona na przesyłanie danych z maksymalną prędkością 7.2 Mbps.
iPhone 4 posiada również możliwość przesyłania danych poprzez Bluetooth v2.1 z EDR
(Enhanced Data Rate) [2, 4].
2.2.2. Łączność przewodowa
Przewodowa łączność ograniczona jest tylko do dwóch [4]:
a) do łączności kablowej w celu przysłania danych wykorzystano USB v2.0
umożliwiające również ładowanie baterii telefonu,
b) podłączenia do telefonu słuchawek z wtyczką typu “jack” 3,5 mm.
2.3. APARAT
iPhone 4 posiada dwie wbudowane kamery [4]:
a) 5.0 megapikselowy aparat z autofocusem i możliwością nagrywania filmów
w rozdzielczości HD ready, czyli 720p z prędkością 30 klatek na sekundę,
umieszczony z tyłu urządzenia,
b) aparat VGA 0.3 megapiksela, 480p, 30 klatek na sekundę umieszczony
z przodu.
2.4. FUNKCJE DODATKOWE
• GPS (A-GPS - Assisted GPS)
• Akcelerometr
• Żyroskop 3-osiowy
• Czujnik pomiaru światła
• Czujnik zbliżeniowy
9
• Wibracja
• Lampa LED
• System operacyjny
System działający na pierwszych modelach iPhone nie miał swojej oficjalnej nazwy, aż
do chwili wydania pierwszego zestawu narzędzi dla programistów (SDK - Software
Development Kit) - iPhone SDK, 6 marca 2008 roku, kiedy to został przedstawiony jako
iPhone OS.
7 czerwca 2010 roku nazwa została zmieniona na iOS ze względu na to, iż nie tylko na
iPhone był zainstalowany dotychczasowy system. Na rynku dostępne były urządzenia iPod
Touch oraz iPad, na których był zainstalowany iPhone OS specjalnie dla nich przygotowany.
Ostatnia wersja iPhone OS v3.2 była przygotowana specjalnie pod iPad. Od 8 kwietnia
2010 roku wychodziły kolejne wersje beta systemu iOS v4.0, by ostatecznie 21 czerwca 2010
roku została udostępniona oficjalna stabilna wersja iOS 4.0, dostępna na iPod Touch oraz
iPhone 4.0 [8].
2.5. BRAKUJĄCE FUNKCJE
iPhone to telefon z dotykowym ekranem, gdzie niemal cała przestrzeń zajęta jest przez
ekran. Do dyspozycji pozostaje tylko kilka przycisków oraz jeden główny tzw. przycisk
Początek.
W odróżnieniu od tradycyjnych komputerów nie ma fizycznej klawiatury oraz myszy.
Oznacza to inny sposób interakcji z użytkownikiem. iOS dostarcza tzw. wirtualną klawiaturę,
która pojawia się w chwili, gdy aktywne jest pole przeznaczone do wprowadzania tekstu. Do
obsługi takiego zachowania nie jest potrzebne tworzenie dodatkowego kodu przez
programistę.
Aktualnie dostępne urządzenia z systemem iOS pozwalają na podłączenie zewnętrznej
klawiatury poprzez Bluetooth, dzięki czemu mamy dostęp do fizycznej klawiatury oraz
pewnej wygody z tym związanej. Nie jest to jednak często stosowane rozwiązanie.
Podłączenie myszy nadal nie jest niemożliwe [5].
10
2.6. PODSUMOWANIE
Świadomość możliwości urządzenia, dla którego tworzone jest później oprogramowanie
jest niezbędna. Różnice pomiędzy poszczególnymi modelami będą rzutować na sposób
pisania aplikacji, oraz wymuszać na twórcach oprogramowania stosowania najlepszych
rozwiązań dla szerszego grona odbiorców, przyszłych użytkowników aplikacji. Ograniczenia
urządzeń będą zaś stopowały, często zbyt ambitne pomysły projektantów aplikacji.
11
3. IOS
iOS jest systemem operacyjnym, który jest zainstalowany na urządzeniach iPhone, iPod
Touch oraz iPad. System ten zarządza częścią fizyczną urządzeń (hardware) oraz dostarcza
technologie niezbędne do poprawnego działania urządzania. System jest również bazą dla
szerokiego spektrum aplikacji dostępnych w ramach świadczenia standardowych usług
przewidzianych na urządzeniach.
Architektura iOS jest podobna do podstawowej architektury w Mac OS X. Na
najwyższym poziomie, iOS działa jako pośrednik pomiędzy sprzętem i aplikacjami, które
pojawiają się na ekranie (Rysunek 3). Aplikacje tworzone przez programistów rzadko kiedy
komunikują się bezpośrednio z warstwą sprzętową. Zamiast tego aplikacje komunikują się ze
sprzętem poprzez dobrze zdefiniowany w systemie zestaw interfejsów, które chronią aplikację
przed wpływem różnic urządzeń. Taki poziom abstrakcji umożliwia pisanie aplikacji, które
działają bez problemów na urządzeniach o różnej konfiguracji sprzętowej.
Rysunek 3. Ogólny zarys architektury [9].
12
Implementacje iOS można zaprezentować jako kilka warstw (Rysunek 4):
• Cocoa Touch
• Media
• Core Services
• Core OS
Warstwy niższe systemu zawierają podstawowe usługi oraz obsługę sprzętu. Wyższe
warstwy są odpowiedzialne za dostarczanie bardziej złożonych usług.
Rysunek 4. Warstwy architektury iOS [9].
Podczas pisania kodu zalecane jest korzystanie z frameworków wyższego poziomu nad
frameworkami niższych warstw, gdy jest to możliwe. Frameworki wyższych warstw zostały
opracowane w celu dostarczenia zorientowanych obiektowo abstrakcji konstrukcji niższych
warstw. Takie podejście zastosowano w celu ułatwienia tworzenia aplikacji poprzez
zminimalizowanie ilości niezbędnego kodu, który trzeba napisać, aby obsłużyć potencjalnie
złożone mechanizmy, takie jak wątki czy gniazda. Pomimo takiego podejścia warstwy
wyższego poziomu nie blokują dostępu do mechanizmów warstw niższych. Frameworki
niższego poziomu są dostępne dla programistów, którzy wolą z nich korzystać lub
wykorzystać aspekty niedostępne w ramach warstw wyższych.
3.1. CORE OS
Warstwa Core OS zawiera funkcję niskiego poziomu, na których oparte są technologie
dostępne w warstwach wyższego poziomu. Nawet jeśli mechanizmy tej warstwy nie są
używane bezpośrednio przez programistę, to istnieje duże prawdopodobieństwo, że
wykorzystuje je jeden z wykorzystywanych frameworków warstw wyższych. W sytuacji, gdy
trzeba jawnie zająć się obsługą bezpieczeństwa lub komunikacją z akcesoriami, bądź innym
sprzętem zewnętrznym, dokonujemy tego używając tej warstwy.
13
Składniki warstwy:
• Accelerate Framework
• Core Bluetooth
• External Accessory Framework
• Generic Security Services Framework
• Security Framework
• System
System obejmuje jądro środowiska, sterowniki oraz niskiego poziomu interfejsy
systemu operacyjnego UNIX. Jądro systemu jest oparte na jądrze Mach i jest odpowiedzialne
za każdy aspekt systemu operacyjnego. Jądro zarządza pamięcią wirtualną systemu, wątkami,
systemem plików, siecią, komunikacją między procesami. Sterowniki tej warstwy dostarczają
interfejs pomiędzy dostępnym sprzętem a frameworkami systemowymi. W celu zapewnienia
bezpieczeństwa, dostęp do jądra i sterowników jest ograniczony do kilku systemowych
frameworków i aplikacji.
3.2. CORE SERVICE
Warstwa Core Service zawiera podstawowe usługi systemowe, z których korzystają
wszystkie aplikacje.
Funkcje:
• iCloud Storage
• Automatic Reference Counting
• Block Object
• Grand Central Dispatch
• In-App Purchase
• SQLite
• XML Support
Frameworki:
• Accounts Framework
• Address Book Framework
• CFNetwork Framework
• Core Data Framework
14
• Core Foundation Framework
• Core Location Framework
• Core Media Framework
• Core Telephony Framework
• Event Kit Framework
• Foundation Framework
• Mobile Core Services Framework
• Newsstand Kit Framework
• Quick Look Framework
• Store Kit Framework
• System Configuration Framework
3.3. MEDIA
Warstwa zawierająca opracowane mechanizmy do obsługi grafiki, dźwięku oraz wideo
zaprojektowane, aby ułatwić tworzenie aplikacji oraz zapewnić odpowiedni wysoki standard
obsługi treści multimedialnych.
Technologie:
• Graphics Technologies
• Audio Technologies
• Video Technologies
• AirPlay
3.4. COCOA TOUCH
Warstwa Cocoa Touch zawiera kluczowe frameworki do budowy aplikacji iOS.
Warstwa definiuję podstawową infrastrukturę oraz obsługę technologii takich jak
wielozadaniowość, obsługę gestów, przesyłanie powiadomień oraz wiele
wysokopoziomowych usług. Podczas projektowania aplikacji jest to pierwsza warstwa na,
której mechanizmach należy opierać projektowaną aplikację.
3.5. PODSUMOWANIE
Każda napisana aplikacja wykorzystuje zasoby udostępniane przez system. Znajomość
systemu oraz możliwość wykorzystania usług przez niego udostępnianych jest kluczowym
15
elementem tworzenia aplikacji. Znajomość poszczególnych poziomów abstrakcyjności
dostępnych interfejsów pozwala na omijanie ograniczeń warstwa wyższego poziomu na rzecz
warstw niższego poziomu.
16
4. FRAMEWORK
4.1. CORE FOUNDATION FRAMEWORK
Core Foundation framework (CoreFoundation.framework) jest to zestaw interfejsów
opartych na C, które dostarczają podstawowe funkcje operacji na danych oraz usługi dla
aplikacji iOS. Framework obejmuję m. in. [9]:
• typy kolekcji (arrays, sets, itd.)
• manipulacje Stringami
• zarządzanie datą i godziną
• wątki oraz pętle
• bloki danych
• manipulacje URL oraz strumieniami
• porty oraz gniazda komunikacyjne
• bundles
• ustawienia preferencji
4.2. FOUNDATION FRAMEWORK
Foundation framework (Foundation.framework) dostarcza podstawową warstwę klas
Objective-C. Oprócz zestawu prostych typów obiektów, wprowadza kilka paradygmatów,
które definiują funkcjonalności nieobjęte w języku Objective-C. Framework zaprojektowano,
aby osiągnąć kilka celów [9]:
• dostarczenie niedużego zestawu użytecznych klas
• ułatwienie wytwarzania oprogramowania poprzez wprowadzenie kilku konwencji,
m. in. dla takich operacji jak dealokacja
• wsparcie dla Unicode, stałych obiektów
• zapewnienie pewnego poziom niezależności od systemu operacyjnego, oraz
poprawienie przenośności
Framework zawiera korzeń wszystkich klas (root class [10]), czyli obiekt NSObject
(Rysunek 5). Cała hierarchia klas jest zakotwiczona w korzeniu, powoduje to powstanie kilku
powiązanych ze sobą grup klas, na równi z kilkoma klasami niezależnymi (Rysunek 6).
17
Root class nie jest pochodną od żadnej innej klasy, definiuje interfejs oraz zachowanie
wspólne dla wszystkich obiektów w hierarchii poniżej (klas pochodnych, dziedziczących
z klasy root). Wszystkie obiekty w tej hierarchii ostatecznie dziedziczą z root class. Root class
jest również określana jako klasa podstawowa.
Rysunek 5. Root class – NSObject [10].
Rysunek 6. NSObject oraz obiekty z niej dziedziczące połączone w grupy1 [11].
1Kolorem szarym oznaczone są klasy dostępne tylko w Mac OS X.
18
Core Foundation framework i Foundation framework są ze sobą silnie powiązane.
Foundation framework stanowi pewnego rodzaju obudowę do wielu funkcji, które znajdują
się w Core Foundation.
Foundation framework definiuje podstawowe zachowanie obiektów, mechanizmy
zarządzania obiektami oraz dostarcza jednych z podstawowych typów danych obiektów,
kolekcji oraz usług systemowych. Foundation jest obiektowo zorientowaną rozbudowaną
wersją Core Foundation.
19
4.3. UIKIT FRAMEWORK
Framework UIKit dostarcza klas potrzebnych do budowy i zarządzania aplikacją z
poziomu interfejsu graficznego dla iOS. Zawiera obiekty, zdarzenia, okna, widoki oraz
kontrolki specjalnie zaprojektowane dla interfejsu dostępnego poprzez ekran dotykowy
(Rysunek 7) [12].
20
Rysunek 7. NSObject i klasy dziedziczące – UIKit [12].
4.4. PODSUMOWANIE
Odwrotnie niż w przypadku znajomości niższych warstw systemu, znajomość warstw
wyższego poziomu, oraz frameworków pozwoli na zmniejszenie ilości kodu potrzebnego do
21
własnoręcznego napisania wymaganych mechanizmów. Bez wymienionych w rozdziale
frameworków nie da się stworzyć aplikacji dla platformy iOS.
22
5. OBJECTIVE-C
5.1. WPROWADZENIE
Objective-C jest językiem programowania zaprojektowanym w celu umożliwienia
wyrafinowanego programowania zorientowanego obiektowo. Język ten jest zdefiniowany
jako mały, ale o bardzo dużych możliwościach, zbiór rozszerzeń dla standardowego języka
ANSI C. Większość tych rozszerzeń jest oparta o Smalltalk, jeden z pierwszych obiektowych
języków programowania. Objective-C został stworzony, żeby dać językowi C pełną
obiektowość w prosty i przystępny sposób [13].
5.2. HISTORIA
Smalltalk jest historycznie drugim po Simula językiem zorientowanym obiektowo.
Został zaprojektowany w latach siedemdziesiątych, był jednak bardzo wolny na owe czasy.
Do poprawnej pracy potrzebował komputera o bardzo dużych zasobach, takiego jak Xerox
Alto z 512 KB RAM-u i procesora z częstotliwością co najmniej 2 MHz.
Brad Cox był pozytywnie nastawiony do idei Smalltalk-a, chciał jednak języka, który
byłby dostępny dla każdego. Jego pomysłem było połączenie obiektowego Smalltalk’a z
bardzo szybkim językiem C. Na początku lat osiemdziesiątych Cox zaczął pisać preprocesor
dla C, żeby dodać pewne możliwości z Smalltalk. Wkrótce opracował działającą
implementację zorientowanego obiektowo rozszerzenia dla C, którą nazwał OOPC (Object-
Oriented Pre-Compiler). W 1986 roku Brad Cox i Tom Love założyciele firmy StepStone
zaczęli sprzedawać produkt o nazwie Objective-C bazujący na wcześniejszym tworze Brada
(Rysunek 8) [13].
Rysunek 8. Linia czasu (na podstawie [14]).
W 1988 roku firma NeXT kupiła licencję do kodu firmy StepStone i nabyła prawa do
znaku towarowego Objective-C. NeXT zostało kupione przez Apple w 1996 roku, a
Objective-C zostało zaadoptowane jako główny język dla frameworku Yellow Box w nowym
23
systemie operacyjnym Apple - Rhapsody. Aktualnie framework nazywa się Cocoa, a system
OS X.
5.3. CHARAKTERYSTYKA JĘZYKA OBJECTIVE-C
5.3.1. Wieloplatformowość
GCC
Kod napisany w Objective-C można z powodzeniem skompilować przy wykorzystaniu
GCC [15]. Niestety stara wersja kompilatora jest opóźniona o około 5 lat w stosunku do
ostatniej wersji Objective-C. Wykorzystując środowisko uruchomieniowe GNUstep można
ten problem ominąć. GNUstep jest to projekt, który tworzy implementację frameworków
Foundation i AppKit.
Wykorzystując GCC wraz z bibliotekami Objective-C 2.0 z projektu GNUstep, można
uzyskać dostęp do większości funkcji. Wersja GCC 4.6 i nowsze wersje zawierają
uaktualnione środowisko uruchomieniowe, dzięki czemu posiada ten sam poziom
kompatybilności, ale nie wymaga już specjalnego frameworku.
Clang - LLVM
W 2007 roku Apple rozpoczęło pracę nad nowym kompilatorem. Clang [16]
to front-end kompilator dla języków z rodziny C: C, Objective-C, C++ i Objective-C++,
stworzony w ramach projektu LLVM (Low Level Virtual Machine), który jest używany jako
generator kodu natywnego i optymalizator. Jest bardziej modularny niż GCC
i obok kompilacji może być stosowany podczas uzupełniania kodu, kolorowania składni i
statycznej analizy kodu. Clang posiada jasny podział na kod używany w poszczególnych
warstwach i izoluje kod uruchomieniowy w osobnych klasach.
Obecnie projekt jest ciągle w fazie rozwojowej, ale jako kompatybilny zamiennik dla
GCC jest już intensywnie wykorzystywany w systemach uniksopodobnych. System
operacyjny FreeBSD Release 9.0 posiada wsparcie dla kompilowania większości programów
z portów oraz samego systemu przy pomocy Clang.
Korzystając z kompilatora Clang i środowiska uruchomieniowego dostępnego
w projekcie GNUstep, można uzyskać dostęp do pełnej funkcjonalności języka
Objective-C 2.0. Oznacza to, że w Objective-C 2.0 można programować na platformach
Windows, Linux, *BSD, Solaris i podobnych, gdzie występuje ten kompilator.
24
5.4. OBJECTIVE-C JĘZYK
Objective-C jest rozbudowanym o nowe elementy językiem C. Każdy kod napisany w
języku C jest w stu procentach kompatybilny i poprawny w Objective-C, co więcej - duża
część składni i struktury wywodzi się wprost z języka C. Istnieje zatem możliwość pisania
programów w Objective-C wykorzystując wszystkie dobrodziejstwa języka C (Rysunek 9).
Rysunek 9. Objective-C to język C z dodatkowymi elementami (na podstawie [14]).
W celu wyraźnego odróżnienia języków, Objective-C stosuje własną składnie kodu,
niespotykaną i niepodobną do innych języków programowania [13] [17]:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *param = [[NSProcessInfo processInfo] arguments];
NSCountedSet *cset = [[NSCountedSet alloc] initWithArray:param];
NSArray *sorted_args = [[cset allObjects]
sortedArrayUsingSelector:@selector(compare:)];
NSEnumerator *enm = [sorted_args objectEnumerator];
id word;
while (word = [enm nextObject]) {
printf("%s\n", [word UTF8String]);
}
[cset release];
[pool release];
return 0;
}
25
W powyższym kodzie można dostrzec elementy nietypowe dla języka C, takie jak
wywołania metod w nawiasach kwadratowych [ ], obiekty NS czy @selector. Nawiasy [ ]
przez jednego z twórców zostały określone jako informacje dla programisty o tym, że ma do
czynienie z programowaniem obiektowym.
Obiekty
Jak sama nazwa języka wskazuje, zorientowany obiektowo język Objective-C opiera się
na tworzeniu aplikacji za pomocą obiektów. Obiekt łączy dane z operacjami, które mogę
wykorzystywać lub wpływać na te dane.
W Objective-C operacje są określane jako metody obiektów, a dane jako zmienne instancji.
Obiekty są zawsze alokowane na stercie i dlatego dostęp do nich zawsze następuje poprzez
wskaźnik.
Klasa a instancja
Klasa jest to zarys, schemat tworzonego później obiektu, jest planem budowy. Instancja
jest egzemplarzem obiektu stworzonego na podstawie klasy. Może być wiele instancji jednej
klasy.
Można to porównać do budowy domu. Klasa jest planem domu, ze wszystkimi wytycznymi.
Instancja jest to już gotowy dom. Na podstawie klasy można postawić wiele domów.
Wysyłanie wiadomości a wywoływanie metod
W celu zmuszenie obiektu do wykonania pewnej czynności lub zmiany jego stanu,
wysyłamy do obiektu wiadomość.
[odbiorca wiadomość];
odbiorca jest obiektem, a wiadomość mówi co ma zostać wykonane. W kodzie wiadomość to
po prostu nazwa metody, z lub bez parametrów. Kiedy wiadomość zostanie wysłana,
środowisko uruchomieniowe wyszykuję odpowiadającą metodę z pośród wszystkich
dostępnych i ją uruchamia.
Ponieważ metoda jest wybierana z pośród wszystkich dostępnych implementacji, nazwa
metody w wiadomości jest często określana jako selector.
26
Wysyłanie wiadomości różni się znacząco od wywoływania metody jakie jest znane w
innych językach programowania. Gdy wysyłamy wiadomość, sposób jej obsługi w całości
zależy od odbiorcy. W Objective-C jedyną rzeczą, która ma wpływ na wybór wywoływanej
metody, jest realny typ obiekt. W C++ i innych językach z rodziny Simula wybór metody
zależy również od tego, co na temat typu obiektu wie kompilator.
Definiowanie zmiennych
Wartości zmiennych można modyfikować na dwa sposoby, nowym tj. Objective-C:
[myInstance setValue:10];
printf(“myInstance value: %d”, [myInstance value]); // zwróci: myInstance
value: 10
lub starym tj. C:
myInstance.value = 10;
printf(“myInstance value: %d”, [myInstance value]); // zwróci: myInstance
value: 10
inny przykład:
person.address.street.name = @"Oxford Road";
[[[person address] street] setName: @"Oxford Road"];
id
NSObject deklaruje prototyp init dla inicjalizatorów, jest to instancja metody
zdefiniowana do zwracania obiektu typu id. W Objective-C identyfikatory obiektów są
specjalnego typu id. Typ id jest ogólnym typem dla każdego obiektu niezależnie od klasy i
może być używany dla instancji klasy i dla samych obiektów klasy.
id anObject;
Słowo kluczowe nil jest zdefiniowane jako obiekt null, id o wartości 0. id, nil oraz pozostałe
typy podstawowe Objective-C są zdefiniowane w pliku nagłówkowym objc/objc.h.
id jest zdefiniowany jako wskaźnik do struktury danych obiektu:
27
typedef struct objc_object {
Class isa;
} *id;
Każdy obiekt ma zmienną isa, która mówi jakiej klasy jest to instancja. Ponieważ typ Class
jest zdefiniowany jako wskaźnik:
typedef struct objc_class *Class;
zmienna isa jest określana jako wskaźnik isa.
Tworzenie obiektów
Class aClass = [anObject class];
NSMutableArray *array = [[NSMutableArray alloc] init];
lub
NSMutableArray *array = [NSMutableArray new];
W powyższym fragmencie kodu, wersja druga z new jest rzadziej spotykana. Wynika to z
fakty że metoda init często występuję z parametrami:
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:objc,nil];
Definiowanie klas
W Objective-C klasy są definiowane w dwóch częściach:
• interfejs deklaruję metody, zmienne (właściwości) oraz nazwę jej superklasy.
• implementacja, która faktycznie definiuję klasę (zawiera kod, który implementuje jej
metody)
Każda część znajduję się w osobnym pliku. Kompilator oczekuję pojedynczego pliku, a
separacja jest uzyskiwana dzięki preprocesorowi, który łączy różne pliki. W Objective-C
konwencją jest umieszczanie interfejsów klas w plikach nagłówkowych z rozszerzeniem .h, a
implementacje w plikach z rozszerzeniem .m. Pliki są nazywane tak samo jak klasa, np. dla
klasy Rectangle będzie zdeklarowana w Rectangle.h i zdefiniowana w Rectangle.m.
28
Interface
@interface ClassName : ItsSuperclass
// Deklaracja metod i właściwości.
@end
Metody można podzielić na:
• metody klasy - oznaczone plusem:
+ alloc;
• metody instancji - oznaczone minusem:
- (void)display;
Zwracają wartości deklarowane tak samo jak w języku C:
- (float)radius;
Określanie parametrów:
- (void)setRadius:(float)aRadius;
- (void)setWidth:(float)width andHeight:(float)height;
Deklaracja właściwości:
@property (attributes) Type propertyName;
Import interfejsu:
#import "WebViewController.h"
Importowanie klas z poza hierarchii dziedziczenia:
@class Rectangle, Circle;
Przykład:
#import <UIKit/UIKit.h>
@class WebViewController;
@interface WebAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
WebViewController *viewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet WebViewController *viewController;
@end
29
Implementacja
@implementation ClassName
{
// deklaracja dodatkowych zmiennych
} // blok pomijalny
// implementacja metod
@end
Implementacja właściwości:
@synthesize aObject;
Można użyć dyrektywy @synthesize w celu wymuszenia na kompilatorze utworzenia metod
setter i getter podczas kompilacji. Dzięki temu programista nie musi tworzyć tych metod w
bloku @implementation.
Przykład:
#import "WebAppDelegate.h"
#import "WebViewController.h"
@implementation WebAppDelegate
@synthesize window;
@synthesize viewController;
- (void)dealloc {
[viewController release];
[window release];
[super dealloc];
}
@end
5.5. PODSUMOWANIE
Objective-C jest językiem, w którym został napisany system iOS, jest też językiem, w
którym pisane są wszystkie aplikacje na ten system. Jest on nieodłączną częścią tworzenia
oprogramowania dla produktów firmy Apple.
30
6. ZARZĄDZANIE PAMIĘCIĄ
W każdym programie bardzo ważne jest zarządzanie pamięcią w taki sposób, żeby
nieużywane obiekty zostały usunięte z pamięci tj. zwolniły zajmowaną przestrzeń w pamięci i
zwolniły zasoby. W przeciwnym przypadku aplikacja będzie zajmować większy obszar
pamięci, niż jest wymagany. Bardzo ważne jest również, żeby nie zwolnić obszaru pamięci
zajmowanej przez obiekt, który w dalszym ciągu jest używany.
Objective-C oferuję trzy mechanizmy zarządzania pamięcią, które umożliwiają
osiągnięcie tych celów [5].
• Automatyczne zliczenie referencji (Automatic Reference Counting) - gdzie
kompilator decyduje o długości “życia” obiektu.
• Ręczne zliczanie referencji (Manual Reference Counting) - cała odpowiedzialność
za alokacje i dealokacje jest przeniesiona na programistę.
• Garbage collection - gdzie odpowiedzialność za określenie długości “życia” obiektu
jest przeniesiona na “collector”.
W iOS dostępne są tylko pierwsze dwa sposoby zarządzanie pamięcią. Przy czym ARC
jest stosunkowo nową metodą jeszcze nie tak powszechnie stosowaną. Pierwsza wersja tego
mechanizmu dostępna jest w iOS 5. Pierwsza oficjalna dokumentacja tej metody została
opublikowana 12 października 2011 roku.
Garbage collection pomimo, że jest dostępny w Objective-C, może być
wykorzystywany jedynie na platformie Mac OS X. W iOS garbage collection nie jest
dostępny w żadnej wersji.
Dlaczego zarządzanie pamięcią w iOS jest tak istotne?
W pierwszej wersji iPhone’a dostępne było 128 MB DRAM pamięci. Biorąc pod
uwagę, to że mowa jest o telefonie, może wydawać się, że to dużo. Gdy jednak
przeanalizujemy, że sam system operacyjny, wtedy jeszcze pod nazwą iPhone OS, potrafił
zarezerwować ponad 80 MB, do dyspozycji zostaje ok 40 MB lub mniej.
W iPhone jest kilka programów np. mail, ipod, safari, które pochłaniają kolejną porcję
pamięci, ponieważ są to specjalne programy działające w tle.
31
Oznacza to, że programista musi zadbać o każdy stworzony obiekt pisanej aplikacji.
Ponieważ do tej pory nie było automatycznego zliczanie referencji, a garbage collection nie
jest dostępny w iOS, całą odpowiedzialność za zarządzanie pamięcią spada na programistę.
Zliczanie referencji
Programista musi zadbać o zwolnienie pamięci po każdym stworzonym przez niego
obiekcie. Zarządzanie prymitywnymi typami takimi jak int, float, BOOL nie jest tutaj
uwzględniane, ponieważ nie są to obiekty.
Zarys problemu
Weźmy pod uwagę fragment pamięci, który jest otwarty i dostępny do wglądu w iPhone
podczas pracy aplikacji (Rysunek 10) [14]:
Rysunek 10. Schemat fragmentu pamięci.
oraz fragment kodu wykonywanej aplikacji:
Dog *fido = [Dog new];
[fido bark];
[fido release];
[fido bark]; // !!
Pierwsza linia kodu jest odpowiedzialna za utworzenie nowego obiektu typu Dog - fido
będącego wskaźnikiem (ang. pointer). W celu utworzenia obiektu używamy operatora new.
Kiedy ta linia zostanie wykonana, w pamięci zostaje zajęty pewien obszar, na który wskaźnik
zostaje ustawiony. Obszar poza “wypełnieniem” zainicjalizowaniem, zawiera pewną wartość
retainCount, która zostaje ustawiona na wartość 1 (Rysunek 11).
Dog *fido = [Dog new];
32
Rysunek 11. Schemat fragmentu pamięci z zajętą przestrzenią.
następnie wykonujemy pewne operacje na stworzonym obiekcie:
[fido bark];
Kiedy wykonamy wszystkie operacje powiązane z tym obiektem i dłużej go nie
potrzebujemy, należy zwolnić zajmowaną przez niego pamięć. W tym celu wywołujemy
metodę release na tym obiekcie:
[fido release];
W efekcie wartość retainCount zmienia się z 1 na 0 (Rysunek 12).
Rysunek 12. Schemat fragmentu pamięci tuż po zwolnieniu przestrzeni.
Kiedy nastąpi to co powyżej, to system zwolni wcześniej zarezerwowany obszar pamięci
(Rysunek 13).
Rysunek 13. Schemat fragmentu pamięci po zwolnieniu i wyczyszczeniu.
Może to prowadzić do pewnego rodzaju problemu. Wskaźnik fido ciągle istnieje, ale nie
wskazuję na żaden obszar pamięci, jest to tzw. dangling pointer (Rysunek 13). Problem
pojawi się w chwili, kiedy będziemy chcieli wywołać metodę na rzecz tego obiektu:
33
[fido bark]; // !!
Program zakończy swoje działanie z powodu błędu. Jest to jedno z wyzwań stawianych przed
programistą podczas zarządzania pamięcią; unikanie błędów wykonywania operacji na
obiektach, których pamięć została wcześniej zwolniona.
Innym rodzajem złego zarządzania pamięcią jest sytuacja odwrotna do zaprezentowanej,
tzn. nie zwalnianie pamięci już niewykorzystywanej.
Wycieki pamięci
Przyjmijmy, że wykonujemy poniższy fragment kodu:
Dog *fido = [Dog new];
[fido bark];
} // end of function
Nie wykonanie na obiekcie lucky metody release, spowoduje przetrzymywanie pamięci,
pomimo że obiekt w dalszej części programu nie jest już wykorzystywany
(Rysunek 14):
Rysunek 14. Schemat fragmentu pamięci z obiektem lucky.
W efekcie działający program może rezerwować duże obszary pamięci, z której nie korzysta
(Rysunek 15).
Rysunek 15. Schemat fragmentu pamięci z przetrzymywanym obszarem.
34
6.1. PODSUMOWANIE
Powyższe przykłady prowadzą do kilku wniosków. Jeśli jesteśmy właścicielem obiektu,
naszą odpowiedzialnością jest zwolnienie zajmowanej przez niego pamięci. Właścicielem
zostajemy gdy, tworzymy obiekt, kopiujemy bądź przetrzymujemy obiekt. Nie zwalniamy
pamięci obiektu, którego nie jesteśmy właścicielem, będzie to prowadzić do powstawania
dangling pointerów, a w efekcie do błędu programu. Nie należy zwalniać pamięci zbyt
wcześnie.
Sposób wykrywania błędów związanych z zarządzaniem pamięcią został opisany w
następnym rozdziale, podczas prezentacji narzędzi do wykrywania wycieków pamięci (7.2.4).
35
7. NARZĘDZIA
W celu rozpoczęcia tworzenia oprogramowania będą potrzebne niezbędne do tego
narzędzia. Niestety na tym etapie większość zainteresowanych zakończy swoją przygodę z
programowaniem na platformę iOS.
7.1. HARDWARE & SOFTWARE
Do tworzenia aplikacji na iOS konieczne jest posiadanie komputera firmy Apple
zbudowanego w oparciu o procesor Intel (Rysunek 16) [6].
Rysunek 16. Komputery firmy Apple: MacBook Pro oraz iMac [6].
Do tworzenia aplikacji na iOS wymagane jest również iOS SDK. To zaś wymaga
oprogramowania Xcode w wersji co najmniej 3.x, a co za tym idzie wymagany jest system
Mac OS X 10.5 (Leopard) i komputer, który ma wystarczające zasoby do poprawnej pracy
tego systemu.
Zgodnie z zaleceniami iOS Dev Center [18] do realizacji pracy będzie potrzebny Mac
z procesorem Intel działający pod kontrolą Mac OS X 10.6 (Snow Leopard) lub nowszy.
Najlepiej posiadać komputer wyprodukowany w 2009 roku lub nowszy (Rysunek 16). Apple
nie przewiduje możliwości programowania na iOS na innych systemach operacyjnych niż ich
36
własny. Licencja każdego systemu Mac OS X nie pozwala instalować systemu na inny sprzęt
niż ten dostarczony przez Apple, a co za tym idzie, jesteśmy zmuszeni do posiadania
stosunkowo nowego komputera od Apple.
Ponadto niezbędne jest zarejestrowanie się na stronie iOS Dev Center
(https://developer.apple.com/devcenter/ios/index.action) w charakterze programisty iOS, aby
móc pobrać iOS SDK oraz Xcode, czyli opracowane przez Apple zintegrowane środowisko
programistyczne (Rysunek 17).
Rysunek 17. Zrzut ekraniu z fragmentem strony internetowej iOS Dev Center [18].
37
7.2. XCODE
Poprzez Xcode często określa się zestaw kilku narzędzi, programów do wytwarzania
oprogramowania na platformę iOS.
• Xcode
• Interface Builder
• iOS Simulator
• Instruments
7.2.1. Xcode
Xcode to zintegrowane środowisko programistyczne (IDE - Integrated Development
Environment) zawierające narzędzia opracowane przez Apple do tworzenia oprogramowania
dla OS X oraz iOS. Program zawiera narzędzia do tworzenia kodu źródłowego, usuwania z
niego błędów, kompilacji aplikacji oraz poprawiania wydajności już utworzonych aplikacji
(Rysunek 18).
Najnowsze wersje środowiska (3.2 i nowsze) korzystają z kompilatora LLCV z Clang
jako front-end, w starszych występuję zmodyfikowana wersja GCC. Xcode posiada wsparcie
dla takich języków jak: C, C++, Objective-C, Objective-C++, Java, AppleScript, Python,
Ruby oraz poprzez dodatki dla GNU Pascal, Free Pascal, Ada, C#, Perl i D [19].
Rysunek 18. Okno programu Xcode 3 (zrzut ekranu).
38
7.2.2. Interface Builder
Interface Builder jest niezależną częścią Xcode przeznaczoną do tworzenia graficznego
interfejsu aplikacji.
Program Interface Builder stworzony w języku programowania Lisp, po raz pierwszy
ukazał się w roku 1986. Przez lata był wykorzystywany podczas tworzenia aplikacji dla
systemów NeXTSTEP, OpenSTEP, Mac OS X, a obecnie dla urządzeń korzystających z
systemu iOS. Interface Builder obsługuję dwa typy plików:
• .nib - starszy format, skrót od NeXT Interface Builder
• .xib - nowszy format
Obecnie wszystkie szablony projektów używają nowego formatu .xib, ale do niedawna
wszystkie tworzone przez Interface Builder pliki miały rozszerzenie .nib. Z tego powodu
większość programistów nadal nazywa pliki Interface Builder plikami nib, wynika to również
z łatwości wypowiedzenia „nib file” w przeciwieństwie do „xib file” [5].
Rysunek 19. Okna programu Interface Builder (zrzut ekranu z widocznymi oknami: biblioteka, widok, właściwości oraz okno główne pliku „HelloWorldViewConroller.xib”) [2].
39
7.2.3. iOS Simulator
Napisaną aplikacje trzeba będzie kiedyś przetestować i sprawdzić czy uzyskany rezultat
jest zgodny z oczekiwaniami programisty. Tutaj może pojawić się kolejne rozczarowanie.
Bezpłatne konto na iOS Dev Center [18] nie pozwala na umieszczenie aplikacji w
rzeczywistym urządzeniu, np. iPhone. Nie mamy też możliwości umieszczenia aplikacji w
sklepie App Store. Taką możliwość daje nam konto płatne:
• Program Standard - koszt 99 USD rocznie, przeznaczony dla programistów, firm,
organizacji, itd.
• Program Enterprise - koszt 299 USD rocznie, przeznaczony dla firm, itd., z
nastawieniem na większe projekty.
Częściowym rozwiązaniem problemu jest iOS Simulator (Rysunek 20), który pozwala na
zbudowanie i uruchomienie na komputerze aplikacji przeznaczonej dla platformy iOS.
Symulator ma pewne ograniczenia, nie oferuje wszystkich funkcji prawdziwego urządzenia
m. in. brak dostępu do kamery, wibracji, GPS, akcelerometru, żyroskopu, gesty ograniczone
do symulacji potrząsania telefonem. Ponadto symulator korzysta z zasobów dostępnych na
komputerze, to oznacza lepszy procesor i więcej pamięci RAM niż prawdziwe urządzenie.
Rysunek 20. Okno programu iOS Simulator (zrzut ekranu).
40
7.2.4. Instruments
Program Instruments [20] jest analizatorem wydajności aplikacji z graficzną prezentacją
wyników wchodzący w skład Xcode 3.0 oraz nowszych wersji programu Xcode. Instruments
jest zbudowany w oparciu o framework DTrace systemu OpenSolaris i przystosowany do
działania na Mac OS X.
Instruments prezentuję linię czasu wyświetlając wszystkie zdarzenia występujące w
aplikacji, takie jak: zmiana aktywności procesora, przydział pamięci, aktywność sieciową
oraz aktywność plików, dodatkowo prezentując wykresy oraz statystyki. Grupa zdarzeń jest
monitorowana poprzez konfigurowalne „instrumenty” (Rysunek 21), które mają możliwość
nagrywania wygenerowanych zdarzeń oraz ich odtworzenia (zasymulowania) tyle razy ile
będzie trzeba. Programista może zobaczyć efekt zmian w kodzie nie wykonując powtórnie
zdarzeń. Interface Builder posiada możliwość tworzenia niestandardowych instrumentów
analitycznych.
Rysunek 21. Widok części dostępnych instrumentów (zrzut ekranu).
41
Wykrywanie wycieków pamięci
Podczas pisania aplikacji tworzy się dużą ilość zmiennych, obiektów, tworzone są
odwołani do obiektów, obiekty są przetrzymywane. Każda z tych operacji wymaga
wywołania metody zwalniającej pamięć, gdy instancja nie jest już dłużej potrzebna.
Większość metod posiada własne zmienne lokalne, wykorzystywane tylko w ramach jej bloku
danych. Metody zaś w większości przypadków są wykonywane wielokrotnie. Wystarczy
zapomnieć o wywołaniu metody zwalniającej pamięć tylko dla jednej zmiennej lokalnej, żeby
doszło od wycieku pamięci.
Opisany poniżej przypadek miał miejsce podczas tworzenia aplikacji opisanej w drugiej
części pracy.
Po zakończeniu pisania części aplikacji związanej z tworzeniem historii odwiedzanych
stron oraz weryfikacji poprawności logiki aplikacji, program została sprawdzony pod
względem ewentualnych wycieków pamięci. Po uruchomieniu aplikacji Instruments z
instrumentem „Leaks” okazało się, że występują wycieki pamięci (Rysunek 22).
Program Instruments pozwala na wyświetlanie bardzo szczegółowych informacji o
śledzonej aplikacji. Dzięki temu można sprawdzić, które adresy w pamięci w dalszym ciągu
są zajęte, tzn. mają ustawioną wartość retain count różną od zera, ale aplikacja nie posiada
już do nich odwołania.
Sposób wykorzystania programu.
Po włączeniu należy uruchomić aplikację, która ma być analizowana, oraz wybrać ją z
listy działających programów Target (Rysunek 24). Następnie włączyć nagrywanie –
czerwona kropka w lewym górnym rogu (Rysunek 22) Record (Rysunek 24). Pojawią się
dwie linie czasu, odpowiednio dla wykrywania (Rysunek 22):
a) alokacji pamięci (fioletowa linia czasu),
b) wycieków pamięci (szara linia czasu).
Gdy włączone jest śledzenie, należy przetestować działanie aplikacji. Fioletowa linia czasu
Allocations pokazuję, kiedy obszar w pamięci jest zajmowany, szara linia czasu Leaks
pokazuje ewentualne wycieki pamięci. Na załączonym zrzucie ekranu (Rysunek 22) oraz
(Rysunek 25), na linii czasu Leaks widać kreski oznaczające wyciek pamięci.
Rozwijając drzewo obiektu widoku głównego, WebView (Rysunek 23), można
prześledzić stos wykonywanych operacji.
42
Rysunek 22. Widok programu Instruments podczas śledzenia/nagrywania działania aplikacji Web (zrzut ekranu).
Rysunek 23. Widok drzewa śledzonych obiektów w programie Instruments (zrzut ekranu).
43
Rysunek 24. Przyciski Record (nagrywanie) oraz Target (cel) programu Instruments (fragment zrzutu ekranu).
Rysunek 25. Widoczny wyciek pamięci (fragment zrzutu ekranu).
Program Instruments jest w stanie wykryć w kodzie programu miejsce, w którym zaczyna się
problem z zarządzaniem pamięcią (Rysunek 26).
Rysunek 26. Instruments z zaznaczonym fragmentem kotu, gdzie powstał problem (zrzut ekranu).
44
Zaznaczony linia kodu (Rysunek 26) jest odpowiedzialna za wykonanie metody
addHistory, odpowiedzialnej za zapisywanie historii odwiedzanych stron. Po przejściu do
kodu metody addHistory, Instruments zaznacza, które obiekty są przyczyną wycieku
(Rysunek 27).
Rysunek 27. Fragment kodu z zaznaczonymi zmiennymi odpowiedzialnymi za wyciek pamięci (zrzut ekranu).
Przyczyną okazało się pominięcie wykonania metody release na zmiennych lokalnych,
w efekcie, za każdym razem, gdy była odwiedzana strona WWW i metoda zapisująca historię
była wykonywana, tworzone były nowe obiekty, ale nie były one zwalniane.
Rozwiązaniem problemu są dwie linie kodu zwalniające pamięć, na końcu metody:
[dateFormatter release];
[plLocale release];
7.3. PODSUMOWANIE
Przedstawione narzędzia pozwalają zarówno na stworzenie aplikacji, jak również na
przetestowanie poprawności jej działania. Pomimo, że są to cztery oddzielne programy, ich
znacznie jest równie ważne podczas całego cyklu tworzenia aplikacji na iOS.
45
8. ARCHITEKTURA MODEL-VIEW-CONTROLLER
Projektanci platformy Cocoa Touch zastosowali architektoniczny wzorzec projektowy o
nazwie MVC (Model-View-Controller, czyli Model-Widok-Kontroler), który stanowi
logiczny sposób tworzenia aplikacji, organizowania struktury w aplikacji posiadającej
interfejs graficzny.
Model-View-Controller został zaprojektowany w 1979 roku przez norweskiego
programistę Trygve Reenskaug pracującego wtedy nad językiem Smalltalk w laboratoriach
Xerox i początkowo nosił nazwę Model-View-Editor [21].
Architekturę MVC pod względem funkcjonalności można podzielić na trzy oddzielne
kategorie (Rysunek 28):
• Model (model) - są to klasy przechowujące dane aplikacji;
• View (widok) - to kod odpowiedzialny za okna, kontrolki i inne elementy widoczne
dla użytkownika, z którymi można prowadzić interakcję;
• Controller (kontroler) - łączy w aplikacji model i widok; stanowi logikę aplikacji i
decyduję, w jaki sposób obsłużyć dane wejściowe pochodzące od użytkownika.
Rysunek 28. Schemat modelu MVC wersja dla Cocoa [22].
Model hermetyzuje dane specyficzne dla aplikacji oraz definiuje logikę i sposób
manipulacji oraz przetwarzania danych. Model może reprezentować postać w grze lub
kontakt w książce adresowej. Obiekt modelu może posiadać relacje do jednego lub do wielu
innych obiektów modelu.
Widok jest najprostszy do zdefiniowania. Jest to element aplikacji, który użytkownik
może zobaczyć. Widok wie, w jaki sposób ma się zaprezentować i może odpowiadać na akcję
wykonywane przez użytkownika. Głównym celem widoku jest prezentacja danych modelu
46
aplikacji oraz umożliwienie edycji tych danych. Obiekty widoku są oddzielone od obiektów
modelu w aplikacji MVC.
Kontroler działa jako pośrednik pomiędzy jednym lub wieloma widokami i jednym lub
wieloma obiektami modelu. Kontroler jest medium, przez które widok dowiaduję się o
zmianach w obiektach modelu i odwrotnie. Akcje wykonywane przez użytkownika w
warstwie widoku w celu stworzenia lub modyfikacji danych są przesyłane przez obiekty
kontrolera, w wyniku czego obiekty modelu są tworzone lub modyfikowane. Analogicznie,
gdy zmianie ulegną dane modelu, obiekt kontrolera wychwytuje je, co powoduje odpowiednią
zmianę obiektów widoku. Warstwa kontrolera może również dokonywać zmian ustawień i
koordynować zadaniami aplikacji oraz zarządzać cyklami życia innych obiektów
(Rysunek 29).
Rysunek 29. Model warstwowy wzorca MVC w iOS [22].
Sposób tworzenia aplikacji dla iOS wymusza na programiście podejście wykorzystujące
wzorzec MVC. Dla każdego widoku stworzonego za pomocą Interface Builder’a trzeba
stworzyć kontroler widoku, oraz model określający jakie dane i w jaki sposób muszą zostać
zmodyfikowane w wyniku reakcji na działania użytkownika w warstwie widoku.
47
9. PROJEKTOWANIE STRONY INTERNETOWEJ DLA IPHONE
Świat urządzeń mobilnych to zupełnie nowe medium. Gdy pojawiały się pierwsze
telefony z możliwością przeglądania stron WWW, nie istniały żadne wytyczne mówiące w
jaki sposób tradycyjna strona ma się zachować na tak nietypowym urządzeniu. Najlepsze
praktyki znane z tradycyjnych witryn, po prostu nie zdają egzaminu na urządzeniach
mobilnych. Unikatowa charakterystyka urządzeń, nietypowy system, a przede wszystkim
nowe, niespotykane wcześniej wymagania użytkowników, wymagają nowego podejścia do
projektowania i wytwarzania mobilnych witryn internetowych.
Współczesne urządzenia mobilne oferują swoim użytkownikom przeglądarki
opracowane zgodnie z pewnymi standardami, ale nie zawsze w pełni je spełniają.
Przeglądarki dostępne na tych urządzeniach umożliwiają prezentowanie treści stron
stworzonych w jednym z kilku mobilnych języków znaczników. Do najpopularniejszych
należą [3]:
• XHTML
• XHTML-MP
• HTML
• CHTML
• WML
Mobilne witryny internetowe tworzone wyłącznie z myślą o smartfonach, mogą
korzystać z pełnej specyfikacji języka HTML oraz XHTML. Większość smartfonów posiada
zainstalowane mobilne wersje przeglądarek internetowych opartych o te same silniki
wyświetlania stron, co standardowe przeglądarki na komputerach PC.
Oprócz języków znaczników, unowocześnieniu uległy również mobilne języki
skryptowe. Do niedawna przetwarzanie skryptów po stronie przeglądarek było domeną tylko
najbardziej zaawansowanych smartfonów. Obecnie dostępna jest mobilna wersja JavaScript w
formie standardu ECMAScript-MP [3].
Forma prezentacji CSS również ma swoją mobilną odmianę w postaci dwóch
standardów:
• Wireless CSS
• CSS Mobile Profile
W dalszej części rozdziału opisano technologie, które zostały wykorzystane do
stworzenia mobilnej strony internetowej dla iPhone.
48
9.1. HTML
HTML (ang. HyperText Markup Language), czyli hipertekstowy język znaczników jest
wykorzystywany do tworzenia stron internetowych. Nie jest zaliczany do języków
programowania, ze względu na brak wyrażeń obliczeniowych, instrukcji warunkowych czy
iteracyjnych. Początki języka sięgają lat osiemdziesiątych ubiegłego wieku, kiedy to w
ośrodku naukowo-badawczym CERN powstał prototyp hipertekstowego systemu
informacyjnego ENQUIRE, służącego go udostępniania dokumentów związanych z
prowadzonymi badaniami naukowymi. HTML jest niezależny do systemu operacyjnego oraz
wykorzystywanego sprzętu, co przyczyniło się do jego popularności w początkowych latach,
aktualnie jest to powszechnie uznawany standard.
Język posiada kilka specyfikacji rozumianych jako kolejne wersje oraz kilka projektów
niezależnych bazujących na HTML. Najbardziej znanym jest XHTML, którego drugi
wydanie XHTML 2.0 miało w całości zastąpić specyfikacje HTML. Ze względu na brak
kompatybilności z wersjami wcześniejszymi projekt został porzucony na rzecz HTML 5.
Aktualnie trwają niezależne od siebie prace nad XHTML 1.1 będącym następcą XHTML 1.0,
oraz HTML 5 jako następca HTML 4 oraz XHTML 1.0 [23].
Standard HTML 5 pomimo ciągle trwających prac już udostępnia swoją specyfikację i
jest coraz powszechniej stosowany. Do coraz większej popularności tego standardu
przyczynia się fakt dodania nowych znaczników, tagów odpowiedzialnych za semantykę
dokumentu. Strony projektowane w starszych standardach do organizacji struktury
dokumentu wykorzystywały element <div> (Tabela 2). Aktualnie traci on na znaczeniu na
rzecz nowych elementów takich jak (Tabela 3):
• header
• footer
• section
• article
• aside
• nav
49
Tabela 2. Przykładowy kod strony w HTML 4 oraz sposób prezentacji w przeglądarce Safari [24].
Kod HTML 4 Zrzut ekranu
<html> <head> ...dane... </head> <body> <div id="header"> <h1>Moja strona</h1> </div> <div id="nav"> <ul> <li>Początek</li> <li>Informacje</li> <li>Kontakt</li> </ul> </div> <div id=content> <h1>Artykuł</h1> <p>...</p> </div> <div id="footer"> <p>...</p> </div> </body></html>
Tabela 3. Ta sama struktura strony w HTML 5 oraz sposób prezentacji w przeglądarce Safari [24].
Kod HTML 5 Zrzut ekranu<!DOCTYPE html><html> <head> ...dane... </head> <body> <header> <h1>Moja strona</h1> </header> <nav> <ul> <li>Początek</li> <li>Informacje</li> <li>Kontakt</li> </ul> </nav> <section> <h1>Artykuł</h1> <article> <p>...</p> </article> </section> <footer> <p>...</p> </footer> </body></html>
50
HTML jest używany do tworzenia struktury dokumentu (Rysunek 30), podzielenia go
na logiczne struktury. Część związana z formatowaniem treści np. kolor tekstu, rozmiar i
rodzaj czcionki, parametry tła strony została odseparowana do oddzielnego pliku lub do
osobnego elementu struktury dokumentu niebędącego prezentowanym podczas wyświetlania
treści dokumentu. Nie zaleca się stosowania elementów formy prezentacyjnej bezpośrednio
we właściwościach tagów, chyba że ma to logiczne uzasadnienie i nie jest możliwe uzyskanie
wymaganego efektu poprzez inne metody [23].
Rysunek 30. Widok struktury podzielonej na sekcje z nagłówkami.
9.2. CSS
CSS (ang. Cascading Style Sheets), czyli kaskadowe arkusze stylów jest to język
służący do opisu semantyki prezentacji dokumentu napisanego w języku znaczników.
Najpowszechniej wykorzystywany jest do formatu stylu prezentacji dokumentów napisanych
w HTML i XHTML (Rysunek 31). Język ten został stworzony w celu odseparowania
struktury dokumentu od formy jego prezentacji.
Dostępne są trzy standardy CSS: CSS 1, CSS 2 oraz CSS 3, ale tylko pierwsze dwa są
zatwierdzone przez W3C. CSS 3 jest w trakcie prac, niemniej podobnie jak HTML 5, jest już
stosowany.
Część właściwości CSS 3 określanych jako w fazie eksperymentalnej jest opatrzona
prefiksem odpowiednim dla przeglądarki lub wykorzystywanego przez nią silnika np.
-moz-border-radius dla Gecko, -webkit-border-radius dla WebKit. Spora cześć właściwości
jest dostępna tylko dla jednego silnika i nie ma swojego odpowiednika dla pozostałych lub
posiada unikatowe wartości [25].
51
Rysunek 31. Widok strony HTML bez wykorzystania CSS.
9.3. PHP
PHP [26] jest językiem skryptów ogólnego przeznaczenia po stronie serwera,
zaprojektowanym w celu tworzenie dynamicznych stron internetowych. Jest jednym
z pierwszy języków skryptowych wykonywanych po stronie serwera, który umożliwia
osadzenie go bezpośrednio w dokumentach HTML zamiast wywoływania zewnętrznych
plików w celu przetworzenia danych. Kod jest interpretowany przez serwer WWW
z zainstalowanym modułem PHP, którego wynikiem jest wygenerowana strona internetowa.
9.4. JAVASCRIPT
JavaScript [27] to prototypowy język skryptowy o dynamicznym, słabym typowaniu,
najczęściej wykorzystywany w celu zwiększenia funkcjonalności tworzonych stron
52
internetowych. Skrypty są wykonywane po stronie klienta (w rzadkich przypadkach po
stronie serwera) do dynamicznego reagowania na zdarzenia generowane przez użytkownika.
9.5. MYSQL
MySQL [28] to system zarządzania bazami danych udostępniany na zasadach licencji
GPL. Aktualnie jest własnością firmy Oracle, wcześniej Sun Microsystems, który został przez
Oracle kupiony w 2008 roku. Najważniejszymi cechami MySQL jest jej szybkość oraz
dostępność na wielu platformach systemowych m. in. Linux, Windows, Mac OS X, FreeBSD,
Solaris, AIX.
Sporą popularność zdobył dzięki narzędziu phpMyAdmin, sprawiającemu że
administracja bazą stała się bardzo prosta.
phpMyAdmin
Darmowe, otwarte narzędzie napisane w PHP, służące do łatwego zarządzania oraz
administrowania bazą danych MySQL z poziomu przeglądarki internetowej (Rysunek 32)
[29].
Rysunek 32. Okno główne aplikacji phpMyAdmin.
53
9.6. WEBKIT
WebKit [30] to silnik wyświetlania (renderowania) stron internetowych
wykorzystywany głównie przez przeglądarki internetowe. Rozwijany na zasadach wolnego
(otwartego) oprogramowania. Jest odpowiedzialny za przetwarzanie kodu strony (HTML,
XHTML, skrypty, grafika) oraz elementów formatujących (CSS, XSL) i renderowanie
wyniku. WebKit jest najbardziej znany z wykorzystania w przeglądarkach Safari, Google
Chrome oraz Maxthon. W roku 2012 posiadał największy udział w rynku z pośród wszystkich
silników przeglądarek internetowych.
Silnik ten zawiera dwa najważniejsze komponenty, WebCore oraz JavaScriptCore
dostępne w ramach licencji GNU LGPL, zaczerpnięte z projektu rozwijanego przez KDE.
Pozostałe elementy silnika są dostępne na licencji BSD.
WebCore jest aplikacją szkieletową, którą stanowią biblioteki renderowania, DOM
(Document Object Model) i struktury HTML oraz SVG rozwijane w ramach otwartego
projektu WebKit.
JavaScriptCore jest aplikacją szkieletową dostarczającą silnik JavaScript, umożliwiając
obsługę tego języka w aplikacjach wykorzystujących silnik WebKit.
Framework WebKit zawiera WebCore i JavaScriptCore zapewniając Objective-C
interfejs programowania aplikacji (API) do silnika renderującego WebCore oraz silnika
skryptów JavaScriptCore stworzonych w języku C++, umożliwiając łatwe tworzenie aplikacji
opartych na Cocoa API [31].
9.7. SAFARI
Safari [32] to przeglądarka internetowa stworzona przez firmę Apple. Jest domyślną
przeglądarką stron WWW systemu operacyjnego Mac OS X (Rysunek 33) oraz iOS
(Rysunek 34). Od 2007 roku dostępna również na systemach Windows XP, Windows Vista
oraz Windows 7. Safari jest stworzona w oparciu o silnik wyświetlania stron WebKit. Zgodnie
z danymi pochodzącymi ze strony Wikipedia.org, 15,87% odwiedzających stronę
Wikipedia.org w sierpniu 2012 roku, korzystało z przeglądarki Safari.
Safari w pełni obsługuję najnowsze standardy internetowe, m. in. XHTML, HTML 4,
DOM, XML oraz posiada zaawansowaną obsługę CSS 1 i 2. Dodatkowo posiada wsparcie dla
dużej części specyfikacji HTML 5 [32].
54
Rysunek 33. Safari na Mac OS X (zrzut ekranu).
Rysunek 34. Safari na iOS/iOS Simulator (zrzut ekranu).
55
9.8. PROJEKTOWANIE WITRYN INTERNETOWYCH DLA URZĄDZEŃ MOBILNYCH
Projektowanie stron internetowych dla urządzeń mobilnych jakim jest iPhone, znacząco
różni się od standardowego projektowania witryn. Wynika to przede wszystkim z
nietypowego charakteru urządzenia, jego parametrów fizycznych oraz z okoliczności w jakich
korzystamy z Internetu. W Polsce większość internautów to użytkownicy Internetu
stacjonarnego, korzystający z niego ponad dwie godziny dziennie w domu, pracy lub szkole,
uczelni. Z Internetu mobilnego korzystają głównie ludzie młodzi, studenci w celu zdobycia
konkretnych informacji lub do kontaktowania się ze znajomymi [33,34].
Większość stron internetowych nie jest przystosowana do wyświetlania na urządzeniach
mobilnych. Powoduje to kłopoty podczas odwiedzania takich stron. Większość z nich nie
mieści się na ekranie urządzenia lub jest prezentowana w pomniejszonej formie, co sprawia
że korzystanie ze strony jest niemożliwe lub bardzo niewygodne. Ilość prezentowanego,
przesyłanego materiału powoduje, że wzrasta transfer danych co pociąga za sobą zwiększenie
kosztu połączenia. Takie strony zniechęcają potencjalnych użytkowników do ponownego
odwiedzania.
Wraz ze wzrostem popularności Internetu mobilnego projektanci stron internetowych
zaczynają stosować praktyki tworzenia stron użytecznych na urządzeniach mobilnych. Do
takich praktyk można zaliczyć m. in. [33]:
• uproszczony styl strony,
• brak zbędnych grafik,
• optymalizacja pod względem przepustowości,
• stosowanie większej, czytelnej czcionki,
• elementy nawigacyjne powinny być dostosowywane do rozmiarów urządzania,
odpowiednio duże przyciski, pola typu input i inne elementy formularzy,
• tylko niezbędna funkcjonalność,
• liniowy układ strony (Rysunek 35) [35].
56
Rysunek 35. Zalecana struktura strony mobilnej [33].
Elementy struktury strony powinny mieć stałą wielkość lub ich wymiary powinny
zmieniać się w wyniku odpowiedzi na zdarzenia wygenerowane przez użytkownika. Jedną ze
złych praktyk jest stosowanie dynamicznych elementów o różnych rozmiarach. W efekcie
strona zaczyna skakać w odpowiedzi na cykliczne zwiększanie i zmniejszanie się wielkości
jednego z jej elementów (Rysunek 36).
Rysunek 36. Strona wp.pl z elementem dynamicznie zmieniającym rozmiar.
57
10.CEL PRACY
Celem niniejszej pracy jest zapoznanie z systemem iOS, zintegrowanym środowiskiem
programistycznym Xcode oraz językiem programowania Objective-C, następnie w oparciu o
już posiadaną wiedzę napisanie aplikacji na iPhone, tj. przeglądarki internetowej z
wykorzystaniem dostępnych w Xcode frameworków.
Przeglądarka powinna spełniać podstawowe zadanie, jakim jest wyświetlanie treści
stron internetowych. Dodatkowo, zgodnie z aktualnymi standardami, przeglądarka powinna
pozwalać na zapisywanie adresów ulubionych stron, oraz stron ostatnio odwiedzanych.
Dalsza część pracy obejmuje utworzenie strony internetowej dla iPhone, w oparciu o
technologie przedstawione w części teoretycznej. Głównymi celami stawianym przed stroną
WWW, to jej mobilność oraz wygodny interfejs. Przedstawiona witryna internetowa będzie
formą prezentacji, jak może wyglądać mobilna wersja strony WWW, która już istniejącej, ale
nie jest przystosowana do działania na urządzeniach mobilnych.
58
Część II
11.PROJEKT APLIKACJI
W ramach pracy dyplomowej, na podstawie stanu wiedzy przedstawionego w części
teoretycznej, powstała aplikacja na iPhone: przeglądarka internetowa (Rysunek 37).
Rysunek 37. Zrzut ekranu prezentujący kilka widoków napisanej aplikacji: a) opcje aplikacji Ustawienia związane z przeglądarką; b) ostrzeżenie przed wykonaniem czynności usuwania; c) widok ustawień; d) widok główny aplikacji; e) zakładka ulubione; f) zakładka historia; g) wyszukiwanie.
59
11.1. OPIS OGÓLNY
Powstała aplikacja, jest prostą wersją przeglądarki internetowej. Zawiera okno główne
(Rysunek 38), w którym wyświetlana jest strona WWW, paski narzędzi oraz kilka widoków
pomocniczych (Rysunek 37).
Rysunek 38. Widok główny.
Przeglądarka zawiera takie elementy jak:
• pasek adresu, który pozwala również na wyszukiwanie w przeglądarce Google,
• przyciski:
o wstecz,
o dalej,
o odśwież stronę,
o wyszukiwanie/pasek adresu,
o strona domowa (drugi pasek narzędzi),
o ustawienia/opcje (drugi pasek narzędzi),
o zapisz w ulubionych (drugi pasek narzędzi),
o pokaż w Safari (drugi pasek narzędzi),
60
o pokaż inny pasek narzędzia,
• widoki:
o główny,
o wyszukiwania,
o zakładek,
o ustawień.
Aplikacja składa się z sześciu klas (Rysunek 39):
• WebAppDelegate,
• WebViewController,
• BookmarksRootViewController,
• FavoritesTabViewController,
• HistoryTabViewController,
• PreferencesModalViewController.
Pliki pomocnicze (Rysunek 39):
• ModalViewDelegate.h - protokół,
• Utilities.h – stałe, deklaracja metoda położenia pliku,
• Utilities.m – definicja metody.
Pliki nib Interface Builder (Rysunek 39):
• MainWindow.xib
• WebViewController.xib
• HistoryTabViewController.xib
• FavoritesTabViewController.xib
• PreferencesModalViewController.xib
Przeglądarka pozwala na wyświetlanie stron internetowych, których dokładny adres
URL został wpisany w pasku adresu. Jeśli użytkownik nie poda adresu strony, tylko wpisze
inny wyraz w pasku adresu, to zostanie poinformowany o możliwości wyszukania słowa w
wyszukiwarce google.pl. Aplikacja pozwala na dodawanie ulubionych stron do listy zakładek,
oraz na zapisywanie historii odwiedzanych stron. Dodatkowo istnieje możliwość ustawienia
strony domowej, sprawdzenia stanu ustawień domyślnych używanej aplikacji oraz
przełączenia aktualnie wyświetlanej strony do przeglądarki Safari.
61
Rysunek 39. Lista elementów aplikacji.
11.2. WIDOK
Element aplikacji utworzony w większości za pomocą programu Interface Builder
(7.2.2). Część widoku aplikacji związanej z wyświetleniem zakładek, ze względu na duży
stopień skomplikowania został utworzony programowo.
62
11.2.1. Opis elementów widoku głównego
Widok główny (Rysunek 40) zawiera najwięcej elementów typu przyciski, paski
narzędzi (Rysunek 45). Pierwszy pasek narzędzi, zawiera przyciski odpowiedzialne za
podstawową nawigację podczas przeglądania Internetu tj. wstecz, dalej, odśwież
(Rysunek 41). Dodatkowo zawiera przycisk pokazujący drugi pasek narzędzi oraz przycisk
pokazujący podwidok (Rysunek 42) z paskiem adresu, wirtualną klawiaturę oraz przycisk
pokazywania widoku zakładek (Rysunek 44).
Rysunek 40. Okno programu Interface Builder z widocznymi elementami widoku głównego.
Rysunek 41. Pierwszy pasek narzędzi/nawigacji.
Widok główny posiada drugi pasek narzędzi utworzony w celu zwiększenie funkcjonalności
przeglądarki, nie zwiększając przestrzeni potrzebnej do umieszczenia przycisków na ekranie
(Rysunek 43). Drugi pasek narzędzi w widoku głównym zawiera przyciski: strona domowa,
przycisk ustawienia/opcje, zapisz w ulubionych, przycisk powrotu do paska pierwszego oraz
przycisk przekierowujący aktualnie wyświetlaną stronę do przeglądarki Safari.
63
Rysunek 42. Podwidok widoku głównego.
Rysunek 43. Drugi pasek narzędzi.
Rysunek 44. Pasek adresu z widocznymi: nagłówkiem wyświetljącym tytuł aktualnie przeglądanej strony, przyciskiem zakładek, paskiem adresu wraz z przyciskiem czyszczącym jego zawartość, przyciskiem chowającym widok – Zamknij.
64
Rysunek 45. Lista elementów widoku głównego.
Widoki modalne
Oprócz widoku głównego i podwidoku wyszukiwania, w aplikacji są jeszcze dwa
widoki określane jako modalne. Widoki takie charakteryzują się tym, że podczas ich
wyświetlania musi zostać podjęta pewna decyzja, efektem której jest schowanie widoku
modalnego.
11.2.2. Widok ustawień
Pierwszy widok modalny został zastosowany do wyświetlania informacji
o ustawieniach oraz przyciski czyszczenia historii przeglądanych stron i ulubione
(Rysunek 46).
Widok ten wyświetla informacje ustawione w preferencjach aplikacji, dostępne poprzez
aplikacje systemu iOS o nazwie Ustawienia (ang. Settings). Dodatkowo pozwala na
wyczyszczenie danych zawartych w plikach modelu danych, będące treścią drugiego widoku
65
modalnego związanego z wyświetlaniem informacji o historii przeglądanych stron oraz
zapisanych zakładkach ulubionych.
Rysunek 46. Widok modany prezentujący ustawienia oraz możliwość usuwania zapisanych stron.
Rysunek 47. Aplikacja Ustawienia.
66
Ustawienia
Aplikacja Ustawienia (Rysunek 47) pozwala na wprowadzanie i zmianę preferencji
każdej aplikacji, która posiada element Settings Bundle. Element ten to grupa wbudowanych
plików w aplikacji, która informuje aplikację Ustawienia, które preferencje powinny zostać
ustawione/wprowadzone przez użytkownika. Aplikacja Ustawiania działa jako graficzny
interfejs użytkownika dla mechanizmu domyślnych ustawień użytkownika w iOS (ang. iOS
User Defaults).
11.2.3. Widok zakładek
Drugi widok modalny związany z wyświetlaniem zapisanych stron jest bardziej złożony
i w dużej części został utworzony programowo (Rysunek 48).
Rysunek 48. Diagram widoku zakładek.
Widok ten prezentuje zapisane odwołania do stron ulubionych oraz historię
przeglądanych stron w postaci widoku tabeli (UITableView). Przełączanie pomiędzy
widokiem stron ulubionych a historią odbywa się dzięki zakładkom elementu Tab Bar
Controller (UITabBarController).
67
Rysunek 49. Widok zakładek.
Zakładka Ulubione (Rysunek 49) może być edytowana, w tym celu należy kliknąć
przycisk Edytuj. Tryb edycji pozwala na usuwanie elementów tablicy (znak zakazu) lub ich
przenoszenie (znak trzech kresek) (Rysunek 50) (Rysunek 52). Usuwać wpisy można również
bez wchodzenia w tryb edycji, poprzez gest szybkiego przesunięcia palcem w bok na
wybranym wpisie (Rysunek 51). Dodatkowo można usunąć cała zawartość zakładki Ulubione
poprzez widok ustawień (Rysunek 46).
Rysunek 50. Usuwanie wpisu.
Rysunek 51. Usuwanie wpisu bez wchodzenia w tryb edycji.
68
Rysunek 52. Przenoszenie wpisu.
Zakładka Historią (Rysunek 49) nie pozwala na edycję, istnieje tylko możliwość
usunięcia wszystkich danych i określenie ilości wpisów, odbywa się to poprzez odpowiedni
widok ustawień (Rysunek 46) oraz poprzez Ustawienia (Rysunek 47).
11.2.4. Diagram widoku
Diagram widoku (Rysunek 53), prezentuje zależności pomiędzy widokami stworzonej
aplikacji. Pozwala także prześledzić jakie kontrolery są odpowiedzialne za prawidłowe
działanie widoków.
Rysunek 53. Diagram elementów struktury widoku.
69
11.3. MODEL I KONTROLER
Model i kontroler są to elementy architektury aplikacji, które przeplatają się w niemal
wszystkich stworzonych klasach.
W napisanej aplikacji elementy modelu i kontrolera można podzielić na trzy instancje:
• settings bundle,
• zakładki,
• cykl życia aplikacji.
Settings Bundle
Ustawienia preferencji aplikacji określane są w aplikacji iOS - Ustawienia
(Rysunek 47). Użytkownik ustawia/wprowadza odpowiednie dane w aplikacji Ustawienia,
które później są pobierane do aplikacji właściwej. Na podstawie tych danych kontroler
aktualizuję odpowiednie elementy widoku.
Zakładki
Informacje wyświetlane w tabelach zakładek są zapisywanie w plikach .plist czyli
plikach typu property list (Rysunek 54). Pliki te mogą być używane do przechowywania kilku
typów obiektów:
• NSArray,
• MSMutableArray,
• NSDictionary,
• NSMutableDictionary,
• NSData,
• NSMutableData,
• NSString,
• NSMutableString,
• NSNumber,
• NSDate.
70
Rysunek 54. Plik history.plist otwarty w programie Property List Editor.
Kontroler odbiera od widoku informacje o modyfikacji danych – usuwaniu,
przenoszeniu lub dodawaniu i przesyła je do elementów modelu. Obiekty modelu dokonują
odpowiednich zmian, efektem których jest modyfikacja property list oraz informacja zwrotna
wychwytywana przez kontroler, skierowana do widoku o konieczności zaktualizowania
odpowiednich elementów widoku.
Cała operacja jest o tyle skomplikowana, że odbywa się to z wykorzystaniem operacji
delegacji wykonania zadania. Powyższa metoda usuwa z lokalnej zmiennej self.dataList
zaznaczoną wartość (rekord) i przekazuję informacje, który wiersz powinien zostać usunięty z
property list do widoku głównego, który jest delegatem dla tej metody. Wykonanie
faktycznego usuwania jest oddelegowane do innego kontrolera. Przekazywanie delegacji
odbywa się poprzez wszystkie kontrolery pośrednie, aż do samej góry (Rysunek 55).
71
Rysunek 55. Diagram z zaznaczonymi na czerwono liniami przekazywania delegacji wykonania metody.
Cykl życia aplikacji
Podczas pracy aplikacji kontroler steruje przepływem danych pomiędzy elementami
modelu i widoku, aby wiedział jakie elementy są ze sobą połączone w Cocoa Touch, w tym
celu dostępne są odpowiednie słowa kluczowe:
a) IBOutlet – jest to słowo kluczowe nie mające dla kompilatora żadnego znaczenia, jest
za to informacją dla Interface Buildera (IB), że dany element instancji jest połączony z
obiektem znajdującym się w pliku nib.
@property (nonatomic, retain) IBOutlet UIButton *OKButton;
b) IBAction – słowo kluczowe oznaczające, że dana metoda jest akcją i może być
wywoływana przez kontrolkę. Akcje to metody będące elementami kontrolera.
- (IBAction)deleteHistory:(id)sender;
72
11.4. TEST
Stworzona przeglądarka została porównana z domyślną przeglądarką na iOS - Safari.
Test polegał na sprawdzeniu wyniku kilku testów online, dostępnych w Internecie. Wyniki
zostały zestawione w postaci tabelki (Tabela 4) ze zrzutami ekranu prezentującymi rezultat.
Opis testów
Acid3
Test Acid3 [36] sprawdza zgodność przeglądarki z webowymi standardami
wyznaczanymi przez organizację W3C. Składa się on z wielu mniejszych podtestów, które są
uruchamiane zaraz po wejściu na stronę, wyniki podawane są na bieżąco. Aby przeglądarka
przeszła test w całości, nie wystarczy tylko osiągnąć wynik 100/100, także animacja musi
przebiegać płynnie, a po zakończeniu całości testu strona powinna wyglądać identycznie jak
strona wzorcowa (Rysunek 56).
Acid3 jest podzielony na 100 podtestów połączonych w 6 grup, zwanych wiadrami
(ang. Bucket):
• 1: DOM Traversal, DOM Range, HTTP
• 2: DOM2 Core, DOM2 Events
• 3: DOM2 Views, DOM2 Style, selektory i Media Queries
• 4: Zachowanie się formularzy i tabel HTML, podczas przetwarzania przez
skrypty oraz DOM2 HTML
• 5: Testy pochodzące z zawodów Acid3 Competition (SVG, HTML, SMIL,
Unicode, ...)
• 6: ECMAScript
Rysunek 56. Wzorcowy obraz testu Acid3 [37].
73
HTML 5 test
Test HTML 5 [38] sprawdza jak testowana przeglądarka wspiera nadchodzący standard
HTML 5. Specyfikacja HTML 5 nie jest jeszcze skończona, ale większość twórców
przeglądarek dokłada wszelkich starań, aby ich produkt był jak najbardziej zgodny z
dotychczas udostępnioną specyfikacją. Wynik testu jest określany na podstawie ilości nowych
funkcji HTML 5 już udostępnionych, które przeglądarka jest wstanie obsłużyć.
SunSpider
SunSpider JavaScript Benchmark [39] jest rodzajem testu sprawności, służący do
pomiaru wydajności JavaScript w ramach aktualnie stosowanych rozwiązań oraz przyszłe
wykorzystanie JavaScript, w takich zastosowaniach jak szyfrowanie oraz manipulacja
tekstem. Test sprawdza rdzeń języka JavaScripts, nie sprawdza DOM oraz innych
stosowanych technologii. Zaprojektowany w celu porównywania różnych wersji tej samej
przeglądarki oraz porównywania osiągów różnych przeglądarek względem siebie. Test jest
wykonywany w pętli pięciokrotnie, a całość trwa 5 minut.
Tabela 4. Zestawienie wyników testów.
Stworzona aplikacja SafariTest Acid3
74
Stworzona aplikacja SafariTest HTML 5
Test SunSpider 0.9.1
Wyniki testów dla obu aplikacji są bardzo podobne. Nie powinno to jednak dziwić,
ponieważ obie przeglądarki korzystają z tego samego silnika WebKit, który jest najbardziej
odpowiedzialny za sposób prezentacji treści i same możliwości wyświetlania stron WWW
przez przeglądarki. Największą różnice da się zauważyć w wyniku testu Acid3, gdzie widać
kilka elementów, świadczących o tym, że nie wszystkie testy udało się przejść poprawnie.
Stworzona aplikacja nie przeszła trzech testów, Safari dwóch, przy czym są to te same testy,
które nieudały się w przeglądarce stworzonej w ramach pracy.
75
Podobieństwa i różnice
Obie przeglądarki oprócz podstawowej funkcjonalności, jaką jest wyświetlanie stron,
pozwalają na:
• zapisywanie adresów stron ulubionych
• zapisywanie historii stron ostatnio odwiedzanych
• wyszukiwanie w Google za pomocą paska adresu
• podstawową nawigację (wstecz, dalej, odśwież)
• działanie w trybie landscape
Do najważniejszych różnic po stronie Safari należą:
• możliwość przeglądanie stron na kilku kartach
• tworzenie skrótów stron na pulpicie telefonu
• możliwość tworzenia katalogów zakładek
Do najważniejszych różnic po strona napisanej aplikacji należą:
• możliwość przeglądania ustawień domyślnych przeglądarki z poziomu aplikacji
• przeglądanie stron tylko na jednej karcie
• możliwość ustawienia strony domowej/startowej
• możliwość zmiany położenia zakładek ulubionych
76
12.PROJEKT STRONY WWW
12.1. OPIS OGÓLNY
W ramach drugiej części pracy powstała strona internetowa przeznaczona dla
urządzenia iPhone (Rysunek 57). Strona jest mobilnym odpowiednikiem wyszukiwarki
pracowników.
W zamyśle strona powstała w celu zaprezentowanie przykładowej, mobilnej wersji
strony SKOS (http://regent2.uci.agh.edu.pl/skos/) - składu osobowego AGH, dla
pracowników wydziału inżynierii metali i informatyki przemysłowej.
Strona poza wygodniejszym interfejsem została zaprojektowana w celu możliwości
modyfikacji własnych danych osobowych.
Rysunek 57. Strona główna.
12.2. ZASTOSOWANE TECHNOLOGIE
Projekt został stworzony w oparciu o:
• HTML 5
• CSS 3
• PHP 5
• MySQL 5
• JavaScript
77
12.3. FUNKCJONALNOŚĆ
Strony mobilne charakteryzują się tym, że musza prezentować w prosty sposób
najbardziej poszukiwane wiadomości. Źle zaprojektowana strona lub strona nie
przystosowana do wyświetlania na małych ekranach telefonów, utrudnia lub wręcz
uniemożliwia korzystanie ze strony. Dobrym przykładem może być aktualna strona SKOS
(Rysunek 58).
Rysunek 58. Strona składu osobowego AGH wyświetlona na iPhone [40].
Stworzona strona mobilna jest uproszczoną wersją, przystosowaną do działania pod
iPhone. Strona została napisana w oparciu o silnik WebKit co oznacza, że powinna zostać
poprawnie wyświetlona na wszystkich przeglądarkach internetowych korzystających z tego
silnika.
Podstawowe i główne zadanie strony polega na dostarczaniu informacji o wybranym
pracowniku. Wyszukiwanie pracownika odbywa się na dwa sposoby: poprzez użycie
wyszukiwarki lub poprzez przeglądnięcie całej listy pracowników. Wyszukiwarka nie
wymaga żadnych danych (Rysunek 59), w takim przypadku zaprezentuje cała listę, wpisanie
nazwisk lub imienia lub tylko fragmentu, spowoduje doprecyzowanie wyników
wyszukiwania. Oprócz wyszukiwania pracowników, strona pozwala na modyfikacje własnych
danych. W celu dodania swojej osoby do listy pracowników, należy się na stronie
zarejestrować. Podanie imienia i nazwiska na stronie profilu spowoduje, że pracownik będzie
widoczny w wynikach wyszukiwania. Dane profilu są wyświetlane po kliknięciu na zieloną
kropkę, widoczną po zalogowaniu (Rysunek 61).
78
Rysunek 59. Wyszukiwarka oraz wynik wyszukiwania.
Rysunek 60. Dane osobowe poszukiwanej osoby.
Dane osobowe (Rysunek 60) zawierają takie informacje jak prefiks np. tytuł, imię,
nazwisko, miejsce pracy (budynek, pokój, katedra), nr tel., adres email oraz adres strony
www, informacje o godzinach konsultacji oraz ostatnie pole – informacje ogólne.
79
Rysunek 61. Widok profilu oraz jego edycja.
Pasek Strona główna jest odnośnikiem do strony głównej, a zielona kropka do widoku
profilu. Dodatkowo na samym dole widoczny jest pasek z trzema odnośnikami prowadzącymi
do strony AGH, Wydziału Inżynierii Metali i Informatyki Przemysłowej oraz do strony składu
osobowego AGH.
12.4. PODSUMOWANIE
Strona została opracowana w oparciu o już istniejącą witrynę internetową, która nie jest
dostosowana do poprawnego działania na urządzeniach mobilnych. Mobilna wersją jest
bardziej czytelna oraz dużo łatwiejsza w nawigacji, ze względu na większe elementy
nawigujące oraz dzięki zastosowaniu widoku tabeli znanej z aplikacji tworzonych dla iPhone.
Strona jest prosta w użyciu, nie zawiera zbędnych grafik, dzięki czemu użytkownik może
szybko uzyskać poszukiwane informacje.
80
13.WNIOSKI I PODSUMOWANIE
Stworzona w ramach pracy dyplomowej przeglądarka internetowa pozwala na wygodne
przeglądanie stron internetowych, oraz korzystanie z funkcji zakładek. Największe zalety
stworzonej aplikacji zostały dostrzeżone podczas tworzenia drugiej części pracy tj. strony
internetowej na urządzenia mobilne. Przeglądarka okazała się bardzo przydatnym narzędziem
do sprawdzania poprawności prezentacji strony m. in. dzięki możliwości zapisywania stron do
zakładek ulubionych oraz dzięki stałemu rozmiarowi okna głównego, wyświetlającego
zawartość strony WWW. Safari dysponuję widokiem okna głównego, w którym pasek adresu
może wypełnić przestrzeń okna jeżeli treść strony nie zajmuje całej powierzchni ekranu, co
nie zawsze jest pożądane. Zakładki pozwalały na szybkie przełączanie pomiędzy różnymi
wersjami projektowanej strony. Dodatkowa funkcja pozwalająca przełączyć wyświetlaną
stronę do Safari, umożliwiała w szybki sposób sprawdzenie poprawności działania witryny na
dwóch aplikacjach.
Mobilna witryna internetowa powstała w ramach drugiej części pracy dyplomowej,
przedstawia jak można przerobić istniejącą stronę WWW lub zaprojektować nową, tak aby
potencjalni użytkownicy bez problemów mogli korzystać z dawnych funkcjonalności w nowy
sposób, na nowych urządzeniach.
Tworzenie aplikacji oraz witryn przeznaczonych na urządzenia mobilne, wymaga od
projektantów świadomości nowych możliwości, ale również nowych ograniczeń. Znajomość
przedstawionych w pracy narzędzi oraz technologii umożliwia tworzenie rozwiązań jakich
jeszcze kilka lat temu, przed erą smartfonów nie dało się uzyskać. Rynek urządzeń mobilnych
jest jednym z najszybciej rozwijających się. Duża część społeczeństwa dopiero niedawno
oswoiła się z możliwością załatwiania swoich spraw przez Internet w domu, a część tych
rozwiązań już jest przenoszona na urządzenia mobilne. Rozrywka, sprawy bankowe,
inwestycje giełdowe, zarządzanie finansami, te wszystkie czynności za niedługi czas będzie
można wykonać przez telefon, smartfon, pad siedząc w pociągu.
81
14.DODATEK A
Słownik kilku pojęć występujących w pracy, opracowany na podstawie haseł z
Wikipedia.org [41].
DTrace - czyli Dynamic Tracing Framework, to narzędzie służące do monitorowania i
diagnozowania działania aplikacji oraz system operacyjnego, stworzone przez firmę Sun
Microsystems dla system operacyjnego Solaris. Został przeportowany na kilka innych
systemów m. in. FreeBSD, NetBSD.
EDGE - technologia używana w sieciach GSM do przesyłania danych, będąca
rozszerzeniem technologii GPRS. Pozwala na przesyłanie danych z przepływnością do 236.8
kbit/s.
FreeBSD - to system z rodziny Unix. Stworzony przez Computer Systems Research
Group (CSRG) na Uniwersytecie Kalifornijskim w Berkeley. Ze względu na wydajność
i niezawodność często stosowany jakoś serwer lub zapora sieciowa. Dostępny na zasadach
licencji BSD.
HSDPA - technologia używana w sieciach komórkowych, umożliwia przesyłanie
danych z sieci do odbiorcy z przepływnością do 21,6 Mbit/s.
HSUPA - technologia używana w sieciach komórkowych, umożliwia przesyłanie
danych od użytkownika do sieci z przepływnością do 5,76 Mbit/s.
OpenSolaris - otwarty (open source) system operacyjny firmy Sun Microsystems
oparty na komercyjnym systemie Solaris.
Simula - język programowania opracowany w 1967 roku. Jest uznawany za pierwszy
język obiektowy i stał się podstawą do projektowania nowych języków m. in. C++.
UMTS - następca technologii GSM, standard telefonii komórkowej trzeciej generacji.
Dzięki zaimplementowaniu technologii HSDPA oraz HSUPA pozwala na transfer danych z
przepływnością 21,6 Mbit/s podczas pobierania danych oraz 5,76 Mbit/s podczas wysyłania
danych.
82
W3C - czyli World Wide Web Consortium, to organizacja, która zajmuję się
ustanawianiem standardów tworzenia oraz przesyłu stron WWW. Zrzesza ponad 400
organizacji, firm, uczelni oraz agencji rządowych z całego świata.
83
15.SPIS TABEL, ILUSTRACJI, BIBLIOGRAFIA
Spis tabelTabela 1. Porównanie parametrów różnych wersji iPhone [4]......................................................................... 6
Tabela 2. Przykładowy kod strony w HTML 4 oraz sposób prezentacji w przeglądarce Safari [24]. ...........50
Tabela 3. Ta sama struktura strony w HTML 5 oraz sposób prezentacji w przeglądarce Safari [24]. ...........50
Tabela 4. Zestawienie wyników testów.......................................................................................................... 74
Spis ilustracjiRysunek 1. Zdjęcie telefonu z podanymi wymiarami [7].................................................................................7
Rysunek 2. Fragment hierarchii dziedziczenia z korzeniem na dole
(fragment zrzutu ekranu programu Interface Builder)................................................................. 8
Rysunek 3. Ogólny zarys architektury [9]...................................................................................................... 12
Rysunek 4. Warstwy architektury iOS [9]...................................................................................................... 13
Rysunek 5. Root class – NSObject [10]......................................................................................................... 18
Rysunek 6. NSObject oraz obiekty z niej dziedziczące połączone w grupy [11]. .........................................18
Rysunek 7. NSObject i klasy dziedziczące – UIKit [12]................................................................................21
Rysunek 8. Linia czasu (na podstawie [14])...................................................................................................23
Rysunek 9. Objective-C to język C z dodatkowymi elementami (na podstawie [14])...................................25
Rysunek 10. Schemat fragmentu pamięci.......................................................................................................32
Rysunek 11. Schemat fragmentu pamięci z zajętą przestrzenią..................................................................... 33
Rysunek 12. Schemat fragmentu pamięci tuż po zwolnieniu przestrzeni...................................................... 33
Rysunek 13. Schemat fragmentu pamięci po zwolnieniu i wyczyszczeniu....................................................33
Rysunek 14. Schemat fragmentu pamięci z obiektem lucky.......................................................................... 34
Rysunek 15. Schemat fragmentu pamięci z przetrzymywanym obszarem.....................................................34
Rysunek 16. Komputery firmy Apple: MacBook Pro oraz iMac [6]..............................................................36
Rysunek 17. Zrzut ekraniu z fragmentem strony internetowej iOS Dev Center [18].....................................37
Rysunek 18. Okno programu Xcode 3 (zrzut ekranu).................................................................................... 38
Rysunek 19. Okna programu Interface Builder (zrzut ekranu z widocznymi oknami: biblioteka, widok,
właściwości oraz okno główne pliku „HelloWorldViewConroller.xib”) [2]..............................39
Rysunek 20. Okno programu iOS Simulator (zrzut ekranu)...........................................................................40
Rysunek 21. Widok części dostępnych instrumentów (zrzut ekranu)............................................................ 41
Rysunek 22. Widok programu Instruments podczas śledzenia/nagrywania działania aplikacji Web
(zrzut ekranu)............................................................................................................................. 43
Rysunek 23. Widok drzewa śledzonych obiektów w programie Instruments (zrzut ekranu).........................43
Rysunek 24. Przyciski Record (nagrywanie) oraz Target (cel) programu Instruments
(fragment zrzutu ekranu)............................................................................................................ 44
Rysunek 25. Widoczny wyciek pamięci (fragment zrzutu ekranu)................................................................ 44
Rysunek 26. Instruments z zaznaczonym fragmentem kotu, gdzie powstał problem (zrzut ekranu).............44
84
Rysunek 27. Fragment kodu z zaznaczonymi zmiennymi odpowiedzialnymi za wyciek pamięci
(zrzut ekranu)............................................................................................................................. 45
Rysunek 28. Schemat modelu MVC wersja dla Cocoa [22].......................................................................... 46
Rysunek 29. Model warstwowy wzorca MVC w iOS [22]............................................................................ 47
Rysunek 30. Widok struktury podzielonej na sekcje z nagłówkami.............................................................. 51
Rysunek 31. Widok strony HTML bez wykorzystania CSS...........................................................................52
Rysunek 32. Okno główne aplikacji phpMyAdmin....................................................................................... 53
Rysunek 33. Safari na Mac OS X (zrzut ekranu)............................................................................................55
Rysunek 34. Safari na iOS/iOS Simulator (zrzut ekranu).............................................................................. 55
Rysunek 35. Zalecana struktura strony mobilnej [33].................................................................................... 57
Rysunek 36. Strona wp.pl z elementem dynamicznie zmieniającym rozmiar................................................57
Rysunek 37. Zrzut ekranu prezentujący kilka widoków napisanej aplikacji: a) opcje aplikacji Ustawienia
związane z przeglądarką; b) ostrzeżenie przed wykonaniem czynności usuwania;
c) widok ustawień; d) widok główny aplikacji; e) zakładka ulubione; f) zakładka historia;
g) wyszukiwanie.........................................................................................................................59
Rysunek 38. Widok główny............................................................................................................................ 60
Rysunek 39. Lista elementów aplikacji.......................................................................................................... 62
Rysunek 40. Okno programu Interface Builder z widocznymi elementami widoku głównego.....................63
Rysunek 41. Pierwszy pasek narzędzi/nawigacji............................................................................................63
Rysunek 42. Podwidok widoku głównego..................................................................................................... 64
Rysunek 43. Drugi pasek narzędzi..................................................................................................................64
Rysunek 44. Pasek adresu z widocznymi: nagłówkiem wyświetljącym tytuł aktualnie przeglądanej
strony, przyciskiem zakładek, paskiem adresu wraz z przyciskiem czyszczącym jego
zawartość, przyciskiem chowającym widok – Zamknij.............................................................64
Rysunek 45. Lista elementów widoku głównego........................................................................................... 65
Rysunek 46. Widok modany prezentujący ustawienia oraz możliwość usuwania zapisanych stron.............66
Rysunek 47. Aplikacja Ustawienia................................................................................................................. 66
Rysunek 48. Diagram widoku zakładek......................................................................................................... 67
Rysunek 49. Widok zakładek..........................................................................................................................68
Rysunek 50. Usuwanie wpisu.........................................................................................................................68
Rysunek 51. Usuwanie wpisu bez wchodzenia w tryb edycji........................................................................ 68
Rysunek 52. Przenoszenie wpisu....................................................................................................................69
Rysunek 53. Diagram elementów struktury widoku.......................................................................................69
Rysunek 54. Plik history.plist otwarty w programie Property List Editor...................................................... 71
Rysunek 55. Diagram z zaznaczonymi na czerwono liniami przekazywania delegacji wykonania metody. 72
Rysunek 56. Wzorcowy obraz testu Acid3 [37]............................................................................................. 73
Rysunek 57. Strona główna............................................................................................................................ 77
Rysunek 58. Strona składu osobowego AGH wyświetlona na iPhone [40]................................................... 78
Rysunek 59. Wyszukiwarka oraz wynik wyszukiwania................................................................................. 79
Rysunek 60. Dane osobowe poszukiwanej osoby...........................................................................................79
Rysunek 61. Widok profilu oraz jego edycja..................................................................................................80
85
Bibliografia[1] iPhone - pl.wikipedia.org. [Dostęp 1 września 2012].
http://pl.wikipedia.org/wiki/IPhone
[2] Techotopia - iPhone iOS 4 Development Essentials. [Dostęp 1 września 2012].
http://www.techotopia.com/index.php/IPhone_iOS_4_Development_Essentials
[3] Frederick G., Lal R., Beginning Smartphone Web Development: Building JavaScript,
CSS, HTML and Ajax-based Applications for iPhone, Android, Palm Pre, BlackBerry,
Windows Mobile and Nokia S60. Apress, 2010.
[4] iPhone - en.wikipedia.org. [Dostęp 1 września 2012].
http://en.wikipedia.org/wiki/IPhone
[5] Mark D., Nutting J., LaMarche J., Beginning iPhone 4 Development: Exploring the
iOS SDK. Apress, 2011.
[6] Apple.com. [Dostęp 1 września 2012]. http://www.apple.com/pl/mac/
[7] iPhone. [Dostęp 1 września 2012]. http://support.apple.com/kb/HT3939?
viewlocale=pl_PL
[8] iOS - pl.wikipedia.org. [Dostęp 1 września 2012]. http://pl.wikipedia.org/wiki/IOS
[9] iOS Technology Overview - The iOS Architecture. [Dostęp 1 września 2012].
http://developer.apple.com/library/ios/#documentation/Miscellaneous/Conceptual/iPho
neOSTechOverview/IPhoneOSOverview/IPhoneOSOverview.html#//apple_ref/doc/ui
d/TP40007898-CH4-SW1
[10] Cocoa Core Competencies. [Dostęp 1 września 2012].
https://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedi
a-CocoaCore/RootClass.html#//apple_ref/doc/uid/TP40008195-CH46-SW1
[11] Foundation Framework Reference. [Dostęp 1 września 2012].
http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/O
bjC_classic/Intro/IntroFoundation.html#//apple_ref/doc/uid/20000687-25735
[12] UIKit Framework Reference. [Dostęp 1 września 2012].
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKit_Frame
work/Introduction/Introduction.html#//apple_ref/doc/uid/TP40006955-CH1-SW1
[13] Chisnall D., Objective-C Phrasebook (Developer's Library). Addison-Wesley
Professional, 2011.
[14] lynda.com. [Dostęp 1 września 2012]. http://www.lynda.com/iPhone-3-
tutorials/iphone-sdk-essential-training/48369-2.html
[15] GCC - en.wikipedia.org. [Dostęp 1 września 2012].
http://en.wikipedia.org/wiki/GNU_Compiler_Collection
86
[16] Clang - en.wikipedia.org. [Dostęp 1 września 2012].
http://en.wikipedia.org/wiki/Clang
[17] The Objective-C Programming Language. [Dostęp 1 września 2012].
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC
/Introduction/introObjectiveC.html#//apple_ref/doc/uid/TP30001163-CH1-SW2
[18] iOS Dev Center. [Dostęp 1 września 2012].
https://developer.apple.com/devcenter/ios/index.action
[19] Xcode - en.wikipedia.org. [Dostęp 1 września 2012].
http://en.wikipedia.org/wiki/Xcode
[20] Instruments - en.wikipedia.org. [Dostęp 1 września 2012].
http://en.wikipedia.org/wiki/Instruments_(application)
[21] MVC - pl.wikipedia.org. [Dostęp 1 września 2012].
http://pl.wikipedia.org/wiki/Model-View-Controller
[22] Concepts in Objective-C Programming - Model-View-Controller. [Dostęp 1 września
2012].
https://developer.apple.com/library/ios/#documentation/General/Conceptual/CocoaEnc
yclopedia/Introduction/Introduction.html
[23] HTML - pl.wikipedia.org. [Dostęp 1 września 2012].
http://pl.wikipedia.org/wiki/HTML
[24] Building Web Pages With HTML 5. [Dostęp 1 września 2012].
http://www.webmonkey.com/2010/02/building_web_pages_with_html_5/
[25] CSS - pl.wikipedia.org. [Dostęp 1 września 2012].
http://pl.wikipedia.org/wiki/Kaskadowe_arkusze_styl%C3%B3w
[26] PHP - pl.wikipedia.org. [Dostęp 1 września 2012]. http://pl.wikipedia.org/wiki/PHP
[27] JavaScript - pl.wikipedia.org. [Dostęp 1 września 2012].
http://pl.wikipedia.org/wiki/JavaScript
[28] MySQL - pl.wikipedia.org. [Dostęp 1 września 2012].
http://pl.wikipedia.org/wiki/Mysql
[29] phpMyadmin - pl.wikipedia.org. [Dostęp 1 września 2012].
http://pl.wikipedia.org/wiki/PhpMyAdmin
[30] WebKit - pl.wikipedia.org. [Dostęp 1 września 2012].
http://pl.wikipedia.org/wiki/WebKit
[31] WebKit - en.wikipedia.org. [Dostęp 1 września 2012].
http://en.wikipedia.org/wiki/WebKit
87
[32] Safari - en.wikipedia.org. [Dostęp 1 września 2012].
http://en.wikipedia.org/wiki/Safari_(web_browser)
[33] Raport na temat mobilnego Internetu. [Dostęp 1 września 2012].
http://www.clickmaster.pl/raport-nt-mob-int.pdf
[34] Raport o wpływie Internetu mobilnego na życie Polaków. [Dostęp 1 września 2012].
http://kobiety.nazwa.pl/Raport_Mobilnosc2010.pdf
[35] iPhoneIntegration. [Dostęp 1 września 2012].
http://developer.apple.com/library/safari/#samplecode/iPhoneIntegration/Listings/inde
x_html.html
[36] Acid3 - pl.wikipedia.org. [Dostęp 22 września 2012].
http://pl.wikipedia.org/wiki/Acid3
[37] The Acid3 test. [Dostęp 22 września 2012]. http://acid3.acidtests.org/
[38] The HTML5 test. [Dostęp 22 września 2012]. http://html5test.com/
[39] SunSpider JavaScript Benchmark. [Dostęp 22 września 2012].
http://www.webkit.org/perf/sunspider/sunspider.html
[40] Skład osobowy AGH. [Dostęp 22 września 2012]. http://regent2.uci.agh.edu.pl/skos/
[41] Wikipedia - pl.wikipedia.org. [Dostęp 22 września 2012]. http://pl.wikipedia.org/
88