SlideShare a Scribd company logo
Testable apps
in Swift
Andrzej Dąbrowski andrzej@amplituda.io amplituda.io
A client comes…
– Our Beloved Client
“I have a start-up, I need an app, previous team
sucked so I’d like you to continue develop the
project”
Great!
Let’s look at the code.
1Split code to independent 

single-purpose services.
(no tests without that, sorry)
2Write couple of tests.
Example service:
BeaconManager
Public API
Why should I make a
wrapper around
CLLocationManager?
• seamlessly manages permissions
• smoothens out beacon power fluctuations
• doesn’t require all listeners to duplicate single beacon
filtering code and leaving beacon logic
• enable / disable listening
• saves energy (takes care of switching between
monitoring/ranging automatically)
• takes care of background ranging (☠☠☠)
• it’s listeners actually don’t have to care about
anything, only implement code on beacon events.
BeaconManager uses
another services/APIs
• CLLocationManager for permissions and
background ranging (updating location)
• Logger (sends critical logs to back-end)
• Data
• SyncManager
• NSNotificationCenter
BeaconManager is
critical service to test
Singletons.
Hard to test.
Objective-C dynamic runtime allows us
easily change implementation of classes /
methods.
OCMock!
Can I do this in Swift?
Hmm…
Let’s read
http://ocmock.org/swift/
There are smart people around who
claim differently:
http://nshipster.com/swift-objc-
runtime/
IMVHO, not the best option.
Where is Swift going?
Will there ever be runtime access
in Swift?
I have no idea.
But if Swift is about to be
super-fast and super-safe,
I wouldn’t count on it.
Why Obj-C runtime is so
great in testing?
• Effortless and quick mocks/stubs
• No refactoring needed at all. Just jump into
writing tests.
Disadvantages of OCMock
way of testing?
• No compile-time protection
• We can forget to stub some important things
• Encourages a bit to write ugly code (inline mocks /
stubs) which could create problems with duplication
later
• No explicit list of dependencies like in dependency
injection
• Still have to write mocks / stubs :(
Alternatives?
Stubbing based on abstraction
layer.
Service Locator or DI
How does it work?
Service Locator
Advantages of SL
• compile-time
• quite quick to implement (actually,
sharedInstance properties could be overwritten
so that they call Service Locator themselves).
• Service protocols are a beautiful way to
investigate app architecture without going too
deep into implementation details
Disadvantages of SL
• We need to complicate architecture (is that really
bad thing?)
• We can forget to stub some libs
• No explicit list of dependencies (like in DI)
• Still have to write our stubs :(
Dependency injection
"Dependency Injection" is a 25-
dollar term for a 5-cent concept.
James Shore
"Dependency Injection" is a 25-dollar
term for a 5-cent concept.
James Shore
We must initialise services
and inject properties when
app starts.
We could use some
automation for initialising
services.
Advantages of DI
• compile-time
• explicit list of dependencies (nice app
architecture guard)
• we won’t forget to stub anything
• service protocols are a beautiful way to
investigate app architecture without going too
deep into implementation details
Disadvantages of DI
• Quite not-so-fast to implement
• Architecture gets more complicated (like in SL)
• We still need to write stubs
SL vs. DI
• http://www.martinfowler.com/articles/
injection.html
• http://bayou.io/draft/
In_Defense_of_Service_Locator.html
• rest of the Internet
Are there any libraries for
Dependency Injection?
Typhoon
Swinject
Typhoon
December, 2012 1667
StarsFirst github commit
Swinject
July, 2015 454
StarsFirst github commit
There’s a single
disadvantage of all testing
methods.
No lib with stubs.
I’d like to test like this
Why do I have to write
mocks/stubs for Apple or
3rd party libs?
Let’s take a look at
modern framework like
angular.js
Which iOS frameworks
could be easily stubbed
not to duplicate code?
Summary
• method / class swizzling is probably not what you want
in Swift
• service locator is quickest way to get legacy code
tested
• typhoon and swinject are 3rd party libs for Swift testing
• swinject seems to be nice
• unfortunately, there are no libraries which out of the
box give developers stubs / mocks for Apple APIs.
Thank you

More Related Content

What's hot

Streamlined Geek Talk
Streamlined Geek TalkStreamlined Geek Talk
Streamlined Geek Talk
Sarah Allen
 
Micro Services - Small is Beautiful
Micro Services - Small is BeautifulMicro Services - Small is Beautiful
Micro Services - Small is Beautiful
Eberhard Wolff
 
IaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explainedIaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explained
Jeroen Niesen
 
Automate REST API Testing
Automate REST API TestingAutomate REST API Testing
Automate REST API Testing
TechWell
 
"Frameworks in 2015" Андрей Листочкин
"Frameworks in 2015" Андрей Листочкин"Frameworks in 2015" Андрей Листочкин
"Frameworks in 2015" Андрей Листочкин
Fwdays
 
AWS Lambda Function with Kotlin
AWS Lambda Function with KotlinAWS Lambda Function with Kotlin
AWS Lambda Function with Kotlin
Troy Miles
 
Infinum Android Talks #13 - Developing Android Apps Like Navy Seals by Ivan Kušt
Infinum Android Talks #13 - Developing Android Apps Like Navy Seals by Ivan KuštInfinum Android Talks #13 - Developing Android Apps Like Navy Seals by Ivan Kušt
Infinum Android Talks #13 - Developing Android Apps Like Navy Seals by Ivan Kušt
Infinum
 
Web api using rest based architecture
Web api using rest based architectureWeb api using rest based architecture
Web api using rest based architecture
Soham Kulkarni
 
Algolia's Fury Road to a Worldwide API
Algolia's Fury Road to a Worldwide APIAlgolia's Fury Road to a Worldwide API
Algolia's Fury Road to a Worldwide API
Paul-Louis NECH
 
Serverless Application Model - Executing Lambdas Locally
Serverless Application Model - Executing Lambdas LocallyServerless Application Model - Executing Lambdas Locally
Serverless Application Model - Executing Lambdas Locally
Alex
 
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby AppsLife Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
Tristan Gomez
 
Alfresco tech talk live mobile sdks
Alfresco tech talk live mobile sdksAlfresco tech talk live mobile sdks
Alfresco tech talk live mobile sdks
Alfresco Software
 
Android Clean Architecture for Dummies
Android Clean Architecture for DummiesAndroid Clean Architecture for Dummies
Android Clean Architecture for Dummies
Kengo Suzuki
 
Test automation architecture. Advanced level
Test automation architecture. Advanced levelTest automation architecture. Advanced level
Test automation architecture. Advanced level
Anton Skomarovskyi
 
Spring Boot
Spring BootSpring Boot
Spring Boot
Eberhard Wolff
 
Micro Service – The New Architecture Paradigm
Micro Service – The New Architecture ParadigmMicro Service – The New Architecture Paradigm
Micro Service – The New Architecture Paradigm
Eberhard Wolff
 
Angular 2 + TypeScript = true. Let's Play!
Angular 2 + TypeScript = true. Let's Play!Angular 2 + TypeScript = true. Let's Play!
Angular 2 + TypeScript = true. Let's Play!
Sirar Salih
 
Integration Testing with Docker Containers with DockerCompose
Integration Testing with Docker Containers  with DockerComposeIntegration Testing with Docker Containers  with DockerCompose
Integration Testing with Docker Containers with DockerCompose
Mike Holdsworth
 
Legacy Sins
Legacy SinsLegacy Sins
Legacy Sins
Eberhard Wolff
 
Phoenix for Rubyists
Phoenix for RubyistsPhoenix for Rubyists
Phoenix for Rubyists
Doug Goldie
 

What's hot (20)

Streamlined Geek Talk
Streamlined Geek TalkStreamlined Geek Talk
Streamlined Geek Talk
 
Micro Services - Small is Beautiful
Micro Services - Small is BeautifulMicro Services - Small is Beautiful
Micro Services - Small is Beautiful
 
IaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explainedIaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explained
 
Automate REST API Testing
Automate REST API TestingAutomate REST API Testing
Automate REST API Testing
 
"Frameworks in 2015" Андрей Листочкин
"Frameworks in 2015" Андрей Листочкин"Frameworks in 2015" Андрей Листочкин
"Frameworks in 2015" Андрей Листочкин
 
AWS Lambda Function with Kotlin
AWS Lambda Function with KotlinAWS Lambda Function with Kotlin
AWS Lambda Function with Kotlin
 
Infinum Android Talks #13 - Developing Android Apps Like Navy Seals by Ivan Kušt
Infinum Android Talks #13 - Developing Android Apps Like Navy Seals by Ivan KuštInfinum Android Talks #13 - Developing Android Apps Like Navy Seals by Ivan Kušt
Infinum Android Talks #13 - Developing Android Apps Like Navy Seals by Ivan Kušt
 
Web api using rest based architecture
Web api using rest based architectureWeb api using rest based architecture
Web api using rest based architecture
 
Algolia's Fury Road to a Worldwide API
Algolia's Fury Road to a Worldwide APIAlgolia's Fury Road to a Worldwide API
Algolia's Fury Road to a Worldwide API
 
Serverless Application Model - Executing Lambdas Locally
Serverless Application Model - Executing Lambdas LocallyServerless Application Model - Executing Lambdas Locally
Serverless Application Model - Executing Lambdas Locally
 
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby AppsLife Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
 
Alfresco tech talk live mobile sdks
Alfresco tech talk live mobile sdksAlfresco tech talk live mobile sdks
Alfresco tech talk live mobile sdks
 
Android Clean Architecture for Dummies
Android Clean Architecture for DummiesAndroid Clean Architecture for Dummies
Android Clean Architecture for Dummies
 
Test automation architecture. Advanced level
Test automation architecture. Advanced levelTest automation architecture. Advanced level
Test automation architecture. Advanced level
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Micro Service – The New Architecture Paradigm
Micro Service – The New Architecture ParadigmMicro Service – The New Architecture Paradigm
Micro Service – The New Architecture Paradigm
 
Angular 2 + TypeScript = true. Let's Play!
Angular 2 + TypeScript = true. Let's Play!Angular 2 + TypeScript = true. Let's Play!
Angular 2 + TypeScript = true. Let's Play!
 
Integration Testing with Docker Containers with DockerCompose
Integration Testing with Docker Containers  with DockerComposeIntegration Testing with Docker Containers  with DockerCompose
Integration Testing with Docker Containers with DockerCompose
 
Legacy Sins
Legacy SinsLegacy Sins
Legacy Sins
 
Phoenix for Rubyists
Phoenix for RubyistsPhoenix for Rubyists
Phoenix for Rubyists
 

Viewers also liked

Old Meets New
Old Meets NewOld Meets New
Old Meets New
Gail Lovely
 
Galaxy bags
Galaxy bagsGalaxy bags
Galaxy bags
prajan5566
 
Juan fernando gonzales gerardo ramirez zuluaga 8 a
Juan fernando gonzales  gerardo ramirez  zuluaga 8 aJuan fernando gonzales  gerardo ramirez  zuluaga 8 a
Juan fernando gonzales gerardo ramirez zuluaga 8 a
Gerardo Ramirez
 
Konsultacje społeczne (1)
Konsultacje społeczne (1)Konsultacje społeczne (1)
Konsultacje społeczne (1)
Fundacja "Merkury"
 
Taller elizabeth
Taller elizabethTaller elizabeth
letter
letterletter
letter
sanhimhar
 
تاريخ بيت المقدس لابن الجوزي
تاريخ بيت المقدس لابن الجوزيتاريخ بيت المقدس لابن الجوزي
تاريخ بيت المقدس لابن الجوزي
Mohammad Ihmeidan
 
بدع الموت والتعزية
 بدع الموت والتعزية  بدع الموت والتعزية
بدع الموت والتعزية
Mohammad Ihmeidan
 
The Selection of Apps for Young Learners - Considerations, Criteria, and Exem...
The Selection of Apps for Young Learners - Considerations, Criteria, and Exem...The Selection of Apps for Young Learners - Considerations, Criteria, and Exem...
The Selection of Apps for Young Learners - Considerations, Criteria, and Exem...
Gail Lovely
 
La gestión de Imagen como factor de posicionamiento
La gestión de Imagen como factor de posicionamientoLa gestión de Imagen como factor de posicionamiento
La gestión de Imagen como factor de posicionamiento
carloshuertad87
 
SHCR Review 2015 - Appendix 1 Literature Review
SHCR Review 2015 - Appendix 1 Literature ReviewSHCR Review 2015 - Appendix 1 Literature Review
SHCR Review 2015 - Appendix 1 Literature Review
Horizons NHS
 
Proposal Masjid Baitul Ummah Oma Batam Center
Proposal Masjid Baitul Ummah Oma Batam CenterProposal Masjid Baitul Ummah Oma Batam Center
Proposal Masjid Baitul Ummah Oma Batam Center
Alexander Chan
 
Proposal Pembangunan Masjid Jami Al Hidayah
Proposal Pembangunan Masjid Jami Al Hidayah Proposal Pembangunan Masjid Jami Al Hidayah
Proposal Pembangunan Masjid Jami Al Hidayah
Ahmad Tachinardi
 
Rebecca Grant - DH research data: identification and challenges (DH2016)
Rebecca Grant - DH research data: identification and challenges (DH2016)Rebecca Grant - DH research data: identification and challenges (DH2016)
Rebecca Grant - DH research data: identification and challenges (DH2016)
dri_ireland
 
Time Inc. Books: Cooking Verticals
Time Inc. Books: Cooking VerticalsTime Inc. Books: Cooking Verticals
Time Inc. Books: Cooking Verticals
Sean Lough
 
إدمان الجنس والإباحية
إدمان الجنس والإباحيةإدمان الجنس والإباحية
إدمان الجنس والإباحية
Mohammad Ihmeidan
 

Viewers also liked (16)

Old Meets New
Old Meets NewOld Meets New
Old Meets New
 
Galaxy bags
Galaxy bagsGalaxy bags
Galaxy bags
 
Juan fernando gonzales gerardo ramirez zuluaga 8 a
Juan fernando gonzales  gerardo ramirez  zuluaga 8 aJuan fernando gonzales  gerardo ramirez  zuluaga 8 a
Juan fernando gonzales gerardo ramirez zuluaga 8 a
 
Konsultacje społeczne (1)
Konsultacje społeczne (1)Konsultacje społeczne (1)
Konsultacje społeczne (1)
 
Taller elizabeth
Taller elizabethTaller elizabeth
Taller elizabeth
 
letter
letterletter
letter
 
تاريخ بيت المقدس لابن الجوزي
تاريخ بيت المقدس لابن الجوزيتاريخ بيت المقدس لابن الجوزي
تاريخ بيت المقدس لابن الجوزي
 
بدع الموت والتعزية
 بدع الموت والتعزية  بدع الموت والتعزية
بدع الموت والتعزية
 
The Selection of Apps for Young Learners - Considerations, Criteria, and Exem...
The Selection of Apps for Young Learners - Considerations, Criteria, and Exem...The Selection of Apps for Young Learners - Considerations, Criteria, and Exem...
The Selection of Apps for Young Learners - Considerations, Criteria, and Exem...
 
La gestión de Imagen como factor de posicionamiento
La gestión de Imagen como factor de posicionamientoLa gestión de Imagen como factor de posicionamiento
La gestión de Imagen como factor de posicionamiento
 
SHCR Review 2015 - Appendix 1 Literature Review
SHCR Review 2015 - Appendix 1 Literature ReviewSHCR Review 2015 - Appendix 1 Literature Review
SHCR Review 2015 - Appendix 1 Literature Review
 
Proposal Masjid Baitul Ummah Oma Batam Center
Proposal Masjid Baitul Ummah Oma Batam CenterProposal Masjid Baitul Ummah Oma Batam Center
Proposal Masjid Baitul Ummah Oma Batam Center
 
Proposal Pembangunan Masjid Jami Al Hidayah
Proposal Pembangunan Masjid Jami Al Hidayah Proposal Pembangunan Masjid Jami Al Hidayah
Proposal Pembangunan Masjid Jami Al Hidayah
 
Rebecca Grant - DH research data: identification and challenges (DH2016)
Rebecca Grant - DH research data: identification and challenges (DH2016)Rebecca Grant - DH research data: identification and challenges (DH2016)
Rebecca Grant - DH research data: identification and challenges (DH2016)
 
Time Inc. Books: Cooking Verticals
Time Inc. Books: Cooking VerticalsTime Inc. Books: Cooking Verticals
Time Inc. Books: Cooking Verticals
 
إدمان الجنس والإباحية
إدمان الجنس والإباحيةإدمان الجنس والإباحية
إدمان الجنس والإباحية
 

Similar to [CocoaHeads Tricity] Andrzej Dąbrowski - Dependency injection and testable architecture in Swift apps

Fed London - January 2015
Fed London - January 2015Fed London - January 2015
Fed London - January 2015
Phil Leggetter
 
Patterns and practices for building enterprise-scale HTML5 apps
Patterns and practices for building enterprise-scale HTML5 appsPatterns and practices for building enterprise-scale HTML5 apps
Patterns and practices for building enterprise-scale HTML5 apps
Phil Leggetter
 
Reactive Micro Services with Java seminar
Reactive Micro Services with Java seminarReactive Micro Services with Java seminar
Reactive Micro Services with Java seminar
Gal Marder
 
How to Build Front-End Web Apps that Scale - FutureJS
How to Build Front-End Web Apps that Scale - FutureJSHow to Build Front-End Web Apps that Scale - FutureJS
How to Build Front-End Web Apps that Scale - FutureJS
Phil Leggetter
 
AngularJSTO presentation
AngularJSTO presentationAngularJSTO presentation
AngularJSTO presentation
Alan Hietala
 
Building front-end apps that Scale - FOSDEM 2014
Building front-end apps that Scale - FOSDEM 2014Building front-end apps that Scale - FOSDEM 2014
Building front-end apps that Scale - FOSDEM 2014
Phil Leggetter
 
AWS Lambda from the trenches (Serverless London)
AWS Lambda from the trenches (Serverless London)AWS Lambda from the trenches (Serverless London)
AWS Lambda from the trenches (Serverless London)
Yan Cui
 
Serverless in production, an experience report (BuildStuff)
Serverless in production, an experience report (BuildStuff)Serverless in production, an experience report (BuildStuff)
Serverless in production, an experience report (BuildStuff)
Yan Cui
 
Microservices: The Best Practices
Microservices: The Best PracticesMicroservices: The Best Practices
Microservices: The Best Practices
Pavel Mička
 
Angular js firebase-preso
Angular js firebase-presoAngular js firebase-preso
Angular js firebase-preso
Avinash Kondagunta
 
Serverless Meetup - Event Sourcing
Serverless Meetup - Event SourcingServerless Meetup - Event Sourcing
Serverless Meetup - Event Sourcing
Luca Bianchi
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
Hannes Lowette
 
Crafting ColdFusion Applications like an Architect
Crafting ColdFusion Applications like an ArchitectCrafting ColdFusion Applications like an Architect
Crafting ColdFusion Applications like an Architect
ColdFusionConference
 
Serverless in production, an experience report (microservices london)
Serverless in production, an experience report (microservices london)Serverless in production, an experience report (microservices london)
Serverless in production, an experience report (microservices london)
Yan Cui
 
Serverless in production, an experience report (London js community)
Serverless in production, an experience report (London js community)Serverless in production, an experience report (London js community)
Serverless in production, an experience report (London js community)
Yan Cui
 
Deploying microservices on AWS
Deploying microservices on AWSDeploying microservices on AWS
Deploying microservices on AWS
Michael Haberman
 
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Phil Leggetter
 
Building a [micro]services platform on AWS
Building a [micro]services platform on AWSBuilding a [micro]services platform on AWS
Building a [micro]services platform on AWS
Shaun Pearce
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
Engin Yoeyen
 
Application Lifecycle Management
Application Lifecycle ManagementApplication Lifecycle Management
Application Lifecycle Management
Amazon Web Services
 

Similar to [CocoaHeads Tricity] Andrzej Dąbrowski - Dependency injection and testable architecture in Swift apps (20)

Fed London - January 2015
Fed London - January 2015Fed London - January 2015
Fed London - January 2015
 
Patterns and practices for building enterprise-scale HTML5 apps
Patterns and practices for building enterprise-scale HTML5 appsPatterns and practices for building enterprise-scale HTML5 apps
Patterns and practices for building enterprise-scale HTML5 apps
 
Reactive Micro Services with Java seminar
Reactive Micro Services with Java seminarReactive Micro Services with Java seminar
Reactive Micro Services with Java seminar
 
How to Build Front-End Web Apps that Scale - FutureJS
How to Build Front-End Web Apps that Scale - FutureJSHow to Build Front-End Web Apps that Scale - FutureJS
How to Build Front-End Web Apps that Scale - FutureJS
 
AngularJSTO presentation
AngularJSTO presentationAngularJSTO presentation
AngularJSTO presentation
 
Building front-end apps that Scale - FOSDEM 2014
Building front-end apps that Scale - FOSDEM 2014Building front-end apps that Scale - FOSDEM 2014
Building front-end apps that Scale - FOSDEM 2014
 
AWS Lambda from the trenches (Serverless London)
AWS Lambda from the trenches (Serverless London)AWS Lambda from the trenches (Serverless London)
AWS Lambda from the trenches (Serverless London)
 
Serverless in production, an experience report (BuildStuff)
Serverless in production, an experience report (BuildStuff)Serverless in production, an experience report (BuildStuff)
Serverless in production, an experience report (BuildStuff)
 
Microservices: The Best Practices
Microservices: The Best PracticesMicroservices: The Best Practices
Microservices: The Best Practices
 
Angular js firebase-preso
Angular js firebase-presoAngular js firebase-preso
Angular js firebase-preso
 
Serverless Meetup - Event Sourcing
Serverless Meetup - Event SourcingServerless Meetup - Event Sourcing
Serverless Meetup - Event Sourcing
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
 
Crafting ColdFusion Applications like an Architect
Crafting ColdFusion Applications like an ArchitectCrafting ColdFusion Applications like an Architect
Crafting ColdFusion Applications like an Architect
 
Serverless in production, an experience report (microservices london)
Serverless in production, an experience report (microservices london)Serverless in production, an experience report (microservices london)
Serverless in production, an experience report (microservices london)
 
Serverless in production, an experience report (London js community)
Serverless in production, an experience report (London js community)Serverless in production, an experience report (London js community)
Serverless in production, an experience report (London js community)
 
Deploying microservices on AWS
Deploying microservices on AWSDeploying microservices on AWS
Deploying microservices on AWS
 
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
 
Building a [micro]services platform on AWS
Building a [micro]services platform on AWSBuilding a [micro]services platform on AWS
Building a [micro]services platform on AWS
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Application Lifecycle Management
Application Lifecycle ManagementApplication Lifecycle Management
Application Lifecycle Management
 

More from CocoaHeads Tricity

[CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps
[CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps[CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps
[CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps
CocoaHeads Tricity
 
[CocoaHeads Tricity] Michał Zygar - Consuming API
[CocoaHeads Tricity] Michał Zygar - Consuming API[CocoaHeads Tricity] Michał Zygar - Consuming API
[CocoaHeads Tricity] Michał Zygar - Consuming API
CocoaHeads Tricity
 
[CocoaHeads Tricity] Maciej Burda - Working as an iOS developer Interview Cas...
[CocoaHeads Tricity] Maciej Burda - Working as an iOS developer Interview Cas...[CocoaHeads Tricity] Maciej Burda - Working as an iOS developer Interview Cas...
[CocoaHeads Tricity] Maciej Burda - Working as an iOS developer Interview Cas...
CocoaHeads Tricity
 
2013-05-15 threads. why and how
2013-05-15 threads. why and how2013-05-15 threads. why and how
2013-05-15 threads. why and how
CocoaHeads Tricity
 
2013-03-07 indie developer toolkit
2013-03-07 indie developer toolkit2013-03-07 indie developer toolkit
2013-03-07 indie developer toolkit
CocoaHeads Tricity
 
2013-02-05 UX design for mobile apps
2013-02-05 UX design for mobile apps2013-02-05 UX design for mobile apps
2013-02-05 UX design for mobile apps
CocoaHeads Tricity
 
2013-01-10 iOS testing
2013-01-10 iOS testing2013-01-10 iOS testing
2013-01-10 iOS testing
CocoaHeads Tricity
 
2013-04-16 iOS development speed up
2013-04-16 iOS development speed up2013-04-16 iOS development speed up
2013-04-16 iOS development speed up
CocoaHeads Tricity
 

More from CocoaHeads Tricity (8)

[CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps
[CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps[CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps
[CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps
 
[CocoaHeads Tricity] Michał Zygar - Consuming API
[CocoaHeads Tricity] Michał Zygar - Consuming API[CocoaHeads Tricity] Michał Zygar - Consuming API
[CocoaHeads Tricity] Michał Zygar - Consuming API
 
[CocoaHeads Tricity] Maciej Burda - Working as an iOS developer Interview Cas...
[CocoaHeads Tricity] Maciej Burda - Working as an iOS developer Interview Cas...[CocoaHeads Tricity] Maciej Burda - Working as an iOS developer Interview Cas...
[CocoaHeads Tricity] Maciej Burda - Working as an iOS developer Interview Cas...
 
2013-05-15 threads. why and how
2013-05-15 threads. why and how2013-05-15 threads. why and how
2013-05-15 threads. why and how
 
2013-03-07 indie developer toolkit
2013-03-07 indie developer toolkit2013-03-07 indie developer toolkit
2013-03-07 indie developer toolkit
 
2013-02-05 UX design for mobile apps
2013-02-05 UX design for mobile apps2013-02-05 UX design for mobile apps
2013-02-05 UX design for mobile apps
 
2013-01-10 iOS testing
2013-01-10 iOS testing2013-01-10 iOS testing
2013-01-10 iOS testing
 
2013-04-16 iOS development speed up
2013-04-16 iOS development speed up2013-04-16 iOS development speed up
2013-04-16 iOS development speed up
 

Recently uploaded

LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
Sven Peters
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
Gerardo Pardo-Castellote
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
Peter Muessig
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Julian Hyde
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
Green Software Development
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
Remote DBA Services
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
Quickdice ERP
 

Recently uploaded (20)

LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
 

[CocoaHeads Tricity] Andrzej Dąbrowski - Dependency injection and testable architecture in Swift apps