Upload
open-knowledge-gmbh
View
1.438
Download
0
Tags:
Embed Size (px)
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.
Citation preview
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