Quick viewing(Text Mode)

DLA POCZĄTKUJĄCYCH Historia Ios 2 • Pierwsza Wersja Systemu Ios Nosiła Nazwe Iphone OS, Nazwe, Ios Przyjeto Podczas Wprowadzania Wersji 4.0

DLA POCZĄTKUJĄCYCH Historia Ios 2 • Pierwsza Wersja Systemu Ios Nosiła Nazwe Iphone OS, Nazwe, Ios Przyjeto Podczas Wprowadzania Wersji 4.0

iOS

DLA POCZĄTKUJĄCYCH Historia iOS 2 • Pierwsza wersja systemu iOS nosiła nazwe iPhone OS, nazwe, iOS przyjeto podczas wprowadzania wersji 4.0. • Czerwiec 2007 – pierwsza wersja iPhone OS 1. Ostatnia wersja serii jeden to 1.1.5. • Lipec 2008 – wydanie wersji iPhone OS 2.0. Ostatnia release serii to 2.2. • Czerwiec 2009 – wydanie wersji iPhone OS 3.0 wraz z iPhone 3GS. Dla urządzenia iPad powstaje wersja iPhone OS 3.2 Historia iOS 3

• Czerwiec 2010 – wydanie wersji iOS 4.0, system przyjmuje oficjalnie nazwe iOS. Ostatnia wersja serii to 4.2.1 • Czerwiec 2011 – wydanie wersji iOS 5.0, ostatnia wersja 5.1.1 • Czerwiec 2012 – wydanie wersji iOS 6.0 iOS 5.x 4 • Koniec wsparcia dla iPhone 3G oraz iPod Touch 2 generacji. • : wsparcie dla powiadomień. • Wiadomości: automatyczna synchronizacja miedzy urządzeniami, wysyłanie wiadomości poprzez Wi-Fi, GIF • : wsparcie dla prasy elektronicznej. • iCloud: synchronizacja danych z AppStore, zdjeć, kontaktów, notatek, kalendarzy etc. • Integracja z Twitterem. • : osobisty asystent obsługiwany głosem, tylko iPhone 4S iOS 6.x 5 • Koniec wsparcia dla iPad oraz iPod Touch 3 generacji. • Siri: kanadyjski, hiszpański, włoski, koreański mandaryński • Integracja z Facebookiem • Passbook: aplikacja wspierająca biletów elektronicznych, kart lojalnościowych etc. • Mapy: rezygnacja z map Google, dostawcą zostaje firma Tom Tom, widok 3D z „lotu ptaka” iOS 6.x 6 • iCloud • LostMode: uaktywniany w przypadku zgubienia urządzenia • FaceTime: wsparcie dla LTE • Do not disturb mode. • Wsparcie IPv6 dla LTE i Wi-Fi Architektura iOS 7 Architektura iOS 8 • Architektura systemu iOS jest podobna do podstawowej architektury systemu operacyjnego Mac OS X. • Na najwyzszym poziomie abstrakcji iOS działa jako pośrednik miedzy aplikacjami a znajdującym sie na samym dole hierarchii sprzetem. • Programy nie komunikują sie bezpośrednio ze sprzetem lecz z zestawem interfejsów, które zabezpieczają urządzenie przed nieautoryzowanymi działaniami. • Powstała w ten sposób abstrakcja pozwala na łatwe wytwarzanie oprogramowania, które bedzie działało w ten sam sposób na róznych platformach sprzetowych. Architektura iOS 9 Cocoa Touch 10

• Storyboards (iOS 5) • Wsparcie dla dokumentów: UIDocument (iOS 5) • Multitasking (iOS 4) • Printing (iOS 4.2) • Wbudowane kodowanie danych (iOS 4) • Apple Push Notification Service (iOS 3) • Lokalne notyfikacje (iOS 4) Cocoa Touch 11

• Rozpoznawanie gestów: „tapowanie”, przeciąganie, zoom etc. • Udostepnianie plików ( poprzez iTunes) • Peer-to-peer ( Bluetooth) • Standardowy system kontrolerów widoku • Wsparcie dla zewnetrznych wyświetlaczy. Cocoa Touch frameworki 12

• Addres Book UI: zarządzanie kontaktami • Event Kit UI: zarządzanie danymi kalendarza • Game Kit: wsparcie dla , ( GKTurnedBasedMatch iOS 5) • iAd: reklamy • Map Kit: wyświetlanie map Cocoa Touch frameworki 13

• Message UI: tworzenie email i SMS. • Twitter (iOS 5) • UIKit: Wspiera: zarządzanie aplikacją i interfejsem graficznym, przekazywanie zdarzeń, operacje „Cofnij”, ”Kopiuj” i „Wklej”, tworzenie PDF, odczyt danych z akcelerometrów i czujników odległości, dostep do biblioteki zdjeć, wbudowanego aparatu / kamery, numeru i modelu urządzenia, stanu baterii. Architektura iOS 14 Media: grafika 15

(Core Graphics) zapewnia najbardziej podstawowy, natywny, wektorowy sposób renderingu grafiki 2D. • – API zapewniające rozległe wsparcie do wytwarzania animacji i wizualizacji danych, w szczególności tworzenia animowanego GUI. • OpenGL ES – wsparcie dla dwu i trój wymiarowego renderingu w oparciu o akceleracje sprzetową̨. Media: grafika 16

– zaawansowane narzedzie słuzące do renderowania tekstu. • Image I/O – interfejs do odczytywania i zapisywania wielu rodzajów formatów obrazu. • Assets framework – dostep do Biblioteki Zdjeć uzytkownika zapisanej na dysku twardym urządzenia. Media: audio 17

• Media Player Framework: współpraca z iTunes, odtwarzanie ściezek i list • AV Foundation : nagrywanie i odtwarza dźwieku, interfejsy Objective – • Open AL: pozycjonowanie audio • Framework: biblioteki niskopoziomowe Media: audio 18

Wspierane formaty: • AAC • (ALAC) • A-law • IMA/ADPCM (IMA4) • Linear PCM • µ-law • DVI/Intel IMA ADPCM • Microsoft GSM 6.10 • AES3-2003 Media: video 19

• UIImagePickerController – jedna z klas znajdujących sie w UIKit, dostarcza standardowego interfejsu do nagrywania obrazu w urządzeniach z iOS posiadających wbudowaną kamere. • Media Player framework – zapewnia mozliwość wyświetlania materiału video zarówno na pełnym ekranie urządzenia jak i na jego cześci. • AV Foundation – dostarcza zestaw interfejsów napisanych w jezyku Objective-C do zarządzania, nagrywania i odtwarzania materiału filmowego. • Core Media – niskopoziomowe typy danych i interfejsy. Media: frameworki 20

• Core Graphics: wektorowe API Quartz 2D • : zaawansowane przetwarzanie obrazów (iOS 5) • Core MIDI: współpraca z wewn. i zewn. urządzeniami MIDI (iOS 4.2) • Core Text: współpraca z tekstem i czcionkami • : bufory video dla Core Media Framework (iOS 4.0) Media: frameworki 21

• Image I/O: przetwarzanie obrazów • GLKit: wsparcie dla aplikacji OpenGL ES • Media Player: wysokopoziomowe wsparcie dla audio i video • OpenAL: wsparcie dla pozycjonowania dźwieku • OpenGL ES: rendering 2D i 3D • Quartz Core : animacje i efekty wizualne Architektura iOS 22 23

• iCloud Storage: przechowywanie dokumentów w iCloud (iOS 5) • Automatic : uproszczenie procesu zarządzania pamiecią (iOS 5) • Block Objects: odpowiednik wyrazeniem lambda (iOS 4) • : asynchroniczne zarządzanie zadaniami w aplikacji, lepsza wydajność niz zwykła wielowątkowość. • In-App Purchase: obsługa transakcji pienieznych w aplikacji • SQLite: „lekka” baza danych • XML : przetwarzanie dokumentów XML Core Services 24

• Accounts Framework: wsparcie dla uwierzytelniania (iOS 5) • Address Book: dostep do kontaktów zapisanych w telefonie • CFNetwork: praca z siecią ( sockety BSD, SSL, TLS, DNS, HTTP, HTTPS, FTP) • : technologia słuząca do zarządzania modelem danych we wzorcu projektowym MVC za pomocą GUI. • Core Foundation: usługi i zarzadzanie danymi (kolekcje, wątki, formatowanie łańcuchów znakowych, wątki, URL, strumienie etc.) napisane w jezyku C Core Services 25

