Własna przeglądarka dla iphone



Podobne dokumenty
Temat 3. Projektowanie interfejsu użytkonwnika Kalkulator pierwszy program dla IOS

Politechnika Poznańska, Instytut Informatyki, TWO/GE. Programowanie dla ios

Programowanie dla ios

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Programowanie dla ios

Dzięki szkoleniu. Dni: 3. Opis: Adresaci szkolenia

OBC01/TOPMOB Projektowanie w języku Objective-C

Programowanie dla ios

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński

REFERAT O PRACY DYPLOMOWEJ

Włączanie/wyłączanie paska menu

Podręcznik użytkownika Obieg dokumentów

Temat 4. Storyboard i element interfejsu użytkownika Gra w kulki- część 1

APLIKACJA SHAREPOINT

Instrukcja obsługi systemu zarządzania treścią dwajeden.pl

Przewodnik... Tworzenie Landing Page

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Przewodnik Google Cloud Print

Platforma e-learningowa

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

Rys. 1. Główne okno programu QT Creator. Na rysunku 2 oznaczone zostały cztery przyciski, odpowiadają kolejno następującym funkcjom:

SYSTEM ZARZĄDZANIA RELACJAMI Z KLIENTEM CRM7

Plan. Wprowadzenie. Co to jest APEX? Wprowadzenie. Administracja obszarem roboczym

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Podręcznik użytkownika programu. Ceremonia 3.1

Bydgoskie Centrum Archiwizacji Cyfrowej sp. z o.o.

Dodawanie stron do zakładek

Dodawanie stron do zakładek

Instrukcja. Rejestracji i aktywacji konta w systemie so-open.pl DOTACJE NA INNOWACJE; SOFTWARE OPERATIONS SP. Z O. O.

Jak ustawić cele kampanii?

Expo Composer Garncarska Szczecin tel.: info@doittechnology.pl. Dokumentacja użytkownika

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

REFERAT PRACY DYPLOMOWEJ Temat pracy: Projekt i realizacja serwisu ogłoszeń z inteligentną wyszukiwarką

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Laboratorium 7 Blog: dodawanie i edycja wpisów

Synchronizacja i współdzielenie plików w Internecie. Prezentacja. Instrukcja obsługi aplikacji WEB Manager plików

BUDOWA APLIKACJI NA PLATFORMĘ IPHONE/IPAD. dr inż. Marcin Tomana

INSTRUKCJA OBSŁUGI BIULETYNU INFORMACJI PUBLICZNEJ

Wprowadzenie do projektu QualitySpy

Część I Rozpoczęcie pracy z usługami Reporting Services

KORZYSTANIE Z BAZY DANYCH UpToDate

Instrukcja użytkownika

2. Instalacja i konfiguracja XScanPet na smartfonie z systemem Android

WPROWADZENIE DO JĘZYKA JAVA

Lista wprowadzonych zmian w systemie Vario v. 3.3 od wydania do wydania

Ustawienia personalne

Konspekt pracy inżynierskiej

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Plan. Aplikacja. Architektura aplikacji. Architektura aplikacji Tworzenie aplikacji Application Builder podstawy

Compas 2026 Vision Instrukcja obsługi do wersji 1.07

REFERAT PRACY DYPLOMOWEJ

Dokumentacja panelu Klienta

Ulotka. Zmiany w wersji Comarch ERP e-pracownik 1 Zmiany w wersji

Zarządzanie. repertuarem zespołu muzycznego Instrukcja użytkownika. Szymon Michalewicz

Programowanie dla iphone projektowanie interfejsu użytkownika

wersja 1.0 ośrodek komputerowy uj cm ul. mikołaja kopernika 7e, Kraków tel

Aplikacja Novell Filr 2.0 Web Szybki start

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

Tworzenie prezentacji w MS PowerPoint

Programowanie Obiektowe GUI

Przewodnik użytkownika (instrukcja) AutoMagicTest

Nagrywamy podcasty program Audacity

Ulotka. Zmiany w wersji Comarch ERP e-pracownik 1 Zmiany w wersji

Przewodnik Szybki start

Podstawy technologii cyfrowej i komputerów

4. Podstawowa konfiguracja

Wykład 8: klasy cz. 4

Wyświetlanie publikacji w formacie DjVu. Wyświetlanie publikacji w Bałtyckiej Bibliotece Cyfrowej można realizować na 3 sposoby:

Wprowadzenie do biblioteki klas C++

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

URLOPY BY CTI. Instrukcja obsługi

Instrukcja dostępu do usługi Google Scholar

Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu

Rozdział 1. Przegląd bramofonu SAFE

Zmiana logo. Dziękujemy za wybór naszych rozwiązań. apjoo od Apláuz. Wspólnie przebrniemy przez proces konfiguracji strony www i wstawiania treści.

Instrukcja użytkowania

Dokumentacja panelu Klienta

2018/10/16 20:47 1/5 3 Ekrany

ELEKTRONICZNA KSIĄŻKA ZDARZEŃ

2. Podstawy narzędzia Application Builder, budowa strony, kreatory aplikacji

System Obsługi Zleceń

Przewodnik Szybki start

Ustalanie dostępu do plików - Windows XP Home/Professional

Nowe notowania epromak Professional

Przewodnik Google Cloud Print

