mopcon 2014 - best software architecture in app development

88
Best Software Architecture in App Development Anistar Sung

Upload: anistar-sung

Post on 14-Jun-2015

4.018 views

Category:

Technology


2 download

DESCRIPTION

Talking about how to build smart design and architecture for app development. Let your app can easy develop and deploy components on your app. And more topic of version control and quality improvement.

TRANSCRIPT

Page 1: MOPCON 2014 - Best software architecture in app development

Best Software Architecture in App DevelopmentAnistar Sung

Page 2: MOPCON 2014 - Best software architecture in app development

Anistar sung 宋志峰 Mobile, client, server developer Instructor, Consulter and Author

Focus on: iOS, Android, HTML5, PHP… etc

Introduction

Page 3: MOPCON 2014 - Best software architecture in app development

Work @

Mobile Team

Page 4: MOPCON 2014 - Best software architecture in app development

Store marketplace app

Yahoo work

Page 5: MOPCON 2014 - Best software architecture in app development

NewYork Times - Best Top 10 photography app

App store Top 2 paid app in US

App store Top 40 in world

Best recommended app in app review sites

Personal works

Page 6: MOPCON 2014 - Best software architecture in app development

Personal works

Page 7: MOPCON 2014 - Best software architecture in app development

Problems in real world

Smart design + architecture

Version control

Quality improvement

Agenda

Page 8: MOPCON 2014 - Best software architecture in app development

Problems in Real WorldWhat developer do?

Page 9: MOPCON 2014 - Best software architecture in app development

What I think I do

Page 10: MOPCON 2014 - Best software architecture in app development

What I really do

Page 11: MOPCON 2014 - Best software architecture in app development

Real development team

Page 12: MOPCON 2014 - Best software architecture in app development

Smart Design + ArchitectureWanting everything easier

Page 13: MOPCON 2014 - Best software architecture in app development

Easy to present content

Change once apply anywhere

Fast materials replacement

Design + Deploy components

Data presentation

Smart way to create app

Page 14: MOPCON 2014 - Best software architecture in app development

Most content can display by list view

UICollectionView is a powerful component

Easy to present content List view for presentation

Page 15: MOPCON 2014 - Best software architecture in app development

List view cover 80% views in Yahoo Store Marketplace app

Page 16: MOPCON 2014 - Best software architecture in app development

DemoUsing UICollectionView to present content

Page 17: MOPCON 2014 - Best software architecture in app development
Page 18: MOPCON 2014 - Best software architecture in app development

Flexible layout

Reuse cells

Memory management

Automatic updates

Easy to present content Benefit of UICollectionView

Waterfall or running water in nature

Page 19: MOPCON 2014 - Best software architecture in app development

UICollectionView

Easy to present content Custom UICollectionView for production

Page 20: MOPCON 2014 - Best software architecture in app development

UICollectionView

UICollectionReusableView

!

Easy to present content Custom UICollectionView for production

Page 21: MOPCON 2014 - Best software architecture in app development

UICollectionView

UICollectionReusableView

UICollectionViewCell

!

Easy to present content Custom UICollectionView for production

Page 22: MOPCON 2014 - Best software architecture in app development

UICollectionView

UICollectionReusableView

UICollectionViewCell

UICollectionViewLayout

Easy to present content Custom UICollectionView for production

Waterfall or running water in nature

Page 23: MOPCON 2014 - Best software architecture in app development

DemoUsing Custom UICollectionView

Page 24: MOPCON 2014 - Best software architecture in app development
Page 25: MOPCON 2014 - Best software architecture in app development

Hard to sync with designer

Designer or PM always change

After change need to rewrite code

Change once apply anywhere The pain for change

Page 26: MOPCON 2014 - Best software architecture in app development

Design: I want red color background.

Developer: Sure! self.backgroundColor = [UIColor redColor];

Challenge on Color Design easy sync tool for designer

Page 27: MOPCON 2014 - Best software architecture in app development

