ios alkalmazásfejlesztés alapjai Nagy Aszter András BME MIK anagy@mik.bme.hu



Hasonló dokumentumok
Objective-C PPKE-ITK

ios alkalmazásfejlesztés

Az iphone fejlesztés alapjai

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Az iphone fejlesztés alapjai. I. előadás

ios alkalmazásfejlesztés Koltai Róbert

Interfészek. PPT 2007/2008 tavasz.

OOP és UML Áttekintés

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozási nyelvek Java

Osztályok. 4. gyakorlat

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

OOP: Java 8.Gy: Abstract osztályok, interfészek

Távközlési és Médiainformatikai Tanszék Hálózatok és szolgáltatások szakirány. Szolgáltatások és alkalmazások. Apple App Store. Sándor Roland Martin

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

iphone programozás alapjai IV. Gyakorlat

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Web-technológia PHP-vel

Globális operátor overloading

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Mobil készülékek programozása

OOP #14 (referencia-elv)

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Java III. I I. Osztálydefiníció (Bevezetés)

Java III. I I. Osztálydefiníció (Bevezetés)

Több platform egy kódbázis Tanulságok a Tresorittól. Budai Péter, vezető fejlesztő

Már megismert fogalmak áttekintése

Mobil Informatikai Rendszerek

Java és web programozás

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

iphone programozás alapjai

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Mobil Informatikai Rendszerek

Platform lehetőségek kutatása: ios. A Mobil multimédiás kliens fejlesztői eszközkészlet létrehozása című kutatás-fejlesztési projekthez

Java programozási nyelv 4. rész Osztályok II.

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

JAVA PROGRAMOZÁS 2.ELŐADÁS

ios alkalmazásfejlesztés Koltai Róbert

Generikus Típusok, Kollekciók

Programozás I. Első ZH segédlet

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Objektumelvű programozás

Java programozási nyelv 5. rész Osztályok III.

Mobilplatformok Merre tart a világ? Kis Gergely MattaKis Consulting

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Tartalomjegyzék. I. rész: Bevezetés. A szerzőről... xvii. Köszönetnyilvánítás... xix. Bevezetés... xxi. 1. Bevezetés az iphone programozásába...

ISA szimulátor objektum-orientált modell (C++)

Bevezetés a Python programozási nyelvbe

Származtatási mechanizmus a C++ nyelvben

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Java és web programozás

1. Bevezetés A C++ nem objektumorientált újdonságai 3

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Google C++ style guide

ELTE SAP Excellence Center Oktatóanyag 1

Segédanyag: Java alkalmazások gyakorlat

Osztály és objektum fogalma

A Skype architektúrája. P2P hálózat Supernode ok, peer-ek, login server

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozási nyelvek Java

Java programozási nyelv 6. rész Java a gyakorlatban

Bevezető. Servlet alapgondolatok

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Madarassy László, mérnök, BME - Mobil Innovációs Központ. lmadarassy@mik.bme.hu

Abstract osztályok és interface-ek. 7-dik gyakorlat

Programozási alapismeretek 4.

Programozási nyelvek II.: JAVA

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Közösségi hálózatok integrálása Android platformon. Inotay Krisztián / inotay.krisztian@bmeautsoft.hu

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Objektumorientált szoftverfejlesztés alapjai

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Kommunikáció. Folyamatok közötti kommunikáció. Minden elosztott rendszer alapja

Interfészek. Programozás II. előadás. Szénási Sándor.

A mobil nyelvtanár megvalósításának folyamata

Programozás III A JAVA TECHNOLÓGIA LÉNYEGE. Többlépcsős fordítás JAVA PLATFORM. Platformfüggetlenség

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

C++ programozási nyelv

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Adatbázis-kezelés ODBC driverrel

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Bevezetés a programozásba Előadás: A const

C++ programozási nyelv Konstruktorok-destruktorok

Pénzügyi algoritmusok

Fejlesztői szemmel at K

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Átírás:

ios alkalmazásfejlesztés alapjai Nagy Aszter András BME MIK anagy@mik.bme.hu 1

