SlideShare a Scribd company logo
1 of 73
Download to read offline
BUILD FEATURES,
NOT APPS
@NATASHATHEROBOT
SWIFT ROBOT
▸ NatashaTheRobot.com
▸ @NatashaTheNomad
▸ This Week in Swift
▸ Swift Jobs
▸ try! Swift
Most smartphone users download 0 apps per month
An average app loses up to 95% of users within the first month
!!!
!"
FEATURE:
NOTIFICATIONS
FEATURE:
SPEECH
RECOGNITION
"As speech recognition accuracy goes from say 95% to 99%, all of us in
the room will from barely using it today to using it all the time. Most
people underestimate the difference between 95% and 99% accuracy -
99% is a game changer" - Andrew NG, Chief Scientist at Baidu
SIRI INTENTS
▸ Audio or video calling
▸ Messaging
▸ Payments
▸ Searching photos
▸ Workouts
▸ Ride booking
FEATURE:
EXTENSIONS
"It took Line Messenger almost four
months to find its first two million
users ...
… but after stickers were launched, it
took only two days to find the next
million...
The company now makes over $270M a
year just from selling stickers."
THE FUTURE?
! -> "
ARCHITECTING
FOR FEATURES
▸ Frameworks all the things!
▸ Vectorize Images
▸ NSUserActivity FTW
!
OPEN VS PUBLIC
let rootURL = FileManager.default().
containerURLForSecurityApplicationGroupIdentifier("group.com.NatashaTheRobot.MyFavoriteGelato")
let defaults = UserDefaults(suiteName: "group.com.NatashaTheRobot.MyFavoriteGelato")
! + ⌚ + #
MULTIPLATFORM, SINGLE-SCHEME XCODE PROJECTS
by Max Howell on PromiseKit.org
FRAMEWORKS
▸ DRY
▸ App Groups
▸ iCloud Key-Value Storage
▸ Cross-Platform
VECTORIZE IMAGES
.PDF
iceCreamImageView.tintColor = .purple
VECTORIZE IMAGES
▸ Single Scale PDFs
▸ Template Image for Icons
NSUSERACTIVITY FTW
// AppDelegate
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool
{
if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let webpageURL = userActivity.webpageURL
{
// separate webpageURL using NSURLComponents
// present the correct View Controller if valid
// otherwise, open link in Safari
}
return false
}
CREATING AN ACTIVITY
// GelatoDetailViewController
override func viewDidLoad() {
super.viewDidLoad()
// other config here
let activity = NSUserActivity(activityType: "com.natashatherobot.GelatoFinder.gelato")
// will show up as this in Spotlight Search Results
activity.title = gelato.name
// Other keywords to search by
activity.keywords = Set([gelato.name, "gelato"])
// should be handed off to another device?
activity.isEligibleForHandoff = true
// should be indexed in App History?
activity.isEligibleForSearch = true
// should be eligible for indexing for any user of this application?
activity.isEligibleForPublicIndexing = true
// Avoid deallocating before indexing,
// global variable declared in UIResponder class
userActivity = activity
// don't forget to activate!
userActivity!.becomeCurrent()
}
SAVE UNIQUE INFO
// GelatoDetailViewController
override func viewDidLoad() {
// create activity and other config here
activity.delegate = self
activity.needsSave = true
// assign to userActivity, etc
}
extension GelatoDetailViewController: NSUserActivityDelegate {
func userActivityWillSave(_ userActivity: NSUserActivity) {
// info needed to recreate activity!
userActivity.userInfo = ["index": gelatoIndex]
}
}
RESTORE ACTIVITY
// AppDelegate
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool
{
let mainController = (window!.rootViewController! as! UINavigationController).viewControllers.first
mainController?.restoreUserActivityState(userActivity)
return true
}
RESTORE ACTIVITY
// GelatoListTableViewController
override func restoreUserActivityState(_ activity: NSUserActivity) {
if let index = activity.userInfo?["index"] as? Int {
searchedGelatoIdentifier = index
performSegue(withIdentifier: "showGelato", sender: self)
}
}
RESTORE ACTIVITY
// GelatoListTableViewController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let gelatoDetailVC = segue.destination as? GelatoDetailViewController {
let index = tableView.indexPathForSelectedRow?.row ?? searchedGelatoIdentifier ?? 0
gelatoDetailVC.gelato = gelatoFlavors[index]
gelatoDetailVC.gelatoIndex = index
}
}
NSUSERACTIVITY
▸ Handoff
▸ Universal Links
▸ Search
▸ Location
▸ Contextual Reminders
▸ Contact Interactions
▸ Frameworks all the things!
▸ Vectorize Images
▸ NSUserActivity FTW
BUILD FEATURES,
NOT APPS
@NATASHATHEROBOT

