SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
DEVELOPMENT TOOLS
FOR A HEALTHIER WORKPLACE
Dominik Kapusta
DEVELOPMENT TOOLS AT BASE
WHAT
‣ How we worked on improving our build performance
‣ How we automated monitoring high quality standards
‣ How we optimized non-programming tasks

to minimize waiting time
BASE CRMTHE ALL-IN-ONE SALES PLATFORM
DEVELOPMENT TOOLS AT BASE
WE DID
128RELEASES IN 5 YEARS
DEVELOPMENT TOOLS AT BASE
BASE 3.5.2
BUILD 2259
‣ more than 2 releases per month on average
‣ lengthy projects usually
‣ Base 3.0 took 10 months to develop for 6-9 people
THE PRICE
DEVELOPMENT TOOLS AT BASE
‣ too much work on new releases
‣ too little maintenance effort
‣ it’s not always bad! …but there are limits
DEVELOPMENT TOOLS AT BASE
WARNINGS
‣ 400 warnings is impractical
‣ you might miss new warnings
‣ Xcode seems to work slower
BUILD TIME OPTIMIZATION
DEVELOPMENT TOOLS AT BASE
DEVELOPMENT TOOLS AT BASE
MEASURING BUILD TIME
‣ display it in Xcode
$ defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
DEVELOPMENT TOOLS AT BASE
IMPROVING BUILD TIME
‣ unused code?
‣ unused dependencies?
‣ package manager
‣ Swift compile time
‣ compiler optimizations
‣ modularization
DEVELOPMENT TOOLS AT BASE
IMPROVING BUILD TIME
‣ package manager
➡ CocoaPods adds dependencies’ source (where available)
to your project.
➡ Carthage builds dependencies once and lets you link
your project with compiled frameworks
➡ They don’t know about each other
➡ A general rule: you don’t want >1 dependency manager
It takes 20s to compile Pods in Base
‣ Swift compile time
DEVELOPMENT TOOLS AT BASE
IMPROVING BUILD TIME
-Xfrontend -debug-time-function-bodies
-Xfrontend -warn-long-function-bodies=150
milliseconds
‣ Swift compile time
DEVELOPMENT TOOLS AT BASE
IMPROVING BUILD TIME
-Xfrontend -debug-time-function-bodies
‣ Swift compile time
➡ BuildTimeAnalyzer https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode
DEVELOPMENT TOOLS AT BASE
IMPROVING BUILD TIME
‣ Swift compile time
DEVELOPMENT TOOLS AT BASE
IMPROVING BUILD TIME
-Xfrontend -warn-long-function-bodies=150
milliseconds
‣ Compiler optimizations
➡ Whole Module Optimization https://swift.org/blog/whole-module-optimizations/
➡ smaller binaries
➡ faster compilation
DEVELOPMENT TOOLS AT BASE
IMPROVING BUILD TIME
Source: swift.org
‣ Enabling WMO for debug builds
➡ remember to disable other unrelated optimizations
DEVELOPMENT TOOLS AT BASE
IMPROVING BUILD TIME
!!!
‣ WMO for debug builds — example build time:
➡ No optimization: 184s
➡ Single-File Optimization: 190s
➡ Whole Module Optimization: 123s
DEVELOPMENT TOOLS AT BASE
IMPROVING BUILD TIME
‣ Modularization
➡ Swift module — a set of files that form an independent binary
➡ clearly defined responsibilities
➡ better control of API visibility
➡ reusability
➡ easier to open-source
➡ incremental build time improvement
DEVELOPMENT TOOLS AT BASE
IMPROVING BUILD TIME
‣ Modularization
➡ example approach:
✓ common UI extensions +
simple, reusable UI classes
(cells, custom controls)
✓ general-purpose helper
classes and extensions
DEVELOPMENT TOOLS AT BASE
IMPROVING BUILD TIME
DEVELOPMENT TOOLS AT BASE
IMPROVING BUILD TIME
‣ After
‣ Before
AUTOMATION
DEVELOPMENT TOOLS AT BASE
‣ — automating tasks
‣ — continuous integration
‣ — collecting data
‣ — displaying data
DEVELOPMENT TOOLS AT BASE
SETUP
‣ Common tasks
➡ HockeyApp beta builds
➡ AppStore builds
➡ automated unit testing on Jenkins
‣ Uncommon tasks
➡ tracking build time
➡ tracking warning count
➡ tracking code coverage
➡ more
DEVELOPMENT TOOLS AT BASE
FASTLANE
‣ Update submodules + install pods
‣ Clean project, build and run tests using scan
DEVELOPMENT TOOLS AT BASE
FASTLANE - AUTOMATED UNIT TESTS ON CI, SIMPLE FLOW
‣ Update submodules + install pods
‣ Clean project using xcodebuild
‣ build_duration = Time.now
‣ Build for testing using xcodebuild
‣ build_duration = Time.now - build_duration
‣ Extract warning count from the log file:
Dir.chdir("..") do