ios platform Apple mobil operációs rendszere iphone, ipod Touch, ipad OS X-en alapul De nem kompatibilis azzal Homogén rendszer 3 féle kijelzőméret Hamarosan változik... Gyors frissítés-terítés ARMv7, ARMv7s, Arm64 (ARMv8) 2

ios jellemzők Zárt Alkalmazásterjesztés csak AppStore-ban Be kell tartani a játékszabályokat Android után második...eladások tekintetében nagyon lemaradva 3

Miért érdemes? Mert kifizetődő! 4

Fejlesztőkörnyezet Mac OS X Legalább Mountain Lion Xcode IDE AppStore-ból ingyenesen letölthető Instruments iphone Simulator Fejlesztői licensz Teszteléshez hardver Nagy felbontású kijelzőj 5

OS X UNIX(-like) rendszer XNU kernel Terminál vanj, X (alapesetben) nincs Van AppStore, de nem kötelező Külön fejlesztői licensz kell fejlesztéshez... Megszokott alkalmazások jó része elérhető Egyedi billentyűzet kiosztás Természetesen cserélhető. 6

Sandbox modell I. Minden alkalmazás elkülönítve fut Nem kommunikálhatnak egymással A már említett URL-eken kívül... Minden app csak a saját fájljait éri el Nevezetes alkönyvtárak: Documents Felhasználó számára fontos fájlok Backup készül róla Felhasználó elérheti PC-n Library Backup készül róla Felhasználó elől rejtve Pl tartalomnak 7

Sandbox modell II. Nevezetes alkönyvtárak (folytatás): tmp Ideiglenes állományoknak Illik törölni, de a rendszer is megteszi időnként Nem kerül mentésre 8

Engedélyek Nem olyan, mint más rendszereken Futás közben, dinamikusan Ha a felhasználó elutasíthatja Az alkalmazás mehet tovább Csökkentett funkcionalitással Rendszer kérdezi, és csak egyszer 9

Esettanulmány - Cluster Cluster egy social media app 1. Első indításkor mindent Nem volt túl sikeres, felhasználók 40%-a fogadta el 2. Magyarázva 3. Amikor kell, előkérdést tettek fel A felhasználók 2%-a utasította csak el a rendszer kérdését 4. A legutolsó pillanatra hagyták a kérdést A felhasználó triggerelte Csak rendszer 10

Multitasking modell Nincs általános multitasking Nem futhat akármilyen app a háttérben De audio, navigáció, VoIP igen... Háttérbe küldött Appokat kilőheti az OS Érdemes állapotot menteni Appok igényelhetnek plusz időt De nem biztos, hogy kapnak 11

ios7 multitasking Background fetch Max 30 másodperc nem CPU-intenzív feladatokhoz Remote notifications Notification-ök érkezése esetén Pl frissítések letöltéséhez Itt is 30 másodpercen belül kell lenni 12

Notifications Local notification App helyileg küldheti Időzítés váltja ki Push notification Távoli szerver kezdeményezi 13

Fejlesztési lehetőségek WebApp Safari jeleníti meg HTML+JS TouchEvents API De facto szabvány Cross-platform megoldások Natív Objective-C Swift 14

Objective-C 15

Objective-C Objektum orientált nyelv ANSI C bővítése, azzal 100% kompatibilis Szintaktika SmallTalk-ból ered Lényegében csak Apple rendszereken használják Cocoa-val (OS X) és Cocoa Touch-csal (ios) párban 16

Objective-C típusok I. Primitív C-s típusok int, usigned int, float, double... typedef-elve is: NSInteger, NSUInteger, CGFloat... Boolean BOOL YES/NO értékkelj!bool isthisstrange = YES; 17

Objective-C típusok II. FoundationFramework NSString NSString *firststring = @"Hello World!"; NSNumber Számok, boolean NSArray id típus Pointer, amely csak objektumra mutahat!id tmp = @"Hello World!"; // NSString"!tmp = @5; // NSNumber 18

Objektum orientáltság Öröklés Minden osztály NSObject-ből származik Nincs többszörös öröklés De több interfészt lehet implementálni Egy osztálynak lehet: Tagváltozója Metódusa Property-je Nincsenek névterek Helyette 2-3 betűs prefixek 19