More Related Content

What's hot

Vserv developers mar2013 - sea
Vserv developers mar2013 - seaVserv developers mar2013 - sea
Vserv developers mar2013 - seagdgvietnam
 
Native vs. Mobile Web vs. Hybrid Apps for Mobile Development
Native vs. Mobile Web vs. Hybrid Apps for Mobile DevelopmentNative vs. Mobile Web vs. Hybrid Apps for Mobile Development
Native vs. Mobile Web vs. Hybrid Apps for Mobile DevelopmentJason Grigsby
 
The Mobile Apps Ecosystem
The Mobile Apps EcosystemThe Mobile Apps Ecosystem
The Mobile Apps EcosystemJim Ayson
 
6 Reasons Not to Build a Mobile Application for your Conference, Event or Mee...
6 Reasons Not to Build a Mobile Application for your Conference, Event or Mee...6 Reasons Not to Build a Mobile Application for your Conference, Event or Mee...
6 Reasons Not to Build a Mobile Application for your Conference, Event or Mee...Mosio
 
Your Guide to a Modern Mobile-First Web Strategy
Your Guide to a Modern Mobile-First Web StrategyYour Guide to a Modern Mobile-First Web Strategy
Your Guide to a Modern Mobile-First Web StrategyTechBlocks
 
How Much Does it Cost to Build a Mobile App for iPhone & Android?
How Much Does it Cost to Build a Mobile App for iPhone & Android?How Much Does it Cost to Build a Mobile App for iPhone & Android?
How Much Does it Cost to Build a Mobile App for iPhone & Android?Alex Sam
 
Top 10 Trends in Mobile Apps Ecosystem: India in 2015
Top 10 Trends in Mobile Apps Ecosystem: India in 2015Top 10 Trends in Mobile Apps Ecosystem: India in 2015
Top 10 Trends in Mobile Apps Ecosystem: India in 2015Deepak Abbot
 
Why Mobile Matters to All Business
Why Mobile Matters to All BusinessWhy Mobile Matters to All Business
Why Mobile Matters to All BusinessMobileBits
 
Universo Mobi
Universo MobiUniverso Mobi
Universo MobiStartupi
 
Why You Need a Mobile Website
Why You Need a Mobile WebsiteWhy You Need a Mobile Website
Why You Need a Mobile WebsiteShelly Kramer
 
How much does it cost to make an app like make mytrip _ by kalyani tangadpal...
How much does it cost to make an app like make mytrip  _ by kalyani tangadpal...How much does it cost to make an app like make mytrip  _ by kalyani tangadpal...
How much does it cost to make an app like make mytrip _ by kalyani tangadpal...kalyanit6
 
Mobilising Digital - Perth 13/03/14
Mobilising Digital - Perth 13/03/14Mobilising Digital - Perth 13/03/14
Mobilising Digital - Perth 13/03/14Precedent
 
An overview of new age location-based apps and their development procedure!
An overview of new age location-based apps and their development procedure!An overview of new age location-based apps and their development procedure!
An overview of new age location-based apps and their development procedure!Shelly Megan
 

What's hot (19)

Vserv developers mar2013 - sea
Vserv developers mar2013 - seaVserv developers mar2013 - sea
Vserv developers mar2013 - sea
 
Native vs. Mobile Web vs. Hybrid Apps for Mobile Development
Native vs. Mobile Web vs. Hybrid Apps for Mobile DevelopmentNative vs. Mobile Web vs. Hybrid Apps for Mobile Development
Native vs. Mobile Web vs. Hybrid Apps for Mobile Development
 
The Mobile Apps Ecosystem
The Mobile Apps EcosystemThe Mobile Apps Ecosystem
The Mobile Apps Ecosystem
 
HABITATAPPS
HABITATAPPSHABITATAPPS
HABITATAPPS
 