• Core Location: informacje o pozycji geograficznej i kierunku poruszania, współpraca z GPS, BTS, kompas magnetyczny • Core Media: niskopoziomowe zarządzanie treściami Audio i Video niz w AV Foundation Framework (iOS 4) • Core Telephony: dostep do danych związanych z usługami telefonicznymi (np. operator), wsparcie dla usług VoIP • Event Kit: zarzadzanie danymi w kalendarzu uzytkownika. • Foundation: interfejs do Core Foundation Framework dostepny w jezyku Objective - C Core Services 26

• Mobile Core: definicje niskopoziomowych typów uzywanych przez UTI -Uniform Type Identifiers • Newsstand Kit: wsparcie dla prasy elektronicznej (iOS 5) • : wsparcie dla prezentacji plików nie wspieranych bezpośrednio w aplikacji ( np. pliki .doc). • Store Kit: „In-App Purchase”, obsługa transakcji pienieznych w aplikacji • System Configuration: dostep do informacji o połączeniu przez WiFi i sieć komórkową oraz o osiągalnych hostach Architektura iOS 27 Core OS 28

• Core Telephony: dostep do danych związanych z usługami telefonicznymi • Accelerate: zoptymalizowana biblioteka do działań matematycznych w szczególności: DSP, algebra liniowa, przetwarzanie obrazów (iOS 4) • Core Bluetooth: współpraca z akcesoriami Bluetooth Low Energy ”LE” • External Accessory: współpraca z urządzeniami podłączonymi do 30-pinowego wejścia lub poprzez Bluetooth Core OS 29

• Generic Security Services: wsparcie dla usług bezpieczeństwa (iOS 5 ) • Security: zarządzanie certyfikatami i kluczami kryptograficznymi, wsparcie dla szyfrowania symetrycznego czy digests ( OpenSSL) • System: środowisko kernela, sterowników i niskopoziomowych funkcji UNIX, interfejsy Objective – C dla: wątki POSIX, sockety BSD, operacje I/O, usługi i DNS, zarządzanie pamiecią, operacje matematyczne. Urządzenia z systemem iOS 30 iPhone 31

Urządzeni CPU Pamięć GPS Min Max Kamera Rozdzielczo e ść iPhone 3G 400 MHz 128 MB YES 2.0 4.2.1 YES 320×480 Samsung RISC ARM iPhone 600MHz 256 MB YES 3.0 6.0 YES 320×480 3GS ARM Cortex A-8 iPhone 4 800MHz 512 MB YES 4.0 6.0 YES 640×960 ARM Cortex A-8 iPhone 4S 800Mhz 512 MB YES 5.0 6.0 YES 640×960 dual–core DRAM ARM Cortex-A9 iPod Touch 32

Urządzeni CPU Pamięć GPS Min Max Rozdzielc e zość iPod touch 400 MHz 128 MB NO 1.1 3.1.3 320×480 1st Gen Samsung RISC ARM iPod touch 533 MHz ARM 128 MB NO 2.1.1 4.2.1 320×480 2nd Gen 11 iPod touch 600MHz 256 MB NO 3.1.1 6.0 320×480 3rd Gen ARM Cortex A-8 iPod touch 800MHz 256 MB NO 4.1 6.0 640×960 4th Gen ARM Cortex A-8 iPod touch 800Mhz dual– 256MB NO 5.0 6.0 640×960 5th Gen core ARM Cortex-A9 iPad 33

Urządze CPU Pamięć GPS Min Max Rozdziel nie czość iPad 1 Ghz 256 MB Cell models3.2 4.3.1+ 768 × ARM DDR 1024 Cortex A-8 iPad 2 1 Ghz dual 512 MB Cell models4.3 6.0 768 × - core ARM DDR2 1024 Cortex A-9 new iPad 1 Ghz dual 1 GB Cell models5.1 6.0 2048 × - core ARM 1536 Cortex A-9 Jak zacząć programować w iOS? 34

• Komputer z systemem Mac OS X, najnowsza wersja wymaga systemu operacyjnego Lion

• Xcode: zintegrowane środowisko programistyczne firmy Apple, najnowsza wersja (4.3.3) wymaga systemu operacyjnego w wersji Lion.

• Rejestracja w programie dla programistów firmy Apple: iOS Developer Program. iOS Developer Program 35

• Standard iOS Developer Program – program dla developerów i firm umozliwiający sprzedaz oprogramowania poprzez sklep Apple - . (99$) • iOS Developer Enterprise Program – program dla firm tworzących oprogramowanie do uzytku wewnetrznego, brak mozliwości sprzedazy oprogramowania w App Store. (299$) • iOS Developer University Program - program przeznaczony dla uniwersytetów chcących wprowadzić do programu nauczania tematyke programowania na platformie iOS. 36 37 38 39 40 41 42 43 44 45 Xcode

• Xcode: zintegrowane środowisko programistyczne firmy Apple. • Umozliwia programowanie na platformach Mac OS X i iOS. • W jego skład wchodzą miedzy innymi: – Instruments – Interface Builder

46 Pierwsza aplikacja iOS!

“Do or do not... there is no try.” - mistrz Yoda

47 Xcode Skróty klawiszowe

Przycisk Komenda ⌘H Ukrycie Xcode ⌘Q Zamkniecie Xcode ⌘Q Nowy plik ⌘W Zamkniecie okna ⌘S Zapisz ⌘R Uruchom ⌘B Zbuduj F6 Step over F7 Step inyo F8 Step out 48 Objective-C PODSTAWY Objective–C 50

• Objective–C to jezyk programowania stworzony w celu rozszerzenia jezyka C o mozliwości programowania obiektowego. Jezyk ten zapewnia pełną wsteczną kompatybilność z C i jest jego nadzbiorem. Sposób wywoływania metod nazywanych wiadomościami (ang. ) jest wzorowana na jezyku Smalltalk. • Objective–C jest obecnie uzywany głównie w systemach firmy Apple Inc.: Mac OS X (zestaw bibliotek Cocoa) oraz iOS. Został stworzony w roku 1986 przez Toma Love'a oraz Brada Cox'a i pierwotnie był uzywany w systemie operacyjnym NeXTSTEP OS firmy NeXT. Objective–C: metody 51

• Przekazywanie wiadomości (ang. message processing). Polega on na tym, ze w przeciwieństwie do jezyków takich jak Java nie „wywołuje sie metody” lecz „wysyła sie wiadomość” do obiektu. • W czasie wykonywania programu obiekt otrzymuje wiadomość a nastepnie odpowiada za jego interpretacje • Wiadomość jest opisywana przez tzw. selector, łańcuch znakowy odpowiadający nazwie metody, która ma zostać wykonana • Dla danej klasy nie mogą istnieć dwie metody o tej samej nazwie nawet jeśli przyjmują inne typy parametrów. Objective–C: metody 52

Wywoływanie metod w C# i / lub Java

Metoda bez parametr: Obiekt.metoda ();

Metoda z jednym parametrem: Obiekt.metoda ( parametr );

Metoda z dwoma parametrami: Obiekt.metoda ( parametr1, parametr2 ); Objective–C: metody 53

Metody w Objective- C

Metoda bez parametru: [ obiekt metoda ] ;

Deklaracja Metody: - (void) metoda ; // znak minus na początku

Deklaracja Metody klasy: + (void) metoda ; // znak plus na początku Objective–C: metody 54

Metody w Objective- C

Metody z parametrami: nazwa etykiety, dwukropek, parametr [ obiekt etykietaMetody : parametr] ; [ obiekt etykietaMetody : parametr etykieta2 : parametr2 ] ;

Deklaracja metody z parametrami: - (void) etykietaMetody : (typ parametru) parametr ; - (void) etykietaMetody : (typ parametru) parametr Etykieta2 (typ parametru) : parametr2 ; Objective–C: metody 55

Przykładowo: Deklaracja: - (void) ustawNazwisko:(NSString *) nazwisko - (void) ustawImie:(NSString *) imie orazNazwisko: (NSString *) nazwisko

Wywołanie: [obiekt ustawNazwisko: @”Kowalski” ]; [obiekt ustawImie: @”Jan” orazNazwisko: @”Kowalski”]; Objective–C: metody 56

Dlaczego taki sposób wywoływania metod?

Metoda rysująca koło w 2D przyjmująca jako parametry pozycje jego środka X i Y oraz promień R.