build_output_path = File.expand_path("xcodebuild.log", buildlog_path)

warning_count = File.foreach(build_output_path).grep(/: warning:/).uniq.count

end
‣ Get build number and version from Info.plist
DEVELOPMENT TOOLS AT BASE
FASTLANE - AUTOMATED UNIT TESTS ON CI
‣ Submit data to InfluxDB
influx(

tags: { 

branch: git_branch,

build_number: current_build_number, 

version: current_version_name,

scheme: scheme_name

},

values: { 

build_duration: build_duration, 

warning_count: warning_count 

}

)
‣ Run tests :) using scan
‣ Generate code coverage report using slather
DEVELOPMENT TOOLS AT BASE
FASTLANE - AUTOMATED UNIT TESTS ON CI, CONTINUED
DEVELOPMENT TOOLS AT BASE
GRAFANA
DEVELOPMENT TOOLS AT BASE
GRAFANA
alerting
DEVELOPMENT TOOLS AT BASE
GRAFANA
‣ Update submodules + install pods
‣ Update AppStore certificate using sigh
‣ Fetch the next available build number from HockeyApp
‣ Clean project, build and archive using gym
‣ Verify and upload archive to AppStore using deliver
‣ Create and push a release commit + tag
‣ Upload debug symbols to HockeyApp
‣ Upload Xcode archive to Dropbox
DEVELOPMENT TOOLS AT BASE
FASTLANE - APPSTORE BUILD
DEVELOPMENT TOOLS AT BASE
FASTLANE - APPSTORE BUILD
DEVELOPMENT TOOLS AT BASE
FASTLANE - WEIRD STUFF
DEVELOPMENT TOOLS AT BASE
FASTLANE - WEIRD STUFF
DEVELOPMENT TOOLS AT BASE
FASTLANE - APPSTORE BUILD
DEVELOPMENT TOOLS AT BASE
FASTLANE - APPSTORE BUILD
DEVELOPMENT TOOLS AT BASE
THE BUILD BUTTON
https://kapusta.cc/2018/01/16/build-button/
dominik@kapusta.cc
http://kapusta.cc
@ayoy

Mais conteúdo relacionado

Mais procurados

Dockerized apps on Kubernetes
Dockerized apps on KubernetesDockerized apps on Kubernetes
Dockerized apps on KubernetesŁukasz Barulski
 
Ultimate Survival - React-Native edition
Ultimate Survival - React-Native editionUltimate Survival - React-Native edition
Ultimate Survival - React-Native editionRichard Radics
 
Automating load testing with CI integration slideshare
Automating load testing with CI integration slideshareAutomating load testing with CI integration slideshare
Automating load testing with CI integration slideshareJohn Emmitt
 
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshotsEclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshotssimonscholz
 
Alexey Kupriyanenko "Release Early, Often, Stable"
Alexey Kupriyanenko "Release Early, Often, Stable"Alexey Kupriyanenko "Release Early, Often, Stable"
Alexey Kupriyanenko "Release Early, Often, Stable"Fwdays
 
Serverless Preview Environments @ Boston DevOps
Serverless Preview Environments @ Boston DevOpsServerless Preview Environments @ Boston DevOps
Serverless Preview Environments @ Boston DevOpsJoseph Lust
 
Load impact insights webinar
Load impact insights webinarLoad impact insights webinar
Load impact insights webinarJohn Emmitt
 
