SlideShare uma empresa Scribd logo
1 de 33
Path to iOS 7
Jayant Sai
(Staff Software Engineer @ LinkedIn)
“Flat-i-fication”
Agenda

From (iOS 6)

To (iOS 7)
Seems easy
•
•
•
•

Flatter User Interface
Fix navigation/status bar
Remove shadows
No more round corners

Easier said that done... we have to switch to...
iOS 7 SDK
First: Identify the issues
Major issues
Unexpected issues
Lots of minor issues
What to fix?
Product & Design
•
•
•
•
•
•
•

Status bar
Navigation bar: icons and labels
Search bar
Remove rounded corners
Remove shadows and gradients
Flatter buttons
Utilize blur
Engineering & QA
•
•
•
•

Fix regression issues
Refresh design to fit iOS 7
Implement iOS 7 specific features
Update all automation
Timeline
• 2012
• Mon 6/11: iOS 6 announcement
• Wed 9/12: iPhone 5 announcement
• Wed 9/19: iOS 6 release
• Fri 9/21: iPhone 5 release
• 2013
• Mon 6/10: iOS 7 announcement
• Tue 9/10: iPhone 5C/5S announcement (Rumored)
• Wed 9/18: iOS 7 release (Prediction)
• Fri 9/20: iPhone 5C/5S release (Prediction)
Lets execute...
Fixing the build, build systems and automation
•
•
•
•
•
•
•

