166
Dama @damaofficial Vicnent @vincz_a

Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Dama@damaofficial

Vicnent@vincz_a

Page 2: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Architecture & Automation:

How development processeswork at N26

Page 3: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Contents

1. Isolation on the code level2. Isolation on the project level3. Delivery

Page 4: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application
Page 5: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application
Page 6: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Features

Page 7: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Features

● Real bank account

Page 8: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

● Real bank account● Opened in under 8 minutes

Features

Page 9: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

● Real bank account● Opened in under 8 minutes● Video identification

Features

Page 10: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

● Real bank account● Opened in under 8 minutes● Video identification● Mobile first

Features

Page 11: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Features

● Real bank account● Opened in under 8 minutes● Video identification● Mobile first● Realtime (Money transfers, push notifications, card block/unblock)

Page 12: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Features

● Real bank account● Opened in under 8 minutes● Video identification● Mobile first● Realtime (Money transfers, push notifications, card block/unblock)● Financial products (Overdraft, N26 Invest, N26 Credit)

Page 13: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Features

● Real bank account● Opened in under 8 minutes● Video identification● Mobile first● Realtime (Money transfers, push notifications, card block/unblock)● Financial products (Overdraft, N26 Invest, N26 Credit)● ...

Page 14: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application
Page 15: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26 - Banking by design

● >100 MB

Page 16: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26 - Banking by design

● >100 MB● > 250k users across platforms

Page 17: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26 - Banking by design

● >100 MB● > 250k users across platforms● Tons of features

Page 18: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

2014

History of the projectIsolation on the code level

Page 19: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

History of the projectIsolation on the code level

Page 20: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

History of the projectIsolation on the code level

Page 21: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

History of the projectIsolation on the code level

Page 22: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Legacy

Page 23: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Legacy

1. Boostraping and iterating quickly over the product2. Understaffed team3. Developing feature like a hackaton

Isolation on the code level

Page 24: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Dealing with legacyIsolation on the code level

Page 25: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Dealing with legacy

● Isolate as much as possible the legacy and continue with product development

Isolation on the code level

Page 26: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Dealing with legacy

● Isolate as much as possible the legacy and continue with product development

● Refactor as much as you can

Isolation on the code level

Page 27: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

● Isolate as much as possible the legacy and continue with product development

● Refactor as much as you can ● Carry on and try to make the best out of it

Dealing with legacyIsolation on the code level

Page 28: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Dealing with legacy

● Isolate as much as possible the legacy and continue with product development

● Refactor as much as you can ● Carry on and try to make the best out of it

Isolation on the code level

Page 29: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Isolate legacy code and continue development

1. Refactor only when needed2. If you don’t touch it you don’t break it!3. Pick up an efficient design pattern to deal with legacy

Isolation on the code level

Page 30: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

VIPER

https://www.objc.io/issues/13-architecture/viper/

Wireframe

View Presenter Interactor

Data Store

Entity

Entity

Isolation on the code level

Page 31: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Wireframe

https://www.objc.io/issues/13-architecture/viper/

Wireframe

View Presenter Interactor

Data Store

Entity

Entity

Isolation on the code level

Page 32: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Presenter

https://www.objc.io/issues/13-architecture/viper/

Wireframe

View Presenter Interactor

Data Store

Entity

Entity

Isolation on the code level

Page 33: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

View

https://www.objc.io/issues/13-architecture/viper/

Wireframe

View Presenter Interactor

Data Store

Entity

Entity

Isolation on the code level

Page 34: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Interactor

https://www.objc.io/issues/13-architecture/viper/

Wireframe

View Presenter Interactor

Data Store

Entity

Entity

Isolation on the code level

Page 35: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Isolating your views

Wireframe

View Presenter Interactor

Isolation on the code level

Page 36: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Isolating your views

Wireframe

View Presenter Interactor

Black Box

Isolation on the code level

Page 37: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Isolating your views

Wireframe

View

Black Box

Isolation on the code level

Page 38: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Isolating your views

Input something

Output somethingelse

Wireframe

Isolation on the code level

Page 39: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Presenting a view using Wireframe

/**

Present Delete Contact formular

*/

func presentDeleteContact(_ contact: TransferContact, completion: @escaping (_ deleted: Bool) -> Void) { DeleteContactWireframe.present(from: self.navigationController, with: contact, completion: completion) }

Page 40: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