Instrukcja obsługi SafeIT - modułu zdalnego sterowania do sterowników kotłów CO firmy Foster v1.0

Przewodnik Google Cloud Print

Programowanie obiektowe

16) Wprowadzenie do raportowania Rave

PORADNIK KORZYSTANIA Z SERWERA FTP ftp.architekturaibiznes.com.pl

Przewodnik użytkownika (instrukcja) AutoMagicTest

Użytkownik zewnętrzny (UZ) może wykonywać następujące czynności:

Przewodnik Google Cloud Print

POLITYKA COOKIES. Definicje. Rodzaje wykorzystywanych Cookies

Novell Messenger Mobile Szybki start

Krok 2 (Mac). Konfigurowanie serwera WD Sentinel (czynność jednorazowa)

Ulotka. Zmiany w wersji

Transkrypt:

AKADEMIA GÓRNICZO-HUTNICZA IM. STANISŁAWA STASZICA W KRAKOWIE Wydział Inżynierii Metali i Informatyki Przemysłowej PROJEKT INŻYNIERSKI pt. Własna przeglądarka dla iphone Imię i nazwisko dyplomanta: Dariusz Kulig Kierunek studiów: Informatyka Stosowana Nr albumu: 251063 Opiekun: dr Magdalena Kopernik Podpis dyplomanta: Podpis opiekuna: Kraków 2014

Oświadczam, nieprawdy, świadomy(-a) że niniejszy odpowiedzialności projekt inżynierski karnej za poświadczenie 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 1. Wprowadzenie... 4 2. ios... 5 2.1 Warstwa systemu...5 2.2 Warstwa Cocoa Touch...5 2.3 Warstwa Media...5 2.4 Warstwa Core Services...5 2.5 Warstwa Core OS...6 3. Tworzenie aplikacji dla systemu ios wzorce projektowe...7 3.1 Wzorzec Model-View-Controller...7 3.2 Target-Action...7 3.3 Delegacje...7 4. Narzędzia programistyczne...8 4.1 Xcode...8 4.2 Interface Builder...9 5. Język Objective-C...12 5.1 Historia...12 5.2 Składnia...12 5.3 Klasy...12 5.4 Tworzenie obiektów...13 5.5 Wywoływanie metod...13 5.6 Zmienne instancji...13 5.7 Kategorie...14 5.8 Protokoły...15 6. Cocoa Touch...16 6.1 UIKit...16 7. Foundation Framework...18 8. WebKit...20 8.1 WebKit API...20 9. Cel pracy...21 10. Projekt aplikacji...22 10.1 Struktura projektu...23 10.2 Ładowanie stron internetowych...25 10.3 Kontroler kart przeglądania...25 10.4 Widok zakładek i historii...27 10.5 Wczytywanie adresu url...28 10.6 Kontroler aktywności...28 10.7 Ustawienia aplikacji...31 11. Testowanie aplikacji oraz dyskusja wyników...33 12. Podsumowanie...37 13. Bibliografia...38 3

1. Wprowadzenie Od czasu powstania pierwszych smartfonów producenci telefonów komórkowych prześcigają się w tworzeniu coraz bardziej innowacyjnych technologii, które można zamknąć w pojedynczym smartfonie czy tablecie. Na dzień dzisiejszy urządzenia mobilne są dla niektórych użytkowników nieodłącznym elementem życia. Parametry techniczne pozwalają na traktowanie takiego smartfona jak kieszonkowego komputera multimedialnego z funkcją wykonywania połączeń telefonicznych i wysyłania wiadomości SMS. Jednym z kryteriów wyboru właściwego urządzenia przenośnego przez użytkowników jest system operacyjny, pod którym będzie ono pracować. Na dzień dzisiejszy najpopularniejszą platformą mobilną jest Android (ze względu na dużą otwartość), na drugim miejscu plasuje się system ios firmy Apple (omawiany w niniejszej pracy), a trzecie miejsce zajmuje platforma Windows Phone Microsoftu[1]. System ios[2] firmy Apple został wydany w 2007 roku wraz z pierwszym iphonem i spotkał się on z dużym zainteresowaniem wśród konsumentów. W marcu 2008 roku wydane zostało SDK umożliwiające tworzenie aplikacji na ten system. Apple dostarcza wraz z nim zintegrowane środowisko programistyczne Xcode (do pobrania za darmo w AppStore), gdzie programiści tworzą aplikacje na iphony oraz ipady. Program ten jest dostępny tylko dla użytkowników pracujących na systemie Mac OS X. Podstawową różnicą między przeglądarkami desktopowymi a mobilnymi jest sposób reprezentacji stron internetowych. Strony przeznaczone dla urządzeń przenośnych powinny być dostosowane do niewielkich rozmiarów ekranu oraz charakteryzować się prostotą stylu i krótkim czasem wczytywania. 4

