trends and transformations in ios development
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