DeleteContactWireframe - Dummy implementation

class DeleteContactWireframe { /// Present the delete contact formular /// /// - Parameters: /// - viewController: ViewController from where the view should be displayed /// - contact: The contact to be deleted /// - completion: Completion block, returns true if contact has been deleted static func present(from viewController: UIViewController, with contact: Contact, completion: (_ deleted: Bool) -> Void) { let view = DeleteContactViewController() // Create the view let interactor = DeleteContactInteractor() // Create the Interactor let presenter = DeleteContactPresenter(view: view, interactor: interactor) // Create the presenter view.delegate = presenter // Set view delegate viewController.present(view, animated: true, completion: nil) }}

Page 41: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Isolating features

Wireframe

Black box

Wireframe

Black box

Wireframe

Black box

...

Isolation on the project level

Page 42: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Short-term

ObjC

Isolation on the project level

Page 43: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Long-term

ObjC

Isolation on the project level

Page 44: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Build timeIsolation on the project level

Page 45: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Xcode bugIsolation on the project level

Page 46: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Xcode bugsIsolation on the project level

Page 47: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application
Page 48: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Problem

https://bugs.swift.org/browse/SR-2461

Isolation on the project level

Page 49: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Problem

https://bugs.swift.org/browse/SR-2461

Xcode 8.3

Isolation on the project level

Page 50: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

ProblemIsolation on the project level

Page 51: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Solution

Framework

Isolation on the project level

Page 52: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Module Module

Modules Module

Isolation on the project level

Page 53: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Core

Page 54: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Core

@interface NSString (IBANFormat)

/// Returns a formatted string in groups of 4 characters

separated by a space

- (NSString * _Nonnull)IBANFormattedString;

@end

Page 55: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

GraphicsReusable UI components

Page 56: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Networking

public protocol CardService {

/// Fetches cards for the current user

func cards(_ success: @escaping ([Card]) -> Void,

failure: @escaping (Error) -> Void)

}

Page 57: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Data VisualizationCustom drawing

Page 58: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

# Specify the private specs repo

source 'https://github.com/owner/Specs.git'

...

# Add private dependencies

pod 'N26Core'

pod 'N26Graphics'

pod 'N26Networking'

pod 'N26DataVisualization'

...

CocoaPods

Page 59: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26 App

Setup

Data visualization

Core Graphics

Networking

Isolation on the project level

Page 60: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26 App

Setup

Data visualization

Core_ObjC

Graphics

Networking

Core

Isolation on the project level

Page 61: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Core

Networking

Data visualization

Graphics

Remote hosted modules drawbacksIsolation on the project level

Page 62: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Core

Networking

Data visualization

Graphics

Remote hosted modules drawbacksIsolation on the project level

Page 63: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Core

Networking

Data visualization

Graphics

Remote hosted modules drawbacksIsolation on the project level

Page 64: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Core

Networking

Data visualization

Graphics

Remote hosted modules drawbacksIsolation on the project level

Page 65: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Self hosted modules

Core

Networking

Data visualization

Graphics

Core

Networking

Data visualization

Graphics feature/credit

feature/invest

develop

Isolation on the project level

Page 66: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Current state

● Splitted the app into modules● Modules are now locally hosted● We’re still missing something …

Isolation on the project level

Page 67: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Missing moduleIsolation on the project level

Page 68: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Missing module

We’re missing a module that would

● Handle user sessions● Handle Login and access token● Cache current user data

Isolation on the project level

Page 69: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26Session

Page 70: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

import N26Session

Session.current.start

N26Session, booting up

Page 71: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

import N26Session

Session.current.start(with: login, password: password, success: { data in

N26Session, booting up

Page 72: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26Session, booting up

import N26Session

Session.current.start(with: login, password: password, success: { data in /// User is logged in

}) { error in /// Whatever error happend (Bad credentials, 500 ... )}

Page 73: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26Session, booting up

import N26Session

Session.current.start(with: login, password: password, success: { data in /// User is logged in

print(Session.current.firstName) // Print the current user name print(Session.current.availableBalance) // Print the current account Balance

}) { error in /// Whatever error happend (Bad credentials, 500 ... )}

Page 74: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Feature-developed modulesIsolation on the project level

Page 75: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Generic Module architecture

Core

Network layer

User session

Graphic library

Tracking tool ...

Feature 1 Feature 2 ... ...

Tier 0

Tier 1

Tier 2

Isolation on the project level

Page 76: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Generic Module architecture

Core

Network layer

User session

Graphic library

Tracking tool ...

Feature 1 Feature 2 ... ...

Tier 0

Tier 1

Tier 2

Isolation on the project level

Page 77: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Generic Module architecture

Core

Network layer

User session

Graphic library

Tracking tool ...

Feature 1 Feature 2 ... ...

Tier 0

Tier 1

Tier 2

Isolation on the project level

Page 78: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Generic Module architecture

Core

Network layer

User session

Graphic library

Tracking tool ...

Feature 1 Feature 2 ... ...

Tier 0

Tier 1

Tier 2

Isolation on the project level

Page 79: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Generic Module architecture

Core

Network layer

User session

Graphic library

Tracking tool ...

Feature 1 Feature 2 ... ...

Tier 0

Tier 1

Tier 2

Isolation on the project level

Page 80: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Generic Module architecture

Core

Network layer

User session

Graphic library

Tracking tool ...

Feature 1 Feature 2 ... ...

Tier 0

Tier 1

Tier 2

Isolation on the project level

Page 81: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Generic Module architecture

Core

Network layer

Graphic library

Tracking tool ...

Feature 1 Feature 2 ... ...

Tier 0

Tier 1

Tier 2

Isolation on the project level

Page 82: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Generic Module architecture

Core

Network layer

User session

Graphic library

Tracking tool ...

Feature 1 Feature 2 ... ...

Tier 0

Tier 1

Tier 2

Isolation on the project level

Page 83: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Our Module architecture

Nucleus

Networking Session Dali Tracker Polyglot

Credit Invest Transactor ...

Tier 0

Tier 1

Tier 2

Isolation on the project level

Page 84: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Our Module architecture

Nucleus

Networking Session Dali Tracker ...

Credit Invest Transactor ...

Tier 0

Tier 1

Tier 2

Isolation on the project level

Page 85: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

App Extensions done with modulesIsolation on the project level

Page 86: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Apple Watch

Page 87: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Today Widget

Page 88: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Siri

Page 89: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

iMessage

Page 90: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26 - Podfile

# ...

target 'SiriKit' do

pod 'N26Nucleus', :path => 'N26Modules/N26Nucleus'

pod 'N26Networking', :path => 'N26Modules/N26Networking'

pod 'N26Session', :path => 'N26Modules/N26Session'

end

# ..

Page 91: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

func widgetPerformUpdate(completionHandler: @escaping (NCUpdateResult) -> Void) { if Session.current.loggedIn {

// user is already logged in Session.current.syncUserData({ (data, error) in

// Refresh the user data if let _ = error {

// display error completionHandler(.failed) } else {

// Refresh the widget self.refreshDisplayData(completionHandler) } }) } else {

// User is not logged in, use the refresh token Session.current.startUsingStoredData({ (data) in self.refreshDisplayData(completionHandler) }, failure: { (refreshTokenExpired, error) in self.displayNeedToAuthenticate() completionHandler(.failed) }) }

}

Page 92: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Creating new feature

$ pod lib create N26NewSecretFeature

Page 93: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Creating new feature - Demo application

What language do you want to use?? [ Swift / ObjC ]> Swift

Would you like to include a demo application with your library? [ Yes / No ] > Yes

Which testing frameworks will you use? [ Quick / None ] > None

Page 94: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Creating new feature - Demo application

What language do you want to use?? [ Swift / ObjC ]> Swift

Would you like to include a demo application with your library? [ Yes / No ] > Yes

Which testing frameworks will you use? [ Quick / None ] > None

Page 95: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Pod::Spec.new do |s| s.name = 'N26NewSecretFeature' s.version = '0.1.0' s.summary = 'A short description of N26NewSecretFeature.'

s.ios.deployment_target = '9.0'

s.source_files = 'N26NewSecretFeature/Classes/**/*'

N26NewSecretFeature.podspec

Page 96: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Pod::Spec.new do |s| s.name = 'N26NewSecretFeature' s.version = '0.1.0' s.summary = 'A short description of N26NewSecretFeature.'

s.ios.deployment_target = '9.0'

s.source_files = 'N26NewSecretFeature/Classes/**/*'

s.dependency 'N26Nucleus'

N26NewSecretFeature.podspec

Page 97: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Pod::Spec.new do |s| s.name = 'N26NewSecretFeature' s.version = '0.1.0' s.summary = 'A short description of N26NewSecretFeature.'

s.ios.deployment_target = '9.0'

s.source_files = 'N26NewSecretFeature/Classes/**/*'

s.dependency 'N26Nucleus' s.dependency 'N26Session'

N26NewSecretFeature.podspec

Page 98: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Pod::Spec.new do |s| s.name = 'N26NewSecretFeature' s.version = '0.1.0' s.summary = 'A short description of N26NewSecretFeature.'

s.ios.deployment_target = '9.0'

s.source_files = 'N26NewSecretFeature/Classes/**/*'

s.dependency 'N26Nucleus' s.dependency 'N26Session' s.dependency 'N26Dali'

N26NewSecretFeature.podspec

Page 99: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26NewSecretFeature_Example Podfile

use_frameworks!

target 'N26NewSecretFeature_Example' do pod 'N26NewSecretFeature', :path => '../'

target 'N26NewSecretFeature_Tests' do inherit! :search_paths endend

Page 100: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26NewSecretFeature_Example Podfile

use_frameworks!

target 'N26NewSecretFeature_Example' do pod 'N26Dali', :path => '../../N26Dali' pod 'N26NewSecretFeature', :path => '../'

target 'N26NewSecretFeature_Tests' do inherit! :search_paths endend

Page 101: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26NewSecretFeature_Example Podfile

use_frameworks!

target 'N26NewSecretFeature_Example' do pod 'N26Dali', :path => '../../N26Dali' pod 'N26Session', :path => '../../N26Session' pod 'N26NewSecretFeature', :path => '../'

target 'N26NewSecretFeature_Tests' do inherit! :search_paths endend

Page 102: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

N26NewSecretFeature_Example Podfile

use_frameworks!

target 'N26NewSecretFeature_Example' do pod 'N26Dali', :path => '../../N26Dali' pod 'N26Session', :path => '../../N26Session' pod 'N26Nucleus', :path => '../../N26Nucleus' pod 'N26N26NewSecretFeature', :path => '../'

target 'N26NewSecretFeature_Tests' do inherit! :search_paths endend

Page 103: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Pod install on example app

~/$ cd Example

~/Example$ pod install

Page 104: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

NewFeature - Entry point

// NewFeature entry pointpublic class NewFeature {

// Initialize the NewFeature environment and display it public static func start(on viewController: UIViewController) { //TODO: implement this feature }

}

Page 105: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

NewFeature - Entry point

import N26Nucleusimport N26Session

// NewFeature entry pointpublic class NewFeature { // Initialize the NewFeature environment and display it public static func start(on viewController: UIViewController) { // Print user firstName print(Session.current.firstName) // Print users formatted IBAN print(Session.current.iban.IBANFormattedString()) }}

Page 106: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Example Project - ViewController.swift

import N26NewSecretFeature

class ViewController: UIViewController {

override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated)

// Kickoff the new feature NewSecretFeature.start(on: self) }

}

Page 107: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

DownsidesIsolation on the project level

Page 108: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Downsides

● Running pod update

Isolation on the project level

Page 109: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Downsides

● Running pod update● Conflicts and clogged pull requests

Isolation on the project level

Page 110: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Downsides

● Running pod update● Conflicts and clogged pull requests● Big repo

Isolation on the project level

Page 111: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Downsides

● Running pod update● Conflicts and clogged pull requests● Big repo

Nucleus

formating library

Isolation on the project level

Page 112: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Downsides

● Running pod update● Conflicts and clogged pull requests● Big repo

Nucleus

formating library

formating library

Nucleus Example

Isolation on the project level

Page 113: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Downsides

● Running pod update● Conflicts and clogged pull requests● Big repo

Nucleus

Credit

formating library

formating library

formating library

Nucleus Example

Credit Example

Isolation on the project level

Page 114: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

● Running pod update● Conflicts and clogged pull requests● Big repo

Downsides

Nucleus

Credit

formating library

formating library

formating library

Nucleus Example

Credit Example

Isolation on the project level

Page 115: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

● Running pod update● Conflicts and clogged pull requests● Big repo● Multiple compilations of dependencies

when testing

Downsides

Nucleus

Credit

formating library

formating library

formating library

Nucleus Example

Credit Example

Isolation on the project level

Page 116: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

● Running pod update● Conflicts and clogged pull requests● Big repo● Multiple compilations of dependencies

when testing

Downsides

Nucleus

Credit

formating library

formating library

formating library

Nucleus Example

Credit Example

Isolation on the project level

Page 117: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

● Running pod update● Conflicts and clogged pull requests● Big repo● Multiple compilations of dependencies

when testing

Downsides

Nucleus

Credit

formating library

formating library

formating library

Nucleus Example

Credit Example

Isolation on the project level

Page 118: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Downsides

● Running pod update● Conflicts and clogged pull requests● Big repo● Multiple compilations of dependencies

when testing● Changes break other modules

Isolation on the project level

Page 119: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Internal CI

✚Mac Mini Jenkins

Delivery

Page 120: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Internal CI Downsides

● New version of iOS (Updating Jenkins)

Delivery

Page 121: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Internal CI Downsides

● New version of iOS (Updating Jenkins)● No public IP

Delivery

Page 122: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Internal CI Downsides

● New version of iOS (Updating Jenkins)● No public IP● Not scalable

Delivery

Page 123: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Internal CI Downsides

● New version of iOS● No public IP● Not scalable● …

Delivery

Page 124: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Paid solutions to the rescue

Travis CI

Delivery

Page 125: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Paid solutions to the rescue

✚Travis CI Fastlane

Delivery

Page 126: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Paid solutions to the rescue

✚ ✚Travis CI Fastlane Bob

Delivery

Page 127: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Bob The Builder to the rescue

● Travis CI● Fastlane● Slack + Bob The Builder

Delivery

Page 128: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Bob The Builder - Stack

● Slack● Swift● Vapor (Server swift) ● Communicate to Slack via Sockets

Delivery

Page 129: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Slack Bob Travis

Page 130: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Build staging

Slack Bob Travis

Page 131: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Processing

Slack Bob Travis

Page 132: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Build staging

Slack Bob Travis

Page 133: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Done!

Slack Bob Travis

Page 134: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Bob in action

Page 135: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Bob

Open sourcehttps://github.com/N26-OpenSource/bob

Delivery

Page 136: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

build staging

Page 137: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

“If your build takes more than pressing a button, you’re doing it wrong”

-Someone

Page 138: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

align 3.3 1

Page 139: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

sync strings | align 3.3 1 | build staging | build appstore

Making an RCDelivery

Page 140: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

https://github.com/N26-OpenSource/bob

BobDelivery

Page 141: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

$ curl -sL toolbox.qutheory.io | bash

Getting the vapor toolbox

Page 142: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

$ vapor new BobTheBuilder

$ cd BobTheBuilder

Creating a new vapor project

Page 143: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Package.swift

Page 144: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Package.swift

import PackageDescription

let package = Package(

name: "BobTheBuilder",

dependencies: [

.Package(url:

"https://github.com/N26-OpenSource/bob.git", majorVersion: 0)

]

)

Page 145: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

$ rm -rf Sources/App/Controllers

$ rm -rf Sources/App/Models

Tidying up

Page 146: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

$ vapor xcode

Creating an Xcode project

Page 147: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

main.swift

Page 148: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

main.swift

import Bob

/// Create the config using a slack token

let config = Bob.Configuration(slackToken: "your-slack-token")

Page 149: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

main.swift

import Bob

/// Create the config using a slack token

let config = Bob.Configuration(slackToken: "your-slack-token")

/// Create bob instance

let bob = Bob(config: config)

Page 150: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

main.swift

import Bob

/// Create the config using a slack token

let config = Bob.Configuration(slackToken: "your-slack-token")

/// Create bob instance

let bob = Bob(config: config)

/// Start bob up

try bob.start()

Page 151: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Using the TravisScriptCommand/// Create TravisCI config

let travisConfig = TravisCI.Configuration(repoUrl: “repo url”, token: “token”)

Page 152: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Using the TravisScriptCommand/// Create TravisCI config

let travisConfig = TravisCI.Configuration(repoUrl: “repo url”, token: “token”)

/// Specify targets

let buildTargets = [

TravisTarget(name: "staging", script: Script("fastlane ios distribute_staging")),

TravisTarget(name: "appstore", script: Script("fastlane ios distribute_appstore")),

]

Page 153: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Using the TravisScriptCommand/// Create TravisCI config

let travisConfig = TravisCI.Configuration(repoUrl: “repo url”, token: “token”)

/// Specify targets

let buildTargets = [

TravisTarget(name: "staging", script: Script("fastlane ios distribute_staging")),

TravisTarget(name: "appstore", script: Script("fastlane ios distribute_appstore")),

]

/// Create the build command

let buildCommand = TravisScriptCommand(name: "build", config: travisConfig, targets: buildTargets,

defaultBranch: "Develop")

Page 154: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Using the TravisScriptCommand/// Create TravisCI config

let travisConfig = TravisCI.Configuration(repoUrl: “repo url”, token: “token”)

/// Specify targets

let buildTargets = [

TravisTarget(name: "staging", script: Script("fastlane ios distribute_staging")),

TravisTarget(name: "appstore", script: Script("fastlane ios distribute_appstore")),

]

/// Create the build command

let buildCommand = TravisScriptCommand(name: "build", config: travisConfig, targets: buildTargets,

defaultBranch: "Develop")

/// Register the command with bob

try bob.register(buildCommand)

Page 155: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Using the AlignVersionCommand

/// Create GitHub config

let gitHubConfig = GitHub.Configuration(username: "username",

personalAccessToken: "token", repoUrl: "url")

Page 156: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Using the AlignVersionCommand

/// Create GitHub config

let gitHubConfig = GitHub.Configuration(username: "username",

personalAccessToken: "token", repoUrl: "url")

/// Specify .plist file to be changed

let plistPaths: [String] = ["App/Info.plist", "siriKit/Info.plist"]

Page 157: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Using the AlignVersionCommand

/// Create GitHub config

let gitHubConfig = GitHub.Configuration(username: "username",

personalAccessToken: "token", repoUrl: "url")

/// Specify .plist file to be changed

let plistPaths: [String] = ["App/Info.plist", "siriKit/Info.plist"]

/// Create the command

let alignCommand = AlignVersionCommand(config: gitHubConfig,

defaultBranch: "Develop", plistPaths: plistPaths, author: author)

Page 158: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Using the AlignVersionCommand

/// Create GitHub config

let gitHubConfig = GitHub.Configuration(username: "username",

personalAccessToken: "token", repoUrl: "url")

/// Specify .plist file to be changed

let plistPaths: [String] = ["App/Info.plist", "siriKit/Info.plist"]

/// Create the command

let alignCommand = AlignVersionCommand(config: gitHubConfig,

defaultBranch: "Develop", plistPaths: plistPaths, author: author)

/// Register the command with bob

try bob.register(alignCommand)

Page 159: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Creating your commandspublic protocol Command {

}

Page 160: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Creating your commandspublic protocol Command { /// The name used to identify a command (`hello`, `version` etc.). Case insensitive var name: String { get }

}

Page 161: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Creating your commandspublic protocol Command { /// The name used to identify a command (`hello`, `version` etc.). Case insensitive var name: String { get } /// String describing how to use the command. var usage: String { get }

}

Page 162: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Creating your commandspublic protocol Command { /// The name used to identify a command (`hello`, `version` etc.). Case insensitive var name: String { get } /// String describing how to use the command. var usage: String { get } /// Executes the command /// /// - Parameters: /// - parameters: parameters passed to the command /// - sender: object used to send feedback to the user /// - completion: block to be called when the command finishes. In case of an error, pass it in /// - Throws: Throws if something goes wrong while executing the command, usually while parsing the parameters func execute(with parameters: [String], replyingTo sender: MessageSender, completion: @escaping (_ error: Error?) -> Void) throws }

Page 163: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

BobDelivery

Page 164: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Lessons learned on scaling

● Split your code into smaller pieces● Continuous integration is essential● Module will save you time● …● Try out Bob!

Page 165: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Appendix

● Architecting iOS Apps with VIPERhttps://www.objc.io/issues/13-architecture/viper/

● Bobhttps://github.com/N26-OpenSource/bob

● Vapor (Web Framework For Swift)https://vapor.codes/

● CocoaPodshttps://cocoapods.org/

● Travis CIhttps://travis-ci.com/

Page 166: Vicnent @damaofficial @vincz a · Creating new feature - Demo application What language do you want to use?? [ Swift / ObjC ] > Swift Would you like to include a demo application

Thanks

Dama@damaofficial

Vicnent@vincz_a

Bobgithub.com/N26-OpenSource/bob