Trends and Transformations in iOS Development

Post on 18-Jul-2015

4,577 views 0 download

Tags:

transcript

TRENDS & TRANSFORMATIONS IN IOS DEVELOPMENT

@saratSOFTWARE ARCHITECT

WATCH

WATCH IS THE FIRST WEARABLE

PRODUCT FROM

EXTEND YOUR IPHONE

HEART-RATE SENSOR

USES GPS OF YOUR IPHONE

ACCELEROMETER

YOUR FITNESS MATE

THE SECRET HISTORY OF WATCH

KEVIN LYNCH THE GUY WHO WAS BOLD ENOUGH TO PUBLICLY TAKE ON

STEVE JOBS ON ADOBE FLASH

IMAGE COURTESY WIRED.COM

DEVELOPER GUIDELINES

“The main difference is that app makers shouldn’t think big.

They should think small.”

What Instagram's New App Reveals About the Apple Watch - WIRED

WATCHKIT APP ARCHITECTURE

WATCHKIT APP ARCHITECTURE

USER INTERACTIONS

GLANCES

GIVES QUICK SUMMARY RESIDES WITHIN IPHONE APP

GLANCESQUICK ✪ FOCUS ✪ TIMELY

CHIPOTLE APP

CHIPOTLE APP

CHIPOTLE APP

NOTIFICATIONSCOMPANION WATCH APP CAN

SHOW THE NOTIFICATIONS FROM YOUR IPHONE APP

NOTIFICATIONS

SHORT-LOOK INTERFACE

LONG-LOOK INTERFACE

SHORT-LOOK INTERFACE

APP ICON +

APP NAME +

MESSAGE TITLE

LONG-LOOK INTERFACE

TITLE +

CONTENT AREA +

FOOTER

CONTENT AREA CAN BE STATIC OR DYNAMIC

DYNAMIC CONTENT AREABUTTONS, IMAGES, MAPS,

LABELS, TABLES

STATIC CONTENT AREATYPICALLY USED AS FALLBACK OPTION

YOUR FAVORITE APPS

TWITTER SHAZAM EVERNOTE

STRAVA CITI MOBILE EXPEDIA

SWIFT

SWIFTOBJECTIVE-C WITHOUT C

CHRIS LATTNER

• CREATOR OF THE ORIGINAL LLVM TOOL CHAIN PROJECT

• STARTED WORKING ON SWIFT IN 2010

• HE WAS A RESEARCH INTERN AT MICROSOFT

• NOW LEADS DEVELOPMENT TOOLS EFFORT AT APPLE

WHY SWIFT?

THE POWER OF A SCRIPTING LANGUAGE

THE PRODUCTIVITY OF A SCRIPTING LANGUAGE

THE PERFORMANCE OF A NATIVE LANGUAGE

READABLE & PREDICTABLE & MAINTAINABLE

FAST ADOPTION BY PROGRAMMING COMMUNITY

– The RedMonk Programming Language Rankings: January 2015

“Swift has gone from our 68th ranked language during Q3 to number 22 this quarter,

a jump of 46 spots.”

WORKS WITH YOUR EXISTING OBJECTIVE-C FRAMEWORKS

BRIDGES

HIGHLY MODERN LANGUAGE CONSTRUCTS

HEAVILY INFLUENCED FROM C#, RUBY, PYTHON, RUBY AND MANY MODERN LANGUAGES

MODERN COMPILER TECHNOLOGY

LLVM COMPILER AND TOOL CHAINS

COMPILES THE CODE IN TO NATIVE CODE

SMALLER RUNTIME

EASY TO LEARN

PLAYGROUND

REPL (READ-EVAL-PRINT-LOOP)

TURNS YOUR DEBUGGING CONSOLE OF XCODE INTO AN INTERACTIVE SWIFT RUNTIME

EVALUATE AND INTERACT WITH YOUR RUNNING APP

WRITE NEW CODE TO SEE HOW IT WORKS IN A SCRIPT LIKE ENVIRONMENT

REPL

- Write it in lldb when program runs - Use xcrun swift to run externally

SWIFT COMPILER ARCHITECTURE

QUICK BITES

OBJECTIVE-C

NSDictionary *favoriteNumbers = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInteger:7], @"Jane", [NSNumber numberWithInteger:21], @"Bob", [NSNumber numberWithInteger:99], @"Sarah", nil]];

OBJECTIVE-CNSDictionary *favoriteNumbers = [NSDictionary

dictionaryWithObjectsAndKeys:[NSNumber numberWithInteger:7], @"Jane", [NSNumber numberWithInteger:21], @"Bob", [NSNumber numberWithInteger:99], @"Sarah", nil]];

SWIFTvar favoriteNumbers = ["Jane": 7, "Bob": 21, "Sarah": 99]

CLOSURES// Closures var cities = ["New Delhi", "Trivandrum", "Kochi", "Bangalore"]

// Sort with delegates cities.sort({ (a, b) -> Bool in a < b })

PARENTHESES// Closures var cities = ["New Delhi", "Trivandrum", "Kochi", "Bangalore"]

// Sort with delegates cities.sort({ (a, b) -> Bool in a < b })

PARENTHESES// Closures var cities = ["New Delhi", "Trivandrum", "Kochi", "Bangalore"]

// Sort with delegates cities.sort { (a, b) -> Bool in a < b }

TYPE INFERENCE

// Closures var cities = ["New Delhi", "Trivandrum", "Kochi", "Bangalore"]

// Sort with delegates cities.sort { (a, b) -> Bool in a < b }

IMPLICIT RETURN// Closures var cities = ["New Delhi", "Trivandrum", "Kochi", "Bangalore"]

// Sort with delegates cities.sort { a, b in a < b }

POSITIONAL PARAMS

// Closures var cities = ["New Delhi", "Trivandrum", "Kochi", "Bangalore"]

// Sort with delegates — Positional parameters cities.sort { $0 < $1 }

OPERATOR AS CLOSURE// Closures var cities = ["New Delhi", "Trivandrum", "Kochi", "Bangalore"]

// Sounds interesting? cities.sort( < )

OPTIONALS

class Person { var residence : Residence? }

class Residence { var address : Address? }

class Address { var buildingNumber : String? var streetName : String? var apartmentNumber : String? }

// Optional Binding if let home = paul.residence { if let postalAddress = home.address { if let building = postalAddress.buildingNumber { // Code } } }

// Optional Chaining let buildingNumber = paul.residence?.address?.buildingNumber

// optional chaining + bind + unwrap if let buildingNumber = paul.residence?.address?.buildingNumber {

}

THANK YOU

@sarat