Wywołanie metody „rysujKoło” w C# / Java obiekt.rysujKoło (2,3,4); //który parametr to R?

Wywołanie metody „rysujKoło” w Objective-C [obiekt rysujKołoNaX: 2 NaY: 3 oPromienu: 4]; Objective–C: klasy 57

• Intefejs i implementacje klasy umieszcza sie w dwóch osobnych blokach kodu źródłowego.

• Definicja interfejsu klasy rozpoczyna sie słowem kluczowym @interface. Nastepnie zostaje podana nazwa deklarowanej klasy oraz po dwukropku klasa bazowa. W bloku pomiedzy nawiasami umieszcza sie nazwy i typy pól danej klasy. Nastepnie znajduje sie blok deklaracji metod. Całość zostaje zakończona słowem kluczowym @end. Objective–C: klasy 58

// Plik Osoba.h @interface Osoba : NSObject { int wiek; NSString *nazwisko; } + (int) liczbaOsob; //metoda klasy - (NSString*) przedstawOsobe; - (void) ustawWiek:(int) nowyWiek; @end Objective–C: klasy 59

• Definicja interfejsu klasy rozpoczyna sie słowem kluczowym @interface. • Nastepnie zostaje podana nazwa deklarowanej klasy oraz po dwukropku klasa bazowa. • W bloku pomiedzy nawiasami umieszcza sie nazwy i typy pól danej klasy • Nastepnie znajduje sie blok deklaracji metod. • Całość zostaje zakończona słowem kluczowym @end. Objective–C: klasy 60

// Plik Osoba.m @implementation Osoba