6 Reasons Not to Build a Mobile Application for your Conference, Event or Mee...
6 Reasons Not to Build a Mobile Application for your Conference, Event or Mee...6 Reasons Not to Build a Mobile Application for your Conference, Event or Mee...
6 Reasons Not to Build a Mobile Application for your Conference, Event or Mee...
 
Your Guide to a Modern Mobile-First Web Strategy
Your Guide to a Modern Mobile-First Web StrategyYour Guide to a Modern Mobile-First Web Strategy
Your Guide to a Modern Mobile-First Web Strategy
 
Micromoments Mobile UX
Micromoments Mobile UXMicromoments Mobile UX
Micromoments Mobile UX
 
How Much Does it Cost to Build a Mobile App for iPhone & Android?
How Much Does it Cost to Build a Mobile App for iPhone & Android?How Much Does it Cost to Build a Mobile App for iPhone & Android?
How Much Does it Cost to Build a Mobile App for iPhone & Android?
 
Top 10 Trends in Mobile Apps Ecosystem: India in 2015
Top 10 Trends in Mobile Apps Ecosystem: India in 2015Top 10 Trends in Mobile Apps Ecosystem: India in 2015
Top 10 Trends in Mobile Apps Ecosystem: India in 2015
 
Why Mobile Matters to All Business
Why Mobile Matters to All BusinessWhy Mobile Matters to All Business
Why Mobile Matters to All Business
 
Universo Mobi
Universo MobiUniverso Mobi
Universo Mobi
 
Why You Need a Mobile Website
Why You Need a Mobile WebsiteWhy You Need a Mobile Website
Why You Need a Mobile Website
 
How much does it cost to make an app like make mytrip _ by kalyani tangadpal...
How much does it cost to make an app like make mytrip  _ by kalyani tangadpal...How much does it cost to make an app like make mytrip  _ by kalyani tangadpal...
How much does it cost to make an app like make mytrip _ by kalyani tangadpal...
 
Mobilising Digital - Perth 13/03/14
Mobilising Digital - Perth 13/03/14Mobilising Digital - Perth 13/03/14
Mobilising Digital - Perth 13/03/14
 
An overview of new age location-based apps and their development procedure!
An overview of new age location-based apps and their development procedure!An overview of new age location-based apps and their development procedure!
An overview of new age location-based apps and their development procedure!
 
Smart campus
Smart campusSmart campus
Smart campus
 
Smart campus
Smart campusSmart campus
Smart campus
 
Mc Ewan Fraser Legal - Mobile App case study
Mc Ewan Fraser Legal - Mobile App case studyMc Ewan Fraser Legal - Mobile App case study
Mc Ewan Fraser Legal - Mobile App case study
 
Makeup Revolution - Mobile App case study
Makeup Revolution - Mobile App case studyMakeup Revolution - Mobile App case study
Makeup Revolution - Mobile App case study
 

Viewers also liked

Swift Delhi: Practical POP
Swift Delhi: Practical POPSwift Delhi: Practical POP
Swift Delhi: Practical POPNatasha Murashev
 
It security for libraries part 3 - disaster recovery
It security for libraries part 3 - disaster recovery It security for libraries part 3 - disaster recovery
It security for libraries part 3 - disaster recovery Brian Pichman
 
Big Talk From Small Libraries 2017 - Digitize It Yourself: A Method of In-Hou...
Big Talk From Small Libraries 2017 - Digitize It Yourself: A Method of In-Hou...Big Talk From Small Libraries 2017 - Digitize It Yourself: A Method of In-Hou...
Big Talk From Small Libraries 2017 - Digitize It Yourself: A Method of In-Hou...Nebraska Library Commission
 
Practical Protocols with Associated Types
Practical Protocols with Associated TypesPractical Protocols with Associated Types
Practical Protocols with Associated TypesNatasha Murashev
 
Empowering Global Research in Biodiversity: The Biodiversity Heritage Library
Empowering Global Research in Biodiversity: The Biodiversity Heritage LibraryEmpowering Global Research in Biodiversity: The Biodiversity Heritage Library
Empowering Global Research in Biodiversity: The Biodiversity Heritage LibraryMartin Kalfatovic
 
How to Win on the Apple Watch
How to Win on the Apple WatchHow to Win on the Apple Watch
How to Win on the Apple WatchNatasha Murashev
 
TEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkTEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkVolker Hirsch
 