Design: I want #7b19a9 background.

Developer: What!?

Challenge on Color Design easy sync tool for designer

!?

Page 28: MOPCON 2014 - Best software architecture in app development

Design: I want Yahoo background.

Developer: Mom, I want go home. :(

Challenge on Color Design easy sync tool for designer

#@*$!

Page 29: MOPCON 2014 - Best software architecture in app development

Using Category to improve UIColor

+ (UIColor *)colorWithHexString:(NSString *)hexstring;+ (UIColor *)colorWithHexNumber:(NSUInteger)hexNumber;

Challenge on Color Design easy sync tool for designer

Page 30: MOPCON 2014 - Best software architecture in app development

Management your theme color

+ (UIColor *)themeBackground; + (UIColor *)themeForeground; + (UIColor *)themeDisabled; + (UIColor *)themeFocus; + (UIColor *)themeHighlight; + (UIColor *)themeTitle; + (UIColor *)themeSubtitle;

Challenge on Color Design easy sync tool for designer

Page 31: MOPCON 2014 - Best software architecture in app development

You don’t need write import everywhere

.pch file is your friend

Change once apply anywhere Theme color management

Page 32: MOPCON 2014 - Best software architecture in app development

+ (UIColor *)themeBackground{ return [UIColor colorWithHexString:@"1f2f3b"];} !+ (UIColor *)themePanel{ return [UIColor colorWithHexString:@"333e49"];}

Change once apply anywhere Theme color management

Page 33: MOPCON 2014 - Best software architecture in app development

+ (UIColor *)themeBackground{ return [UIColor colorWithHexString:@"dedede"];} !+ (UIColor *)themePanel{ return [UIColor colorWithHexString:@"f4f4f4"];}

Change once apply anywhere Theme color management

Page 34: MOPCON 2014 - Best software architecture in app development

Change once apply anywhere Theme color management

Page 35: MOPCON 2014 - Best software architecture in app development

Interface size and layout

ICON and assets color

Text on the screen

Change once apply anywhere Other pain of change

Page 36: MOPCON 2014 - Best software architecture in app development

Change once apply anywhere Interface change

Page 37: MOPCON 2014 - Best software architecture in app development

UICollectionView can set up cell size

!- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return CGsizeMake(320.0.f, 200.0f); }

Change once apply anywhere Interface change

Page 38: MOPCON 2014 - Best software architecture in app development

UICollectionView can set up cell size

!- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return [[[[[NSBundle mainBundle] loadNibNamed:@“Cell” owner:self options:nil] lastObject] bounds] size]; }

Change once apply anywhere Interface change

Page 39: MOPCON 2014 - Best software architecture in app development

- (CGSize)sizeForNibNamed:(NSString *)nibName { CGSize nibSize = CGSizeZero; if ([self.nibSizeDict objectForKey:nibName]) { NSString *sizeString = [self.nibSizeDict objectForKey:nibName]; nibSize = CGSizeFromString(sizeString); } else { UIView *nibView = [[[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil] lastObject]; if (nibView != nil) { nibSize = CGSizeMake(CGRectGetWidth(nibView.bounds), CGRectGetHeight(nibView.bounds)); [self.nibSizeDict setObject:NSStringFromCGSize(nibSize) forKey:nibName]; } } return nibSize; }

Change once apply anywhere Interface change

Page 40: MOPCON 2014 - Best software architecture in app development

UICollectionView can set up cell size SMARTER!

!- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return [[NibSizeCalculator sharedInstance] sizeForNibNamed:@"Cell"]; }

Change once apply anywhere Interface change

Page 41: MOPCON 2014 - Best software architecture in app development

Cache everything if you can

Page 42: MOPCON 2014 - Best software architecture in app development

ICON should be able to apply theme color

Fast materials replacement ICON and assets color

Page 43: MOPCON 2014 - Best software architecture in app development

UIImage+color.h