- (NSString*) przedstawOsobe; { // kod źródłowy metody } @end; NSString 61

• NSString to klasa dostarczaj ąca zestawu funkcjonalności do operowania łańcuchami znakowymi, przechowywanymi jako tablica znaków w formacie . • Wyrazenia łańcuchowe w kodzie rozpoczyna sie znakiem „@” a nastepnie pomiedzy cudzysłowami umieszcza się ządany tekst. NSString *s = [ NSString stringWithFormat:@”tekst”]; NSString *s = [[ NSString alloc] initWithFormat:@”tekst”]; NSString *s =@”tekst”; NSString 62

• Tworzenie łańcucha znakowego na podstawie innych zmiennych jest podobny do tego uzywanego np. w funkcji printf z jezyka C. • W celu dodania do NSString innej wartości uzywa sie znaku % po którym dodaje sie identyfikator typu wstawianej zmiennej.

NSString *s; s= [[ NSString alloc] initWithFormat:@”Wiek wynosi %i”, wiek ]; NSString: Format Specifiers 63

%@ NSString* %p Pointer Float / Double (in scientific %d Signed Integer %e notation) %i Signed Integer %s C String %u Unsigned Integer %c Character %f Float / Double %C Unicode Character %x Hexidecimal Integer %ll Long Long %X Hexidecimal Integer %llu Unsigned Long Long %o Octal Integer %Lf Long Double %zu size_t NSLog() 64

• NSLog jest odpowiednikiem funkcji printf z jezyka C. • Słuzy ona do wysyłania informacji na standardowe wyjście tj. konsole. • NSLog przyjmuje jako parametr łańcuch znakowy formatowany w ten sam sposób jak NSString. NSLog (@”informacja”); int wiek = 5; NSLog(@”Wiek wynosi %i”,wiek); Metoda description 65

• Metoda description to cześć protokołu NSObject • Odpowiednik metody ToString() C# czy toString() Java • Tworzy reprezentacje obiektu jako łańcucha znaków tj powinna zwracać obiekt typu NSString Metoda description 66

Niech klasa Osoba posiada nastepujące pola • NSString *imie • NSString *nazwisko • NSInteger wiek - (NSString *) description { return [NSString stringWithFormat:@"Osoba: %@ %@ - %d", imie, nazwisko, wiek]; }

NSLog (@”%@”, osoba); Dziedziczenie 67

• Klase po której odbywa sie dziedziczenie oznacza sie w sekcji @interface. • Po nazwie klasy stawia sie znak dwukropka i podaje klase bazową.

@interface MojaKlasa : KlasaBazowa

• Podstawową klasą bazową w Objectvie-C jest klasa NSObject, jej odpowiednik w jezyku Java jest Object. Inicjalizacja obiektów 68

• W Objective-C zwykle nie uzywa sie pojecia konstruktora znanego z innych jezyków programowania obiektowego • Proces inicjalizacji zwykle przebiega dwuetapowo:

Klasa *obiekt = [[Klasa alloc] init];

• Metoda alloc alokuje potrzebną pamieć • Metoda init przeprowadza właściwą inicjalizacje obiektu. Metoda init 69

• W Objective C zwykle nie uzywa sie pojecia konstruktora klasy. • W Objective – C nie istnieje specjalna konstrukcja do tworzenia nowych obiektów klasy. • „Konstruktorem” jest metoda zwracająca zainicjalizowany obiekt. • Podstawową metodą inicjalizacyjną NSObject jest metoda init, zwykle przyjmuje sie, ze metody tworzące nowy obiekt posiadając nazwe rozpoczynająca sie od słowa init np.: ● init ● initWithNumber Metoda init 70

Przykładowa implementacja metody init: -(id)init { if (self = [super init]) { //inizjalizacja } return self;

} id 71

• Słowo kluczowe id reprezentuje generyczny typ obiektowy, który jest wskaźnikiem na dowolny typ. • Typ id współpracuje z operacją rzutowania • Jeśli system nie bedzie potrafił przeprowadzić rzutowania zwrócona zostanie wartość nil bedąca odpowiednikiem null z innych jezyków programowania. id 72

Osoba *osoba = [[Osoba alloc] init]; id a = osoba; //id jest wskaźnikiem Osoba *drugaOsoba = (Osoba*) a; //poprawne rzutowanie obiektu NSString *s = (NSString *) a; // po tej operacji s przyjmie wartość nil Zarządzanie pamiecią 73

• Zarządzanie pamiecią jest jednym z najistotniejszych problemów programowania. • Niepoprawne zarządzanie pamiecią moze doprowadzić do wycieków pamieci (ang. memory leak). • W iOS istnieją dwie techniki zarządzania pamiecią: ● Zliczanie referencji oraz pula automatycznego zwalniania pamieci ● Automatyczne zliczenie referencji : ARC – Automatic Reference Counting Zliczanie referencji 74

• Cykl zycia obiektu rozpoczyna sie w momencie alokacji potrzebnej pamieci a kończy w momencie jej zwolnienia. • Kazdy obiekt ma przypisaną do siebie wartość́ ilości biezących referencji (ang. reference count lub retain count). Kiedy któryś element programu jest zainteresowany uzywaniem obiektu zwieksza jego liczebność referencji o jeden a kiedy obiekt przestaje być potrzebny licznik zostaje pomniejszony o jeden. • Nowo utworzony obiekt posiada licznik referencji równy jeden. • Kiedy wartość licznika spadnie do zera zostaje on zniszczony a pamieć zwolniona. Zliczanie referencji 75

• Licznik referencji zwieksza sie przy uzyciu metody retain a zmniejsza przy uzyciu metody release. Biezącą wartość licznika mozna uzyskać poprzez wywołanie metody retainCount.

Osoba *ktos = [[Osoba alloc] init]; //retain count =1 [ktos retain]; //retain count =2 [ktos release]; //retain count =1 [ktos retain]; //retain count =2 [ktos release]; //retain count =1 [ktos release; //retain count =0, obiekt moze zostać zniszczony. Autorelease pool 76

• Autorelease pool jest metodą pozwalającą na cześciowe zautomatyzowanie procesu zarządzania pamiecią. • Kazdy obiekt dziedziczący po NSObject posiada metode -(id) autorelease; • Metoda ta informuje system, ze w przyszłości do obiektu zostanie wysłana wiadomość release. Bardziej dokładnie wysłanie do obiektu wiadomości autorelease powoduje jego dodanie do puli automatycznego zwalniania pamieci. Autorelease pool 77

• Za obsługe puli jest odpowiedzialna instancja klasy NSAutoreleasePool.

NSAutoreleasePool *pool; pool = [[NSAutoreleasePool alloc] init]; //kod programu [pool release]; • W powyzszym przypadku w momencie wysłania wiadomości release do puli, wywołuje ona metode release dla znajdującego sie w nim obiektu. Jego wartość retainCount spada do zera i zostaje on zniszczony. Autorelease pool 78

• Uwaga: NSAutoreleasePool != odśmiecanie

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; for ( int i = 0 ; i < 1000000 ; i++) { id obj = [tablica objectAtIndex:i]; //działanie na obiekcie obj. } [pool release]; Ogólne zasady 79

• Wszystkie obiekty utworzone przy uzyciu metod alloc, copy i new powinny zostać zwolnione recznie poprzez wywołanie metody release, pozostałe obiekty nalezy zwalniać poprzez zwalnianie puli. • Wiekszość standardowych klas Cocoa posiada odpowiednie metody słuzące do tworzenia obiektów, które b edą albo zwalniane automatycznie albo bedzie to wymagane od programisty. NSString *s = [ NSString stringWithFormat:@”tekst”]; NSString *s = [[ NSString alloc] initWithFormat:@”tekst”]; ARC 80

• ARC – automatyczne zliczanie referencji zostało wprowadzone w iOS 5 i znacznie upraszcza zarządzanie pamiecią w iOS. • ARC umieszcza w kodzie źródłowym polecenie release, retain i autorelease ( nie mozna ich juz uzywać!). • ARC działa w czasie kompilacji, nie jest wiec równoznaczne z odśmiecaniem pamieci. ARC 81

• Wskaźniki dzielą sie na „silne” strong oraz słabe „weak”. • Wskaźniki „silne” utrzymują obiekt przy zyciu. NSString *firstName = self.textField.text; • Wszystkie wskaźniki są z załozenia „silne”, przy deklaracji zmiennej mozna uzyć jawnego słowa kluczowego __strong. __strong NSString *firstName = self.textField.text; ARC 82

• Wskaźniki słabe nie utrzymują obiektu przy zyciu. • Jeśli wskaźnik wskazuje na zdealokowaną pamieć to zostaje mu przypisana wartość nil. • Aby zadeklarować zmienną jako słabą nalezy uzyć jawnego słowa kluczowego __weak.

__weak NSString *str = [[NSString alloc] initWithFormat:...]; NSLog(@"%@", str); //co sie stanie? ARC czy nie? 83

Co się stanie w przypadku wykonania poniższego kodu? id obj = [array objectAtIndex:0]; [array removeObjectAtIndex:0]; NSLog(@"%@", obj); Properties 84

• Properties to mechanizm słuzącym do tworzenia metod dostepu do pól składowych. • Mechanizm ten ułatwia zarządzanie pamiecią przyśpiesza tworzenie kodu. • Tworzenie property odbywa sie w dwóch etapach: w cześci interfejsu i implementacji. • W cześci @interface uzywa sie słowa kluczowego @property @property (attributes) type name; Properties 85

• @property jest deklaracją „metody dostepu”, opcjonalne atrybuty dostarczają dodatkowych szczegółów zachowania property. .

@property float value;

jest odpowiednikiem

- (float)value; - (void)setValue:(float)newValue; Properties 86

Dostepne atrybuty to ● getter=getterName ● setter=setterName ● readwrite ● readonly ● strong ● weak ● copy ● assign ● retain ● nonatomic Properties 87

W sekcji @implementation nalezy uzyć słowa kluczowego @synthesize, które kończy tworzenie property. @interface MyClass : NSObject @property(copy, readwrite) NSString *value; @end @implementation MyClass @synthesize value; @end BOOL 88

• Typ BOOL opisuje dane logiczne to jest takie, które przyjmują wartości 0 ( fałsz) i 1 (prawda). • Przyjmowane wartości to :YES, NO, TRUE, FALSE • BOOL nie jest oddzielnym typem danych! • BOOL to ośmiobitowa liczba całkowita utworzona w systemie za pomocą typdef nalezy wiec zachować ostrozność przy rzutowaniu liczb do BOOL. Immutable / mutable 89

• „Immutable object” to obiekt, który po inicjalizacji nie moze być zmieniany. Np. obiekty klasy String w Java.

• „Mutable object” to obiekt, którego zawartość moze by modyfikowana po inicjalizacji. NSArray i NSMutableArray 90

• NSArray i jej podklasa NSMutableArray to klasa słuząca do zarządzania uporządkowanymi kolekcjami obiektów. • NSArray tworzy statyczną tablice, która jest wypełniana elementami przy inicjalizacji, NSMutableArray umozliwia dodawania i usuwanie elementów po inicjalizacji. • Obie te klasy przechowują tylko i wyłączenie obiekty Objective-C, aby przechować zmienną o typie prymitywnym nalezy uzyć którejś z klas nadających im właściwości obiektowe (ang. wrapper). • NSMutableArray dziedziczy po NSArray NSArray i NSMutableArray 91

Tworzenie tablicy (słowo kluczowe nil informuje o końcu listy obiektów) NSArray *a = [NSArray arrayWithObjects: @”raz”,@”dwa”,@”trzy”,nil];

Liczba elementów w tablicy: - (unsigned) count;

Pobranie obiektu o zadanym indeksie - (id) objectAtIndex: (unsigned int) index; NSArray i NSMutableArray 92

Tworzenie NSMutableArray: NSMutableArray *a = [NSMutableArray arrayWithCapacity:8] ; NSMutableArray *a = [[NSMutableArray alloc] init];

Dodawanie obiektów do tablicy - (void) addObject: (id) anObject;

Usuwanie elementów z tablicy: - (void) removeObjectAtIndex: (unsigned) index;

Tworzenie z NSArray NSMutableArray NSMutableArray * mutArray = [array mutableCopy]; NSSet i NSMutableSet 93

• NSSet bazuje na pojeciu matematycznego zbioru, to jest nieuporządkowanego zbioru unikalnych obiektów. • NSSet jest wydajniejszy niz NSArray w sytuacji wykrywania czy dany obiekt jest elementem kolekcji. Tworzenie NSSet z tablicy +(id)setWithArray:(NSArray*)arr

Tworzenie NSSet z listy obiektów +(id)setWithObjects:,..

Sprawdzenie czy obiekt należy do kolekcji: -(BOOL)containsObject:(id)obj NSSet i NSMutableSet 94

Liczba obiektów w kolekcji: -(int)count

Tworzenie tablicy z NSSet NSArray *array = [theNsSet allObjects];

Badanie podzbioru -(BOOL)isSubsetOfSet: (NSSet*)s

Badanie części wspólnej (minimum jeden obiekt należy do zbioru) -(BOOL) intersectsSet: (NSSet*)s NSSet i NSMutableSet 95

NSMutableSet udostępnia także metody:

Dodawanie i usuwanie obiektów: -(id)addObject:(id)obj -(void)removeObject:(id)obj -(void)removeAllObjects

Działania na zbiorach: -(void)minusSet:(NSSet*)set2 -(void)intersectSet:(NSSet*)set2 -(void)unionSet:(NSSet*)set2 96 NSDictionary i NSMutableDictionary

• NSDictionary jest implementacją słownika. • NSDictionary jest tablicą która ma zawsze dwie kolumny: pierwszą, nazywaną kluczem (key) i drugą nazywaną wartością (value). • Technika programowania uzywana w słowniku nazywa sie KVC ( key-value coding). 97 NSDictionary i NSMutableDictionary

Tworzenie NSDictionary: NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"picture.png", @"Luca",@"birthday.png", @"Birthday Photo",@"pic.jpg", @"My Sister", nil];

Pobranie wartości z NSDcitionary: [dict objectForKey: @”Luca"];

Pobranie wszystkich kluczy jako NSArray keys = [dict allKeys]; 98 NSDictionary i NSMutableDictionary

Tworzenie NSMutableDictionary NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; [dict setObject:@"John" forKey:@"Firstname"]; [dict setObject:@"Doe" forKey:@"Lastname"]; [dict setObject:@"info at objectgraph.com" forKey:@"Email"];

Usuwanie obiektu z NSMutableDictionary [dict removeObjectForKey:@"Firstname”]; NSNumber 99

• NSNumber jest klasą nadającą właściwości obiektowe numerycznym typom prymitywnym. • Uzywa sie jej jeśli potrzebne jest przechowywanie typów prymitywnych jako obiektów np. Na potrzeby NSArray. NSNumber *n; n = [[NSNumber alloc] initWithInt:3]; n = [NSNumber numberWithFloat: 3.14]; n = [NSNumber numberWithBool: YES]; int a = [n intValue]; int b = [n floatValue]; 10 Data i czas 0

Pobranie bieżącej daty: NSDate *dzis; dziś = [NSDate date];

Pobranie daty jako wartości numerycznych: NSCalendar *cal = [[NSCalendar alloc] init]; NSDateComponents *components = [cal components:0 fromDate: date]; int rok = [components year]; int miesiac = [components month]; int dzien = [components day];

• Property list to w systemach Mac OS X, iOS, NeXTSTEP pliki przechowujące zserializowane obiekty. • Rozszerzenie plik to .plist • Pliki te umozliwiają łatwe przechowywanie danych w aplikacji.

101 Property list

NSString *path = [[NSBundle mainBundle] pathForResource: @”Array" ofType:@"plist"]; NSMutableArray *array2 = [[NSMutableArray alloc] initWithContentsOfFile:path]; for (NSString *str in array2) NSLog(@"--%@", str);

102 NSUserDefaults • NSUserDefaults zapewnia prosty interfejs do zapisywania danych w aplikacji. • Zapisane dane są dostepne „z kod” z kazdego miejsca w aplikacji i zostają zachowane pomiedzy kolejnymi uruchomieniami programu. • Do NSUserDefaults mozna zapisać dane typu: – NSData – NSString – NSNumber – NSDate – NSArray – NSDictionary 103 NSUserDefaults NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@”adam” forKey:@”imie"]; [defaults setBool:YES forKey:@”bool"]; [defaults synchronize];

NSString *imie = [defaults objectForKey:@”imie"];

104 10 Protokoły 5

• Klasy mogą wykazywać podobieństwa chociaz nie bedą znajdować sie na tej samej pozycji w hierarchii dziedziczenia. • Protokół to zbiór metod, które musi posiadać́ dana klasa. • Protokoły są odpowiednikiem interfejsów z innych jezyków programowania. • W terminologii Objective-C mówi sie, ze klasa adoptuje (ang. adopt) dany protokół, kiedy w sekcji @interface dokonuje sie wpisania nazw protokołów oraz o tym, ze klasa jest zgodna z protokołem (ang. conform) kiedy posiada zaimplementowane odpowiednie metody. 10 Protokoły 6

• Protokół tworzy sie poprzez uzycie słowa kluczowego @protocol, po którym nastepuje wypisanie metod protokołu a nastepnie słowo kluczowe @end. • Modyfikatory @required i @optional wskazują, @protocolktóre z metod Movable musza zostać zaimplementowane. -(void)stop; @required - (float) currentSpeed ; @optional - (void) moveObject; @end 10 Protokoły 7

Adoptowanie protokołu odbywa się poprzez podanie w interfejsie klasy nazw uzywanych protokołów pomiedzy nawiasami trójkątnymi („<” oraz „>”).

@interface Osoba :NSObject

Funkcja przyjmująca jako parametr dowolny obiekt implementujący protokół NSCoding.

- (id) codeObject: (id ) obj; 10 Kategorie 8

• Kategoria jest rodzajem alternatywy dla dziedziczenia. • Kategorie pozwalają na dodanie nowych metod do klasy. • Kategorie nie pozwalają na dodanie nowych zmiennych. • Definicja kategorii jest podobne do definicji dziedziczenia, z tym, ze nazwe kategorii umieszcza sie w nawiasach kwadratowych. 10 Kategorie 9

Metoda @interface NSString (ExtendedNSString) - (NSNumber*) lengthAsNSNumber; @end

@implementation NSString (ExtendedNSString) - (NSNumber*) lengthAsNSNumber { int len = [ self length]; return [NSNumber numberWithInt:len]; } @end 11 Kategorie 0

• Kategoria moze przeciązać metody, do przeciązanej metody mozna odwołać sie za pomocą słowa kluczowego super. • Kategorie mogą słuzyć do: ● Dzielenia kodu źródłowego klasy na kilka plików ( grupowanie metod wykonujących podobne zadanie, konfiguracja klasy dla róznych aplikacji ) ● Rozszerzanie obiektów, których nie chcemy dziedziczyć. ● Tworzenia metod prywatnych 11 Metody prywatne 1

• W Objective – C nie istnieje dokładny odpowiednik metod prywatnych z innych jezyków. • Metode prywatną mozna utworzyć przy pomocy kategorii, wadą tego rozwiązania jest konieczność utworzenia dwóch bloków sekcji @implementation. 11 Class extension 2

• Class extension jest techniką pozwalającą na utworzenie metody prywatnej przy uzyciu pustej czyli nie posiadającej nazwy kategorii. • Class extension nalezy tworzyć w pliku .m klasy. • Class extension nie wymaga utworzenia oddzielnej sekcji @implementation. 11 Class extension 3

@interface MyClass ()

@property (nonatomic, strong) Type *aPrivateProperty; - (void)aPrivateMethod;

@end

@implementation MyClass synthesize aPrivateProperty;

- (void)aPrivateMethod { } @end 11 Xcode - debugowanie 4

• Debugowanie to proces redukowania liczny błedów w oprogramowaniu. • Czesto przyjmuj on forme kontrolowanego przebiegu działania oprogramowania. • Xcode udostepnia szereg funkcjonalności ułatwiających debugowanie. Tworzenie aplikacji

PODSTAWY 11 Wzór projektowy 6

• Wzór projektowy jest abstrakcyjnym narzedziem uzywanym miedzy innymi w inzynierii oprogramowania. • Wzór proj. jest szablonem słuzącym do rozwiązywania generalnych, powtarzających sie problemów. • Wzór projektowy jest opisem sposobu rozwiązaniu problemu a nie jego instancją ( np. implementacją ). • Wzorce projektowe są czesto tworzone w oparciu o programowanie obiektowe. • Konkretna implementacja wzorca zalezy od wielu czynników, znaczenie moze mieć charakterystyka danej technologii czy wybrany jezyk programowania. 11 Wzór projektowy 7

• Wzorce projektowe dostarczają sprawdzonych rozwiązań problemów, które mogą nie być oczywiste od początku. • Istnieją zasady, które wpływają na sposób tworzenia wzorca. • Przykładowo dzieki hermetyzacji, istniej mozliwość stworzenia interfejsów, które pozwolą na zmiane wewnetrznej implementacji bez wpływu na pozostałą cześć systemu. 11 MVC 8

• Wzorzec projektowy Model – Widok – Kontroler, ang. Model- View-Controller (w skrócie MVC) jest wzorcem uzywanym najcześciej do organizowania aplikacji posiadających GUI. • MVC jest jednym z najcześciej stosowanych wzorców w iOS. • MVC przypisuje obiektom w aplikacji trzy role: modelu, widoku lub kontrolera oraz określa sposób w jaki obiekty komunikują sie miedzy sobą. • Obiekty poszczególnego typu są od siebie oddzielone abstrakcyjnymi „barierami”, pomiedzy którymi zachodzi komunikacja • W odniesieniu do zbioru obiektów danego typu uzywa sie terminy warstwa, przykładowo: warstwa modelu. 11 MVC 9 12 Model 0

• Warstwa modelu odpowiada za hermetyzacje danych oraz definiuje logike oraz metody słuzące do manipulowania i przetwarzania danych. • Przykładowo obiekt modelu moze być opisem postaci gracza w grze lub informacją dotyczącą wydarzenia znajdującego sie w kalendarzu. • Warstwa modelu jest czesto złozoną, relacyjną strukturą obiektów. • Wiekszość danych od których jest zalezny stan aplikacji powinno być przechowywanych w modelu. • Model przedstawia „wiedze” i „doświadczenie” dotyczące danego problemu wiec moze być uzywany w innych aplikacjach. 12 Model 1

• „Czysty” model nie powinien posiadać zadnych relacji z widokiem, który pozwala na jego wyświetlanie czy edycje, model nie powinien uwzgledniać kwestii prezentacji danych. • Akcja uzytkownika w warstwie widoku tworzy / modyfikuje dane i poprzez warstwe kontrolera prowadzi do zmiany w modelu. • Zmiana modelu (np. otrzymanie nowych danych poprzez sieć internet) skutkuje powiadomieniem kontrolera, który prowadzi do wyświetlenie nowych informacji w warstwie widoku. • W iOS funkcje modelu moze pełnić dowolna klasa, zwykle dziedzicząca po NSObject. 12 Widok 2

• Warstwa widoku odpowiada za cześć aplikacji, która uzytkownik „widzi”. • Widok wie jak sie „narysować” oraz odpowiedzieć na akcje uzytkownika. • Głównym celem obiektów widoku jest umozliwienie prezentacji i modyfikacji danych zawartych w modelu. • iOS dostarcza szeregu standardowych klas widoku zawartych we UIKit Framework. Wszystkie obiekty widoku dziedziczą po klasie UIView. • Widok otrzymuje informacje o zmianie modelu poprzez kontroler oraz przekazuje przez niego wprowadzone przez uzytkownika zmiany. 12 Kontroler 3

• Kontroler jest pośrednikiem miedzy obiektem / obiektami widoku i modelu. • Kontroler definiuje sposób w jaki model i widok informują sie o zmianach zachodzących w ich strukturach. • Kontroler interpretuje akcje wykonane przez uzytkownika i przekazuje dane do modelu, w przypadku zmiany modelu przesyła informacje o konieczności zmiany zawartości widoku. • iOS dostarcza szeregu klas ułatwiających tworzenie warstwy kontrolera, wszystkie te klasy dziedziczą po UIViewController. 12 Tworzenie aplikacji 4

● UIKit zapewnia infrastrukture do tworzenia aplikacji. ● Nowo utworzony projekt zawiera zestaw obiektów, które zarządzają główną petlą programu i opowiadają za komunikacją z iOS. ● Poprzez metody takie jak dziedziczenie czy delegaty programista modyfikuje to zachowanie ● Nastepnie nalezy zdefiniować model danych, logika aplikacji oraz zestaw przejrzystych interfejsów. ● Oprócz kodu źródłowego nalezy takze zapewnić oprogramowaniu odpowiednie zasoby: pliki dźwiekowe, graficzne etc. 12 Tworzenie aplikacji 5

● UIKit zarządza najwazniejszymi zadaniami aplikacji od momentu jej uruchomienia przez uzytkownika do chwili jej zamkniecia. ● Najwazniejszym obiektem w aplikacji jest instancja UIApplication, który otrzymuje eventy z systemu operacyjnego i przekazuje je do odpowiednich metod wytworzonych przez programiste. ● Oprogramowanie na system iOS powinno być tworzone przy uzyciu wzorca MVC. 12 Tworzenie aplikacji 6 12 Najwazniejsze obiekty 7

● UIApplication: nie nalezy dziedziczyć po tej klasie. Ten obiekt obsługuje główną petle ( ) programu oraz inne wysokopoziomowe funkcjonalności. Tworzony przez programiste delegat aplikacji współpracuje z tą klasą. ● Delegat aplikacji ( app delegate ) zawiera miedzy innymi logike aplikacji. Odpowiada takze za obsługe przejścia pomiedzy stanami aplikacji: inicjalizacje przy starcie oraz przejście i wyjście z tła. Delegat aplikacji dziedziczy po klasie UIResponder i moze obsłuzyć eventy nie uzyte przez UIApplication. 12 Najwazniejsze obiekty 8

● Model danych i dokumenty przechowują informacje zawarte w oprogramowaniu i są specyficzny dla danej aplikacji. Mogą przykładowo zawierać baze danych czy pliki graficzne. Klasa UIDocument dostarcza wygodne interfejsy do zarządzania zasobami aplikacji, jej uzycie nie jest jednak obowiązkowe. ● Kontrolery widoku zarządzają warstwą prezentacji aplikacji. Jeden kontroler zarządza konkretnym widokiem oraz jego pod-widokami ( elementami składowymi etc. ). ● Klasa UIViewController jest klasą bazową dla wszystkich kontrolerów widoku. Zapewnia podstawowe funkcjonalności słuzące do ładowania, prezentacji czy obracania ( w odpowiedzi na zmiane rotacji urządzenia) widoków. 12 Najwazniejsze obiekty 9

● UIKit oraz inne frameworki zawierają klasy dziedziczące po UIViewController udostepniające standardowe interfejsy iOS takie jak zakładki czy Image Picker. ● Instancja klasy UIWindow zarządza prezentacją widoku / widoków na ekranie urządzenia. Wiekszość aplikacji posiada tylko jedno okno, które zarządza widokiem na ekranie urządzenia mobilnego, mozliwe jest jednak przekazywanie obraz na inne urządzenie ( przykładowo: Apple TV). ● Zmiana prezentacji aplikacji wymaga uzycia innego kontrolera widoku, nie nalezy tworzyć w tym celu nowego okna. 13 Najwazniejsze obiekty 0

● Widoki i kontrolki zapewniają graficzna reprezentacje oprogramowania na ekranie urządzenia. ● Widok to obiekt, który rysuje odpowiednią zawartość na zadanej, prostokątnej przestrzeni oraz potrafi odpowiadać na eventy wystepujące w tym obszarze. ● Kontrolki to wyspecjalizowane widoki słuzące do prezentacji standardowych obiektów takich jak przyciski, pola tekstowe czy przełączniki. ● UIKit udostepnia zestaw standardowych widoków. Tworzenie własnych widoków polega na utworzenie klasy dziedziczącej po UIView lub jej dzieciach. ● Aplikacje mogą równiez zawierać warstwy Core Animation. 13 Model danych 1

● Model danych składa sie ze struktury danych ora logiki biznesowej, która nadaje spójności tym danym. ● Zgodnie z zasadami MVC model danych nie powinien zalezeć od sposobu jego prezentacji, mozna jednak go niej dostosować. ● Tworząc model danych implementuje sie klasy zawierające wysokopoziomową strukture danych, jednak jego podstawowe elementy przedstawia sie zwykle jako instancje standardowych klas Objective – C. 13 Model danych 2

Klasy ułatwiające przechowywanie danych: ● Dane tekstowe: NSString, NSMutableString ● Liczby: NSNumber, NSDecimalNumber, NSIndexPath ● Strumienie danych: NSData, NSValue ● Dane czasowe: NSDate, NSDateComponents ● Adresy URL: NSURL ● Kolekcje: NSArray, NSDictionary, NSSet, NSIndexSet, NSOrderSet oraz ich wersje mutable. 13 Model danych 3

Wśród inny wazny typów danych nalezy wyróznić: ● NSInteger / NSUInteger: abstrakcja na liczbe całkowitą z i bez znaku z wielkością zalezną od architektury sprzetowej. ● NSRange: wyznaczanie zakresu w ciągu np. Danych. ● NSTimeInterval: odstep czasowy w sekundach pomiedzy dwiema chwilami czasu. ● CGPoint: współrzedne X i Y punktu w przestrzeni 2D. ● CGSize: rozmiar w pionie i poziomie – szerokość i wysokość. ● CGRect: reprezentacja prostokąta – szerokość, wysokość i punkt początkowy. 13 Tworzenie interfejsu 4

● UIKit umozliwia szybkie tworzenie graficznego interfejsu uzytkownika. ● UIKit dostarcza wiele wyspecjalizowanych widoków, które ułatwiają organizacje GUI. Kontrolki udostepniają wbudowany mechanizm obsługi zdarzeń wykonanych przez uzytkownika. (wciśniecie przycisku etc.). ● Interface Builder to graficzny edytor umozliwiający tworzenie interfejsu przy pomocy techniki drag & drop. Dostepne są wszystkie standardowe widoki i kontrolery widoku UIKit i innych waznych frameworków. Mozliwa jest pełna edycja ustawień tworzonego interfejsu. ● Utworzony interfejs jest przechowywany w plikach .nib lub storyboard. 13 Tworzenie interfejsu 5

● Widokami widocznymi na ekranie zarządza kontroler widoku. ● Widok moze zawierać w sobie inne widoki, powstaje w ten sposób hierarchiczna struktura widoków, która umozliwia przykładowo przysłanianie róznych widoków. ● Niektóre widoki mogą słuzyć tylko i wyłącznie jako kontenery grupujące inne widoki. ● GUI widocznym na ekranie moze zarządzać kilka kontrolerów widoku. 13 App Bundle 6

● Po kompilacji przez Xcode aplikacja jest przechowywana jako paczka: . ● Bundle to katalog który grupuje powiązane ze sobą zasoby. Aplikacja iOS zawiera plik wykonywalny oraz potrzebne jej zasoby takie jak ikona aplikacji, pliki muzyczne etc. 13 App Bundle 7

Do najwazniejszych elementów App Bundle nalezą: ● Plik wykonywalny zawierający skompilowany kod źródłowy programu. Nazwa pliku jest taka sama jak nazwa aplikacji, rozszerzenie pliku to .app. ● Information property list: to plik przechowujący konfiguracje danej aplikacji. iOS uzywa tych danych w celu zdeterminowania sposobu interakcji z aplikacją. Ten plik jest wymagany i musi nazywac sie Info.plist. 13 App Bundle - Ikony 8

● Ikony aplikacji: są to pliki graficzne prezentowane w SpringBoard. ● Standardowe nazwy ikon to: Icon.png, [email protected], Icon- Small.png, [email protected]. Ikony z nazwą zawierającą @2x są przeznaczone dla urządzeń posiadających wyświetlacz Retina. ● Wielkości ikon są ustandaryzowane i wynoszą: 114 x 114, 57 x 57,144 x 144,72 x 72. 13 App Bundle 9

● Obrazy startowe: tzw. „Splash screen”, czyli pliki graficzne, które bedą wyświetlane w czasie startu aplikacji. Splash zostaje usuniety tak szybko jak aplikacja bedzie w stanie zaprezentować GUI na erkanie. ● Standardowe nazwy obrazów startowych to : Default.png, Default-Portrait.png, Default-Landscape.png. 14 App Bundle 0

● Pliki Storyboard: pliki te zawierają widoki i kontrolery widoku, które są reprezentowane na ekranie. Widoki są uporządkowane według zarządzających nimi kontrolerów widoku. Storyboard identyfikują takze przejścia pomiedzy kontrolerami. ● Nazwa głównego storyboard jest ustawiana przez Xcode w czasie tworzenia projektu. Nazwe ta mozna zmienić poprzez edycje atrybutu NSMainStoryboardFile w pliku konfiguracyjnym Info.plist. ● Aplikacje uzywające plików .nib posiadają atrybut NSMainNibFile. ● Uzycie storyboard jest zalecane ale nie jest konieczne. 14 App Bundle 1

● Settings bundle to paczka umozliwiająca dostep do ustawień aplikacji poprzez główne menu ustawień iOS. ● Settings bundle zawiera plik .plist oraz inne pliki definiujące ustawienia aplikacji. ● Aplikacja Ustawienia (Settings.app) uzywa settings bundle w celu zgromadzenia informacji potrzebnych do prezentacji odpowiedniego interfejsu ustawień aplikacji. ● Pliki niezlokalizowane: pliki graficzne etc. ● Pliki zlokalizowane: iOS udostepnia narzedzia wspomagające tworzenie aplikacji wielojezycznych. Pliki lokalizowane powinny znajdować sie w oddzielnych katalogach o nazwie odpowiedniej dla danego jezyka np. en.lproj. 14 Quartz 2D 2

● Quartz 2D jest silnikiem słuzącym do tworzenia dwuwymiarowej grafiki. ● Quartz bazuje na jezyku C, wiekszość funkcji bazuje na wywołaniach funkcji napisanych w C. ● Rysowanie w Quartz 2D odbywa sie w klasie UIView lub klasach dziedziczących po UIView. ● Rysowanie bazuje na tworzeniu ściezek, na których zostaną narysowane linie oraz definiowaniu kształtów, które zostaną odmalowane. ● Metoda drawRect pochodząca z klasy UIView jest wywoływana, kiedy dany widok musi zostać odmalowany, jest to metoda, w której wykonujemy operacje rysowania. 14 Quartz 2D 3

● Funkcje Quartz 2D bazują na pojeciu punktu. Punkt to koordynaty X oraz Y ekranu, gdzie punkt 0,0 znajduje sie w lewym górnym rogu ekranu. Wartości X i Y są przechowywane w zmiennej typu CGFloat. ● Struktura CGPoint przechowuje wartości X i Y punktów. ● Struktura CGSize przechowuje w zmiennych typu CGFloat wartości, które nalezy reprezentować jako „wysokość” i „szerokość”. ● Struktura CGRect reprezentuje prostokąt i zawiera zmienne typu CGSIze i CGPoint. 14 Quartz 2D 4

● Wywołanie wiekszości funkcji Quartz 2D wymaga przekazania jako paramteru tzw. kontekstu. Kazdy widok posiada swój własny kontekst, który jest odpowiedzialny, ze przeprowadzanie operacji rysowania (renderowania etc.). ● Kontekst moze być uwazany za odpowiednik Graphics2D z jezyka Java. ● Kontekst jest przechowywany w zmiennej o typie CGContextRef. ● Pobranie kontekstu biezącego widoku:

CGContextRef context =UIGraphicsGetCurrentContext(); 14 Quartz 2D 5

● Ustawienie szerokości linii CGContextSetLineWidth(context, 2.0); ● Ustawienie koloru rysowania: CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor ); ● Tworzenie ściezki CGContextMoveToPoint(context, 50, 50); CGContextAddLineToPoint(context, 50, 100); ● Narysowanie ściezki: CGContextStrokePath(context); 14 Quartz 2D 6

● Utworzenie prostokąta CGRect rectangle = CGRectMake(50, 50, 50, 50); ● Dodanie prostokąta do kontekstu: CGContextAddRect(context, rectangle); ● Ustawienie koloru wypełnienia CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor); ● Narysowanie prostokąta CGContextFillRect(context, rectangle); 14 Spróbujmy! 7 14 Tworzenie aplikacji 8

● Budowa graficznego interfejsu uzytkownika odbywa sie przy pomocy programu Interface Builder. ● Powiązanie wytworzonych obiektów z kodem uzytkownika odbywa sie poprzez zmienne typu IBOutet i IBAction. ● Słowa kluczowe IBOutlet i IBAction informują Xcode, ze dane zmienne mogą zostać powiązane z obiektami GUI. 14 IBOutlet, IBAction 9

@interface Controller { IBOutlet id textField; //link do obiektu UI } - (IBAction)doAction:(id)sender; // akcja 15 UILabel 0

● UILabel dostarcza interfejsu umozliwiającego prezentacje tekstu na ekranie urządzenia. ● UILabel jest zwykle uzywana w celu identyfikacji elementów GUI. Programowe tworzenie UILabel: UILabel *scoreLabel = [ [UILabel alloc ] initWithFrame: CGRectMake((self.bounds.size.width / 2),0, 150, 43)]; scoreLabel.textAlignment = UITextAlignmentCenter; scoreLabel.textColor = [UIColor whiteColor]; scoreLabel.backgroundColor = [UIColor blackColor]; scoreLabel.font = [UIFont fontWithName:@"Arial Rounded MT Bold" size:(36.0)]; 15 Ekran dotykowy 1

● Wazny elementem urządzeń z systemem iOS jest ekran dotykowy. ● Za jego obsługe odpowiadają instancje klasy UIResponder. Najważniejsze metody UIResponder – touchesBegan:withEvent: – touchesMoved:withEvent: – touchesEnded:withEvent: –touchesCancelled:withEvent: 15 Ekran dotykowy 2 Przykładowa implementacja metody touchesMoved:withEvent:

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *t = [touches anyObject]; CGPoint pt= [t locationInView:self.view]; int x = (int)pt.x; int y = (int)pt.y; } 15 UIButton 3

● UIButton jest kontrolką, która udostepnia funkcjonalność przycisku. ● Istnieje pieć systemowych rodzajów przycisku, mozna je takze tworzyć przy uzyciu tekstur. ● Definiując IBAction dla eventów TouchUp czy Touch Down mozemy zaprogramować odpowiedniej akcje, które zostaną wykonane w czasie naciśniecia przycisku. 15 Spróbujmy! 4 15 UISegmentedControl 5

● UISegmentedControl jest kontrolką, która udostepnia funkcjonalność przełącznika, odpowiednik Radio Button z innych jezyków. ● UISegmentedControl moze posiadać dowolną ilość opcji – ograniczeniem jest tylko wielkość ekranu. ● Akcje uzytkownika wykonaną na instancji UISegmentedControl mozna odczytać przy pomocy eventu Value Changed. ● Numer wybranego segmentu mozna sprawdzić poprzez zmienną selectedSegmentIndex. 15 UITextField 6

● UITextFiled udostepnia funkcjonalność pola tekstowego. ● Dzieki UITextFiled istnieje mozliwość pobrania od uzytkownika łańcucha znakowego i późniejsze jego przetworzenie. ● Wybranie pola tekstowego przez uzytkownika powoduje otworzenie sie standardowej klawiatury ekranowej. ● Aby zamknąć klawiature, nalezy wysłać do pola tekstowego wiadomość resignFirstResponder. ● Informacje o zakończeniu edycji mozna uzyskać poprzez event Did End On Exit. 15 Protokół UITextFieldDelegate 7

● Zarządzanie edycją: – textFieldShouldBeginEditing: – textFieldDidBeginEditing: – textFieldShouldEndEditing: – textFieldDidEndEditing: ● Edycja tekstu: -textField: shouldChangeCharactersInRange: replacementString: – textFieldShouldClear: – textFieldShouldReturn: 15 UITextView 8

● UITextView jest widokiem umozliwiającym prezentacje tekstu. ● UITextView pozwala na edycje tekstu przez uzytkownika. ● Osbługa UIText View jest bardzo podobna do obsługi UITextField. ● UITextView moze być przesuwane, wielkość widoku nie zmienia sie na ekranie, jednak sam widok dostosowuje sie do ilości zawartego w nim tekstu. 15 UITextViewDelegate 9

- (void)textViewDidBeginEditing:(UITextView *)textView { NSLog(@"textViewDidBeginEditing:"); textView.backgroundColor = [UIColor greenColor]; } - (BOOL)textViewShouldEndEditing:(UITextView *)textView{ NSLog(@"textViewShouldEndEditing:"); textView.backgroundColor = [UIColor whiteColor];

} 16 Spróbujmy! 0 16 UISwitch 1

● UISwitch udostepnia funkcjonalność dwustanowego przełącznika. ● Przełącznik moze posiadać dwie wartości zwykle rozumiane jako wartości logiczne: włączony – TRUE oraz wyłączony – FALSE. ● Dostep do stanu UISwitch umozliwia zmienna on. ● Zmiane wartości przełącznika przesyła event Value Changed. 16 UIActivityIndicatorView 2

● UIActivityIndicator jest widokiem, który umozliwia przekazanie uzytkownikowi, ze aplikacja jest w trakcie wykonywania czasochłonnego zadania. ● Animacja widoku jest sterowane poprzez wywołanie metod: startAnimating oraz stopAnimating. ● Pole hidesWhenStopped jest zmienną typu BOOL, ustawienie jej wartości na TRUE spowoduje schowanie widoku po wywołaniu metody stopAnimating. 16 Spróbujmy! 3 16 UIAlertView 4

● UIAlertView dostarcza funkcjonalności pozwalającej przekazać uzytkownikowi nagłe i / lub wazne informacje. ● UIAlertView jest wyświetlany na ekranie w postaci niebieskiej wiadomości, który blokuje wszystkie inne widoki. ● UIAlertView powinien mieć przynajmniej jeden przycisk. ● Protokół obsługujący UIAlertView to UIAlertViewDelegate. 16 UIAlertView 5

Tworzenie UIAlertView: UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Tytul" message: @"To jest moja wiadomosc" delegate:self cancelButtonTitle:@"OK"otherButtonTitles: @"Button 1",@"Button 2", nil]; [alert show];

Obsługa przycisków: -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex: (NSInteger)buttonIndex { NSLog(@"button %d",buttonIndex); } 16 Spróbujmy! 6 16 UIPickerView 7

● Wadą UISegmentedControl jest jego ograniczony rozmiar, co sprawia, ze mozna go uzywać tylko do wyboru małej liczby opcji. ● UIPickerView jest widokiem, który mozna rozumieć jako rodzaj tabeli. Moze sie on składać z dowolnej ilość kolumn (components) oraz wierszy (row). ● Protokół UIPickerViewDataSource odpowiada za ustalenie ilości wierszy i kolumn w UIPickerView. ● Protokół UIPickerViewDelegate odpowiada za wartości wierszy oraz pozwala odebrać event informujący o wybranym przez uzytkownika wierszu. 16 UIPickerView 8

• Protokół UIPickerViewDataSource -(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView;

-(NSInteger) pickerView:(UIPickerView *) pickerView numberOfRowsInComponent: (NSInteger)component;

• Protokół UIPickerViewDelegate -(NSString *)pickerView:(UIPickerView *)thePickerView titleForRow: (NSInteger)row forComponent:(NSInteger)component;

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component 16 Spróbujmy! 9 17 Core Location 0

● CoreLocation framework udostepnia funkcjonalność współpracy z wbudowanym w urządzenie odbiornikiem GPS a wiec ustalenie pozycji geograficznej urządzenia czy kierunku jego poruszania. ● Za otrzymywanie danych z GPS odpowiedzialna jest instancja klasy CLLocationManager. ● Wywołanie metod startUpdatingLocation oraz stopUpdatingLocationodpowiednio rozpoczyna i wstrzymuje otrzymywanie danych z czujników. ● Protokół obsługujący CLLocationManager to CLLocationManagerDelegate. 17 Core Location 1

● Wybrane metody protokołu CLLocationManagerDelegate -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 17 Core Location 2

● Dokładność pomiaru pozycji z odbiornika GPS mozna ustalić przy pomocy zmiennej typ CLLocationAccuracy o nazwie desiredAccuracy. ● CLLocationAccuracy moze przyjmować nastepujące wartości. ● kCLLocationAccuracyBestForNavigation ● kCLLocationAccuracyBest ● kCLLocationAccuracyNearestTenMeters ● kCLLocationAccuracyHundredMeters ● kCLLocationAccuracyKilometer ● kCLLocationAccuracyThreeKilometers 17 Spróbujmy! 3 17 Storyboards 4

● Storyboards to stosunkowo nowa funkcjonalność w iOS, która pozwala na tworzenie GUI aplikacji w jednym, spójnym „edytorze”. ● Storyboard pozwala na graficzne tworzenie przejść (tzw. segues) miedzy ekranami aplikacji dzieki czemu zmniejsza sie ilość kodu potrzebnego do stworzenia GUI. ● Storyboard ułatwia przeglądanie przepływu sterowania w programie, łatwiej jest zobaczyć „na oko” co aplikacja robi. Przed wprowadzeniem storyboard kazdy widok przechowywano w innym pliku!. ● Storyboard znacznie ułatwia prace z takimi kontrolerami jak Table View czy Navigation Controller. 17 Storyboards 5

● Standardowe segue wykonuje przejście miedzy widokami. ● Jeśli zachodzi potrzeba wymiany danych miedzy widokami nalezy: ● Zdefiniować protokół wymiany danych pomiedzy obydwoma widokami: obiekt tworzący nowy widok poprzez segue jest delegatem, obiekt utworzony przesyła dane. ● Nadać identyfikatr segue. ● Zaimplementować metode: -(void) prepareForSegue: (UIStoryboardSegue *)segue sender:(id)sender 17 Storyboards 6

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender: (id)sender { if ( [segue.identifier isEqualToString:@”segueID"]) { OtherController *oth = segue.destinationViewController; oth.delegate =self;

} } 17 Storyboards 7

● Dwie najwazniejsze metody wykonania segue to push oraz modal. ● Metoda push uzywa pomocniczego kontrolera Navigation Cotroller, do ukrywania widoków wywołanych przy pomocy push uzywa sie metody: [self.navigationController popViewControllerAnimated:TRUE];

● Ukrywanie widoków wywołanych metodą modal jest wykonywane poprzez metode: [self dismissModalViewControllerAnimated:TRUE] 17 Spróbujmy! 8 17 UITabBarController 9

● Tab Bar Controller pozwala na podzielenie widoków aplikacji na grupy (styl radio). ● Kolejne grupy są ładowane dzieki wybraniu przycisków znajdujących sie zwykle na spodzie aplikacji. ● Kazda grupa posiada swój własny kontroler widoku – UITabBarController zarządza tylko i wyłącznie grupowanie cześci interfejsu. ● Pomiedzy grupami mozna komunikować sie przy pomocy NSUserDefaults lub przy pomocy dzielonego delegatu aplikacji. 18 UITabBarController 0

● Delegat aplikacji jest dostep z poziomu kazdego kontrolera widoku. ● Pobranie dzielonego delegatu aplikacji:

myDelegate*m=[[UIApplication sharedApplication] delegate]; 18 Spróbujmy! 1 18 UITableViewController 2

● UITableView jest widokiem stworzonym do prezentacji i edycji hierarchicznych struktur danych. ● Z powodu ograniczonego rozmiaru ekranu urządzenia mobilnego Table View moze posiadać tylko jedną kolumne. ● Dostep do kolejnego poziomu danych mozna przeprowadzić przy pomocy Navigation Controller. ● Storyboards znacznie ułatwiają tworzenie UITableView. 18 Spróbujmy! 3 Dziekuje za uwage! :)