![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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/4.jpg)
![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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/5.jpg)
![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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/8.jpg)
● 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/9.jpg)
● 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/10.jpg)
● 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/14.jpg)
![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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/27.jpg)
● 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/47.jpg)
![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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/48.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/50.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/51.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/52.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/53.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/54.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/55.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/56.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/57.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/58.jpg)
# 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/59.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/60.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/61.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/62.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/63.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/64.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/65.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/66.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/67.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/68.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/69.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/70.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/71.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/72.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/73.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/74.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/75.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/76.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/77.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/78.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/79.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/80.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/81.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/82.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/83.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/84.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/85.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/86.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/87.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/88.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/89.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/90.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/91.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/92.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/93.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/94.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/95.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/96.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/97.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/98.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/99.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/100.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/101.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/102.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/103.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/104.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/105.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/106.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/107.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/108.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/109.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/110.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/111.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/112.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/113.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/114.jpg)
● 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/115.jpg)
● 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/116.jpg)
● 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/117.jpg)
● 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/118.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/119.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/120.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/121.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/122.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/123.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/124.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/125.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/126.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/127.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/128.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/129.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/130.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/131.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/132.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/133.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/134.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/135.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/136.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/137.jpg)
“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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/138.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/139.jpg)
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://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/140.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/141.jpg)
$ 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/142.jpg)
$ 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/143.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/144.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/145.jpg)
$ 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/146.jpg)
$ 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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/147.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/148.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/149.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/150.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/151.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/152.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/153.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/154.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/155.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/156.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/157.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/158.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/159.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/160.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/161.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/162.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/163.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/164.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/165.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022050315/5f775a1e2f40265a1169519b/html5/thumbnails/166.jpg)
Thanks
Dama@damaofficial
Vicnent@vincz_a
Bobgithub.com/N26-OpenSource/bob