Golang for PHP Developers: Dependency management with Glide
Golang for PHP Developers: Dependency management with GlideGolang for PHP Developers: Dependency management with Glide
Golang for PHP Developers: Dependency management with GlideRichard Tuin
 
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...chbornet
 
Cloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesCloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesLars Rosenquist
 
Spring Boot & Spring Cloud on k8s and PCF
Spring Boot & Spring Cloud on k8s and PCFSpring Boot & Spring Cloud on k8s and PCF
Spring Boot & Spring Cloud on k8s and PCFLars Rosenquist
 
Devops Porto - CI/CD at Gitlab
Devops Porto - CI/CD at GitlabDevops Porto - CI/CD at Gitlab
Devops Porto - CI/CD at GitlabFilipa Lacerda
 
Jenkins X - automated CI/CD solution for cloud native applications on Kubernetes
Jenkins X - automated CI/CD solution for cloud native applications on KubernetesJenkins X - automated CI/CD solution for cloud native applications on Kubernetes
Jenkins X - automated CI/CD solution for cloud native applications on KubernetesTed Won
 
RedMart Migrating from EC2 to VPC with Chef
RedMart Migrating from EC2 to VPC with ChefRedMart Migrating from EC2 to VPC with Chef
RedMart Migrating from EC2 to VPC with ChefRitesh Angural
 
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...GITS Indonesia
 
Intro to Github Actions @likecoin
Intro to Github Actions @likecoinIntro to Github Actions @likecoin
Intro to Github Actions @likecoinWilliam Chong
 
Introduction of cloud native CI/CD on kubernetes
Introduction of cloud native CI/CD on kubernetesIntroduction of cloud native CI/CD on kubernetes
Introduction of cloud native CI/CD on kubernetesKyohei Mizumoto
 
Lightning branches at RedMart (Js conf Asia 2014 Talk)
Lightning branches at RedMart (Js conf Asia 2014  Talk)Lightning branches at RedMart (Js conf Asia 2014  Talk)
Lightning branches at RedMart (Js conf Asia 2014 Talk)Ritesh Angural
 

Mais procurados (20)

Dockerized apps on Kubernetes
Dockerized apps on KubernetesDockerized apps on Kubernetes
Dockerized apps on Kubernetes
 
Ultimate Survival - React-Native edition
Ultimate Survival - React-Native editionUltimate Survival - React-Native edition
Ultimate Survival - React-Native edition
 
Automating load testing with CI integration slideshare
Automating load testing with CI integration slideshareAutomating load testing with CI integration slideshare
Automating load testing with CI integration slideshare
 
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshotsEclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
 
Alexey Kupriyanenko "Release Early, Often, Stable"
Alexey Kupriyanenko "Release Early, Often, Stable"Alexey Kupriyanenko "Release Early, Often, Stable"
Alexey Kupriyanenko "Release Early, Often, Stable"
 
Serverless Preview Environments @ Boston DevOps
Serverless Preview Environments @ Boston DevOpsServerless Preview Environments @ Boston DevOps
Serverless Preview Environments @ Boston DevOps
 
Load impact insights webinar
Load impact insights webinarLoad impact insights webinar
Load impact insights webinar
 
Golang for PHP Developers: Dependency management with Glide
Golang for PHP Developers: Dependency management with GlideGolang for PHP Developers: Dependency management with Glide
Golang for PHP Developers: Dependency management with Glide
 
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
 
Cloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesCloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud Pipelines
 
Spring Boot & Spring Cloud on k8s and PCF
Spring Boot & Spring Cloud on k8s and PCFSpring Boot & Spring Cloud on k8s and PCF
Spring Boot & Spring Cloud on k8s and PCF
 
Devops Porto - CI/CD at Gitlab
Devops Porto - CI/CD at GitlabDevops Porto - CI/CD at Gitlab
Devops Porto - CI/CD at Gitlab
 
Jenkins X - automated CI/CD solution for cloud native applications on Kubernetes
Jenkins X - automated CI/CD solution for cloud native applications on KubernetesJenkins X - automated CI/CD solution for cloud native applications on Kubernetes
Jenkins X - automated CI/CD solution for cloud native applications on Kubernetes
 
