Successfully reported this slideshow.
Your SlideShare is downloading. ×

Path to iOS7

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 33 Ad
Advertisement

More Related Content

Viewers also liked (17)

Recently uploaded (20)

Advertisement

Path to iOS7

  1. 1. Path to iOS 7 Jayant Sai (Staff Software Engineer @ LinkedIn)
  2. 2. “Flat-i-fication”
  3. 3. Agenda From (iOS 6) To (iOS 7)
  4. 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...
  5. 5. iOS 7 SDK
  6. 6. First: Identify the issues
  7. 7. Major issues
  8. 8. Unexpected issues
  9. 9. Lots of minor issues
  10. 10. What to fix?
  11. 11. Product & Design • • • • • • • Status bar Navigation bar: icons and labels Search bar Remove rounded corners Remove shadows and gradients Flatter buttons Utilize blur
  12. 12. Engineering & QA • • • • Fix regression issues Refresh design to fit iOS 7 Implement iOS 7 specific features Update all automation
  13. 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)
  14. 14. Lets execute...
  15. 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. 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. 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. 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. 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. 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. 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. 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. 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. 24. It's not over 'til the flat lady sings…
  25. 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
  26. 26. Updated App
  27. 27. Communication & feedback
  28. 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. 29. Celebrate the wins Featured during Apple Sep 10th announcement
  30. 30. And the small ones as well Special mention by Jeff (CEO) during All Hands
  31. 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
  32. 32. Remember, it takes a team
  33. 33. “Question?” Thank you

×