Wikipedia and Libraries: what’s in it for you?
Wikipedia and Libraries: what’s in it for you?Wikipedia and Libraries: what’s in it for you?
Wikipedia and Libraries: what’s in it for you?OCLC
 
The Secret Life of a Digital Nomad
The Secret Life of a Digital NomadThe Secret Life of a Digital Nomad
The Secret Life of a Digital NomadNatasha Murashev
 
3 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 20173 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 2017Drift
 
LIBER Webinar: 23 Things About Research Data Management
LIBER Webinar: 23 Things About Research Data ManagementLIBER Webinar: 23 Things About Research Data Management
LIBER Webinar: 23 Things About Research Data ManagementLIBER Europe
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with DataSeth Familian
 
Protocol Oriented MVVM - Auckland iOS Meetup
Protocol Oriented MVVM - Auckland iOS MeetupProtocol Oriented MVVM - Auckland iOS Meetup
Protocol Oriented MVVM - Auckland iOS MeetupNatasha Murashev
 
Practical Protocol-Oriented-Programming
Practical Protocol-Oriented-ProgrammingPractical Protocol-Oriented-Programming
Practical Protocol-Oriented-ProgrammingNatasha Murashev
 
The Zen Guide to WatchOS 2
The Zen Guide to WatchOS 2The Zen Guide to WatchOS 2
The Zen Guide to WatchOS 2Natasha Murashev
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheLeslie Samuel
 
LIBER Webinar: Are the FAIR Data Principles really fair?
LIBER Webinar: Are the FAIR Data Principles really fair?LIBER Webinar: Are the FAIR Data Principles really fair?
LIBER Webinar: Are the FAIR Data Principles really fair?LIBER Europe
 

Viewers also liked (20)

Swift Delhi: Practical POP
Swift Delhi: Practical POPSwift Delhi: Practical POP
Swift Delhi: Practical POP
 
It security for libraries part 3 - disaster recovery
It security for libraries part 3 - disaster recovery It security for libraries part 3 - disaster recovery
It security for libraries part 3 - disaster recovery
 
Big Talk From Small Libraries 2017 - Digitize It Yourself: A Method of In-Hou...
Big Talk From Small Libraries 2017 - Digitize It Yourself: A Method of In-Hou...Big Talk From Small Libraries 2017 - Digitize It Yourself: A Method of In-Hou...
Big Talk From Small Libraries 2017 - Digitize It Yourself: A Method of In-Hou...
 
Practical Protocols with Associated Types
Practical Protocols with Associated TypesPractical Protocols with Associated Types
Practical Protocols with Associated Types
 
Empowering Global Research in Biodiversity: The Biodiversity Heritage Library
Empowering Global Research in Biodiversity: The Biodiversity Heritage LibraryEmpowering Global Research in Biodiversity: The Biodiversity Heritage Library
Empowering Global Research in Biodiversity: The Biodiversity Heritage Library
 
How to Win on the Apple Watch
How to Win on the Apple WatchHow to Win on the Apple Watch
How to Win on the Apple Watch
 
TEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkTEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of Work
 
Wikipedia and Libraries: what’s in it for you?
Wikipedia and Libraries: what’s in it for you?Wikipedia and Libraries: what’s in it for you?
Wikipedia and Libraries: what’s in it for you?
 
The Secret Life of a Digital Nomad
The Secret Life of a Digital NomadThe Secret Life of a Digital Nomad
The Secret Life of a Digital Nomad
 
Hello watchOS2
Hello watchOS2 Hello watchOS2
Hello watchOS2
 
3 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 20173 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 2017
 
LIBER Webinar: 23 Things About Research Data Management
LIBER Webinar: 23 Things About Research Data ManagementLIBER Webinar: 23 Things About Research Data Management
LIBER Webinar: 23 Things About Research Data Management
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with Data
 
Protocol Oriented MVVM - Auckland iOS Meetup
Protocol Oriented MVVM - Auckland iOS MeetupProtocol Oriented MVVM - Auckland iOS Meetup
Protocol Oriented MVVM - Auckland iOS Meetup
 
Practical Protocol-Oriented-Programming
Practical Protocol-Oriented-ProgrammingPractical Protocol-Oriented-Programming
Practical Protocol-Oriented-Programming
 
The Swift Architect
The Swift ArchitectThe Swift Architect
The Swift Architect
 
Protocol-Oriented MVVM
Protocol-Oriented MVVMProtocol-Oriented MVVM
Protocol-Oriented MVVM
 