RedMart Migrating from EC2 to VPC with Chef
RedMart Migrating from EC2 to VPC with ChefRedMart Migrating from EC2 to VPC with Chef
RedMart Migrating from EC2 to VPC with Chef
 
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...
 
Intro to Github Actions @likecoin
Intro to Github Actions @likecoinIntro to Github Actions @likecoin
Intro to Github Actions @likecoin
 
Introduction of cloud native CI/CD on kubernetes
Introduction of cloud native CI/CD on kubernetesIntroduction of cloud native CI/CD on kubernetes
Introduction of cloud native CI/CD on kubernetes
 
Lightning branches at RedMart (Js conf Asia 2014 Talk)
Lightning branches at RedMart (Js conf Asia 2014  Talk)Lightning branches at RedMart (Js conf Asia 2014  Talk)
Lightning branches at RedMart (Js conf Asia 2014 Talk)
 
Pentagon
PentagonPentagon
Pentagon
 
Quick workflow of a nodejs api
Quick workflow of a nodejs apiQuick workflow of a nodejs api
Quick workflow of a nodejs api
 

Semelhante a Development tools at Base

Avoid the Vendor Lock-in Trap (with App Deployment)
Avoid the Vendor Lock-in Trap (with App Deployment)Avoid the Vendor Lock-in Trap (with App Deployment)
Avoid the Vendor Lock-in Trap (with App Deployment)Peter Bittner
 
Webinar - Unbox GitLab CI/CD
Webinar - Unbox GitLab CI/CD Webinar - Unbox GitLab CI/CD
Webinar - Unbox GitLab CI/CD Annie Huang
 
DevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChungDevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChungKAI CHU CHUNG
 
High Productivity Web Development Workflow
High Productivity Web Development WorkflowHigh Productivity Web Development Workflow
High Productivity Web Development WorkflowVũ Nguyễn
 
High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014Oliver N
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a proGitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a prosparkfabrik
 
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...VictorSzoltysek
 
Gitlab ci, cncf.sk
Gitlab ci, cncf.skGitlab ci, cncf.sk
Gitlab ci, cncf.skJuraj Hantak
 
Life of a Chromium Developer
Life of a Chromium DeveloperLife of a Chromium Developer
Life of a Chromium Developermpaproductions
 
How to set up an ASP.NET 5 Continuous Delivery Pipeline using IBM Bluemix Dev...
How to set up an ASP.NET 5 Continuous Delivery Pipeline using IBM Bluemix Dev...How to set up an ASP.NET 5 Continuous Delivery Pipeline using IBM Bluemix Dev...
How to set up an ASP.NET 5 Continuous Delivery Pipeline using IBM Bluemix Dev...Richard Johansson
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandTroublemaker Khunpech
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 
Advanced Code Flow, Notes From the Field
Advanced Code Flow, Notes From the FieldAdvanced Code Flow, Notes From the Field
Advanced Code Flow, Notes From the FieldAriel Moskovich
 
Setting up Notifications, Alerts & Webhooks with Flux v2 by Alison Dowdney
Setting up Notifications, Alerts & Webhooks with Flux v2 by Alison DowdneySetting up Notifications, Alerts & Webhooks with Flux v2 by Alison Dowdney
Setting up Notifications, Alerts & Webhooks with Flux v2 by Alison DowdneyWeaveworks
 
Comment améliorer le quotidien des Développeurs PHP ?
Comment améliorer le quotidien des Développeurs PHP ?Comment améliorer le quotidien des Développeurs PHP ?
Comment améliorer le quotidien des Développeurs PHP ?AFUP_Limoges
 
Continuous Integration using Cruise Control
Continuous Integration using Cruise ControlContinuous Integration using Cruise Control
Continuous Integration using Cruise Controlelliando dias
 
2013-03-07 indie developer toolkit
2013-03-07 indie developer toolkit2013-03-07 indie developer toolkit
2013-03-07 indie developer toolkitCocoaHeads Tricity
 
