SlideShare a Scribd company logo
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

More Related Content

Viewers also liked

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...
Cory Scott
 
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
 
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
Cloudera, Inc.
 
Consumer offset management in Kafka
Consumer offset management in KafkaConsumer offset management in Kafka
Consumer offset management in Kafka
Joel Koshy
 
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
Mohamed El-Geish
 
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
Cory Scott
 
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
Kishore Gopalakrishna
 
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
 
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
lucenerevolution
 
Air traffic controller - Streams Processing meetup
Air traffic controller  - Streams Processing meetupAir traffic controller  - Streams Processing meetup
Air traffic controller - Streams Processing meetup
Ed Yakabosky
 
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
Shuyi Chen
 
Engineering the New LinkedIn Profile
Engineering the New LinkedIn ProfileEngineering the New LinkedIn Profile
Engineering the New LinkedIn Profile
Josh Clemm
 
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
Jiangjie Qin
 
Dust.js
Dust.jsDust.js
HBase for Architects
HBase for ArchitectsHBase for Architects
HBase for Architects
Nick Dimiduk
 
LinkedIn Q2 2014 Earnings Call
LinkedIn Q2 2014 Earnings CallLinkedIn Q2 2014 Earnings Call
LinkedIn Q2 2014 Earnings Call
LinkedIn
 
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
LinkedIn
 