2. ios ios jest systemem operacyjnym działającym na urządzeniach takich jak: ipad, iphone oraz ipod Touch. System ten zarządza sprzętem i dostarcza mechanizmów wymaganych do implementacji aplikacji natywnych. Dodatkowo posiada aplikacje systemowe takie jak: telefonia, wysyłanie i odbieranie wiadomości e-mail oraz przeglądarkę Safari. 2.1 Warstwa systemu Rysunek 1: ogólna warstwa systemu ios [3] 2.2 Warstwa Cocoa Touch Warstwa Cocoa Touch (Rysunek 1)[3] zawiera frameworki do tworzenia aplikacji dla systemu ios. Definiują one wygląd tworzonej aplikacji. Dodatkowo dostarczają podstawową infrastrukturę aplikacji i wsparcie dla technologii takich jak wielozadaniowość, obsługa panelu dotykowego, notyfikacje i wiele innych usług wysokiego poziomu. 2.3 Warstwa Media Warstwa Media zawiera technologie do tworzenia aplikacji, które używają bibliotek graficznych, audio i wideo. 2.4 Warstwa Core Services Warstwa Core Services zawiera podstawowe usługi systemowe dla aplikacji. Kluczowymi usługami są: Core Foundation oraz frameworki Foundation, które definiują podstawowe typy wykorzystywane przez wszystkie aplikacje. 5

2.5 Warstwa Core OS Warstwa Core OS zawiera niskopoziomowe cechy na których większość technologii jest oparta. Zawiera frameworki takie jak: Accelerate Framework Core Bluetooth Framework External Accessory Framework Generic Security Services Framework Security Framework 6

3. Tworzenie aplikacji dla systemu ios wzorce projektowe 3.1 Wzorzec Model-View-Controller Wzorzec przyporządkowuje obiekty w aplikacji do trzech ról: model, widok lub kontroler [4]. W tym wzorcu, model śledzi dane aplikacji, widok wyświetla interfejs użytkownika oraz tworzy kontekst aplikacji natomiast kontroler zarządza widokami. Odpowiadając na zdarzenia generowane przez użytkownika i wypełniając widoki zawartością, kontroler można porównać do bramki służącej do komunikacji między modelem i widokiem. 3.2 Target-Action Jest to prosty wzorzec, w którym jeden obiekt wysyła wiadomość do drugiego obiektu gdy nastąpi jakieś zdarzenie[5]. 3.3 Delegacje Jest to wzorzec, w którym obiekt delegujący zawiera referencję do innego obiektu delegata i w odpowiednim czasie wysyła wiadomość do niego[6]. Wiadomość informuje delegata o zdarzeniu, które obiekt delegujący obsługuje. Delegat może odpowiadać na wiadomość poprzez zmianę stanu swojego lub innych obiektów. 7

4. Narzędzia programistyczne Aby móc tworzyć oprogramowanie dla systemu ios konieczne jest posiadanie sprzętu firmy Apple wraz z zainstalowanym systemem Mac OS X. Instalacja lub emulacja tego systemu na komputerach PC jest nielegalna[7]. Następnie należy pobrać z AppStore środowisko programistyczne Xcode wraz z ios SDK. 4.1 Xcode Xcode (Rysunek 2)[8] jest zintegrowanym środowiskiem programistycznym stworzonym przez Apple. Dostarcza ono narzędzi do zarządzania plikami źródłowymi, debugowania, asemblacji kodu źródłowego etc. IOS SDK dodatkowo rozszerza zbiór narzędzi Xcode o kompilatory i frameworki niezbędne do tworzenia aplikacji dla systemu ios. Aplikacje można uruchamiać na fizycznym urządzeniu lub ios simulator który również jest dostarczany z SDK. Do najważniejszych funkcji programu Xcode można zaliczyć: system do zarządzania projektami, edytor kodu który zawiera udogodnienia takie jak: kolorowanie składni, uzupełnianie kodu, Interface Builder graficzny edytor do tworzenia interfejsu użytkownika, Documentation viewer do przeglądania i przeszukiwania dokumentacji Apple, Kompilator kodu wykorzystujący LLVM i Clang, Debuger LLDB, Analizator służący do walidacji zachowania aplikacji i identyfikacji potencjalnych błędów, Możliwość zarządzania urządzeniami z systemem ios 8

Rysunek 2: widok projektu w Xcode[8] 4.2 Interface Builder Interface Builder (Rysunek 3)[9] jest graficznym edytorem służącym do tworzenia interfejsu użytkownika bez konieczności pisania kodu. Wystarczy z menu bocznego przeciągnąć interesujący nas obiekt na obszar roboczy. Rysunek 3: widok Interface Builder[9] 9

Storyboards Większość aplikacji na ios jest zbudowana z wielu widoków, między którymi użytkownik przechodzi. Związki między tymi widokami są uwidocznione na storyboardach, dzięki czemu programista bez problemu zrozumie schemat aplikacji. Assistant Assistant (Rysunek 4) umożliwia programiście łączyć kontrolki interfejsu użytkownika z kodem, który implementuje ich zachowania. Rysunek 4: widok Assistant Editor[9] ios Simulator ios Simulator pozwala na szybkie testowanie aplikacji bez konieczności instalowania jej na fizycznym urządzeniu. Jest to zwykła aplikacja dla systemu Mac OS X, która emuluje system ios. Niestety nie ma możliwości symulowania takich funkcji jak: Akcelerometr Żyroskop Kamera Mikrofon Czujnik zbliżenia 10

Aby móc testować aplikację na fizycznym urządzeniu należy posiadać konto w ios Developer Program. Abonament roczny wynosi 99$ za rok w przypadku konta Enterprise cena rośnie do 299$ za rok[10]. 11