Docker dev, test & production (afas)
Docker  dev, test & production (afas)Docker  dev, test & production (afas)
Docker dev, test & production (afas)Wouter Lagerweij
 
iOS Indie Developer Toolkit - CocoaHeads 3city
iOS Indie Developer Toolkit - CocoaHeads 3cityiOS Indie Developer Toolkit - CocoaHeads 3city
iOS Indie Developer Toolkit - CocoaHeads 3cityMichał Zygar
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous deliveryEatDog
 

Semelhante a Development tools at Base (20)

Avoid the Vendor Lock-in Trap (with App Deployment)
Avoid the Vendor Lock-in Trap (with App Deployment)Avoid the Vendor Lock-in Trap (with App Deployment)
Avoid the Vendor Lock-in Trap (with App Deployment)
 
Webinar - Unbox GitLab CI/CD
Webinar - Unbox GitLab CI/CD Webinar - Unbox GitLab CI/CD
Webinar - Unbox GitLab CI/CD
 
DevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChungDevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChung
 
High Productivity Web Development Workflow
High Productivity Web Development WorkflowHigh Productivity Web Development Workflow
High Productivity Web Development Workflow
 
High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a proGitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a pro
 
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
 
Gitlab ci, cncf.sk
Gitlab ci, cncf.skGitlab ci, cncf.sk
Gitlab ci, cncf.sk
 
Life of a Chromium Developer
Life of a Chromium DeveloperLife of a Chromium Developer
Life of a Chromium Developer
 
How to set up an ASP.NET 5 Continuous Delivery Pipeline using IBM Bluemix Dev...
How to set up an ASP.NET 5 Continuous Delivery Pipeline using IBM Bluemix Dev...How to set up an ASP.NET 5 Continuous Delivery Pipeline using IBM Bluemix Dev...
How to set up an ASP.NET 5 Continuous Delivery Pipeline using IBM Bluemix Dev...
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
Advanced Code Flow, Notes From the Field
Advanced Code Flow, Notes From the FieldAdvanced Code Flow, Notes From the Field
Advanced Code Flow, Notes From the Field
 
Setting up Notifications, Alerts & Webhooks with Flux v2 by Alison Dowdney
Setting up Notifications, Alerts & Webhooks with Flux v2 by Alison DowdneySetting up Notifications, Alerts & Webhooks with Flux v2 by Alison Dowdney
Setting up Notifications, Alerts & Webhooks with Flux v2 by Alison Dowdney
 
Comment améliorer le quotidien des Développeurs PHP ?
Comment améliorer le quotidien des Développeurs PHP ?Comment améliorer le quotidien des Développeurs PHP ?
Comment améliorer le quotidien des Développeurs PHP ?
 
Continuous Integration using Cruise Control
Continuous Integration using Cruise ControlContinuous Integration using Cruise Control
Continuous Integration using Cruise Control
 
2013-03-07 indie developer toolkit
2013-03-07 indie developer toolkit2013-03-07 indie developer toolkit
2013-03-07 indie developer toolkit
 
Docker dev, test & production (afas)
Docker  dev, test & production (afas)Docker  dev, test & production (afas)
Docker dev, test & production (afas)
 
iOS Indie Developer Toolkit - CocoaHeads 3city
iOS Indie Developer Toolkit - CocoaHeads 3cityiOS Indie Developer Toolkit - CocoaHeads 3city
iOS Indie Developer Toolkit - CocoaHeads 3city
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous delivery
 

Último

Thermal Engineering Unit - I & II . ppt
Thermal Engineering  Unit - I & II . pptThermal Engineering  Unit - I & II . ppt
Thermal Engineering Unit - I & II . pptDineshKumar4165
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxfenichawla
 
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Bookingroncy bisnoi
 
Unit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdfUnit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdfRagavanV2
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...ranjana rawat
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...ranjana rawat
 
Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)simmis5
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations120cr0395
 
Thermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VThermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VDineshKumar4165
 
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...roncy bisnoi
 
KubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlyKubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlysanyuktamishra911
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxAsutosh Ranjan
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSISrknatarajan
 
