SlideShare a Scribd company logo
1 of 87
Download to read offline
SEZON 2
#12
"Nie wiem"
czyli od pomysłu do produktu
Kinga Wilczek
Marcin Chojnacki
3
CO MY TU?
4
Kinga Marcin
iOS Developer
@ Droids On Roids
kinga.wilczek@droidsonroids.pl
iOS Developer
@ Droids On Roids
marcin.chojnacki@droidsonroids.pl
5
BIG BANG THEORY
6
?
• Dowiedz się o
najnowszych
wydarzeniach
• Ustaw przypomnienie
• Przeglądaj historię
wydarzeń
• Przeglądaj szczegóły
wydarzenia
• Przeglądaj zdjęcia
z minionych
wydarzeń
• Wyszukaj prelegenta
• Dowiedz się o
prelegentach
• Dowiedz się na temat
prelekcji
• Skontaktuj się z
nami
• Zintegruj
aplikacje ze
swoim FB
Demo
17
HOW IS IT MADE?
18
Dobór architektury
MVC VIPERMVVM
19
20
Dobór architektury
MVC VIPERMVVM
21
Dobór architektury
MVC VIPERMVVM
Non-reactive Reactive
22
23
Dobór architektury
MVC VIPERMVVM
Non-reactive Reactive
24
Dobór architektury
MVC VIPERMVVM
Non-reactive Reactive
RxSwift Non-RxSwift
25
26
A gdyby tak to
wszystko rzucić i
wyjechać w
Bieszczady
🤔
27
Dobór architektury
MVC VIPERMVVM
Non-reactive Reactive
RxSwift Non-RxSwift
28
Dobór architektury
MVC VIPERMVVM
Non-reactive Reactive
RxSwift Non-RxSwift
29
Main ideas
Ograniczenie zewnętrznych zależności
Zrozumienie reaktywności
Skalowalność
Czynnik X
30
Main ideas
Ograniczenie zewnętrznych zależności
Zrozumienie reaktywności
Skalowalność
Czynnik X
31
Main ideas
Ograniczenie zewnętrznych zależności
Zrozumienie reaktywności
Skalowalność
Czynnik X
32
Main ideas
Ograniczenie zewnętrznych zależności
Zrozumienie reaktywności
Skalowalność
Czynnik X
33
34
MVVM
(reactive, non-RxSwift)
+
Observer pattern

+
Coordinators
35
MVVM
Model
View
ViewModel
36
MVVM
Model
Represents your content
37
MVVM
View
Represents appearance of the UI
38
MVVM
ViewModel
Handles view state and behavior
39
MVVM
ViewController
View ViewModel
Model
BINDING
40
MVVM
Makes your apps more testable
41
MVVM
Can help split Massive View Controller
42
MVVM
Communicates with the View using
Data Bindings
43
MVVM
ViewModel View
name: String nameLabel.text
44
Observer pattern
Numer
telefonu
45
Observer pattern
46
Observer patternObserver pattern
47
Observer pattern
Observable
Observer
Subscribe
Notify
Next
Completed
Error
48
Observer pattern
final class Observable<Element> {
typealias NextObserver = (Element) -> ()
private var nextObservers = [Int: NextObserver]()
var value: Element {
didSet {
notifyObservers()
}
}
init(_ value: Element) {
self.value = value
}
func subscribeNext(_ onNext: @escaping NextObserver) -> DisposingObject {
…
nextObservers[id] = onNext
}
func next(_ value: Element) {
self.value = value
}
private func notifyObservers() {
…
nextObservers.forEach { $0.value(value) }
}
}
49
Observer pattern
Problem: MEMORY LEAKS
Rozwiązanie: Dispose Pattern
50
Dispose Pattern
Dispose bag
51
Dispose Pattern
Dispose bag
?
52
Dispose Pattern
Dispose bag
Observable
Observer
Subscribe
Notify
Next
Completed
Error
53
Dispose Pattern
Dispose bag
Observable Observer
Subscribe
Disposable
54
Dispose Pattern
Dispose bag
Observable Observer
Subscribe
Disposable
final class DisposingObject: Disposable {
private var disposeClosure: () -> ()
init(disposeClosure: @escaping () -> ()) {
self.disposeClosure = disposeClosure
}
deinit {
dispose()
}
func dispose() {
disposeClosure()
}
func add(to disposeBag: DisposeBag) {
disposeBag.addDisposable(disposable: self)
}
}
55
Dispose Pattern
Dispose bag
protocol Disposable {
func dispose()
}
final class DisposeBag {
private var disposables = [Disposable]()
func addDisposable(disposable: Disposable) {
disposables.append(disposable)
}
deinit {
disposables.forEach { $0.dispose() }
}
}
56
Coordinators
57
Coordinators
Similar to "Router" or "Application Controller"
Manage flow of the entire application
Manage lifecycle of multiple View Controllers
Pass data between View Controllers
Act as a builder of View Controllers
58
Coordinators
Similar to "Router" or "Application Controller"
Manage flow of the entire application
Manage lifecycle of multiple View Controllers
Pass data between View Controllers
Act as a builder of View Controllers
59
Coordinators
Similar to "Router" or "Application Controller"
Manage flow of the entire application
Manage lifecycle of multiple View Controllers
Pass data between View Controllers
Act as a builder of View Controllers
60
Coordinators
Similar to "Router" or "Application Controller"
Manage flow of the entire application
Manage lifecycle of multiple View Controllers
Pass data between View Controllers
Act as a builder of View Controllers
61
Coordinators
Similar to "Router" or "Application Controller"
Manage flow of the entire application
Manage lifecycle of multiple View Controllers
Pass data between View Controllers
Act as a builder of View Controllers
62
Coordinators
Coordinator
VC 1 VC 2 VC 3
63
Coordinators
App Delegate
App Coordinator
Coordinator 1 Coordinator 2
64
Coordinators
65
Coordinators
66
Coordinators
67
Coordinators
68
Coordinators
69
KODOWANIE TO NIE
WSZYSTKO
70
Wizja
Designs
Prawo
Backend
Kodowanie Marketing
Opis
na
App Store’a
Testowanie
Licencja
Integracja
(Facebook)
Screenshots
Acknowledgement
s
Reviewers
71
Facebook
• Lista wykorzystywanych uprawnień
• Kroki do reprodukcji użycia uprawnienia
• Filmik z reprodukcją użycia uprawnienia