5. Język Objective-C 5.1 Historia Język Objective-C został zaprojektowany w latach 80 ubiegłego wieku przez Brada J. Coxa[11]. Był on wzorowany na języku Smalltalk-80. W roku 1988 licencję na ten język wykupiła firma NeXT, która w 1996 roku została wykupiona przez Apple Inc. W 2007 roku Apple wydało nową wersję języka oznaczoną jako Objective-C 2.0. Dzisiaj jest wykorzystywany do tworzenia aplikacji na system OS X oraz urządzenia z systemem ios. 5.2 Składnia Objective-C jest nadzbiorem języka C przez co programy stworzone w C mogą bez problemu zostać skompilowane w Objective-C[11]. Język ten umożliwia tworzenie programów w paradygmacie obiektowym oraz proceduralnym. 5.3 Klasy Tworzenie klas odbywa się według poniższego schematu: @interface NazwaKlasy: NazwaKlasyBazowej //Deklaracje metod i zmiennych @end @implementation NazwaKlasy //Implementacja metod @end Sekcja @interface służy do utworzenia ogólnego zarysu klasy, gdzie deklarowane są zmienne oraz możliwe operacje (metody) wykonywane na obiekcie. Tworząc nową klasę należy jawnie zaznaczyć z jakiej klasy bazowej dziedziczy. Klasą bazową każdego obiektu jest NSObject. Dziedziczenie klas w Objective-C odbywa się podobnie jak w języku C++ za pomocą operatora dwukropka(:)[12]. Język ten nie umożliwia stosowania dziedziczenia wielokrotnego. Każda klasa może mieć tylko jednego rodzica. 12

Sekcja @implementation jest przeznaczona do implementacji metod zadeklarowanych wewnątrz sekcji @interface. W Objective-C można tworzyć dwa rodzaje metod: metody instancji (wywoływane na rzecz konkretnego obiektu): (void)instancemethod //metoda bezparametrowa (int)instancemethod:(nsstring *)param1 //metoda z parametrem metody klasy (wywoływane na rzecz klasy) +(void)classmethod 5.4 Tworzenie obiektów Aby utworzyć obiekt danej klasy należy zastosować statyczne metody alloc a potem init: NazwaKlasy *obj=[[nazwaklasy alloc]init]; lub rzadziej stosowaną metodę new: NazwaKlasy *obj=[nazwaklasy new]; 5.5 Wywoływanie metod Wywoływanie metod w Objective-C różni się w porównaniu do innych języków obiektowych takich jak C++ czy Java. Metody wywoływane są w nawiasach kwadratowych, gdzie nazwę metody poprzedza nazwa obiektu lub klasy. Wywoływanie metod na rzecz obiektu: [obj instancemethod:@ some param ]; Wywoływanie metod na rzecz klasy: [NazwaKlasy classmethod]; 5.6 Zmienne instancji Zmienne instancji[13], które mają być dostępne na zewnątrz klasy należy deklarować wewnątrz sekcji @interface za pomocą instrukcji @property. Każda zmienna może dodatkowo zawierać listę atrybutów takich jak: readonly zmienna tylko do odczytu readwrite zmienna do odczytu i zapisu (jest ustawiany domyślnie przez kompilator) 13

atomic - zmienna jest bezpieczna wątkowo. Oznacza to, że jej modyfikacja może odbywać się tylko w jednym wątku (parametr jest domyślny) nonatomic zmienna nie jest bezpieczna wątkowo copy do przypisania stosuje się kopię obiektu przypisywanego strong oznacza, że zmienna jest własnością obiektu posiadającego ją i zostanie zwolniona wtedy gdy jej właściciel zostanie usunięty weak wartość zmiennej zostanie ustawiona na nil zaraz po zwolnieniu pamięci zajmowanej przez obiekt przypisywany retain oznacza to samo co strong Przykład deklaracji zmiennej instancji: @interface NazwaKlasy :NSObject @property(nonatomic, weak) NSString *mystr;... @end W przypadku zmiennych pomocniczych, do których nie chcemy mieć dostępu spoza klasy, ich deklaracja powinna mieć miejsce w sekcji @implementation wewnątrz nawiasów klamrowych: @implementation NazwaKlasy { int privatefield; } @end 5.7 Kategorie Kategorie umożliwiają rozszerzenie funkcjonalności klasy o dodatkowe metody lub własności bez stosowania dziedziczenia. Aby tego dokonać należy zastosować następującą konstrukcję: @interface NazwaKlasy (NazwaKategorii) //dodatkowe metody i pola @end 14

5.8 Protokoły Protokoły są odpowiednikiem interfejsów znanych z języków takich jak: Java, C# czy też PHP5. Są zbiorem metod i własności, które można zaadoptować we własnej klasie. W przeciwieństwie do w/w języków istnieje możliwość zaznaczenia, które metody muszą zostać zaimplementowane a które nie, za pomocą instrukcji @optional oraz @required. Aby utworzyć protokół należy zastosować poniższą konstrukcję: @protocol NazwaProtokołu @end Następnie w nowo utworzonej klasie trzeba zaznaczyć, że adoptuje wcześniej utworzony protokół: @interface NazwaKlasy : NazwaKlasyBazowej<NazwaProtokołu>... @end 15