Üzenetküldés I. Metódushívást üzenetküldésnek hívják Futásidőben kerül feloldásra Példák Paraméter nélkül:!bool status = [pizzaprinter readytomake];" Paraméterrel: [pizzaprinter makepepperonipizzawiththickness: EAThicknessThin extrapepperoni:yes]; Speciális esetek Saját metódus: [self dosomething];" Ősosztály: [super dosomething]; Címze1 Metódus 20

Üzenetküldés II. Selector Metódusok szignatúrája kettőspontokkal Pl: readytomake, makepepperonipizzawiththickness:extrapepperoni: Nincs metódus overloading Üzenetküldés nil-nek: nil = null!id pizzaprinter = nil;"![pizzaprinter dosomething];" Definíció szerint semmi.!int n = [pizzaprinter pizzasinqueue];"!semmi, n értéke 0 lesz. 21

Osztály definíció I. Osztály interfészének definíciója Osztálynév.h-ba: @interface EAValidator: NSObject" - (BOOL)isValid:(NSString *)stringtovalidate;" @end Osztály implementációja Osztálynév.m-be: @implementation EAValidator {" }" int _tmp; // Instance variable" - (BOOL)isValid:(NSString *)stringtovalidate" {" }" @end" // Implementáció" Headert include-olni később #import-tal kell 22

Osztály definíció II. +/-: osztály- és példány metódusok jelölése Metódusok, property-k láthatósága Nincs private/protected/public Public : headerben definiálva Adattagok láthatósága Headerben @protected, @private @public jelölésekkel Érdemes implementációba rakni, így implicit private 23

Property-k Syntax sugar metódusok generálására @property NSString *name; Szintaxis: self.name = @"John Doe"; @property NSString *name; generálja: _name; - (NSString *)name; - (void)setname:(nsstring *)name; 24

Osztály példányosítás Kétlépcsős példányosítás Memóriafoglalás Inicializálás Mindig egyszerre hívjuk!!nsnumber *number = [[NSNumber alloc] initwithfloat:5.0f]; // Helyes"!NSNumber *number = [NSNumber alloc];"![number initwithfloat:5.0f]; // ROSSZ! 25

Inicializálás Konvenció szerint init-tel kezdődik a neve Visszatérési értéke instancetype, vagy régebben id - (instancetype)init" {" } if (self = [super init]) {" // Inicializálás" }" return self;" Összevont konstruktor Class method, amely egy lépésben elintézi a fentieket Pl: NSString stringbyappendingstring: 26

Protocol Más nyelvek interfészének felel meg Csak metódusokat, property-ket definiálhat Definíció: @protocol EAPizzaPrinterDelegate" - (void)pizzaprinterstatuschanged;" @end Protocol implementálás: @interface MyClass: NSObject<EAPizzaPrinterDelegate>" 27

Hibakezelés NSException Van @try-@catch-@throw-@finally Nem használják Csak végzetes hibák számára NSAssert Fejlesztés közben NSError Ezt használják hibakezelésre 28

Memóriakezelés I. ARC: Automatikus referencia számlálás Fordítási időben zajlik Három referenciatípus Strong referenciaszámlálót növeli strong jelölés (implicit ez érvényes) Weak referenciaszámlálót nem növeli ha objektum megszűnik, nil lesz weak jelölés Unsafe_unretained Már nem használatos (ios4-nél volt szükséges) 29

Memóriakezelés II. Ügyeljünk arra, hogy ne alakuljon ki irányított kör az (erős) referencia gráfban! Child Child Strong Strong Strong Weak Parent Parent 30

Demó! Demó 31

Ajánlott források http://www.raywenderlich.com/ Tutorialok, ios8 és Swift témakörökben is http://iossupportmatrix.com/ StackoverflowJ ios Dev Center Programming Guide-ok WWDC session videók (nem keynotej ) Az előadás fóliái a http://mik.bme.hu/~anagy/1app/ oldalon fognak elérhetővé válni. 32

Köszönöm a figyelmet!? 33