• Filmik z logowaniem do aplikacji
72
Facebook
Nie zwlekaj do ostatniej chwili
bo wszystko może pójść nie tak
73
Facebook
74
Facebook
Now!
Available
76
LETS PLAY A GAME!
77
78
ONE MORE THING …
79
80
Open Source
81
github.com/DroidsOnRoids/let-swift-app
Open Source
82
Offline mode
Konwersja do Swift 4
Wsparcie dla iPhone X
Open Source
83
Offline mode
Konwersja do Swift 4
Wsparcie dla iPhone X
Open Source
84
Open Source
Offline mode
Konwersja do Swift 4
Wsparcie dla iPhone X
85
Dziękujemy za uwagę!
🙏
86
Q&A
#
09.11.2017 PROZA
#12

More Related Content

Similar to "Nie wiem", czyli od pomysłu, do produktu // LET SWIFT #12

Testy akceptacyjne w pigułce.
Testy akceptacyjne w pigułce.   Testy akceptacyjne w pigułce.
Testy akceptacyjne w pigułce. Future Processing
 
Architektura CSS - dobre i złe praktyki
Architektura CSS - dobre i złe praktykiArchitektura CSS - dobre i złe praktyki
Architektura CSS - dobre i złe praktykiJakub Wiśniewski
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?javOnet
 
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe MicroservicesKonrad Król
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Quick-Solution
 
Ruby on Rails 2.1. Tworzenie nowoczesnych aplikacji internetowych
Ruby on Rails 2.1. Tworzenie nowoczesnych aplikacji internetowychRuby on Rails 2.1. Tworzenie nowoczesnych aplikacji internetowych
Ruby on Rails 2.1. Tworzenie nowoczesnych aplikacji internetowychWydawnictwo Helion
 
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Mateusz Paprocki, PMP
 
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...Chris Suszyński
 
Deployment historia pewnej aplikacji
Deployment   historia pewnej aplikacjiDeployment   historia pewnej aplikacji
Deployment historia pewnej aplikacjiGrzegorz Stawarczyk
 
Wielomodułowe aplikacje korzystające ze wspólnej bazy kodu [PL]
Wielomodułowe aplikacje korzystające ze wspólnej bazy kodu [PL]Wielomodułowe aplikacje korzystające ze wspólnej bazy kodu [PL]
Wielomodułowe aplikacje korzystające ze wspólnej bazy kodu [PL]Krzysztof Głuszczyk
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayTomasz Dziuda
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Natalia Stanko
 
ASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPWydawnictwo Helion
 
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)Dariusz Kacban
 
Automated Tests in Agile based on Serenity BDD - Michał Szybalski
Automated Tests in Agile based on Serenity BDD - Michał SzybalskiAutomated Tests in Agile based on Serenity BDD - Michał Szybalski
Automated Tests in Agile based on Serenity BDD - Michał SzybalskiŁódQA
 

Similar to "Nie wiem", czyli od pomysłu, do produktu // LET SWIFT #12 (20)

Testy akceptacyjne w pigułce.
Testy akceptacyjne w pigułce.   Testy akceptacyjne w pigułce.
Testy akceptacyjne w pigułce.
 
Architektura CSS - dobre i złe praktyki
Architektura CSS - dobre i złe praktykiArchitektura CSS - dobre i złe praktyki
Architektura CSS - dobre i złe praktyki
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?
 
Jaki framework wybrać
Jaki framework wybraćJaki framework wybrać
Jaki framework wybrać
 
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe Microservices
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?
 
Ruby on Rails 2.1. Tworzenie nowoczesnych aplikacji internetowych
Ruby on Rails 2.1. Tworzenie nowoczesnych aplikacji internetowychRuby on Rails 2.1. Tworzenie nowoczesnych aplikacji internetowych
Ruby on Rails 2.1. Tworzenie nowoczesnych aplikacji internetowych
 
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
 
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
 
Deployment historia pewnej aplikacji
Deployment   historia pewnej aplikacjiDeployment   historia pewnej aplikacji
Deployment historia pewnej aplikacji
 
Wielomodułowe aplikacje korzystające ze wspólnej bazy kodu [PL]
Wielomodułowe aplikacje korzystające ze wspólnej bazy kodu [PL]Wielomodułowe aplikacje korzystające ze wspólnej bazy kodu [PL]
Wielomodułowe aplikacje korzystające ze wspólnej bazy kodu [PL]
 
university day 1
university day 1university day 1
university day 1
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training Day
 
Wstęp do Clean Architecture
Wstęp do Clean ArchitectureWstęp do Clean Architecture
Wstęp do Clean Architecture
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
 
ASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHP
 
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
 
Automated Tests in Agile based on Serenity BDD - Michał Szybalski
Automated Tests in Agile based on Serenity BDD - Michał SzybalskiAutomated Tests in Agile based on Serenity BDD - Michał Szybalski
Automated Tests in Agile based on Serenity BDD - Michał Szybalski
 

"Nie wiem", czyli od pomysłu, do produktu // LET SWIFT #12