Intze Overhead Water Tank Design by Working Stress - IS Method.pdf
Intze Overhead Water Tank  Design by Working Stress - IS Method.pdfIntze Overhead Water Tank  Design by Working Stress - IS Method.pdf
Intze Overhead Water Tank Design by Working Stress - IS Method.pdfSuman Jyoti
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Call Girls in Nagpur High Profile
 

Último (20)

Thermal Engineering Unit - I & II . ppt
Thermal Engineering  Unit - I & II . pptThermal Engineering  Unit - I & II . ppt
Thermal Engineering Unit - I & II . ppt
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
 
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
 
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
 
Unit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdfUnit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdf
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
 
Roadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and RoutesRoadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and Routes
 
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations
 
Thermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VThermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - V
 
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
 
KubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlyKubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghly
 
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptx
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSIS
 
Intze Overhead Water Tank Design by Working Stress - IS Method.pdf
Intze Overhead Water Tank  Design by Working Stress - IS Method.pdfIntze Overhead Water Tank  Design by Working Stress - IS Method.pdf
Intze Overhead Water Tank Design by Working Stress - IS Method.pdf
 
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
 

Development tools at Base

  • 1. DEVELOPMENT TOOLS FOR A HEALTHIER WORKPLACE Dominik Kapusta
  • 2. DEVELOPMENT TOOLS AT BASE WHAT ‣ How we worked on improving our build performance ‣ How we automated monitoring high quality standards ‣ How we optimized non-programming tasks
 to minimize waiting time
  • 3. BASE CRMTHE ALL-IN-ONE SALES PLATFORM
  • 4. DEVELOPMENT TOOLS AT BASE WE DID 128RELEASES IN 5 YEARS
  • 5. DEVELOPMENT TOOLS AT BASE BASE 3.5.2 BUILD 2259 ‣ more than 2 releases per month on average ‣ lengthy projects usually ‣ Base 3.0 took 10 months to develop for 6-9 people
  • 7. DEVELOPMENT TOOLS AT BASE ‣ too much work on new releases ‣ too little maintenance effort ‣ it’s not always bad! …but there are limits
  • 8. DEVELOPMENT TOOLS AT BASE WARNINGS ‣ 400 warnings is impractical ‣ you might miss new warnings ‣ Xcode seems to work slower
  • 10. DEVELOPMENT TOOLS AT BASE MEASURING BUILD TIME ‣ display it in Xcode $ defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
  • 11. DEVELOPMENT TOOLS AT BASE IMPROVING BUILD TIME ‣ unused code? ‣ unused dependencies? ‣ package manager ‣ Swift compile time ‣ compiler optimizations ‣ modularization
  • 12. DEVELOPMENT TOOLS AT BASE IMPROVING BUILD TIME ‣ package manager ➡ CocoaPods adds dependencies’ source (where available) to your project. ➡ Carthage builds dependencies once and lets you link your project with compiled frameworks ➡ They don’t know about each other ➡ A general rule: you don’t want >1 dependency manager It takes 20s to compile Pods in Base
  • 13. ‣ Swift compile time DEVELOPMENT TOOLS AT BASE IMPROVING BUILD TIME -Xfrontend -debug-time-function-bodies -Xfrontend -warn-long-function-bodies=150 milliseconds
  • 14. ‣ Swift compile time DEVELOPMENT TOOLS AT BASE IMPROVING BUILD TIME -Xfrontend -debug-time-function-bodies
  • 15. ‣ Swift compile time ➡ BuildTimeAnalyzer https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode DEVELOPMENT TOOLS AT BASE IMPROVING BUILD TIME
  • 16. ‣ Swift compile time DEVELOPMENT TOOLS AT BASE IMPROVING BUILD TIME -Xfrontend -warn-long-function-bodies=150 milliseconds
  • 17. ‣ Compiler optimizations ➡ Whole Module Optimization https://swift.org/blog/whole-module-optimizations/ ➡ smaller binaries ➡ faster compilation DEVELOPMENT TOOLS AT BASE IMPROVING BUILD TIME Source: swift.org
  • 18. ‣ Enabling WMO for debug builds ➡ remember to disable other unrelated optimizations DEVELOPMENT TOOLS AT BASE IMPROVING BUILD TIME !!!
  • 19. ‣ WMO for debug builds — example build time: ➡ No optimization: 184s ➡ Single-File Optimization: 190s ➡ Whole Module Optimization: 123s DEVELOPMENT TOOLS AT BASE IMPROVING BUILD TIME
  • 20. ‣ Modularization ➡ Swift module — a set of files that form an independent binary ➡ clearly defined responsibilities ➡ better control of API visibility ➡ reusability ➡ easier to open-source ➡ incremental build time improvement DEVELOPMENT TOOLS AT BASE IMPROVING BUILD TIME
  • 21. ‣ Modularization ➡ example approach: ✓ common UI extensions + simple, reusable UI classes (cells, custom controls) ✓ general-purpose helper classes and extensions DEVELOPMENT TOOLS AT BASE IMPROVING BUILD TIME
  • 22. DEVELOPMENT TOOLS AT BASE IMPROVING BUILD TIME ‣ After ‣ Before
  • 24. ‣ — automating tasks ‣ — continuous integration ‣ — collecting data ‣ — displaying data DEVELOPMENT TOOLS AT BASE SETUP
  • 25. ‣ Common tasks ➡ HockeyApp beta builds ➡ AppStore builds ➡ automated unit testing on Jenkins ‣ Uncommon tasks ➡ tracking build time ➡ tracking warning count ➡ tracking code coverage ➡ more DEVELOPMENT TOOLS AT BASE FASTLANE
  • 26. ‣ Update submodules + install pods ‣ Clean project, build and run tests using scan DEVELOPMENT TOOLS AT BASE FASTLANE - AUTOMATED UNIT TESTS ON CI, SIMPLE FLOW
  • 27. ‣ Update submodules + install pods ‣ Clean project using xcodebuild ‣ build_duration = Time.now ‣ Build for testing using xcodebuild ‣ build_duration = Time.now - build_duration ‣ Extract warning count from the log file: Dir.chdir("..") do
 build_output_path = File.expand_path("xcodebuild.log", buildlog_path)
 warning_count = File.foreach(build_output_path).grep(/: warning:/).uniq.count
 end ‣ Get build number and version from Info.plist DEVELOPMENT TOOLS AT BASE FASTLANE - AUTOMATED UNIT TESTS ON CI
  • 28. ‣ Submit data to InfluxDB influx(
 tags: { 
 branch: git_branch,
 build_number: current_build_number, 
 version: current_version_name,
 scheme: scheme_name
 },
 values: { 
 build_duration: build_duration, 
 warning_count: warning_count 
 }
 ) ‣ Run tests :) using scan ‣ Generate code coverage report using slather DEVELOPMENT TOOLS AT BASE FASTLANE - AUTOMATED UNIT TESTS ON CI, CONTINUED
  • 29. DEVELOPMENT TOOLS AT BASE GRAFANA
  • 30. DEVELOPMENT TOOLS AT BASE GRAFANA alerting
  • 31. DEVELOPMENT TOOLS AT BASE GRAFANA
  • 32.
  • 33. ‣ Update submodules + install pods ‣ Update AppStore certificate using sigh ‣ Fetch the next available build number from HockeyApp ‣ Clean project, build and archive using gym ‣ Verify and upload archive to AppStore using deliver ‣ Create and push a release commit + tag ‣ Upload debug symbols to HockeyApp ‣ Upload Xcode archive to Dropbox DEVELOPMENT TOOLS AT BASE FASTLANE - APPSTORE BUILD
  • 34. DEVELOPMENT TOOLS AT BASE FASTLANE - APPSTORE BUILD
  • 35.
  • 36. DEVELOPMENT TOOLS AT BASE FASTLANE - WEIRD STUFF
  • 37. DEVELOPMENT TOOLS AT BASE FASTLANE - WEIRD STUFF
  • 38.
  • 39. DEVELOPMENT TOOLS AT BASE FASTLANE - APPSTORE BUILD
  • 40. DEVELOPMENT TOOLS AT BASE FASTLANE - APPSTORE BUILD
  • 41. DEVELOPMENT TOOLS AT BASE THE BUILD BUTTON https://kapusta.cc/2018/01/16/build-button/