6. Cocoa Touch Cocoa Touch[14] jest frameworkiem opartym na Cocoa API dla systemu Mac OS X napisanym w języku Objective-C. Pozwala na tworzenie programów wykorzystujących komponenty znajdujących się w urządzeniach z systemem ios, których nie ma w komputerach z systemem Mac takich jak: sensory czy też ekran dotykowy. 6.1 UIKit UIKit (Rysunek 5) jest zbiorem klas niezbędnych do tworzenia GUI dla systemu ios. Dostarcza komponenty graficzne oraz obsługę zdarzeń dostosowane do ekranu dotykowego urządzenia. 16

Rysunek 5: hierarchia klas wchodzących w skład frameworku UIKit[15] 17

7. Foundation Framework Foundation Framework jest zbiorem klas definiujących podstawowe obiekty takie jak liczby, łańcuchy znakowe (Rysunek 6-7). Można tam także znaleźć klasy służące do przechowywania obiektów, zarządzania pamięcią, datą, plikami, wątkami etc. Rysunek 6: hierarchia klas wchodzących w skład Frameworku Foundation[16] 18

Rysunek 7: hierarchia klas wchodzących w skład Frameworku Foundation cd.[16] 19

8. WebKit WebKit[17] jest silnikiem służącym do renderowania stron internetowych w przeglądarkach www. Jest on wykorzystywany w aplikacjach takich jak Safari, Dashboard, Google Chrome (do wersji 27), Mail i wielu innych. WebKit składa się z dwóch podstawowych komponentów: JavaScriptCore i WebCore. Oba te komponenty dostępne są na licencji GNU LGPL, w przeciwieństwie do pozostałych elementów silnika dostępnych na licencji BSD. WebCore służy do przetwarzania kodu HTML oraz renderowania stron internetowych. JavascriptCore jest aplikacją, która implementuje obsługę języka JavaScript. 8.1 WebKit API WebKit API[18] jest to zbiór klas napisanych w języku Objective-C pozwalających na wyświetlanie stron internetowych. Podstawowym widokiem odpowiedzialnym za ten proces w systemie ios jest UIWebView. Klasa ta oprócz metod służących do ładowania stron pozwala także na wywoływanie metod języka JavaScript i na odwrót. 20

9. Cel pracy Celem pracy jest stworzenie prostej prostej przeglądarki internetowej opartej na silniku WebKit oraz frameworku Cocoa Touch. Projekt został zrealizowany w środowisku Xcode 5 wraz z zainstalowanym ios SDK 7.0. 21

10. Projekt aplikacji Celem projektu było stworzenie prostej przeglądarki internetowej dla smartfona iphone (Rysunek 8). Rysunek 8: zrzuty ekranu prezentujące stworzoną aplikację 22

10.1 Struktura projektu Projekt aplikacji składa się z 11 klas, pliku ustawień aplikacji (Settings Bundle) oraz makiety aplikacji przedstawiającej jej ogólny zarys (Rysunek 9). Rysunek 9: schemat aplikacji utworzonej w Interface Builder 5 klas projektu są potomkami klasy UIViewController, która dostarcza podstawowy model zarządzania widokami aplikacji[20]. Przed uruchomieniem każdego programu należy określić, który kontroler ma być głównym kontrolerem widoków. W przypadku mojej przeglądarki klasą tą jest ViewController, która zawiera w sobie widok UITableView jest to prosta lista, w której wyświetlane są tytuły wczytanych stron internetowych. Wybór elementu listy prowadzi do kolejnego kontrolera WebTabViewController. Składa się on z elementów takich jak: pasek narzędzi z przyciskami: - zakładki/historia - opcje współdzielenia - wstecz - naprzód 23

- odśwież/zatrzymaj - przejście do widoku kart UIWebView odpowiedzialny za renderowanie stron internetowych UITextField, w którym użytkownik wprowadza adres URL witryny internetowej UIActivityIndicatorView będący animowaną ikonką, która znika po pełnym załadowaniu strony Z WebTabViewControllera użytkownik może przejść do dwóch pozostałych kontrolerów: UITabBarController, który zawiera dwa kontrolery : BoomarksViewController jest on odpowiedzialny za wyświetlanie oraz zarządzanie zapisanymi przez użytkownika zakładek. HistoryViewController jest odpowiedzialny za wyświetlanie historii przeglądania stron Oba kontrolery wyświetlają dane w UITableView. Zakładki oraz historia przeglądania zapisywane są w małej relacyjnej bazie danych sqlite3. Sqlite3[19] jest systemem zarządzania bazą danych oraz biblioteką stworzoną w języku C, która obsługuje język SQL. Zaletą tej biblioteki jest to, że cała baza danych zapisana jest w jednym pliku z rozszerzeniem.db. Silnik ten jest wykorzystywany m.in. w systemach wbudowanych. UIActivityViewController jest to kontroler, który zawiera opcje współdzielenia linków do stron internetowych poprzez pocztę e-mail, czy popularne serwisy społecznościowe takie jak Facebook lub Twitter. Dodatkowo użytkownik może zapisać adres strony w schowku lub przejść do kolejnego kontrolera, gdzie zapisywane są zakładki. AddBookmarkViewController jest ostatnim kontrolerem, w którym użytkownik zapisuje lub edytuje swoje zakładki. Pozostałe klasy to klasy pomocnicze służące do pobierania danych z bazy danych reprezentujące pojedynczy wiersz tabeli oraz AppDelegate, który uruchamia aplikację. 24

