SlideShare a Scribd company logo
1 of 25
Faster iOS builds on Bitrise
Hendrik Haandrikman
VP of Growth
rik@bitrise.io
Hhaandr
Plus some secret roadmap stuff.
Shhhh...
Viktor Benei
CTO
viktor.benei@bitrise.io
Tokyo, 2019 March
THANK YOU
Enabling mobile app
developers to do their
best work
What do we do?
Bitrise automates
mobile app integration,
testing and deployment
to make developers
more consistent, faster
and freeing up their
time and talents for the
work that matters.
Bitrise Founding
Founded in 2014 by app
development agency
alumni (Bitfall), looking
to improve their own
process. Y Combinator
backed with $ 3.5M in
funding.
By the numbers
100K developers
15K+ unique apps
1M+ builds / month
50% of mobile unicorns
Headquarters
Headquartered in
Budapest, Hungary,
office in London, remote
in USA, France & more.
日本での採用開始!
Budapest, HU Remote (JP?)London, UK
Outlyer
Acquisition
The team and
technology used for
monitoring at Netflix,
BBC, Salesforce
Repurposed to
become a Bitrise-
integrated APM
(Application
Performance
Monitoring) tool for
mobile developers
with millions of
metrics
Make iOS Builds Faster
Faster iOS Builds on Bitrise.io
Viktor Benei
viktor.benei@bitrise.io
Tokyo, 2019 March
Quickest -> More complex
Starting from easiest, which takes the least amount of
time to configure, progressing towards more advanced
and complex techniques which might require project or
more significant configuration changes.
Elite machines
No change required anywhere in the config or in your
project.
Usually 20-50% faster (depends on the project, you get 2x
the CPU and RAM but not network or I/O).
Linux stack
Use Linux stack when possible - newer generation CPUs
compared to the aging MacPROs and more RAM.
SPM based projects, e.g. Swift server apps or CLIs.
Cache steps
https://devcenter.bitrise.io/caching/about-caching/
Cache:Pull and Cache:Push
Use Bitrise steps, those have built in support. If you use
another tool instead, like fastlane, it works, but you'll have
to specify the dirs/files to cache.
Another example: CocoaPods & Carthage steps
(dependency management steps in general)
Keep the Cache small
If you set custom Cache paths make sure you only
include the files & dirs you need, to keep the cache size
small. Smaller cache is faster (download, uncompress,
compress, upload).
You can check the cache content on Settings tab, you
can download the caches from there too for inspection.
Parallel build
- https://devcenter.bitrise.io/builds/triggering-
builds/trigger-multiple-workflows/
- https://blog.bitrise.io/start-multiple-builds-with-the-
same-trigger
Needs 2+ concurrencies.
Today it uses Steps, lower level support is coming soon.
Parallel build
Few ideas:
- Do Xcode Test, Xcode Analyze and Swift Lint in parallel
- Split your Xcode Test into multiple Targets/Schemes
- Run Test and Archive for internal QA in parallel
Bitrise Device Testing feature
Use Bitrise built in (Firebase) Device Testing if you want
to run the test on multiple devices.
https://devcenter.bitrise.io/testing/device-testing-for-ios/
Carthage - GitHub Access Token
GitHub
Personal
Access
Token
COMPILER_INDEX_STORE_ENABLE
=NO
https://twitter.com/steipete/status/1100404024224804871
- xcode-test:
inputs:
- xcodebuild_test_options: COMPILER_INDEX_STORE_ENABLE=NO
Only helps Debug/non release builds.
Use latest Bitrise step versions
We add both reliability and performance optimisations.
E.g. latest Xcode Test step uses headless mode by
default, which can make the tests significantly faster.
When deploying multiple .ipa files (e.g. one for ad-hoc
and another one for app-store release) use only one
Xcode Archive & Export for iOS
(https://www.bitrise.io/integrations/steps/xcode-archive)
step and then the Export iOS and tvOS Xcode archive
step (https://www.bitrise.io/integrations/steps/export-
xcarchive) for additional .ipas.
Multiple IPAs in the same build
Git Clone: set fetch size to 1/10/20
If the history isn't enough, e.g. PR build, the step will
automatically fetch more. For commit based builds it can
save a lot of time.
Clone Config > Limit fetching to the specified number
of commits
- If most of your builds are PR builds with multiple commits in
it, set it to 10-20 (average commit length in your PRs).
- You can’t use this if you depend on the whole git history to
be available, e.g. for tagging, that’s why this isn’t the default.
Boot the iOS Simulator at the start of the build, so that it
will be booted & ready by the time you run your tests in it.
open
"/Applications/Xcode.app/Contents/Developer/Applications
/Simulator.app" "--args" "-CurrentDeviceUDID" "290D8EE7-
A4AB-4004-B07C-5EF784DE30E9"
https://gist.github.com/godrei/16ce30f2a42d6544e49f56cadff9ff7b
Our Xcode Test step has a related optimization: it starts to boot the
simulator before it'd compile & run the test in non-headless mode.
Pre-boot iOS Simulator
Remove unused/unnecessary steps.
E.g. use GitHub protected branch & enable Require branches to
be up to date before merging to not to allow push to master (and
make sure you enable Pull Request builds on Bitrise and require
the /pr status check on GitHub), then remove the Test steps from
the deploy workflow as builds will have to go through PR first. This
way the PR can only be merged if it already passed the tests*.
*Bitrise PR build tests the pre-merged code, merges the PR source into its target
during the build to test the code state after merge.
Remove unnecessary steps
Collection of tips
- https://devcenter.bitrise.io/tips-and-tricks/optimize-
your-build-times/
- Track function compilation time:
http://khanlou.com/2016/12/guarding-against-long-
compiles/
- https://github.com/fastred/Optimizing-Swift-Build-
Times
- https://medium.com/@bitrise/60-faster-builds-force-
xcode-to-use-caching-on-bitrise-af8979ca39a6
Thank you!
Twitter: @viktorbenei
I’ll share the slides on my Twitter.

More Related Content

What's hot

Testing on Mobile Devices with Location Services
Testing on Mobile Devices with Location ServicesTesting on Mobile Devices with Location Services
Testing on Mobile Devices with Location ServicesSauce Labs
 
Session State Caching with Spring
Session State Caching with SpringSession State Caching with Spring
Session State Caching with SpringVMware Tanzu
 
React native development with expo
React native development with expoReact native development with expo
React native development with expoSangSun Park
 
Bootiful Development with Spring Boot and React - RWX 2017
Bootiful Development with Spring Boot and React - RWX 2017Bootiful Development with Spring Boot and React - RWX 2017
Bootiful Development with Spring Boot and React - RWX 2017Matt Raible
 
Firebase - realtime backend for mobile app and IoT
Firebase - realtime backend for mobile app and IoTFirebase - realtime backend for mobile app and IoT
Firebase - realtime backend for mobile app and IoTAndri Yadi
 
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...Wim Selles
 
Microservices for the Masses with Spring Boot, JHipster, and JWT - J-Spring 2017
Microservices for the Masses with Spring Boot, JHipster, and JWT - J-Spring 2017Microservices for the Masses with Spring Boot, JHipster, and JWT - J-Spring 2017
Microservices for the Masses with Spring Boot, JHipster, and JWT - J-Spring 2017Matt Raible
 
jDays 2015 - Getting Familiar with Spring Boot
jDays 2015 - Getting Familiar with Spring BootjDays 2015 - Getting Familiar with Spring Boot
jDays 2015 - Getting Familiar with Spring BootMattias Severson
 
Microservices for the Masses with Spring Boot, JHipster, and JWT - Devoxx UK...
 Microservices for the Masses with Spring Boot, JHipster, and JWT - Devoxx UK... Microservices for the Masses with Spring Boot, JHipster, and JWT - Devoxx UK...
Microservices for the Masses with Spring Boot, JHipster, and JWT - Devoxx UK...Matt Raible
 
Bootiful Development with Spring Boot and React - SpringOne 2017
Bootiful Development with Spring Boot and React - SpringOne 2017Bootiful Development with Spring Boot and React - SpringOne 2017
Bootiful Development with Spring Boot and React - SpringOne 2017Matt Raible
 
Exploring the GitHub Service Universe
Exploring the GitHub Service UniverseExploring the GitHub Service Universe
Exploring the GitHub Service UniverseBjörn Kimminich
 
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...RianneEmbregts
 
Dockerising Appium : London Appium Meetup
Dockerising Appium : London Appium MeetupDockerising Appium : London Appium Meetup
Dockerising Appium : London Appium MeetupShashikant Jagtap
 
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019Sargis Sargsyan
 
K8s at Scale in the Enterprise: Self-Service Through the View of Personas
K8s at Scale in the Enterprise: Self-Service Through the View of PersonasK8s at Scale in the Enterprise: Self-Service Through the View of Personas
K8s at Scale in the Enterprise: Self-Service Through the View of PersonasVMware Tanzu
 
Automating Hybrid Applications with Appium
Automating Hybrid Applications with AppiumAutomating Hybrid Applications with Appium
Automating Hybrid Applications with AppiumSauce Labs
 
What's new in Spring Boot 2.0
What's new in Spring Boot 2.0What's new in Spring Boot 2.0
What's new in Spring Boot 2.0VMware Tanzu
 
Speedupiosdevelopment
SpeedupiosdevelopmentSpeedupiosdevelopment
Speedupiosdevelopmentslidepaddemo
 
Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020
Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020
Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020Matt Raible
 

What's hot (19)

Testing on Mobile Devices with Location Services
Testing on Mobile Devices with Location ServicesTesting on Mobile Devices with Location Services
Testing on Mobile Devices with Location Services
 
Session State Caching with Spring
Session State Caching with SpringSession State Caching with Spring
Session State Caching with Spring
 
React native development with expo
React native development with expoReact native development with expo
React native development with expo
 
Bootiful Development with Spring Boot and React - RWX 2017
Bootiful Development with Spring Boot and React - RWX 2017Bootiful Development with Spring Boot and React - RWX 2017
Bootiful Development with Spring Boot and React - RWX 2017
 
Firebase - realtime backend for mobile app and IoT
Firebase - realtime backend for mobile app and IoTFirebase - realtime backend for mobile app and IoT
Firebase - realtime backend for mobile app and IoT
 
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
 
Microservices for the Masses with Spring Boot, JHipster, and JWT - J-Spring 2017
Microservices for the Masses with Spring Boot, JHipster, and JWT - J-Spring 2017Microservices for the Masses with Spring Boot, JHipster, and JWT - J-Spring 2017
Microservices for the Masses with Spring Boot, JHipster, and JWT - J-Spring 2017
 
jDays 2015 - Getting Familiar with Spring Boot
jDays 2015 - Getting Familiar with Spring BootjDays 2015 - Getting Familiar with Spring Boot
jDays 2015 - Getting Familiar with Spring Boot
 
Microservices for the Masses with Spring Boot, JHipster, and JWT - Devoxx UK...
 Microservices for the Masses with Spring Boot, JHipster, and JWT - Devoxx UK... Microservices for the Masses with Spring Boot, JHipster, and JWT - Devoxx UK...
Microservices for the Masses with Spring Boot, JHipster, and JWT - Devoxx UK...
 
Bootiful Development with Spring Boot and React - SpringOne 2017
Bootiful Development with Spring Boot and React - SpringOne 2017Bootiful Development with Spring Boot and React - SpringOne 2017
Bootiful Development with Spring Boot and React - SpringOne 2017
 
Exploring the GitHub Service Universe
Exploring the GitHub Service UniverseExploring the GitHub Service Universe
Exploring the GitHub Service Universe
 
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
Building a Spring Boot 2 Application - Ask the Audience! (from Voxxed Days Vi...
 
Dockerising Appium : London Appium Meetup
Dockerising Appium : London Appium MeetupDockerising Appium : London Appium Meetup
Dockerising Appium : London Appium Meetup
 
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
 
K8s at Scale in the Enterprise: Self-Service Through the View of Personas
K8s at Scale in the Enterprise: Self-Service Through the View of PersonasK8s at Scale in the Enterprise: Self-Service Through the View of Personas
K8s at Scale in the Enterprise: Self-Service Through the View of Personas
 
Automating Hybrid Applications with Appium
Automating Hybrid Applications with AppiumAutomating Hybrid Applications with Appium
Automating Hybrid Applications with Appium
 
What's new in Spring Boot 2.0
What's new in Spring Boot 2.0What's new in Spring Boot 2.0
What's new in Spring Boot 2.0
 
Speedupiosdevelopment
SpeedupiosdevelopmentSpeedupiosdevelopment
Speedupiosdevelopment
 
Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020
Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020
Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020
 

Similar to Bitrise: How to make iOS builds faster - Tokyo 2019 March - Eureka meetup

Exercising and Scaling Up Mobile DevOps in the Enterprise
Exercising and Scaling Up Mobile DevOps in the EnterpriseExercising and Scaling Up Mobile DevOps in the Enterprise
Exercising and Scaling Up Mobile DevOps in the EnterpriseBitbar
 
Django simplified : by weever mbakaya
Django simplified : by weever mbakayaDjango simplified : by weever mbakaya
Django simplified : by weever mbakayaMbakaya Kwatukha
 
Automation in iOS development
Automation in iOS developmentAutomation in iOS development
Automation in iOS developmentCong Nguyen
 
Phonegap android angualr material design
Phonegap android angualr material designPhonegap android angualr material design
Phonegap android angualr material designSrinadh Kanugala
 
iOS CI/CD: Continuous Integration and Continuous Delivery Explained
iOS CI/CD: Continuous Integration and Continuous Delivery ExplainediOS CI/CD: Continuous Integration and Continuous Delivery Explained
iOS CI/CD: Continuous Integration and Continuous Delivery ExplainedSemaphore
 
Building a scalable app factory with Appcelerator Platform
Building a scalable app factory with Appcelerator PlatformBuilding a scalable app factory with Appcelerator Platform
Building a scalable app factory with Appcelerator PlatformAngus Fox
 
Building Better IoT Applications without Servers
Building Better IoT Applications without ServersBuilding Better IoT Applications without Servers
Building Better IoT Applications without ServersIan Massingham
 
Fastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS AppsFastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS AppsSarath C
 
IBM Bluemix Tech Meetup 18-02-2015
IBM Bluemix Tech Meetup 18-02-2015IBM Bluemix Tech Meetup 18-02-2015
IBM Bluemix Tech Meetup 18-02-2015gjuljo
 
MuleSoft Nashik Virtual Meetup#4 - Implementing CI/CD pipeline for deploying ...
MuleSoft Nashik Virtual Meetup#4 - Implementing CI/CD pipeline for deploying ...MuleSoft Nashik Virtual Meetup#4 - Implementing CI/CD pipeline for deploying ...
MuleSoft Nashik Virtual Meetup#4 - Implementing CI/CD pipeline for deploying ...Jitendra Bafna
 
Nike pop up habitat
Nike pop up   habitatNike pop up   habitat
Nike pop up habitatChef
 

Similar to Bitrise: How to make iOS builds faster - Tokyo 2019 March - Eureka meetup (20)

DevOps & DevEx
DevOps & DevExDevOps & DevEx
DevOps & DevEx
 
Sam segal resume
Sam segal resumeSam segal resume
Sam segal resume
 
Exercising and Scaling Up Mobile DevOps in the Enterprise
Exercising and Scaling Up Mobile DevOps in the EnterpriseExercising and Scaling Up Mobile DevOps in the Enterprise
Exercising and Scaling Up Mobile DevOps in the Enterprise
 
Django simplified : by weever mbakaya
Django simplified : by weever mbakayaDjango simplified : by weever mbakaya
Django simplified : by weever mbakaya
 
GitHub for partners
GitHub for partnersGitHub for partners
GitHub for partners
 
Automation in iOS development
Automation in iOS developmentAutomation in iOS development
Automation in iOS development
 
Phonegap android angualr material design
Phonegap android angualr material designPhonegap android angualr material design
Phonegap android angualr material design
 
Bluemix DevOps Services
Bluemix DevOps Services Bluemix DevOps Services
Bluemix DevOps Services
 
Mobile Apps CI
Mobile Apps CIMobile Apps CI
Mobile Apps CI
 
IBM MobileFirst Platform v7.0 Pot Intro v0.1
IBM MobileFirst Platform v7.0 Pot Intro v0.1IBM MobileFirst Platform v7.0 Pot Intro v0.1
IBM MobileFirst Platform v7.0 Pot Intro v0.1
 
IBM MobileFirst Platform v7.0 pot intro v0.1
IBM MobileFirst Platform v7.0 pot intro v0.1IBM MobileFirst Platform v7.0 pot intro v0.1
IBM MobileFirst Platform v7.0 pot intro v0.1
 
SamSegalResume
SamSegalResumeSamSegalResume
SamSegalResume
 
iOS CI/CD: Continuous Integration and Continuous Delivery Explained
iOS CI/CD: Continuous Integration and Continuous Delivery ExplainediOS CI/CD: Continuous Integration and Continuous Delivery Explained
iOS CI/CD: Continuous Integration and Continuous Delivery Explained
 
Building a scalable app factory with Appcelerator Platform
Building a scalable app factory with Appcelerator PlatformBuilding a scalable app factory with Appcelerator Platform
Building a scalable app factory with Appcelerator Platform
 
Building Better IoT Applications without Servers
Building Better IoT Applications without ServersBuilding Better IoT Applications without Servers
Building Better IoT Applications without Servers
 
Fastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS AppsFastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS Apps
 
IBM Bluemix Tech Meetup 18-02-2015
IBM Bluemix Tech Meetup 18-02-2015IBM Bluemix Tech Meetup 18-02-2015
IBM Bluemix Tech Meetup 18-02-2015
 
Nativescript with angular 2
Nativescript with angular 2Nativescript with angular 2
Nativescript with angular 2
 
MuleSoft Nashik Virtual Meetup#4 - Implementing CI/CD pipeline for deploying ...
MuleSoft Nashik Virtual Meetup#4 - Implementing CI/CD pipeline for deploying ...MuleSoft Nashik Virtual Meetup#4 - Implementing CI/CD pipeline for deploying ...
MuleSoft Nashik Virtual Meetup#4 - Implementing CI/CD pipeline for deploying ...
 
Nike pop up habitat
Nike pop up   habitatNike pop up   habitat
Nike pop up habitat
 

Recently uploaded

Auto Affiliate AI Earns First Commission in 3 Hours..pdf
Auto Affiliate  AI Earns First Commission in 3 Hours..pdfAuto Affiliate  AI Earns First Commission in 3 Hours..pdf
Auto Affiliate AI Earns First Commission in 3 Hours..pdfSelfMade bd
 
Evolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI EraEvolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI Eraconfluent
 
architecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdfarchitecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdfWSO2
 
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...Neo4j
 
GraphSummit Milan & Stockholm - Neo4j: The Art of the Possible with Graph
GraphSummit Milan & Stockholm - Neo4j: The Art of the Possible with GraphGraphSummit Milan & Stockholm - Neo4j: The Art of the Possible with Graph
GraphSummit Milan & Stockholm - Neo4j: The Art of the Possible with GraphNeo4j
 
Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?Maxim Salnikov
 
The Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdf
The Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdfThe Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdf
The Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdfkalichargn70th171
 
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024MulesoftMunichMeetup
 
GraphSummit Milan - Visione e roadmap del prodotto Neo4j
GraphSummit Milan - Visione e roadmap del prodotto Neo4jGraphSummit Milan - Visione e roadmap del prodotto Neo4j
GraphSummit Milan - Visione e roadmap del prodotto Neo4jNeo4j
 
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...naitiksharma1124
 
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...Lisi Hocke
 
^Clinic ^%[+27788225528*Abortion Pills For Sale In harare
^Clinic ^%[+27788225528*Abortion Pills For Sale In harare^Clinic ^%[+27788225528*Abortion Pills For Sale In harare
^Clinic ^%[+27788225528*Abortion Pills For Sale In hararekasambamuno
 
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypseTomasz Kowalczewski
 
Software Engineering - Introduction + Process Models + Requirements Engineering
Software Engineering - Introduction + Process Models + Requirements EngineeringSoftware Engineering - Introduction + Process Models + Requirements Engineering
Software Engineering - Introduction + Process Models + Requirements EngineeringPrakhyath Rai
 
Lessons Learned from Building a Serverless Notifications System.pdf
Lessons Learned from Building a Serverless Notifications System.pdfLessons Learned from Building a Serverless Notifications System.pdf
Lessons Learned from Building a Serverless Notifications System.pdfSrushith Repakula
 
OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCAOpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCAShane Coughlan
 
The mythical technical debt. (Brooke, please, forgive me)
The mythical technical debt. (Brooke, please, forgive me)The mythical technical debt. (Brooke, please, forgive me)
The mythical technical debt. (Brooke, please, forgive me)Roberto Bettazzoni
 
From Theory to Practice: Utilizing SpiraPlan's REST API
From Theory to Practice: Utilizing SpiraPlan's REST APIFrom Theory to Practice: Utilizing SpiraPlan's REST API
From Theory to Practice: Utilizing SpiraPlan's REST APIInflectra
 

Recently uploaded (20)

Auto Affiliate AI Earns First Commission in 3 Hours..pdf
Auto Affiliate  AI Earns First Commission in 3 Hours..pdfAuto Affiliate  AI Earns First Commission in 3 Hours..pdf
Auto Affiliate AI Earns First Commission in 3 Hours..pdf
 
Evolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI EraEvolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI Era
 
architecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdfarchitecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdf
 
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
 
GraphSummit Milan & Stockholm - Neo4j: The Art of the Possible with Graph
GraphSummit Milan & Stockholm - Neo4j: The Art of the Possible with GraphGraphSummit Milan & Stockholm - Neo4j: The Art of the Possible with Graph
GraphSummit Milan & Stockholm - Neo4j: The Art of the Possible with Graph
 
Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?
 
The Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdf
The Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdfThe Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdf
The Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdf
 
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
 
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
 
GraphSummit Milan - Visione e roadmap del prodotto Neo4j
GraphSummit Milan - Visione e roadmap del prodotto Neo4jGraphSummit Milan - Visione e roadmap del prodotto Neo4j
GraphSummit Milan - Visione e roadmap del prodotto Neo4j
 
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
 
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
 
^Clinic ^%[+27788225528*Abortion Pills For Sale In harare
^Clinic ^%[+27788225528*Abortion Pills For Sale In harare^Clinic ^%[+27788225528*Abortion Pills For Sale In harare
^Clinic ^%[+27788225528*Abortion Pills For Sale In harare
 
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
 
Software Engineering - Introduction + Process Models + Requirements Engineering
Software Engineering - Introduction + Process Models + Requirements EngineeringSoftware Engineering - Introduction + Process Models + Requirements Engineering
Software Engineering - Introduction + Process Models + Requirements Engineering
 
Lessons Learned from Building a Serverless Notifications System.pdf
Lessons Learned from Building a Serverless Notifications System.pdfLessons Learned from Building a Serverless Notifications System.pdf
Lessons Learned from Building a Serverless Notifications System.pdf
 
OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCAOpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
 
The mythical technical debt. (Brooke, please, forgive me)
The mythical technical debt. (Brooke, please, forgive me)The mythical technical debt. (Brooke, please, forgive me)
The mythical technical debt. (Brooke, please, forgive me)
 
Abortion Clinic In Polokwane ](+27832195400*)[ 🏥 Safe Abortion Pills in Polok...
Abortion Clinic In Polokwane ](+27832195400*)[ 🏥 Safe Abortion Pills in Polok...Abortion Clinic In Polokwane ](+27832195400*)[ 🏥 Safe Abortion Pills in Polok...
Abortion Clinic In Polokwane ](+27832195400*)[ 🏥 Safe Abortion Pills in Polok...
 
From Theory to Practice: Utilizing SpiraPlan's REST API
From Theory to Practice: Utilizing SpiraPlan's REST APIFrom Theory to Practice: Utilizing SpiraPlan's REST API
From Theory to Practice: Utilizing SpiraPlan's REST API
 

Bitrise: How to make iOS builds faster - Tokyo 2019 March - Eureka meetup

  • 1. Faster iOS builds on Bitrise Hendrik Haandrikman VP of Growth rik@bitrise.io Hhaandr Plus some secret roadmap stuff. Shhhh... Viktor Benei CTO viktor.benei@bitrise.io Tokyo, 2019 March
  • 3. Enabling mobile app developers to do their best work What do we do? Bitrise automates mobile app integration, testing and deployment to make developers more consistent, faster and freeing up their time and talents for the work that matters. Bitrise Founding Founded in 2014 by app development agency alumni (Bitfall), looking to improve their own process. Y Combinator backed with $ 3.5M in funding. By the numbers 100K developers 15K+ unique apps 1M+ builds / month 50% of mobile unicorns Headquarters Headquartered in Budapest, Hungary, office in London, remote in USA, France & more.
  • 5. Outlyer Acquisition The team and technology used for monitoring at Netflix, BBC, Salesforce Repurposed to become a Bitrise- integrated APM (Application Performance Monitoring) tool for mobile developers with millions of metrics
  • 6. Make iOS Builds Faster Faster iOS Builds on Bitrise.io Viktor Benei viktor.benei@bitrise.io Tokyo, 2019 March
  • 7. Quickest -> More complex Starting from easiest, which takes the least amount of time to configure, progressing towards more advanced and complex techniques which might require project or more significant configuration changes.
  • 8. Elite machines No change required anywhere in the config or in your project. Usually 20-50% faster (depends on the project, you get 2x the CPU and RAM but not network or I/O).
  • 9. Linux stack Use Linux stack when possible - newer generation CPUs compared to the aging MacPROs and more RAM. SPM based projects, e.g. Swift server apps or CLIs.
  • 10. Cache steps https://devcenter.bitrise.io/caching/about-caching/ Cache:Pull and Cache:Push Use Bitrise steps, those have built in support. If you use another tool instead, like fastlane, it works, but you'll have to specify the dirs/files to cache. Another example: CocoaPods & Carthage steps (dependency management steps in general)
  • 11. Keep the Cache small If you set custom Cache paths make sure you only include the files & dirs you need, to keep the cache size small. Smaller cache is faster (download, uncompress, compress, upload). You can check the cache content on Settings tab, you can download the caches from there too for inspection.
  • 12. Parallel build - https://devcenter.bitrise.io/builds/triggering- builds/trigger-multiple-workflows/ - https://blog.bitrise.io/start-multiple-builds-with-the- same-trigger Needs 2+ concurrencies. Today it uses Steps, lower level support is coming soon.
  • 13.
  • 14. Parallel build Few ideas: - Do Xcode Test, Xcode Analyze and Swift Lint in parallel - Split your Xcode Test into multiple Targets/Schemes - Run Test and Archive for internal QA in parallel
  • 15. Bitrise Device Testing feature Use Bitrise built in (Firebase) Device Testing if you want to run the test on multiple devices. https://devcenter.bitrise.io/testing/device-testing-for-ios/
  • 16. Carthage - GitHub Access Token GitHub Personal Access Token
  • 18. Use latest Bitrise step versions We add both reliability and performance optimisations. E.g. latest Xcode Test step uses headless mode by default, which can make the tests significantly faster.
  • 19. When deploying multiple .ipa files (e.g. one for ad-hoc and another one for app-store release) use only one Xcode Archive & Export for iOS (https://www.bitrise.io/integrations/steps/xcode-archive) step and then the Export iOS and tvOS Xcode archive step (https://www.bitrise.io/integrations/steps/export- xcarchive) for additional .ipas. Multiple IPAs in the same build
  • 20. Git Clone: set fetch size to 1/10/20 If the history isn't enough, e.g. PR build, the step will automatically fetch more. For commit based builds it can save a lot of time. Clone Config > Limit fetching to the specified number of commits - If most of your builds are PR builds with multiple commits in it, set it to 10-20 (average commit length in your PRs). - You can’t use this if you depend on the whole git history to be available, e.g. for tagging, that’s why this isn’t the default.
  • 21. Boot the iOS Simulator at the start of the build, so that it will be booted & ready by the time you run your tests in it. open "/Applications/Xcode.app/Contents/Developer/Applications /Simulator.app" "--args" "-CurrentDeviceUDID" "290D8EE7- A4AB-4004-B07C-5EF784DE30E9" https://gist.github.com/godrei/16ce30f2a42d6544e49f56cadff9ff7b Our Xcode Test step has a related optimization: it starts to boot the simulator before it'd compile & run the test in non-headless mode. Pre-boot iOS Simulator
  • 22. Remove unused/unnecessary steps. E.g. use GitHub protected branch & enable Require branches to be up to date before merging to not to allow push to master (and make sure you enable Pull Request builds on Bitrise and require the /pr status check on GitHub), then remove the Test steps from the deploy workflow as builds will have to go through PR first. This way the PR can only be merged if it already passed the tests*. *Bitrise PR build tests the pre-merged code, merges the PR source into its target during the build to test the code state after merge. Remove unnecessary steps
  • 23.
  • 24. Collection of tips - https://devcenter.bitrise.io/tips-and-tricks/optimize- your-build-times/ - Track function compilation time: http://khanlou.com/2016/12/guarding-against-long- compiles/ - https://github.com/fastred/Optimizing-Swift-Build- Times - https://medium.com/@bitrise/60-faster-builds-force- xcode-to-use-caching-on-bitrise-af8979ca39a6
  • 25. Thank you! Twitter: @viktorbenei I’ll share the slides on my Twitter.