The Zen Guide to WatchOS 2
The Zen Guide to WatchOS 2The Zen Guide to WatchOS 2
The Zen Guide to WatchOS 2
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 
LIBER Webinar: Are the FAIR Data Principles really fair?
LIBER Webinar: Are the FAIR Data Principles really fair?LIBER Webinar: Are the FAIR Data Principles really fair?
LIBER Webinar: Are the FAIR Data Principles really fair?
 

Similar to Build Features Not Apps

Features not apps tokyo
Features not apps tokyoFeatures not apps tokyo
Features not apps tokyoHotrixxx
 
Create Features not apps
Create Features not appsCreate Features not apps
Create Features not appsmuhammad hunain
 
The Art and Science of Mobile App Success - Seattle Interactive Conference 20...
The Art and Science of Mobile App Success - Seattle Interactive Conference 20...The Art and Science of Mobile App Success - Seattle Interactive Conference 20...
The Art and Science of Mobile App Success - Seattle Interactive Conference 20...Jennifer Wong
 
Hieu Xamarin iOS9, Android M 3-11-2015
Hieu Xamarin iOS9, Android M  3-11-2015Hieu Xamarin iOS9, Android M  3-11-2015
Hieu Xamarin iOS9, Android M 3-11-2015Nguyen Hieu
 
Guidelines for Android application design.pptx
Guidelines for Android application design.pptxGuidelines for Android application design.pptx
Guidelines for Android application design.pptxdebasish duarah
 
A gently introduction to AngularJS
A gently introduction to AngularJSA gently introduction to AngularJS
A gently introduction to AngularJSGregor Woiwode
 
Droidcon: Sean Owen: Driving Downloads via Intents- 29/10/2010
Droidcon: Sean Owen: Driving Downloads via Intents- 29/10/2010Droidcon: Sean Owen: Driving Downloads via Intents- 29/10/2010
Droidcon: Sean Owen: Driving Downloads via Intents- 29/10/2010Skills Matter
 
Building interactive app
Building interactive appBuilding interactive app
Building interactive appOmar Albelbaisy
 
Mobile Web vs. Native Apps | Design4Mobile
Mobile Web vs. Native Apps | Design4MobileMobile Web vs. Native Apps | Design4Mobile
Mobile Web vs. Native Apps | Design4MobileJason Grigsby
 
Hi5 Hackathon Presentation
Hi5 Hackathon PresentationHi5 Hackathon Presentation
Hi5 Hackathon PresentationLou Moore
 
An Introduction to Deep Linking and App Indexing Codelab
An Introduction to Deep Linking and App Indexing CodelabAn Introduction to Deep Linking and App Indexing Codelab
An Introduction to Deep Linking and App Indexing CodelabJarek Wilkiewicz
 
How NOT to Suck at App Distribution - Quick Start Guide - Appsocially's Growt...
How NOT to Suck at App Distribution - Quick Start Guide - Appsocially's Growt...How NOT to Suck at App Distribution - Quick Start Guide - Appsocially's Growt...
How NOT to Suck at App Distribution - Quick Start Guide - Appsocially's Growt...Yusuke Takahashi, PhD
 
Lecture #1 Creating your first android project
Lecture #1  Creating your first android projectLecture #1  Creating your first android project
Lecture #1 Creating your first android projectVitali Pekelis
 
Mobile App Feature Configuration and A/B Experiments
Mobile App Feature Configuration and A/B ExperimentsMobile App Feature Configuration and A/B Experiments
Mobile App Feature Configuration and A/B Experimentslacyrhoades
 
Uncovering Secrets of Progressive Web Apps
Uncovering Secrets of Progressive Web AppsUncovering Secrets of Progressive Web Apps
Uncovering Secrets of Progressive Web AppsMaximiliano Firtman
 
Cocoa coders 141113-watch
Cocoa coders 141113-watchCocoa coders 141113-watch
Cocoa coders 141113-watchCarl Brown
 
Where 2.0 — Native vs Web vs Hybrid: Mobile Development Choices
Where 2.0 — Native vs Web vs Hybrid: Mobile Development ChoicesWhere 2.0 — Native vs Web vs Hybrid: Mobile Development Choices
Where 2.0 — Native vs Web vs Hybrid: Mobile Development ChoicesJason Grigsby
 
