ISWD, Instytut Informatyki Politechnika Poznańska Programowanie dla ios Technologie Programistyczne 23.10.2013
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
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 ($100 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 ios 4 dla pierwszego iphone i ipod
Narzędzia programistyczne Xcode język - ObjectiveC
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 aplikacji Window-Based application View-Based application Tab Bar application Navigation-Based application Utility application OpenGL ES application
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 Tworzymy nowy projekt w XCode Window-Based Application
Kod aplikacji
Deklaracja Kod delegacji
Implementacja Kod delegacji
Efekt
Kontrolki Dostępny jest standardowy zestaw kontrolek
Kontrolery Dostępne kontrolery
i widoki Widoki danych
Pozostałe elementy UI
TeachTool obliczanie punktacji w skali 6-stopniowej obliczanie wyniku egzaminu dyplomowego dwa widoki wybierane przez TabBar
TeachTool tworzymy nowy projekt Window-based Application
dodajemy klasę kontrolera
tworzymy klasę PunktacjaViewController
podobnie dodajemy klasę EgzaminViewController
w delegacie aplikacji dodajemy outlet do kontrolera zakładek
otwieramy MainWindow.xib w Interface builderze dodajemy do okna TabBar Controller
wybieramy pierwszą zakładkę ustawiamy jej plik zasobów w inspektorze
ustawiamy własności zakładki
wiążemy outlet z delegacji z kontrolerem zakładek
edytujemy PunktacjaViewController
edytujemy PunktacjaViewController
projektujemy widok dodajemy powiązania
edytujemy EgzaminViewController
Działająca aplikacja
SatFinder
Aplikacja SatFinder Jak ustawić antenę satelitarną? Wyliczenie na podstawie długości i szerokości geograficznej oraz pozycji satelity Korzysta z GPS
SatFinder
Obsługa GPS
Nowy 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
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
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
Multitasking
Multitasking Do wersji ios 4 był ograniczony do aplikacji systemowych Aplikacja może znajdować się w jednym ze stanów: Na wierzchu - aktualnie wyświetlana aktywna nieaktywna W tle Zawieszona
Czas życia aplikacji Uruchomienie - wywoływana jest metoda didfinishlaunchingwithoptions W momencie uzyskania ekranu wywoływana jest metoda applicationdidbecomeactive Jeżeli aplikacja od razu trafia do tła wywoływana jest metoda applicationdidenterbackground
Czas życia aplikacji Aplikacja ma 5 sekund na zakończenie metody Może zyskać więcej czasu wywołując metodę beginbackgroundtaskwithexpiration i endbackgroundtask
Czas życia aplikacji Gdy aplikacja ma wyjść z tła wywoływana jest metoda applicationwillenterforeground a potem applicationdidbecomeactive Gdy aplikacja ma być zakończona wywoływana jest metoda applicationwillterminate
Czas życia aplikacji Wszystkie aplikacje tworzone w Xcode 4 są domyślnie aplikacjami działającymi w tle Można to zmienić poprzez ustawienia aplikacji poprzez edycję pliku Info.plist
Multitasking Jest dostępny od iphone a 3GS i ios 4. W innym wypadku aplikacje kończą działanie Można sprawdzić w kodzie, czy multitasking jest dostępny
Powiadomienia Aplikacja w tle nie ma dostępu do ekranu Jedyny mechanizm to lokalne powiadomienia Lokalne w przeciwieństwie do zdalnych - serwerowych
Przykład Nowy projekt typu SingleView Powiadomienie ma być wyświetlone 10 s po przejściu w tło Dodajemy plik dźwiękowy Modyfikujemy metodę applicationdidenterbackground
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
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
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
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
Dostępne API akcelerometry pozycjonowanie (GPS, triangulacja) Google Maps OpenGL XML przeglądarka webowa SQLLite aparat
Obracane widoki
Obracane widoki UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeRight UIInterfaceOrientationLandscapeLeft
Obracany widok Bez dodatkowych zmian nie bardzo działa
Size inspector Umożliwia ustawienie automatycznego wyrównywania Obroty można obsługiwać programowo
Obsługa obrotu Przeciążamy metodę willanimaterotationtointerfaceorientation
Program MFI Made For i(phone, Pod, Pad) Możliwość projektowania akcesoriów podłączanych bezpośrednio do urządzeń
AppStore
Do zobaczenia