iphone 4 java developer: "what the hack is ..."

Post on 27-Jun-2015

1.436 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Was Sun Microsystems mit Java (ME) über Jahre hinweg vergeblich versuchte, ist Apple mit dem iPhone, iPod und iPad in nur wenigen Monaten gelungen: die Erschließung eines riesigen Marktes für mobile Anwendungen (Apps) – aber leider nicht für den klassischen Java Developer. Stellt sich die Frage, ob die Entwicklung von iOS-basierten Anwendungen mit Objective-C sich wirklich so stark von Java unterscheidet. Die Session erläutert den typischen Entwicklungsprozess für iOS Apps, geht auf die gängigen Tools und die Sprache Objective-C ein und zeigt darüber hinaus, wie "einfach" es ist, eine selbst geschriebene Anwendung im App Store zu platzieren. Und das alles natürlich alles aus der Sicht eines Java Guys.

TRANSCRIPT

iPhone 4 Java Developers„What the hack is ...?“

Lars Röwekamp open knowledge GmbH

Dienstag, 10. Mai 2011

iPhone 4 Java Developers„What the hack is ...?“

Lars Röwekamp open knowledge GmbH

@mobileLarson@_openknowledge

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

WTH ... iOS?

Dienstag, 10. Mai 2011

WTH ... Objective-C?

Dienstag, 10. Mai 2011

WTH ... Tools?

Dienstag, 10. Mai 2011

WTH ... Apple?

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

„WTH ... iOS?“

– iOS Verständnis ist Voraussetzung – Liefert Basis-Infrastruktur für Apps

– „must-understand“ App Life-Cycle– „should-know“ Frameworks– „well-defined“ Design Patterns

Dienstag, 10. Mai 2011

App Event LoopDienstag, 10. Mai 2011

- applicationDidFinishLaunch... {...}

- applicationDidBecomeActive {...}

- applicationWillResignActive {...}

- applicationWillTerminate {...}

App Life-CycleDienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

- applicationDidFinishLaunch... {...}

- applicationDidBecomeActive {...}

- applicationWillResignActive {...}

- applicationWillTerminate {...}

- applicationDidEnterBackground {...}

- applicationWillEnterForeground {...}

App Life-Cycle (eXtended)Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

Framework Layers

Core OS Layer

Core Services Layer

Media Layer

Cocoa Touch Layer

SL

OSL

ML

CTL

Dienstag, 10. Mai 2011

Cocoa Touch Layer

– UIKit– App Management– Graphics & Windowing– UI Views & Controls– Touch Event Handling– Text Handling– Web Content– Device Feature Bibliotheken

(z.B. Acclerometer, Kamera, Video)

CTL

Dienstag, 10. Mai 2011

Cocoa Touch Layer

– Foundation– Wrapper Klassen (string, number, binary ...)– Collection Klassen (array, sets, dictionary, ...)– Bundles (dynamisch geladene App Module)– User Preferences– Threads & Run Loops– File Streams und URLs– Bonjour (dynamisches Discovery)

CTL

Dienstag, 10. Mai 2011

Core App ObjectsDienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

„WTH ... Objective-C?“

– Brad Cox & Tom Love (stepstone)– Basiert auf den Ideen von Smaltalk – striktes Superset von ANSI C

Dienstag, 10. Mai 2011

Objective-C

– Objektorientiert– State-of-the-Art Compiler– sehr gute Performance– ABI kompatibel, d.h. „C for free“– Dynamisch– Mesage orientiert

– Minimalistisch

Dienstag, 10. Mai 2011

Objective-C 2.0

– Mit Mac OS 10.5 eingeführt– GC, aber nicht auf iOS

– Fast-Enumeration– Weak-Linking– Selectors– Blocks

Dienstag, 10. Mai 2011

Objective-C 2.0

– Mit Mac OS 10.5 eingeführt– GC, aber nicht auf iOS

– Fast-Enumeration– Weak-Linking– Selectors– Blocks ?

Dienstag, 10. Mai 2011

public void setSize( Dimension size ) {

if (size.height!=0 && size.width!=0) { if (!this.size.equals(size)) { super.setSize(size); for ( MapItem i: mapItems ) i.resize(); } } }

The „Java“ WayDienstag, 10. Mai 2011

- (void)setFrameSize:(NSSize)size { if (size.height!=0.0 && size.width!=0.0) { if (!NSEqualSizes(self.size,size)) { [super setFrameSize:size]; [mapItems makeObjectsPerformSelector: @selector(resize)]; } } }

The „Ojective-C“ WayDienstag, 10. Mai 2011

- (void)setFrameSize:(NSSize)size { if (size.height!=0.0 && size.width!=0.0) { if (!NSEqualSizes(self.size,size)) { [super setFrameSize:size]; [mapItems makeObjectsPerformSelector: @selector(resize)]; } } }

The „Ojective-C“ WayDienstag, 10. Mai 2011

- (void)setFrameSize:(NSSize)size { if (size.height!=0.0 && size.width!=0.0) { if (!NSEqualSizes(self.size,size)) { [super setFrameSize:size]; [mapItems makeObjectsPerformSelector: @selector(resize)]; } } }

The „Ojective-C“ WayDienstag, 10. Mai 2011