Viewers also liked (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
 

Recently uploaded

Accelerating Migrations = Recommendations
Accelerating Migrations = RecommendationsAccelerating Migrations = Recommendations
Accelerating Migrations = Recommendations
isBullShit
 
BLOCKCHAIN TECHNOLOGY - Advantages and Disadvantages
BLOCKCHAIN TECHNOLOGY - Advantages and DisadvantagesBLOCKCHAIN TECHNOLOGY - Advantages and Disadvantages
BLOCKCHAIN TECHNOLOGY - Advantages and Disadvantages
SAI KAILASH R
 
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision MakingConnector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
DianaGray10
 
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
sunilverma7884
 
The History of Embeddings & Multimodal Embeddings
The History of Embeddings & Multimodal EmbeddingsThe History of Embeddings & Multimodal Embeddings
The History of Embeddings & Multimodal Embeddings
Zilliz
 
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Nicolás Lopéz
 
Google I/O Extended Harare Merged Slides
Google I/O Extended Harare Merged SlidesGoogle I/O Extended Harare Merged Slides
Google I/O Extended Harare Merged Slides
Google Developer Group - Harare
 
NVIDIA at Breakthrough Discuss for Space Exploration
NVIDIA at Breakthrough Discuss for Space ExplorationNVIDIA at Breakthrough Discuss for Space Exploration
NVIDIA at Breakthrough Discuss for Space Exploration
Alison B. Lowndes
 
Retrieval Augmented Generation Evaluation with Ragas
Retrieval Augmented Generation Evaluation with RagasRetrieval Augmented Generation Evaluation with Ragas
Retrieval Augmented Generation Evaluation with Ragas
Zilliz
 
Communications Mining Series - Zero to Hero - Session 3
Communications Mining Series - Zero to Hero - Session 3Communications Mining Series - Zero to Hero - Session 3
Communications Mining Series - Zero to Hero - Session 3
DianaGray10
 
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
alexjohnson7307
 
Tailored CRM Software Development for Enhanced Customer Insights
Tailored CRM Software Development for Enhanced Customer InsightsTailored CRM Software Development for Enhanced Customer Insights
Tailored CRM Software Development for Enhanced Customer Insights
SynapseIndia
 
Perth MuleSoft Meetup July 2024
Perth MuleSoft Meetup July 2024Perth MuleSoft Meetup July 2024
Perth MuleSoft Meetup July 2024
Michael Price
 
Vulnerability Management: A Comprehensive Overview
Vulnerability Management: A Comprehensive OverviewVulnerability Management: A Comprehensive Overview
Vulnerability Management: A Comprehensive Overview
Steven Carlson
 
Integrating Kafka with MuleSoft 4 and usecase
Integrating Kafka with MuleSoft 4 and usecaseIntegrating Kafka with MuleSoft 4 and usecase
Integrating Kafka with MuleSoft 4 and usecase
shyamraj55
 
Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17
Bhajan Mehta
 
Semantic-Aware Code Model: Elevating the Future of Software Development
Semantic-Aware Code Model: Elevating the Future of Software DevelopmentSemantic-Aware Code Model: Elevating the Future of Software Development
Semantic-Aware Code Model: Elevating the Future of Software Development
Baishakhi Ray
 
UX Webinar Series: Aligning Authentication Experiences with Business Goals
UX Webinar Series: Aligning Authentication Experiences with Business GoalsUX Webinar Series: Aligning Authentication Experiences with Business Goals
UX Webinar Series: Aligning Authentication Experiences with Business Goals
FIDO Alliance
 
Zaitechno Handheld Raman Spectrometer.pdf
Zaitechno Handheld Raman Spectrometer.pdfZaitechno Handheld Raman Spectrometer.pdf
Zaitechno Handheld Raman Spectrometer.pdf
AmandaCheung15
 
Uncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in LibrariesUncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in Libraries
Brian Pichman
 

Recently uploaded (20)

Accelerating Migrations = Recommendations
Accelerating Migrations = RecommendationsAccelerating Migrations = Recommendations
Accelerating Migrations = Recommendations
 
BLOCKCHAIN TECHNOLOGY - Advantages and Disadvantages
BLOCKCHAIN TECHNOLOGY - Advantages and DisadvantagesBLOCKCHAIN TECHNOLOGY - Advantages and Disadvantages
BLOCKCHAIN TECHNOLOGY - Advantages and Disadvantages
 
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision MakingConnector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
 
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
Girls call Kolkata 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
 
The History of Embeddings & Multimodal Embeddings
The History of Embeddings & Multimodal EmbeddingsThe History of Embeddings & Multimodal Embeddings
The History of Embeddings & Multimodal Embeddings
 
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024
 
Google I/O Extended Harare Merged Slides
Google I/O Extended Harare Merged SlidesGoogle I/O Extended Harare Merged Slides
Google I/O Extended Harare Merged Slides
 
NVIDIA at Breakthrough Discuss for Space Exploration
NVIDIA at Breakthrough Discuss for Space ExplorationNVIDIA at Breakthrough Discuss for Space Exploration
NVIDIA at Breakthrough Discuss for Space Exploration
 
Retrieval Augmented Generation Evaluation with Ragas
Retrieval Augmented Generation Evaluation with RagasRetrieval Augmented Generation Evaluation with Ragas
Retrieval Augmented Generation Evaluation with Ragas
 
Communications Mining Series - Zero to Hero - Session 3
Communications Mining Series - Zero to Hero - Session 3Communications Mining Series - Zero to Hero - Session 3
Communications Mining Series - Zero to Hero - Session 3
 
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
 
Tailored CRM Software Development for Enhanced Customer Insights
Tailored CRM Software Development for Enhanced Customer InsightsTailored CRM Software Development for Enhanced Customer Insights
Tailored CRM Software Development for Enhanced Customer Insights
 
Perth MuleSoft Meetup July 2024
Perth MuleSoft Meetup July 2024Perth MuleSoft Meetup July 2024
Perth MuleSoft Meetup July 2024
 
Vulnerability Management: A Comprehensive Overview
Vulnerability Management: A Comprehensive OverviewVulnerability Management: A Comprehensive Overview
Vulnerability Management: A Comprehensive Overview
 
Integrating Kafka with MuleSoft 4 and usecase
Integrating Kafka with MuleSoft 4 and usecaseIntegrating Kafka with MuleSoft 4 and usecase
Integrating Kafka with MuleSoft 4 and usecase
 
Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17
 
Semantic-Aware Code Model: Elevating the Future of Software Development
Semantic-Aware Code Model: Elevating the Future of Software DevelopmentSemantic-Aware Code Model: Elevating the Future of Software Development
Semantic-Aware Code Model: Elevating the Future of Software Development
 
UX Webinar Series: Aligning Authentication Experiences with Business Goals
UX Webinar Series: Aligning Authentication Experiences with Business GoalsUX Webinar Series: Aligning Authentication Experiences with Business Goals
UX Webinar Series: Aligning Authentication Experiences with Business Goals
 
Zaitechno Handheld Raman Spectrometer.pdf
Zaitechno Handheld Raman Spectrometer.pdfZaitechno Handheld Raman Spectrometer.pdf
Zaitechno Handheld Raman Spectrometer.pdf
 
Uncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in LibrariesUncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in Libraries
 

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