Programowanie dla ios ISWD Semestr 2, 2015/2016 22 październik 2015
Urządzenia ios Urządzenie Data prezentacji iphone 9.01.2007/06.2007 ipod touch 5.09.2007 iphone 3G 9.06.2008 ipod touch 2 gen 9.09.2008 iphone 3GS 8.06.2009 ipod touch 3 gen 9.09.2009 ipad 27.01.2010/04.2010 iphone 4 4.06.2010 ipod touch 4 gen 1.09.2010 ipad 2 2.03.2011 iphone 4S 4.10.2011
Urządzenia ios Urządzenie Data prezentacji new ipad 7.03.2012 iphone 5, ipod touch 5 gen 11.09.2012 ipad mini, ipad 4 23.10.2012 iphone 5S, 5C 10.09.2013 ipad Air, ipad mini retina 22.10.2013 iphone 6, iphone 6 Plus 9.10.2014 ipad Air 2, ipad mini 3 16.10.2014 ipad Pro, ipad mini 4 9.09.2015 iphone 6S, 6S Plus 9.09.2015
Dane techniczne
Dane techniczne System operacyjny: okrojona wersja Mac OS X Mobilna wersja przeglądarki Safari Początkowe wspierane tylko aplikacje webowe Od czerwca 2008 dostępne SDK Dystrybucja aplikacji poprzez AppStore
SDK wymagany Mac z procesorem Intela SDK jest darmowe Do dystrybucji aplikacji należy wykupić subskrypcję Developer Program: Standard - $100 rocznie, Enterprise - $299 rocznie, University - $0 rocznie. Duże ograniczenia SDK
Architektura systemu Cocoa Touch Media Core Services Core OS
Architektura systemu Core OS, Core Services - podstawowe interfejsy: typy danych dostęp do plików dostęp do sieci wątki...
Architektura systemu Media: grafika 2D i 3D OpenGL ES, Quartz obsługa audio i wideo Core Audio Core Animation
Cocoa Touch UIKit interfejs użytkownika runtime obsługa zdarzeń API sprzętowe Foundation klasy podstawowe kolekcje wrapery dla usług systemowych podzbiór Cocoa Foundation
Na co uważać Różne wersje aplikacji dla iphone/ipod i ipad - wersje uniwersalne Różne rozdzielczości ekranu Ograniczenia wersji systemu, np. brak aktualnej wersji ios dla niektórych urządzeń
Narzędzia programistyczne Xcode języki: ObjectiveC Swift
Emulator
Model aplikacji Generalnie aplikacje powinny być typu Model-View-Controler obsługa zdarzeń aplikacja powinna: zainicjalizować swoje zmienne w zdarzeniu applicationdidfinishlaunching obsłużyć błąd braku pamięci applicationdidreceivememorywarning posprzątać po sobie - applicationwillterminate
Typy szablonów aplikacji Master-Detail Application Page-Based Application Single View Application Tabbed Application Game
Okno i widok Aplikacja jest tworzona za pomocą delegacji Każda aplikacja ma tylko jedno okno (Window) Elementy na ekranie umieszczone są w widokach (View), może ich być wiele Niektóre widoki mogą się obracać
Hello World 2009 Tworzymy nowy projekt w XCode Window-Based Application
Kod aplikacji
Deklaracja Kod delegacji
Implementacja Kod delegacji
Efekt
Hello World 2015
Hello World
Hello World
Teach Tool ios7, Xcode 5
TeachTool 2 Tylko obliczanie skali ocen Możliwość zdefiniowania progów Progi zapamiętywane w pliku Szablon aplikacji typu Utility
Nowy projekt
Nowy projekt
Ustawienia projektu
Aplikacja Utility
Projektujemy widok główny
Tworzymy outlety Włączamy Assistant Editor Przeciągamy z Ctrl na plik nagłówkowy
Outlety i akcje
Kod implementacyjny
Kod implementacyjny
Widok ustawień osadzamy TableView zmieniamy na statyczny
Po edycji ustawiamy 6 wierszy dodajemy kontrolki: UIText UILabel UIButton UIBarButton
Dodajemy gniazdka Aby obsłużyć tabelkę klasa musi obsługiwać protokół UITableViewDataSource i delegację UITableViewDelegate
Kod implementacyjny
Katalog Lego
Gdzie kupić klocki 1?
Gdzie kupić klocki 2?
Gdzie kupić klocki 3?
Gdzie kupić klocki 4?
Katalog Lego Informacje o zestawach przechowywane lokalnie w bazie danych Parser strony shop.lego.com pod Windows Dane eksportowane do bazy sqlite Ceny ze sklepu Lego i Allegro
Strona Lego
Parser Parsujemy zestawy wg kategorii Jeżelli zestaw jest w kilku kategoriach zapamiętujemy to Opis zestawu jest pamiętany jako HTML Dodatkowo parsujemy polski sklep internetowy
SQLite Kompaktowa baza danych napisana w C Public Domain implementuje większość funkcji z SQL-92 wykorzystywany w wielu systemach i aplikacjach
Schemat bazy danych
Nowy projekt projekt w Xcode 4 aplikacja typu nawigacyjnego
Nowy projekt
Nowy projekt
Ustawienia projektu Nazwa Docelowa platforma Ikony: zwykła 57x57 px retina 114x114 px ekran startowy
Biblioteka SQLite w zakładce Build Phases dodajemy bibliotekę libsqlite3.dylib tworzymy bazę (np. wtyczka do FireFox) do projektu dodajemy plik z bazą
Kontroler głównego widoku
Kontroler głównego widoku Przy pierwszym uruchomieniu bazę danych należy skopiować do katalogu roboczego W przyszłości aktualizacja bazy danych
Kontroler głównego widoku
Kontroler głównego widoku
Kontroler głównego widoku
Kontroler głównego widoku
Kontroler widoku kategorii
Kontroler widoku kategorii
Kontroler widoku kategorii
Kontroler widoku kategorii
Kontroler widoku kategorii
Klasa zestawu
Klasa zestawu
Klasa zestawu
Kontroler widoku zestawu
Kontroler widoku zestawu
Widok zestawu
Efekt
Storyboarding
Storyboarding Scenorys Nowe podejście do projektowania widoków w Xcode 4.2
Projekt Tworzymy nowy projekt typu Single View Application
Opcje projektu
Widok projektu
Edytor
Projekt startowego widoku
Dodajemy nowy ViewController
Dwa widoki
Projekt widoków
Edycja przejścia (segue) Przeciągamy z Ctrl na kolejny widok
Zdefiniowane przejście
Dwa przejścia
Opcje przejścia Style przejścia: Push Modal Custom Animacja przejścia: Default Cover vertical Flip horizontal Cross Dissolve Partial curl
Klasa kontrolera Dodajemy klasę kontrolera dla drugiego widoku
Klasa kontrolera
Klasa kontrolera
Storyboarding Można pisać własne klasy kontrolujące przejścia Za przejścia mogą być odpowiedzialne różne kontrolery widoku Są zdarzenia związane z przejściami Przejścia można wywoływać programowo
TTRules
Ticket to Ride Gra planszowa Alana R. Moon a wydana w 2004 r. Zasady są proste, alemożna grać na >17 sposobów
TTRules Aplikacja podsumowująca zasady gry w różnych wariantach Nawigacja oparta na tabelach Zasady zapisane w HTML Konfigurowalna dynamicznie Wersja tylko iphone
Widok wyboru mapy Storyboard Kontroler nawigacji Widok zasad Widok wyboru wersji
Konfiguracja Dane o mapach wczytywane są ze słownika PLIST Podobnie dane o ikonkach
Kontroler widoku map Plik nagłówkowy
Kontroler widoku map Plik implementacyjny
Komórka tabeli plik nagłówkowy
Komórka tabeli Plik implementacyjny
Kontroler widoku wersji Plik nagłówkowy
Kontroler widoku wersji Plik implementacyjny
Kontroler widoku zasad Plik nagłówkowy
Kontroler widoku zasad Plik implementacyjny
Pickery
Pickery Odpowiedniki ComboBox ów Specjalizowany DatePicker Ogólny UIPickerView
Przykład Definiujemy gniazdka i wtyczki Projektujemy widok
Efekt
UIPickerView Uniwersalny picker Wymaga podania klasy stanowiącej źródło danych Klasa musi realizować protokół UIPickerViewDataSource Najlepiej gry realizuje go kontroler widoku
UIPickerViewDataSource Musi posiadać metody: numberofcomponentsinpickerview numberofrowsincomponent titleforrow
Przykład
Klasa kontrolera
Klasa kontrolera
Klasa kontrolera
Rozpoznawanie dotyku
Wielodotyk Ekran urządzenia ios jest w stanie rozpoznać do 5 punktów dotyku Zdarzenia są obsługiwane w kolejce Przekazywanie zdarzeń nie jest automatyczne
Metody obsługujące touchesbegan gdy palec dotknie ekranu przekazuje informacje o każdym punkcie dotyku touchesmoved gdy palec przesuwa się po ekranie touchesended gdy palec się podniesie touchescancelled gdy nastąpi przerwanie, np. telefon
Przykład
Przykład Domyślnie widoki nie reagują na wielodotyk Zmieniamy opcję widoku
Metoda touchesbegan
touchesmoved
touchesended
Rozpoznawanie pozycji
Gesty Od ios 4 specjalna klasa do rozpoznawania gestów UIGestureRecognizer i jej specjalizacje UITapGestureRecognizer UIPinchGestureRecognizer UIPanGestureRecognizer UISwipeGestureRecognizer UIRotationGestureRecognizer UILongPressGestureRecognizer
Obsługa gestu Definiujemy klasę do obsługi Przekazujemy jej referencję do metody, która ma być wywołana po wykryciu gestu Niektóre gesty są pojedyncze (tap) inne ciągłe (swipe, pan)
Przykład
Przykład
Waluty
Waluty Program wyświetlający aktualne kursy podstawowych walut (predefiniowane EUR, USD, GBP, CHF) kursy FOREX kursy w kantorze internetowym kursy w banku Interesują nas kursy sprzedaży
Waluty Dane wyświetlane w formie tabelarycznej z podziałem na sekcje Odświeżane po wyświetleniu aplikacji lub na żądanie
Źródło danych Serwis systemowy napisany w C# uruchomiony na serwerze Windows 2003 Server Parsuje strony kantorów internetowych i banku co 2 minuty Zapisuje i udostepnia plik RSS z kursami
Źródło danych
RSS Rich Site Summary Really Simple Syndication Format plików XML do publikowania treście w Internecie Wspierany przez.net
RSS
Aplikacja ios Widok tabelaryczny Oparta na scenorysie (w przyszłości wyświetlanie szczegółów walut) Na razie tylko wersja iphone
Tworzymy projekt
Tworzymy projekt
Ikona i startup
Edytujemy scenorys usuwamy widok (View) z szablonu wstawiamy widok tabelaryczny (Table View) wstawiamy prototyp komórki (Table View Cell)
Edytujemy scenorys Edytujemy zawartość prototypu komórki 3 etykietki UILabel obrazek UIImage niewidzialny przycisk nad ostatnią etykietą
Dodajemy klasę Klasa dziedziczy po UITableViewCell Będzie obsługiwała pojedynczą komórkę tabeli
Dodajemy klasę
Dodajemy klasę
Tworzymy powiązania wracamy do scenorysu we własnościach komórki zaznaczamy klasę, która ją obsługuje otwieramy edytor pomocniczy (Assistant Editor) przeciągamy z Ctrl z elementów interfejsu na nagłówek klasy
Tworzymy powiązania
Tworzymy powiązania Dodajemy jeszcze dwie metody obsługujące formatowanie
Implementujemy klasę
Implementujemy klasę
Dodajemy klasę Klasa Currency do obsługi pojedynczego kursu waluty
Dodajemy klasę
Implementujemy kontroler
Implementujemy kontroler
Implementujemy kontroler
Obsługa odświeżania
Parsowanie RSS
Parsowanie RSS
Parsowanie RSS
Obsługa tabeli
Obsługa tabeli
Obsługa tabeli
Widok szczegółów waluty Wyświetla wykres historyczny kursu Umożliwia przeliczenie kwoty pomiędzy walutą i PLN w obie strony Wykres udostępniany przez serwer jako obrazek PNG
Storyboard Dodajemy drugi widok typu UIView Dodajemy przejście od komórki tabeli do nowego widoku typu Modal i przejście powrotne też Modal Wstawiamy etykietki, pole tekstowe, pole segmentowe i pole obrazka oraz przycisk Powrót
Klasa DetailViewController Dodajemy gniazdka do kontrolek Dodajemy akcje
Klasa DetailViewController metoda viewwillappear
Akcje
Przejście W WalutaViewController dodajemy metodę prepareforsegue identyfikator przejścia
Rozszerzenia Od ios 8 aplikacje mogą implementować rozszerzenia: ekranu Today współdzielenia akcji edycji zdjęć źródła dokumentów własne klawiatury
Rozszerzenie Today Do aplikacji Waluty dodamy rozszerzenie ekranu Today Na początek będzie wyświetlało tylko aktualny kurs EUR i jego zmianę dzienną
Strona serwera Parsowanie RSS trochę nadmiarowe Napiszemy serwer udostępniający dane przy użyciu REST z wykorzystaniem WCF
Serwer Tworzymy nowy projekt typu WCF Service Application
Serwer Plik IService1.cs Plik Service1.svc
Dodajemy DataSet Zapytanie będzie miało postać http://localhost/waluty/service1.svc/getdata/eur
Piszemy kod
Serwer Wprowadzamy zmiany, aby dostosować serwis do działanie w trybie JSON W pliku IService1.cs
Serwer Edytujemy Web.config
Rozszerzenie W naszym projekcie dodajemy nowy cel (Target)
Tworzymy rozszerzenie Modyfikujemy projekt interfejsu W piku nagłówkowym definiujemy gniazdka
Piszemy kod Parsowanie odpowiedzi JSON
Piszemy kod
Edytujemy info.plist Ustawienia
Core Data
CoreData Biblioteka umożliwiająca abstrakcję źródła danych Baza danych jest ukryta za obiektem ManagedObjectContext Dane fizycznie przechowywane w pliku SQLite
Core Data Tworzymy projekt typu Empty Application
Utworzony projekt
Model danych Edytujemy CoreData.xcdatamodeld
Model danych Dodajemy nowe Entity Zmieniamy mu nazwę na Contacts Dodajemy atrybuty typu String: name phone address
Tworzymy widok Dodajemy Storyboard File\New File
Tworzymy widok W opcjach projektu ustawiamy Main Interface na nasz Storyboard W CoreDataAppDelegate edytujemy treść metody didfinishlaunchingwithoptions
Tworzymy widok Dodajemy kontroler widoku File\New File
Tworzymy widok Dziedziczymy po UIViewController
Tworzymy widok Dodajemy kontroler widoku do Storyboard
Tworzymy widok
Wykonujemy połączenia
Piszemy kod
Piszemy kod
Grafika 2D
Grafika 2D Biblioteka odpowiedzialna - Quartz Napisana w C Typowo rysujemy na obiekcie klasy UIView Operujemy na punktach klasy CGPoint - lewy-górny narożnik ma współrzędne (0,0) typ CGFloat Klasy CGRect i CGSize
Kontekst graficzny Konieczny do rysowania Uzyskujemy wywołując metodę UIGraphicsGetCurrentContext Otrzymujemy obiekt typu CGContextRef
Kolory Klasa CGColorRef Przechowuje kolor i informacje o przestrzeni kolorów Do wyboru RGBA, CMYK lub odcienie szarości Można tworzyć kolory z klasy UIColor, ale nie można korzystać z nich bezpośrednio
Przykład Nowy projekt typu SingleView Dodajemy klasę dziedziczącą po UIView Jako klasę implementującą widok w pliku XIB wybieramy naszą klasę Odkomentowujemy metodę drawrect
Edytujemy metodę drawrect
Wykorzystanie klasy UIColor
Rysowanie ścieżki
Rysowanie prostokąta
Rysowanie elipsy
Wypełnienie kolorem
Rysowanie łuku
Rysowanie krzywej Bezier
Lekcjonarz
Lekcjonarz obsługa wiecznego kalendarza liturgicznego bardzo zależny od terminu wielkanocy pierwsza niedziela po pierwszej wiosennej pełni księżyca oblicza święta ruchome dla podanego roku zawiera czytania na dzień zapisane w HTML
aplikacja uniwersalna - iphone i ipad aplikacja niezależna od Internetu
iphone Widok główny z funkcją wyboru daty (domyślnie dzisiejsza)
iphone Widok świąt ruchomy z możliwością wyboru roku
Widok czytań na wybrany dzień iphone
Widok About iphone
ipad Jeden widok panoramiczny
iphone storyboard
ipad storyboard
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa CurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Klasa ChurchCalendar
Rozszerzenie klasy NSCalendar
AboutViewController
ReadingsViewController
VariableHolidayViewController
MainViewController
SplitViewController (ipad)
LeftViewController
RightViewController
Klasa DayCell
Ikona
Ikona SDK wymaga od nas zdefiniowania ikon w szeregu różnych rozdzielczości Ręcznie jest to zadanie nużące i kłopotliwe
Szablon AppIcon szablon dla Photoshopa dostępny gratis na stronie http://appicontemplate.com
Developer Portal
ios Developer Portal
ios Developer Portal Certyfikat główny Numer UDID urządzenia Identyfikatory aplikacji Provisioning profile
Certyfikat główny
Numery UDID
Identyfikatory aplikacji
Profile
Program MFI Made For i(phone, Pod, Pad) Możliwość projektowania akcesoriów podłączanych bezpośrednio do urządzeń
AppStore
Do zobaczenia