- (void)setFrameSize:(NSSize)size { if (size.height!=0.0 && size.width!=0.0) { if (!NSEqualSizes(self.size,size)) { [super setFrameSize:size]; [mapItems makeObjectsPerformSelector: @selector(resize)]; } } }

The „Ojective-C“ WayDienstag, 10. Mai 2011

- (void)setFrameSize:(NSSize)size { if (size.height!=0.0 && size.width!=0.0) { if (!NSEqualSizes(self.size,size)) { [super setFrameSize:size]; [mapItems makeObjectsPerformSelector: @selector(resize)]; } } }

The „Ojective-C“ WayDienstag, 10. Mai 2011

person.setFirstName(“John“);

„send Message“statt Methoden-Aufruf

[person setFirstName:@“John“];

Java

Objective-C

Dienstag, 10. Mai 2011

Person person = new Person();

Objects sind dyn. allokierte StructsAchtung: D.h. keine Constructors

Person *p = [[Person alloc] init];

Java

Objective-C

Dienstag, 10. Mai 2011

Objects sind dyn. allokierte StructsAchtung: gezeigte Steps sind Pflicht

- (id)init{ self = [super init]; if (self != nil) { ... // spezifischer Code } return self; }  

Objective-C

Dienstag, 10. Mai 2011

java.lang.String s = new String(“Java“)

Wer braucht schon NamespacesAchtung: Framework-Prefix

NSString *s = [[NSString alloc] initWithString:@“Objective-C“];

Java

Objective-C

Dienstag, 10. Mai 2011

Objective-C Methoden

– Deklaration in .h– Implementierung in .m

– Instanzmethoden mit Prefix „-“– Klassenmethoden mit Prefix „+“

– Kein Overloading, da Runtimeüber den Namen geht

Dienstag, 10. Mai 2011

person.addAddress(address);

person.addAddress(address, AdrType.HOME);

Kein Methode Overloading ...

[person addAddress:address]

[person addAddress:address withType:ADHome];

Java

Objective-C

Dienstag, 10. Mai 2011

person.addAddress(address);

person.addAddress(address, AdrType.HOME);

Kein Methode Overloading ...

[person addAddress:address]

[person addAddress:address withType:ADHome];

Java

Objective-C

Dienstag, 10. Mai 2011

public void addAddress(Address adr, AdrType adrType);

Kein Methode Overloading ...Methodenname: addAddress:withType

- void addAddress:(Address*)adr withType:(ADType)adrType;

Java

Objective-C

Dienstag, 10. Mai 2011

Objective-C Klassen

– Deklaration in .h– Implementierung in .m

– @interface ... @end– @implementation ... @end

– Instanzvariablen innerhalb { ... }– Methoden außerhalb { ... }

Dienstag, 10. Mai 2011

Objective-C Interface (.h)

@interface Person: NSObject { int age; }

- (int)age; - (void)setAge:(int)newAge;

@end;

Objective-C

Dienstag, 10. Mai 2011

Objective-C Implementation (.m)

#import “Person.h“

@implementation Person

- (int)age {return age}; - (void)setAge:(int)newAge { age = newAge; } ...

@end;

Objective-C

Dienstag, 10. Mai 2011

property & synthezise

@interface Person: NSObject { BOOL aduld; } @property BOOL adult (...); @end;

@implementation Person @synthesize adult; @end;

Objective-C

Dienstag, 10. Mai 2011

Objective-C Qualifier

– @private Sektion– @protected Sektion– @public Sektion

– „private“ via fehlende Deklaration in .h

Dienstag, 10. Mai 2011

Objective-C „Fun-Club“

– Pointer – Memory Management – Missing GC (iOS Autorelease Pool)

– Protocol (wie Java Interfaces)– Blocks („Closure-like“)– Selector („Reflection-like“)– Weak Linking („wenn-dann“)

Dienstag, 10. Mai 2011

Objective-C „Fun-Club“

– Pointer – Memory Management – Missing GC (iOS Autorelease Pool)

– Protocol (wie Java Interfaces)– Blocks („Closure-like“)– Selector („Reflection-like“)– Weak Linking („wenn-dann“)

Dienstag, 10. Mai 2011

Objective-C Memory Management

alloc: retain count =1copy: retain count =1retain: retain count +1release: retain count -1autorelease: retain count -1 (future)

Dienstag, 10. Mai 2011

Objective-C Memory Management

Dienstag, 10. Mai 2011

Objective-C Memory Management

Dienstag, 10. Mai 2011

Objective-C Memory Management

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

xCode InterfaceBuilder Instruments

Dienstag, 10. Mai 2011

Code Diving ...

>> xCode>> IB>> Instruments

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

Alles halb so schlimm, aber ...

... ungewohnte Umgebung

... ungewohnte Sprache

... ungewohnte Tools

... ungewohnte Strategie

Dienstag, 10. Mai 2011

Und nicht vergessen, ...

... fast launch, short use

... tune your code

... tune your network

„Build cool stuff and have fun!“

Dienstag, 10. Mai 2011

Dienstag, 10. Mai 2011

Gibt es noch Fragen?

Dann los ...

Dienstag, 10. Mai 2011

top related