+ (UIImage *)image:(UIImage *)image tintColor:(UIColor *)color; + (UIImage *)image:(UIImage *)image replaceColor:(UIColor *)color;

+ (UIImage *)imageNamed:(NSString *)name tintColor:(UIColor *)color; + (UIImage *)imageNamed:(NSString *)name replaceColor:(UIColor *)color;

Fast materials replacement Implement category for UIImage

Page 44: MOPCON 2014 - Best software architecture in app development

Change ICON’s theme color

@import “UIImage+Color.h” self.presetImageView.image = [UIImage imageNamed:@“icon-folder.png" replaceColor:[UIColor themeLightWhite]]; UIImage *settingButtonImage = [UIImage imageNamed:@"icon-setting.png" replaceColor:[UIColor themeForeground]];[settingButton setImage:settingButtonImage forState:UIControlStateNormal];

Fast materials replacement Implement category for UIImage

Page 45: MOPCON 2014 - Best software architecture in app development

Fast materials replacement ICON theme color management

Page 46: MOPCON 2014 - Best software architecture in app development

Don’t hard code to set its size

Percent size design

Design componentsDesign flexible components

Page 47: MOPCON 2014 - Best software architecture in app development

Set up component !- (void)setupComponent { self.backgroundColor = [UIColor clearColor]; ! CGFloat progressBigTextSize = 60.0f; CGFloat progressSmallTextSize = 20.0f; ! // more initialized code }

Design componentsDesign flexible components

Page 48: MOPCON 2014 - Best software architecture in app development

Set up component !- (void)setupComponent { self.backgroundColor = [UIColor clearColor]; ! CGFloat progressBigTextSize = CGRectGetWidth(self.bounds) * 0.35f; CGFloat progressSmallTextSize = CGRectGetWidth(self.bounds) * 0.1f; ! // more initialized code }

Design componentsDesign flexible components

Page 49: MOPCON 2014 - Best software architecture in app development

DemoImplement percent size design component

Page 50: MOPCON 2014 - Best software architecture in app development
Page 51: MOPCON 2014 - Best software architecture in app development

Use hard code

Use too more layers on interface builder

Deploy componentsBad way to deploy components

Page 52: MOPCON 2014 - Best software architecture in app development

Deploy componentsDeploy components efficiently

Page 53: MOPCON 2014 - Best software architecture in app development

Version ControlSave your time and life

Page 54: MOPCON 2014 - Best software architecture in app development

Colleagues often break my code

Have critical bugs but I can’t fix it

Wanting different version (Free / Pro)

Customer told me previous change was better

Why Version Control

Page 55: MOPCON 2014 - Best software architecture in app development

Source code management

Git / SVN

3rd open source libraries

CocoaPods / Repo

Solutions for code change Code management

Page 56: MOPCON 2014 - Best software architecture in app development

Easy to conflict

Hard to read and fix it

Wait a long time when open huge one

Storyboard may make you CRAZY Multiple developers work together

Page 57: MOPCON 2014 - Best software architecture in app development

Split to smaller storyboard

Storyboard may make you Crazy Multiple developers work together

Page 58: MOPCON 2014 - Best software architecture in app development

Split to independent xib files

Storyboard may make you Crazy Multiple developers work together

Page 59: MOPCON 2014 - Best software architecture in app development

Quality ImprovementDon’t crash on user device

Page 60: MOPCON 2014 - Best software architecture in app development

Test can prove your code run well

Save lots of time to verify bugs

Find change problems immediately

Keep boring task away

Test will not waste your time

Page 61: MOPCON 2014 - Best software architecture in app development

DemoThe situation of automation test

Page 62: MOPCON 2014 - Best software architecture in app development
Page 63: MOPCON 2014 - Best software architecture in app development

XCTest Framework

Unit test Implement unit test

Page 64: MOPCON 2014 - Best software architecture in app development

Test your tests

Unit test Implement unit test

Page 65: MOPCON 2014 - Best software architecture in app development

Automation test Implement automation test

Page 66: MOPCON 2014 - Best software architecture in app development

Automation test Implement automation test

Page 67: MOPCON 2014 - Best software architecture in app development

UIATarget.onAlert = function onAlert(alert) {

var title = alert.name();

UIALogger.logWarning("Alert with title '" + title + "' encountered!");

UIATarget.localTarget().captureScreenWithName("alert_" + (new Date()).UTC());

return false;

}

for (var i = 0; i < 200; i++) {

// exposureSettingButton

checkInstanceExist(target.frontMostApp().mainWindow().buttons()[“exposure”].tap);

target.frontMostApp().mainWindow().buttons()[“exposure”].tap();

}

Automation test Implement automation test

Page 68: MOPCON 2014 - Best software architecture in app development

if (times % 2 == 0) {

target.setDeviceOrientation(UIA_DEVICE_ORIENTATION_PORTRAIT);

} else {

target.setDeviceOrientation(UIA_DEVICE_ORIENTATION_LANDSCAPERIGHT);

}

if (times % 5 == 0) {

target.lockForDuration(5);

target.delay(2);

}

Automation test Implement monkey test

Page 69: MOPCON 2014 - Best software architecture in app development

Location service is hard to test

Some developer will go out for test

Location automated test Implement location test

Page 70: MOPCON 2014 - Best software architecture in app development

Location automated test Implement location test

Page 71: MOPCON 2014 - Best software architecture in app development

Create routes on your device

Location automated test GPX creator tool

Page 72: MOPCON 2014 - Best software architecture in app development

Test on Xcode Build automation test

Location automated test GPX creator tool

Page 73: MOPCON 2014 - Best software architecture in app development

Data PresentationContent is soul of app

Page 74: MOPCON 2014 - Best software architecture in app development

Use core data to cache data

Lazy loader provides smooth interaction

Use data model process you data

!

Present your content

Page 75: MOPCON 2014 - Best software architecture in app development

Easy way to implement data storage

Cache larger data from internet / log

Multiple thread is big challenge

Recommend MagicalRecord library

Core data Benefit of core data

Page 76: MOPCON 2014 - Best software architecture in app development

Lazy loader will not block UI thread

Implement heavy process when stop interaction

Using right format in app

Manage memory carefully

Lazy loader Benefit of lazy loader

Page 77: MOPCON 2014 - Best software architecture in app development

Part of MVC design pattern

Change data source will easier

Separate logic and data layer

Easy automated test and verify

Data model Benefit of data model

Page 78: MOPCON 2014 - Best software architecture in app development

Summary

Page 79: MOPCON 2014 - Best software architecture in app development

Our design should be flexible and easy deployment

List view is good architecture for data presentation

Cache everything if you can

Put project in Version Control

Test will improve quality and saving time

Summary We have learned in this session

Page 80: MOPCON 2014 - Best software architecture in app development

Other things need to remind

Page 81: MOPCON 2014 - Best software architecture in app development

Design Pattern

Shared code base

Handle multiple threads

Data model

Continuous delivery

Performance

Non-functional task

Keep in mind

Page 82: MOPCON 2014 - Best software architecture in app development

DemoHigh performance process

Page 83: MOPCON 2014 - Best software architecture in app development
Page 84: MOPCON 2014 - Best software architecture in app development
Page 85: MOPCON 2014 - Best software architecture in app development

MOPCON 2013 tech talk slide http://www.slideshare.net/anistarsung/mopcon-share

Related sharing

Page 86: MOPCON 2014 - Best software architecture in app development

Anistar Sung Yahoo Lead Engineer!

http://www.facebook.com/anistarsung http://blog.riaproject.com

[email protected] [email protected]

More information

Page 87: MOPCON 2014 - Best software architecture in app development

請到 104 搜尋 “Yahoo奇摩”MOPCON Yahoo 現場攤位 3F

Welcome join us

Page 88: MOPCON 2014 - Best software architecture in app development

Q + A