10.2 Ładowanie stron internetowych Aby załadować stronę internetową z danego adresu url należy przejść do kontrolera WebTabViewController i wpisać w polu wyszukiwarki poprawny adres. Gdy użytkownik skończy wpisywać dane, następuje wywoływanie metody z protokołu UITextFieldDelegate: (void)textfielddidendediting:(uitextfield *)textfield { if(self.urlfield.text.length!=0) //sprawdzamy czy pole tekstowe nie jest puste { [self loadrequestfromstring:self.urlfield.text]; } } Metoda loadrequestfromstring sprawdza czy adres wprowadzony zawiera przedrostek http:// lub https://. Jeżeli nie zostanie od wpisany to aplikacja dołączy go do tego adresu. Następnie sprawdza czy w ustawieniach aplikacji użytkownik zezwolił na zapisywanie danych w pamięci podręcznej takich jak np. pliki cookies. Potem tworzy obiekt NSURL inicjowany wprowadzonym adresem: self.url=[nsurl URLWithString:urlAddress]; Następnie tworzony jest obiekt NSURLRequest inicjowany obiektem NSURL: NSURLRequest *request=[nsurlrequest requestwithurl:self.url]; Ostatnim krokiem jest wywołanie metody klasy UIWebView loadrequest: [self.webview loadrequest:request]; W przypadku gdy adres url jest niepoprawny wywołana zostaje metoda z protokołu UIWebViewDelegate didfailloadwitherror. 10.3 Kontroler kart przeglądania Aby możliwe było wczytanie więcej niż jednej strony internetowej należy zastosować np. widok UITableView, który jest widokiem mogącym przechowywać nieograniczoną ilość danych i przypisać do niego źródło danych typu NSMutableArray oraz delegata. Akcja ta wykonywana jest zaraz po załadowaniu wszystkich widoków w metodzie viewdidload: 25

(void)viewdidload { [super viewdidload]; self.tableview.datasource=self;... self.tableview.delegate=self; } NSMutableArray jest tablicą o zmiennym rozmiarze, dzięki temu istnieje możliwość dodawania lub usuwanie elementów z niej. W przypadku omawianej aplikacji przechowuje ona obiekty typu WebTabViewController. Dzięki zastosowaniu mechanizmu delegacji TableView umożliwia wywoływanie metod informujących np. o tym czy użytkownik wybrał daną pozycję z listy lub wprowadził tryb edycji pozwalający na usuwanie elementów (Rysunek 10). Rysunek 10: widok wyboru kart przeglądania Ikony po lewej stronie każdego elementu listy pobierane są za pośrednictwem metody getfavicon klasy WebTabViewController. Pobiera ona ikonę załadowanej witryny internetowej z adresu: http://www.google.com/s2/favicons?domain= a następnie w metodzie cellforrowatindexpath przypisuje ją do danego wiersza. Jeżeli metoda getfavicon zwróci wartość nil, to przypisanie nie nastąpi. 26

Tytuły wczytanych stron internetowych pobierane są za pomocą metody stringbyevaluatingjavascriptfromstring, która pozwala na wywoływanie instrukcji języka JavaScript[20]. Do tej metody przekazywana jest prosta instrukcja document.title. 10.4 Widok zakładek i historii Widok obu kontrolerów (Rysunki 11, 12) opiera się na tym samym schemacie co widok kontrolera wyboru kart przeglądania. Dane są przetrzymywane w UITableView i są pobierane z bazy danych sqlite3. Schematy tabel (Rysunek 13) są podobne z tą różnicą, że w tabeli przechowującej dane historii przeglądania znajduje się dodatkowa kolumna, gdzie zapisywana jest data wczytania danej strony internetowej. Różnicą między kontrolerem historii przeglądania a kontrolerem zakładek jest to, że użytkownik może usunąć z listy zakładek wybrane elementy. Natomiast w HistoryViewController jest tylko możliwość usunięcia wszystkich danych. Rysunek 11: widok historii Rysunek 12: widok zakładek Dodatkowo kontroler widoku zakładek pozwala na edycję pojedynczej zakładki. Użytkownik może zmienić jej nazwę na taką, która będzie dla niego bardziej przystępna. 27

Rysunek 13: diagram tabeli historii i zakładek Dla obu tabel utworzono klasy reprezentujące pojedynczy rekord. Dzięki temu pojedynczy wiersz tabeli jest przechowywany w obiekcie, który z kolei jest umieszczany w kolekcji NSMutableArray stanowiącej źródło danych dla UITableView wyświetlającej dane. 10.5 Wczytywanie adresu url Aby możliwe było załadowanie adresu url z widoku zakładek lub historii należy zastosować mechanizm delegacji. W tym celu w kontrolerze zakładek utworzono pole typu id o nazwie delegate oraz protokół BookmarksDelegate zawierający metodę, w której pobierany jest adres www z wiersza wybranego przez użytkownika. Do pola delegate przypisywana jest instancja WebTabViewController, podczas przejścia do widoku zakładek. 10.6 Kontroler aktywności Jest to modalny kontroler, w którym użytkownik ma możliwości takie jak: zapisanie wczytanej strony internetowej do zakładek, skopiowanie jej adresu do schowka lub udostępnienie poprzez pocztę e-mail czy też na popularnych serwisach społecznościowych takich jak Facebook i Twitter (Rysunek 14). 28

Rysunek 14: widok kontrolera aktywności Domyślnie kontroler aktywności nie zawierał opcji, w której użytkownik może dodać adres danej strony do zakładek. W tym celu należy stworzyć klasę dziedziczącą po klasie UIActivity i wewnątrz metody performactivity przeprowadzić akcję przekazania adresu url do kontrolera AddBookmarkViewController. Jest to kolejny modalny kontroler, w którym użytkownik zapisuje lub edytuje tytuł zakładki. Jedną z trudności wynikającą z wywołania tego widoku jest fakt, że system ios nie umożliwia wyświetlania kontrolerów z poziomu widoku modalnego. Sposobem na obejście tego problemu jest wykorzystanie Navigation Controllera będącego głównym kontrolerem aplikacji, który pozwala na wyświetlanie/ukrywanie aktualnie widocznego kontrolera. Za pomocą metody dismissviewcontrolleranimated:(bool) completion:^(void){} ukrywa kontroler aktywności i wewnątrz bloku (będącego drugim argumentem tej metody) wyświetla kolejny (Rysunek 15). 29

Rysunek 15: modalny widok edycji/dodawania zakładek Kiedy użytkownik dotknie ikony z napisem Facebook lub Twitter, aplikacja zaprowadzi go do widoków przedstawionych poniżej: Rysunek 16: widok udostępniania adresu url na serwis Twitter Rysunek 17: widok udostępniania adresu url na serwis Facebook 30

Po kliknięciu przycisku Post w serwisie Facebook pojawi się następujący post: Rysunek 18: widok postu udostępnionego poprzez przeglądarkę na serwisie Facebook Analogicznie w serwisie Twitter użytkownicy podążający za naszym kontem zobaczą prostego Tweeta z linkiem do strony internetowej: Rysunek 19: widok postu udostępnionego poprzez przeglądarkę na serwisie Twitter W przypadku Twittera link do strony nie powinien zawierać więcej niż 160 znaków. 10.7 Ustawienia aplikacji Widok ustawień znajduje się w aplikacji Ustawienia, gdzie użytkownik może ustawić stronę startową dla każdej karty czy zezwolić na zapisywanie danych w pamięci podręcznej i historii (Rysunek 20). 31

Rysunek 20: widok ustawień przeglądarki 32

11. Testowanie aplikacji oraz dyskusja wyników Do sprawdzenia wyników wykorzystano przeglądarkę internetową Safari dla systemu ios. Wyniki działania aplikacji są przedstawione na ilustracjach zamieszczonych poniżej. Rysunek 21:Widok karty przeglądania Rysunek 22:Widok karty przeglądania w Safari Widoki kart w przeglądarkach nieznacznie różnią się od siebie (Rysunek 21-22). W przeglądarce Safari, gdy użytkownik wprowadza adres to pojawiają się podpowiedzi stron zawierające znaki wprowadzone przez niego. 33

. Rysunek 23: widok wyboru kart w utworzonej aplikacji Rysunek 24: widok wyboru kart w Safari Widok wyboru kart w przeglądarce Safari umożliwia podgląd wczytanych stron oraz włączenie kart w trybie prywatnym, który nie zapisuje danych w pamięci podręcznej oraz historii. W utworzonej aplikacji widok kart przeglądania ogranicza się jedynie do prostej listy, gdzie przechowywane są tytuły wczytanych stron internetowych (Rysunek 23-24). Rysunek 25: widok kontrolera aktywności w utworzonej aplikacji Rysunek 26: widok kontrolera aktywności w Safari 34

Obie przeglądarki umożliwiają te same opcje udostępniania (Rysunek 25-26). Safari dodatkowo umożliwia dodawanie wczytanej strony do Reading List(lista przechowująca adresy stron, które są współdzielone między urządzeniami Apple tego samego użytkownika) i ustawienie skrótu do niej na pulpicie telefonu. Rysunek 27: widok dodawania/ edycji zakładek w Safari Rysunek 28: widok dodawania/edycji zakładek Widok dodawania/edycji zakładek w przeglądarce Safari różni się tym, że obok tytułu strony wyświetlany jest jej Favicon oraz możliwość dodania zakładki do odpowiedniego podfolderu (Rysunek 28). Rysunek 29: widok zakładek w Safari Rysunek 30: widok zakładek w stworzonej aplikacji 35

W obu przeglądarkach zakładki wyświetlane są w UITableView (Rysunek 29-30). Safari umożliwia tworzenie podfolderów na zakładki. Widok zakładek umożliwia przełączenie się na Reading List oraz współdzielone linki do stron na Twitterze za pomocą widoku UISegmentedControl. Rysunek 31: widok historii w Safari Rysunek 32: widok historii w stworzonej aplikacji Historia w obu przeglądarkach tak jak zakładki jest wyświetlana w UITableView (Rysunek 31-32). Jedyną różnicą jest to, że w utworzonej aplikacji w każdym wierszu tabeli znajduje się tytuł odwiedzonej strony, adres url oraz dokładna data wczytania. Safari nie wyświetla dokładnej daty załadowania strony, tylko porę dnia, w której ją wczytano. Do różnic po stronie Safari oprócz wyżej wymienionych można zaliczyć: bardziej rozbudowane ustawienia wybór silnika wyszukiwania automatyczne uzupełnianie formularzy oraz zapisywanie haseł Funkcjonalność Wybór Kart Opcje współdzielenia na serwisach społecznościowych Opcje współdzielenia między urządzeniami Zakładki Historia Search engine Grupowanie zakładek Safari tak tak tak tak tak tak tak Utworzona aplikacja tak tak nie tak tak nie nie Tabela 1: Zestawienie funkcjonalności obu przeglądarek 36

12. Podsumowanie Analizując powyższe zestawienie przeglądarek (Tabela 1) można dojść do wniosku, iż utworzona w ramach projektu inżynierskiego aplikacja spełnia podstawowe wymagania stawiane mobilnym przeglądarkom (tj. wybór kart przeglądania, historia, załadki, opcje współdzielenia, poprawne wyświetlanie stron, prosty interfejs użytkownika). Interfejs graficzny został utworzony w taki sposób, aby jego użytkowanie przebiegało w sposób intuicyjny. Aplikacja wczytuje strony internetowe dokładnie tak jak porównana z nią przeglądarka. Wynika to z tego, iż w obu przeglądarkach znajduje się ten sam silnik WebKit. Podczas testowania nie stwierdzono żadnych problemów związanych z wydajnością. Oprócz zwykłego surfowania po sieci może być także stosowana przez webdeveloperów do testowania mobilnych wersji witryn internetowych. Utworzona w ramach projektu aplikacja pozwoliła mi na utrwalenie podstaw języka Objective-C oraz zapoznanie się z ogromnym SDK dla systemu ios. Projekt został utworzony w taki sposób, aby jego dalsza rozbudowa nie stanowiła większych problemów. Środowisko Xcode jest potężnym narzędziem pozwalającym na pisanie aplikacji na system ios. Jest ono na tyle intuicyjne i proste w obsłudze, że tworzenie oprogramowania przebiega w sposób łatwy i przyjemny. Wbudowany symulator iphone oraz ipad umożliwia twórcom oprogramowania testować swoje projekty bez konieczności wydawania środków na urządzenie fizyczne oraz konto developera. 37

13. Bibliografia [1] Smartphone OS Market Share, Q2 2014 (http://www.idc.com/prodserv/smartphone-os-market-share.jsp) Kwiecień 2014 [2] ios (http://en.wikipedia.org/wiki/ios) Wrzesień 2014 [3] ios Technology Overview: About the ios Technologies (https://developer.apple.com/library/ios/documentation/miscellaneous/conceptual/iphoneostechoverview/int roduction/introduction.html) Wrzesień 2014 [4] Cocoa Core Competencies: Model-View-Controller (https://developer.apple.com/library/ios/documentation/general/conceptual/devpedia-cocoacore/mvc.html) Wrzesień 2013 [5] Cocoa Application Competencies for ios: Target-Action (https://developer.apple.com/library/ios/documentation/general/conceptual/devpedia-cocoaapp/targetacti on.html) Wrzesień 2013 [6] Cocoa Core Competencies: Delegation (https://developer.apple.com/library/ios/documentation/general/conceptual/devpedia-cocoacore/delegation.html) Wrzesień 2013 [7] Software license agreement for OS X Mavericks Październik 2013 [8] Xcode - IDE - Apple Developer (https://developer.apple.com/xcode/ide/) Wrzesień 2014 [9] Xcode - Interface Builder - Apple Developer (https://developer.apple.com/xcode/interface-builder/) Październik 2014 [10] ios Developer Program (https://developer.apple.com/programs/ios/) Wrzesień 2014 [11] Stephen G. Kochan. Programming in Objective-C, Sixth Edition Addison-Wesley Grudzień 2013 [12] Stephen Prata. Język C++. Szkoła programowania wydanie 5 Helion 2006 [13] Programming with Objective-C: Encapsulating Data (https://developer.apple.com/library/mac/documentation/cocoa/conceptual/programmingwithobjectivec/e ncapsulatingdata/encapsulatingdata.html#//apple_ref/doc/uid/tp40011210-ch5-sw1) Grudzień 2012 [14] - Cocoa Touch - ios Technology Overview - Apple Developer (https://developer.apple.com/technologies/ios/cocoa-touch.html) Wrzesień 2014 [15] UIKit Framework reference (https://developer.apple.com/library/ios/documentation/uikit/reference/uikit_framework/) Wrzesień 2014 [16] Foundation Framework Reference (https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/objc_classic/intro/in trofoundation.html) Październik 2013 [17] WebKit (http://en.wikipedia.org/wiki/webkit) Wrzesień 2012 [18] WebKit Objective-C Programming Guide (https://developer.apple.com/library/mac/documentation/cocoa/conceptual/displaywebcontent/displaywe bcontent.html) Listopad 2012 [19] Sqlite (http://pl.wikipedia.org/wiki/sqlite) Sierpień 2014 38

[20] Vandad Nahavandipoor ios7 Programming Cookbook O'Reilly Styczeń 2014 39