Digital Body Language
Digital Body Language  Digital Body Language
Digital Body Language Michael King
 

Similar to Build Features Not Apps (20)

Build Features not apps tokyo
Build Features not apps tokyoBuild Features not apps tokyo
Build Features not apps tokyo
 
Features not apps tokyo
Features not apps tokyoFeatures not apps tokyo
Features not apps tokyo
 
Create Features not apps
Create Features not appsCreate Features not apps
Create Features not apps
 
The Art and Science of Mobile App Success - Seattle Interactive Conference 20...
The Art and Science of Mobile App Success - Seattle Interactive Conference 20...The Art and Science of Mobile App Success - Seattle Interactive Conference 20...
The Art and Science of Mobile App Success - Seattle Interactive Conference 20...
 
Deep linking
Deep linkingDeep linking
Deep linking
 
Hieu Xamarin iOS9, Android M 3-11-2015
Hieu Xamarin iOS9, Android M  3-11-2015Hieu Xamarin iOS9, Android M  3-11-2015
Hieu Xamarin iOS9, Android M 3-11-2015
 
Guidelines for Android application design.pptx
Guidelines for Android application design.pptxGuidelines for Android application design.pptx
Guidelines for Android application design.pptx
 
A gently introduction to AngularJS
A gently introduction to AngularJSA gently introduction to AngularJS
A gently introduction to AngularJS
 
Droidcon: Sean Owen: Driving Downloads via Intents- 29/10/2010
Droidcon: Sean Owen: Driving Downloads via Intents- 29/10/2010Droidcon: Sean Owen: Driving Downloads via Intents- 29/10/2010
Droidcon: Sean Owen: Driving Downloads via Intents- 29/10/2010
 
Building interactive app
Building interactive appBuilding interactive app
Building interactive app
 
Mobile Web vs. Native Apps | Design4Mobile
Mobile Web vs. Native Apps | Design4MobileMobile Web vs. Native Apps | Design4Mobile
Mobile Web vs. Native Apps | Design4Mobile
 
Hi5 Hackathon Presentation
Hi5 Hackathon PresentationHi5 Hackathon Presentation
Hi5 Hackathon Presentation
 
An Introduction to Deep Linking and App Indexing Codelab
An Introduction to Deep Linking and App Indexing CodelabAn Introduction to Deep Linking and App Indexing Codelab
An Introduction to Deep Linking and App Indexing Codelab
 
How NOT to Suck at App Distribution - Quick Start Guide - Appsocially's Growt...
How NOT to Suck at App Distribution - Quick Start Guide - Appsocially's Growt...How NOT to Suck at App Distribution - Quick Start Guide - Appsocially's Growt...
How NOT to Suck at App Distribution - Quick Start Guide - Appsocially's Growt...
 
Lecture #1 Creating your first android project
Lecture #1  Creating your first android projectLecture #1  Creating your first android project
Lecture #1 Creating your first android project
 
Mobile App Feature Configuration and A/B Experiments
Mobile App Feature Configuration and A/B ExperimentsMobile App Feature Configuration and A/B Experiments
Mobile App Feature Configuration and A/B Experiments
 
Uncovering Secrets of Progressive Web Apps
Uncovering Secrets of Progressive Web AppsUncovering Secrets of Progressive Web Apps
Uncovering Secrets of Progressive Web Apps
 
Cocoa coders 141113-watch
Cocoa coders 141113-watchCocoa coders 141113-watch
Cocoa coders 141113-watch
 
Where 2.0 — Native vs Web vs Hybrid: Mobile Development Choices
Where 2.0 — Native vs Web vs Hybrid: Mobile Development ChoicesWhere 2.0 — Native vs Web vs Hybrid: Mobile Development Choices
Where 2.0 — Native vs Web vs Hybrid: Mobile Development Choices
 
Digital Body Language
Digital Body Language  Digital Body Language
Digital Body Language
 

More from Natasha Murashev

Digital Nomad: The New Normal
Digital Nomad: The New NormalDigital Nomad: The New Normal
Digital Nomad: The New NormalNatasha Murashev
 
Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)Natasha Murashev
 
Unleash the Power of Playgrounds
Unleash the Power of PlaygroundsUnleash the Power of Playgrounds
Unleash the Power of PlaygroundsNatasha Murashev
 
AltConf 2015: Swift Thinking
AltConf 2015: Swift ThinkingAltConf 2015: Swift Thinking
AltConf 2015: Swift ThinkingNatasha Murashev
 
Funcitonal Swift Conference: The Functional Way
Funcitonal Swift Conference: The Functional WayFuncitonal Swift Conference: The Functional Way
Funcitonal Swift Conference: The Functional WayNatasha Murashev
 
HealthKit: Getting Ready for the New Year
HealthKit: Getting Ready for the New YearHealthKit: Getting Ready for the New Year
HealthKit: Getting Ready for the New YearNatasha Murashev
 
Learning.... Swift functions!
Learning.... Swift functions!Learning.... Swift functions!
Learning.... Swift functions!Natasha Murashev
 
A Swift introduction a.k.a Fun with Minions!
A Swift introduction a.k.a Fun with Minions!A Swift introduction a.k.a Fun with Minions!
A Swift introduction a.k.a Fun with Minions!Natasha Murashev
 
The Many Faces of Swift Functions
The Many Faces of Swift FunctionsThe Many Faces of Swift Functions
The Many Faces of Swift FunctionsNatasha Murashev
 
Getting Started with Open Source
Getting Started with Open SourceGetting Started with Open Source
Getting Started with Open SourceNatasha Murashev
 
iOSDevCampDC: A Swift Introduction
iOSDevCampDC: A Swift IntroductioniOSDevCampDC: A Swift Introduction
iOSDevCampDC: A Swift IntroductionNatasha Murashev
 

More from Natasha Murashev (18)

Digital Nomad: The New Normal
Digital Nomad: The New NormalDigital Nomad: The New Normal
Digital Nomad: The New Normal
 
Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)
 
HealthKit Deep Dive
HealthKit Deep DiveHealthKit Deep Dive
HealthKit Deep Dive
 
Using Parse in Hackathons
Using Parse in HackathonsUsing Parse in Hackathons
Using Parse in Hackathons
 
Hello, WatchKit
Hello, WatchKitHello, WatchKit
Hello, WatchKit
 
Hello, WatchKit
Hello, WatchKitHello, WatchKit
Hello, WatchKit
 
Unleash the Power of Playgrounds
Unleash the Power of PlaygroundsUnleash the Power of Playgrounds
Unleash the Power of Playgrounds
 
Hello, WatchKit
Hello, WatchKitHello, WatchKit
Hello, WatchKit
 
AltConf 2015: Swift Thinking
AltConf 2015: Swift ThinkingAltConf 2015: Swift Thinking
AltConf 2015: Swift Thinking
 
Swift Thinking
Swift ThinkingSwift Thinking
Swift Thinking
 
Funcitonal Swift Conference: The Functional Way
Funcitonal Swift Conference: The Functional WayFuncitonal Swift Conference: The Functional Way
Funcitonal Swift Conference: The Functional Way
 
Intro To Swift
Intro To SwiftIntro To Swift
Intro To Swift
 
HealthKit: Getting Ready for the New Year
HealthKit: Getting Ready for the New YearHealthKit: Getting Ready for the New Year
HealthKit: Getting Ready for the New Year
 
Learning.... Swift functions!
Learning.... Swift functions!Learning.... Swift functions!
Learning.... Swift functions!
 
A Swift introduction a.k.a Fun with Minions!
A Swift introduction a.k.a Fun with Minions!A Swift introduction a.k.a Fun with Minions!
A Swift introduction a.k.a Fun with Minions!
 
The Many Faces of Swift Functions
The Many Faces of Swift FunctionsThe Many Faces of Swift Functions
The Many Faces of Swift Functions
 
Getting Started with Open Source
Getting Started with Open SourceGetting Started with Open Source
Getting Started with Open Source
 
iOSDevCampDC: A Swift Introduction
iOSDevCampDC: A Swift IntroductioniOSDevCampDC: A Swift Introduction
iOSDevCampDC: A Swift Introduction
 

Recently uploaded

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 

Recently uploaded (20)

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 

Build Features Not Apps

  • 2. SWIFT ROBOT ▸ NatashaTheRobot.com ▸ @NatashaTheNomad ▸ This Week in Swift ▸ Swift Jobs ▸ try! Swift
  • 3.
  • 4. Most smartphone users download 0 apps per month
  • 5. An average app loses up to 95% of users within the first month
  • 6. !!!
  • 7.
  • 8.
  • 9. !"
  • 11.
  • 12.
  • 13.
  • 15.
  • 16.
  • 17. "As speech recognition accuracy goes from say 95% to 99%, all of us in the room will from barely using it today to using it all the time. Most people underestimate the difference between 95% and 99% accuracy - 99% is a game changer" - Andrew NG, Chief Scientist at Baidu
  • 18. SIRI INTENTS ▸ Audio or video calling ▸ Messaging ▸ Payments ▸ Searching photos ▸ Workouts ▸ Ride booking
  • 20.
  • 21.
  • 22.
  • 23.
  • 24. "It took Line Messenger almost four months to find its first two million users ...
  • 25. … but after stickers were launched, it took only two days to find the next million...
  • 26. The company now makes over $270M a year just from selling stickers."
  • 28.
  • 31. ▸ Frameworks all the things! ▸ Vectorize Images ▸ NSUserActivity FTW
  • 32.
  • 33.
  • 34. !
  • 35.
  • 36.
  • 38.
  • 39. let rootURL = FileManager.default(). containerURLForSecurityApplicationGroupIdentifier("group.com.NatashaTheRobot.MyFavoriteGelato")
  • 40. let defaults = UserDefaults(suiteName: "group.com.NatashaTheRobot.MyFavoriteGelato")
  • 41.
  • 42. ! + ⌚ + #
  • 43.
  • 44.
  • 45.
  • 46. MULTIPLATFORM, SINGLE-SCHEME XCODE PROJECTS by Max Howell on PromiseKit.org
  • 47. FRAMEWORKS ▸ DRY ▸ App Groups ▸ iCloud Key-Value Storage ▸ Cross-Platform
  • 49. .PDF
  • 50.
  • 51.
  • 52.
  • 53.
  • 55.
  • 56. VECTORIZE IMAGES ▸ Single Scale PDFs ▸ Template Image for Icons
  • 58. // AppDelegate func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let webpageURL = userActivity.webpageURL { // separate webpageURL using NSURLComponents // present the correct View Controller if valid // otherwise, open link in Safari } return false }
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64. CREATING AN ACTIVITY // GelatoDetailViewController override func viewDidLoad() { super.viewDidLoad() // other config here let activity = NSUserActivity(activityType: "com.natashatherobot.GelatoFinder.gelato") // will show up as this in Spotlight Search Results activity.title = gelato.name // Other keywords to search by activity.keywords = Set([gelato.name, "gelato"]) // should be handed off to another device? activity.isEligibleForHandoff = true // should be indexed in App History? activity.isEligibleForSearch = true // should be eligible for indexing for any user of this application? activity.isEligibleForPublicIndexing = true // Avoid deallocating before indexing, // global variable declared in UIResponder class userActivity = activity // don't forget to activate! userActivity!.becomeCurrent() }
  • 65. SAVE UNIQUE INFO // GelatoDetailViewController override func viewDidLoad() { // create activity and other config here activity.delegate = self activity.needsSave = true // assign to userActivity, etc } extension GelatoDetailViewController: NSUserActivityDelegate { func userActivityWillSave(_ userActivity: NSUserActivity) { // info needed to recreate activity! userActivity.userInfo = ["index": gelatoIndex] } }
  • 66. RESTORE ACTIVITY // AppDelegate func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { let mainController = (window!.rootViewController! as! UINavigationController).viewControllers.first mainController?.restoreUserActivityState(userActivity) return true }
  • 67. RESTORE ACTIVITY // GelatoListTableViewController override func restoreUserActivityState(_ activity: NSUserActivity) { if let index = activity.userInfo?["index"] as? Int { searchedGelatoIdentifier = index performSegue(withIdentifier: "showGelato", sender: self) } }
  • 68. RESTORE ACTIVITY // GelatoListTableViewController override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let gelatoDetailVC = segue.destination as? GelatoDetailViewController { let index = tableView.indexPathForSelectedRow?.row ?? searchedGelatoIdentifier ?? 0 gelatoDetailVC.gelato = gelatoFlavors[index] gelatoDetailVC.gelatoIndex = index } }
  • 69.
  • 70. NSUSERACTIVITY ▸ Handoff ▸ Universal Links ▸ Search ▸ Location ▸ Contextual Reminders ▸ Contact Interactions
  • 71.
  • 72. ▸ Frameworks all the things! ▸ Vectorize Images ▸ NSUserActivity FTW