ISWD, Instytut Informatyki Politechnika Poznańska Technologie
Transkrypt
ISWD, Instytut Informatyki Politechnika Poznańska Technologie
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 • • • • klasy podstawowe kolekcje wrapery dla usług systemowych podzbiór Cocoa Foundation • 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 Kod delegacji • Deklaracja Kod delegacji • Implementacja Efekt Kontrolki • Dostępny jest standardowy zestaw kontrolek Kontrolery • Dostępne kontrolery Widoki danych • i widoki 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 informacje o każdym punkcie • przekazuje 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 wersji iOS 4 był ograniczony do aplikacji • Do systemowych może znajdować się w jednym ze • Aplikacja 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 速