LinkedIn Mobile team follows train model
iOS 7 update part of Sep 15th release
Drop iOS 5.x
Fix deprecation warnings & build errors
Hudson (http://hudson-ci.org) for all builds
Parallel builds for iOS 6 and iOS 7
Minimal automation script changes
• sudo xcode-select --switch
/Applications/Xcode5DP<VERSION>.app/Contents/Developer/
Compile time & Runtime macros
• 6 vs 7 compile issues (https://gist.github.com/jsai/7158899)
#ifdef __IPHONE_7_0
// iOS 7 specific code
#else
// iOS 6 code
#endif

• Runtime behavior (https://gist.github.com/jsai/7158914)
#define LI_IS_IOS7_RUNTIME ...
if (LI_IS_IOS7_RUNTIME) {
// iOS 7 code
} else {
// iOS 6 code
}
Designers updating User Interface
Usual app development:
• Design comes up with design
• Engineering implements design
• Design tweaks
• Engineers update UI/UX
• More design tweaks
• Engineers update
• ... this can go on

Give designers full control to update the UI/assets
UINavigationBar padding

Code pretty straight forward
(void)setupBackButtonWithSelector {
// create a custom button
LIButton *backButton = ...
// configure back button
// create UIBarButtonItem with custom view
// add item to navigation bar
}
UINavigationBar padding
• Override [UIView alignmentRectInsets]
(https://gist.github.com/jsai/7158977)

(UIEdgeInsets)alignmentRectInsets {
if (LI_IS_IOS7_RUNTIME) {
switch (self.positionInNavBar) {
case LIButtonNavPositionLeft:
return LeftInset;
case LIButtonNavPositionRight:
return RightInset;
default:
return UIEdgeInsetsZero;
}
return UIEdgeInsetsZero;
}
UINavigationBar

•

https://gist.github.com/jsai/7158970

(void)setupNavigationBar {
UINavigationBar *navigationBar = ...;
...
if (LI_IS_IOS7_RUNTIME) {
[UIApplication sharedApplication].statusBarStyle =
UIStatusBarStyleLightContent;
navigationBar.barTintColor = NAV_TOOLBAR_BG_COLOR;
navigationBar.tintColor = NAV_TINT_COLOR;
} else {
[navigationBar setBackgroundImage:image
forBarMetrics:UIBarMetricsDefault]];
} }
Search Bar

• UISearchBar embedded in UINavigationBar
• [UISearchBar setShowsCancelButton:animated:] does
nothing
• Add UISearchBar and UIBarButtonItem for Cancel
(https://gist.github.com/jsai/7158998)

UISearchBar *searchBar = [[UISearchBar alloc] init];
self.navigationItem.titleView = searchBar;
UIBarButtonItem *cancel = ...;
self.navigationItem.rightBarButtonItem = cancel;
Profile Image Blur

• ‘People with a picture get viewed on average more than 11 times
as much as people without’
• CoreImage Gaussian Blur filter
Profile Blur
•

https://gist.github.com/jsai/7159010

- (UIImage *)blurredImageWithRadius:(CGFloat)r {
CIImage *inputImage = CIImage with CGImageRef;
CIFilter *blurFilter = Filter with CIGaussianBlur;
[blurFilter setValue:inputImage
forKey:kCIInputImageKey];
[blurFilter setValue:@(r)
forKey:@"inputRadius"];

CIImage *outputImage = Get output image from blur
filter;
return outputImage;
}
It's not over 'til the flat lady
sings…
Release
• Sep 13th
• Code complete
• Sep 17th
• Critical bug found (not related to iOS 7 update)
• Sep 20th
• Final build uploaded
• Sep 23rd
• App Approved and released
Updated App
Communication & feedback
Plan of Action
• Aug release
• iOS 7 beta crash fixes
• Sep release
• UI refresh
• Fix iOS 6 regressions
• Oct release
• Follow-up cleanups/issues

• Executed
• Aug 7: Final designs for UI refresh
• Aug 19: Code complete for basic iOS 7 fixes
• Sep 13: Fix remaining iOS 7 & iOS 6 bugs
Celebrate the wins
Featured during Apple Sep 10th announcement
And the small ones as well
Special mention by Jeff (CEO) during All Hands
Communication
•
•
•
•
•
•

Keep the team informed
Send weekly progress updates
Get people excited
Upgrade people’s iPhone with latest iOS betas. 
Solicit feedback from co-workers
Nag them to download latest/greatest if you have to

Be the Champion
Remember, it takes a team
“Question?”
Thank you

Mais conteúdo relacionado

Destaque

Introduction To Apache Pig at WHUG
Introduction To Apache Pig at WHUGIntroduction To Apache Pig at WHUG
Introduction To Apache Pig at WHUG
Adam Kawa
 
Gc and-pagescan-attacks-by-linux
Gc and-pagescan-attacks-by-linuxGc and-pagescan-attacks-by-linux
Gc and-pagescan-attacks-by-linux
Cuong Tran
 

Destaque (17)

LinkedIn Information Security Talent Pool Research - Black Hat CISO Summit 20...
LinkedIn Information Security Talent Pool Research - Black Hat CISO Summit 20...LinkedIn Information Security Talent Pool Research - Black Hat CISO Summit 20...
LinkedIn Information Security Talent Pool Research - Black Hat CISO Summit 20...
 
Introduction To Apache Pig at WHUG
Introduction To Apache Pig at WHUGIntroduction To Apache Pig at WHUG
Introduction To Apache Pig at WHUG
 
HBaseCon 2013: Apache HBase at Pinterest - Scaling Our Feed Storage
HBaseCon 2013: Apache HBase at Pinterest - Scaling Our Feed StorageHBaseCon 2013: Apache HBase at Pinterest - Scaling Our Feed Storage
HBaseCon 2013: Apache HBase at Pinterest - Scaling Our Feed Storage
 
Consumer offset management in Kafka
Consumer offset management in KafkaConsumer offset management in Kafka
Consumer offset management in Kafka
 
Harvesting the Power of Samza in LinkedIn's Feed
Harvesting the Power of Samza in LinkedIn's FeedHarvesting the Power of Samza in LinkedIn's Feed
Harvesting the Power of Samza in LinkedIn's Feed
 
Tactical Application Security: Getting Stuff Done - Black Hat Briefings 2015
Tactical Application Security: Getting Stuff Done - Black Hat Briefings 2015Tactical Application Security: Getting Stuff Done - Black Hat Briefings 2015
Tactical Application Security: Getting Stuff Done - Black Hat Briefings 2015
 
Multi-Tenant Data Cloud with YARN & Helix
Multi-Tenant Data Cloud with YARN & HelixMulti-Tenant Data Cloud with YARN & Helix
Multi-Tenant Data Cloud with YARN & Helix
 
Gc and-pagescan-attacks-by-linux
Gc and-pagescan-attacks-by-linuxGc and-pagescan-attacks-by-linux
Gc and-pagescan-attacks-by-linux
 
How Lucene Powers the LinkedIn Segmentation and Targeting Platform
How Lucene Powers the LinkedIn Segmentation and Targeting PlatformHow Lucene Powers the LinkedIn Segmentation and Targeting Platform
How Lucene Powers the LinkedIn Segmentation and Targeting Platform
 
Air traffic controller - Streams Processing meetup
Air traffic controller  - Streams Processing meetupAir traffic controller  - Streams Processing meetup
Air traffic controller - Streams Processing meetup
 
Scalable complex event processing on samza @UBER
Scalable complex event processing on samza @UBERScalable complex event processing on samza @UBER
Scalable complex event processing on samza @UBER
 
Engineering the New LinkedIn Profile
Engineering the New LinkedIn ProfileEngineering the New LinkedIn Profile
Engineering the New LinkedIn Profile
 
No data loss pipeline with apache kafka
No data loss pipeline with apache kafkaNo data loss pipeline with apache kafka
No data loss pipeline with apache kafka
 
Dust.js
Dust.jsDust.js
Dust.js
 
HBase for Architects
HBase for ArchitectsHBase for Architects
HBase for Architects
 
LinkedIn Q2 2014 Earnings Call
LinkedIn Q2 2014 Earnings CallLinkedIn Q2 2014 Earnings Call
LinkedIn Q2 2014 Earnings Call
 
Reach Out and Inspire | LinkedIn Celebrates Success
Reach Out and Inspire | LinkedIn Celebrates SuccessReach Out and Inspire | LinkedIn Celebrates Success
Reach Out and Inspire | LinkedIn Celebrates Success
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Último (20)

A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 

Path to iOS7

  • 1. Path to iOS 7 Jayant Sai (Staff Software Engineer @ LinkedIn)
  • 4. Seems easy • • • • Flatter User Interface Fix navigation/status bar Remove shadows No more round corners Easier said that done... we have to switch to...
  • 9. Lots of minor issues
  • 11. Product & Design • • • • • • • Status bar Navigation bar: icons and labels Search bar Remove rounded corners Remove shadows and gradients Flatter buttons Utilize blur
  • 12. Engineering & QA • • • • Fix regression issues Refresh design to fit iOS 7 Implement iOS 7 specific features Update all automation
  • 13. Timeline • 2012 • Mon 6/11: iOS 6 announcement • Wed 9/12: iPhone 5 announcement • Wed 9/19: iOS 6 release • Fri 9/21: iPhone 5 release • 2013 • Mon 6/10: iOS 7 announcement • Tue 9/10: iPhone 5C/5S announcement (Rumored) • Wed 9/18: iOS 7 release (Prediction) • Fri 9/20: iPhone 5C/5S release (Prediction)
  • 15. Fixing the build, build systems and automation • • • • • • • LinkedIn Mobile team follows train model iOS 7 update part of Sep 15th release Drop iOS 5.x Fix deprecation warnings & build errors Hudson (http://hudson-ci.org) for all builds Parallel builds for iOS 6 and iOS 7 Minimal automation script changes • sudo xcode-select --switch /Applications/Xcode5DP<VERSION>.app/Contents/Developer/
  • 16. Compile time & Runtime macros • 6 vs 7 compile issues (https://gist.github.com/jsai/7158899) #ifdef __IPHONE_7_0 // iOS 7 specific code #else // iOS 6 code #endif • Runtime behavior (https://gist.github.com/jsai/7158914) #define LI_IS_IOS7_RUNTIME ... if (LI_IS_IOS7_RUNTIME) { // iOS 7 code } else { // iOS 6 code }
  • 17. Designers updating User Interface Usual app development: • Design comes up with design • Engineering implements design • Design tweaks • Engineers update UI/UX • More design tweaks • Engineers update • ... this can go on Give designers full control to update the UI/assets
  • 18. UINavigationBar padding Code pretty straight forward (void)setupBackButtonWithSelector { // create a custom button LIButton *backButton = ... // configure back button // create UIBarButtonItem with custom view // add item to navigation bar }
  • 19. UINavigationBar padding • Override [UIView alignmentRectInsets] (https://gist.github.com/jsai/7158977) (UIEdgeInsets)alignmentRectInsets { if (LI_IS_IOS7_RUNTIME) { switch (self.positionInNavBar) { case LIButtonNavPositionLeft: return LeftInset; case LIButtonNavPositionRight: return RightInset; default: return UIEdgeInsetsZero; } return UIEdgeInsetsZero; }
  • 20. UINavigationBar • https://gist.github.com/jsai/7158970 (void)setupNavigationBar { UINavigationBar *navigationBar = ...; ... if (LI_IS_IOS7_RUNTIME) { [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; navigationBar.barTintColor = NAV_TOOLBAR_BG_COLOR; navigationBar.tintColor = NAV_TINT_COLOR; } else { [navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]]; } }
  • 21. Search Bar • UISearchBar embedded in UINavigationBar • [UISearchBar setShowsCancelButton:animated:] does nothing • Add UISearchBar and UIBarButtonItem for Cancel (https://gist.github.com/jsai/7158998) UISearchBar *searchBar = [[UISearchBar alloc] init]; self.navigationItem.titleView = searchBar; UIBarButtonItem *cancel = ...; self.navigationItem.rightBarButtonItem = cancel;
  • 22. Profile Image Blur • ‘People with a picture get viewed on average more than 11 times as much as people without’ • CoreImage Gaussian Blur filter
  • 23. Profile Blur • https://gist.github.com/jsai/7159010 - (UIImage *)blurredImageWithRadius:(CGFloat)r { CIImage *inputImage = CIImage with CGImageRef; CIFilter *blurFilter = Filter with CIGaussianBlur; [blurFilter setValue:inputImage forKey:kCIInputImageKey]; [blurFilter setValue:@(r) forKey:@"inputRadius"]; CIImage *outputImage = Get output image from blur filter; return outputImage; }
  • 24. It's not over 'til the flat lady sings…
  • 25. Release • Sep 13th • Code complete • Sep 17th • Critical bug found (not related to iOS 7 update) • Sep 20th • Final build uploaded • Sep 23rd • App Approved and released
  • 28. Plan of Action • Aug release • iOS 7 beta crash fixes • Sep release • UI refresh • Fix iOS 6 regressions • Oct release • Follow-up cleanups/issues • Executed • Aug 7: Final designs for UI refresh • Aug 19: Code complete for basic iOS 7 fixes • Sep 13: Fix remaining iOS 7 & iOS 6 bugs
  • 29. Celebrate the wins Featured during Apple Sep 10th announcement
  • 30. And the small ones as well Special mention by Jeff (CEO) during All Hands
  • 31. Communication • • • • • • Keep the team informed Send weekly progress updates Get people excited Upgrade people’s iPhone with latest iOS betas.  Solicit feedback from co-workers Nag them to download latest/greatest if you have to Be the Champion