Slide 1

Slide 1 text

Seminář vývoje iOS aplikací 1/3 Tomáš Jukin @Inza Juicymo www.juicymo.cz @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 2

Slide 2 text

Osnova • Co znamená vývoj pro iOS? • Objective-C • Xcode IDE • Architektura iOS aplikace Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 3

Slide 3 text

Vývoj pro iOS • MacOS (alternativy?) • MacBook/iMac • Xcode (alternativy?) • Objective-C (MacOS i iOS) • Apple Developer Account Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 4

Slide 4 text

Ekosystém • Objective-C 2.0 • Cocoa Touch • iOS 5.1 • Testování a zařízení • Simulátor Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 5

Slide 5 text

Objective-C • C • C++ • Objective-C Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 6

Slide 6 text

Objective-C • Kompilovaný • Staticky typovaný • OOP • Prostředí = virtuální stroj • Správa paměti • Zásobníková & počítání referencí • GC (od Objective-C 2.0) • ARC (v LLVM 3.0) Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 7

Slide 7 text

Objective-C • Jednonásobná dědičnost • C bloky • Hlavičkové soubory • .h • .m • Kompilace: 1. kompilátor -> .o 2. linker -> .app Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 8

Slide 8 text

Objective-C • Přímá podpora C • Podpora C++ na úrovni kompilace • .mm • LLVM 3 Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 9

Slide 9 text

Objective-C 2.0 • GC • Properties • Fast Enumeration Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 10

Slide 10 text

Podobnost s C++ • Linkování (.h a .m soubory) • Nutnost řešit správu paměti (na iOS není GC, lepší situace díky ARC) • ARC není GC! • Žádná pointerová aritmetika Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 11

Slide 11 text

Podobnost s Javou • Bezpečné (skoro, ve smyslu paměti/ pointerů, vůči C++) • Komfort (větší než C++) Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 12

Slide 12 text

Podobnost s C# • Properties Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 13

Slide 13 text

Syntax • pokud je v proměnné auto instance třídy Auto pak • místo auto.jed(); • píšeme [auto jed]; Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 14

Slide 14 text

Syntax • pokud je v proměnné auto instance třídy Auto pak • místo auto.jed(“dopredu”, “rychle”); • píšeme [auto jed:”dopredu” sRychlosti:”rychle”]; Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 15

Slide 15 text

Syntax • Definice metody jed() třídy Auto: • místo public void jed(String smer, String rychlost) { ... } • píšeme - (void)jed:(NSString *)aSmer sRychlosti: (NSString *)aRychlost { ... } • na správné místo (do třídy) - “a la Java” Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 16

Slide 16 text

OOP • Třídy a instance • Statické a dynamické (instanční) • Třída: • @interface a @implementation • inicializátory • metody • attributy - ivars (privátní/protected) • accessory attributů - properties (veřejné) Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 17

Slide 17 text

OOP • Neexistuje abstract • Neexistuje protected (na úrovni metod a properties) • Ale máme .h a .m a linker • -> tudíž to “obcházíme” pomocí více .h souborů a class extensions Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 18

Slide 18 text

OOP - Abstract & Protected • API = metody & properties, eventuelně ivars • Public API - v Auto.h (class interface) • Protected API (pokud je třeba) - v Auto_protected.h (class extension) • Private API - v Auto.m nad @implementation (class extension) • Abstract API - Součást Protected/Public API, manuální vyhození vyjímky Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 19

Slide 19 text

OOP - Inicializátory • metoda init() • metody initWithXXX() • je to konstruktor • voláme [[Auto alloc] init]; • vrátí nám novou instanci třídy Auto Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 20

Slide 20 text

OOP - ivars • jsou to atributy (zde jsou attributy tříd fyzicky uloženy, pokud jsou uloženy) • jsou private nebo protected, nikdy public • Objective-C je občas/často dělá za nás • toho se snažíme využívat Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 21

Slide 21 text

OOP - ivars @interface Auto : DopravniProstredek { NSArray *_kola; BOOL _rozbite; @protected NSString *_spz; } @end Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 22

Slide 22 text

OOP - Properties • Mechanizmus publikování ivars • jsou to “gettery” a “settery” • definice a implementace • @property a @syntetize • jsou vždy public • pomocí triku s .h soubory a linkováním mohou být public, protected i private Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 23

Slide 23 text

OOP - Properties • definují se v @interface • class (třídě) • category (kategorii) • class extension (rozšíření třídy) • Objective-C umí k property vygenerovat příslušnou ivar • Možno přetěžovat Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 24

Slide 24 text

OOP - Properties @interface Auto : DopravniProstredek { NSArray *_kola; BOOL _rozbite; @protected NSString *_spz; } @end Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill • v .h máme

Slide 25

Slide 25 text

OOP - Properties @property (nonatomic, strong) NSArray *kola; @property (nonatomic, assign, getter=jeRozbite) BOOL rozbite; Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill • v @interface (za } před @end) v .h

Slide 26

Slide 26 text

OOP - Properties @syntetize kola = _kola; @syntetize rozbite = _rozbite; Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill • v @implementation v .m (typicky)

Slide 27

Slide 27 text

Zbytek v praxi! • Nyní živá ukázka vývoje! Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 28

Slide 28 text

Co jsme probrali? • Ukázka jak udělat iOS aplikaci v Xcode • Popis interface Xcode • Ukázka jak udělat Private API a Public API třídy • Ukázka nástroje Interface Builder • Ukázka vložení tlačítka do aplikace a jeho zprovoznění Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 29

Slide 29 text

Příště? • Zopakování toho, jak udělat Private API a Public API třídy • Ukázka Protected a Abstract API • Ukázka práce s UITableView Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill

Slide 30

Slide 30 text

Děkuji za pozornost Dotazy? Tomáš Jukin @Inza Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill