iphone coding for web developers

37
iPhone coding for web developers Matt Biddulph www.hackdiary.com

Upload: matt-biddulph

Post on 07-Dec-2014

40.186 views

Category:

Technology


4 download

DESCRIPTION

A perspective on iPhone development from a server-side developer with very little GUI background. Given at http://www.lfpug.com in London on 26 March 2009.

TRANSCRIPT

Page 1: iPhone Coding For Web Developers

iPhone codingfor web developers

Matt Biddulph www.hackdiary.com

Page 2: iPhone Coding For Web Developers

From websitesto mobile apps

Page 3: iPhone Coding For Web Developers

www.twitter.com

Page 4: iPhone Coding For Web Developers

m.twitter.com

Page 5: iPhone Coding For Web Developers

Twitterifc, Tweetie and Twitterfon

Page 6: iPhone Coding For Web Developers

www.facebook.com

Page 7: iPhone Coding For Web Developers

m.facebook.com

Page 8: iPhone Coding For Web Developers

native iPhone app

Page 9: iPhone Coding For Web Developers

Joe Hewitt on the native Facebook app

Page 10: iPhone Coding For Web Developers

Joe Hewitt on the native Facebook app

“People must have assumed that

all I had to do was plug Facebook's

data into Apple's ready-to-use UI

components and hit the GO

button.

Page 11: iPhone Coding For Web Developers

Joe Hewitt on the native Facebook app

“I wish it had been that easy, but

unfortunately many of the

components I needed were missing

from the iPhone SDK, even though

they existed in Apple's own apps.”

Page 12: iPhone Coding For Web Developers
Page 13: iPhone Coding For Web Developers
Page 14: iPhone Coding For Web Developers
Page 15: iPhone Coding For Web Developers

Phonegap

Page 16: iPhone Coding For Web Developers

Building native internet apps

Page 17: iPhone Coding For Web Developers

Internet app basics

Page 18: iPhone Coding For Web Developers

Internet app basics

HTTP

JSON or XML

Regular Expressions

Local storage

Page 19: iPhone Coding For Web Developers

HTTP

NSURLRequest is fiddly.

I use GTMHTTPFetcher from

Google Toolbox for Mac.http://code.google.com/p/google-toolbox-for-mac/

or TTURLRequest from Joe Hewitthttp://joehewitt.com/post/the-three20-project/

Page 20: iPhone Coding For Web Developers

Mac OS X has NSXMLDocument

for DOM parsing.

The iPhone only has NSXML for

SAX parsing. This is hard.

XML

Page 21: iPhone Coding For Web Developers

XML

iPhone ships with libxml2. It is

good, fast and has a nasty C API.

Convenience wrapper functions

make it much easier:NSArray *PerformXMLXPathQuery(NSData *document, NSString *query);

http://cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html

Page 22: iPhone Coding For Web Developers

JSON

Objective C coders make liberal

use of mix-ins. Ruby coders fondly

call this ‘monkeypatching’.

#import "NSString+SBJSON.h"[@"{\"1\":2}" JSONValue]; (returns an NSDictionary)

Page 23: iPhone Coding For Web Developers

Regular Expressions

Some people, when confronted

with a problem, think “I know, I'll

use regular expressions.”

Now they have two problems.—usually attributed to jwz in comp.lang.emacs

Page 24: iPhone Coding For Web Developers

Regular Expressions

Again, the iPhone’s string handling

has no regular expression builtins.

But it ships with the ICU library

that does.

Page 25: iPhone Coding For Web Developers

Regular Expressions

RegexKitLite extends NSString

with methods that bridge to ICU.

This gives you UTF-safe functions

with small memory overhead and

caching.http://regexkit.sourceforge.net/RegexKitLite/

Page 26: iPhone Coding For Web Developers

Regular Expressions

As usual with Objective C, the

method names are rather verbose.

split: componentsSeparatedByRegex

gsub: stringByReplacingOccurrencesOfRegex

backrefs: matchEnumeratorWithRegex

Page 27: iPhone Coding For Web Developers

Local Storage

SQLite is the iPhone’s default

database management library.

This is a good thing.

Page 28: iPhone Coding For Web Developers

Yet again, it’s a C library that isn’t

integrated with Cocoa.

Local Storage

Page 29: iPhone Coding For Web Developers

FMDB is an Objective C wrapper

modeled on Java’s JDBC. It’s

sensible.

FMDatabase* db = [FMDatabase databaseWithPath:@"..."];

[db open];

[db executeUpdate:@”SELECT ...”];

http://code.google.com/p/flycode/source/browse/trunk/fmdb

Local Storage

Page 30: iPhone Coding For Web Developers

A few words about event-driven code

Page 31: iPhone Coding For Web Developers

The user is in control

Page 32: iPhone Coding For Web Developers

UI responsiveness and rendering is a priority

Page 33: iPhone Coding For Web Developers

Fallacies of networked computing

Page 34: iPhone Coding For Web Developers

Fallacies of networked computing

The network is reliable.

Latency is zero.

Bandwidth is infinite.

Page 35: iPhone Coding For Web Developers

The world is asynchronous

But threads are hard

Page 36: iPhone Coding For Web Developers

Understand delegation

Page 37: iPhone Coding For Web Developers

thank you

Matt Biddulphwww.hackdiary.com

Flickr photo heroes:

http://www.flickr.com/photos/scobleizer/1215753803/http://www.flickr.com/photos/envision/3085397880/http://www.flickr.com/photos/frinky/3236718934/http://www.flickr.com/photos/nickbilton/2861938380/http://www.flickr.com/photos/donsolo/2855854548/http://www.flickr.com/photos/en321/209425860/http://www.flickr.com/photos/mastrobiggo/2424561037/