- Testing
- Tooling
- CI/CD
Adore Me
- Android and iOS App testing with Appium and WireMock, 2019 (series of articles)
Airbnb
- Writing fast, deterministic and accurate Android Integration tests, 2017
- Building Mixed-Language iOS Project with Buck, 2017
- Our Swift Style Guide Is Now Open Source, 2019
- Better Android Testing, 2019 (series of articles)
- Which hardware are you using to run your CI, 2021
- Accelerating Mobile UI, 2021
- Testing strategy, 2021
- Airbnb’s Page Performance Score on iOS, 2021
- Airbnb’s Page Performance Score on Android, 2021
- Automated UI Infrastructure in Jetpack Compose using KSP, 2023
- Flexible Continuous Integration for iOS, 2023
Apple
- Testing
- Distribution
- Continuous integration and delivery
- UI Testing in Xcode, 2015
- Automating App Store Connect, 2018
- What's New in Testing, 2018
- Testing Tips & Tricks, 2018
- Testing in Xcode, 2019
- Expanding automation with the App Store Connect API, 2020
- Identify trends with the Power and Performance API, 2020
- Eliminate animation hitches with XCTest, 2020
- Write tests to fail, 2020
- XCTSkip your tests, 2020
- Handle interruptions and alerts in UI tests, 2020
- Get your test results faster, 2020
- Use Swift on AWS Lambda with Xcode, 2020
- Triage test failures with XCTIssue, 2020
- Diagnose Power and Performance regressions in your app, 2021
- Distribute apps in Xcode with cloud signing, 2021
- Embrace Expected Failures in XCTest, 2021
- Meet Xcode Cloud, 2021
- Customize your advanced Xcode Cloud workflows, 2021
- Diagnose unreliable code with test repetitions, 2021
- Author fast and reliable tests for Xcode Cloud, 2022
- Get the most out of Xcode Cloud, 2022
- Deep dive into Xcode Cloud for teams, 2022
Asana
ASOS
AutoScout24
Avito
- Open source: CI/CD and test infrastructure for Android, 2019
- Workaround for Android lint that doesn't use Gradle Worker API, 2020
- Removal of ui tests impact analysis functionality, 2021
- Which hardware are you using to run your CI, 2021
- Testing strategy, 2021
- Emcee — the test runner for iOS developers, 2022
Babbel
Badoo
BBC
- Testing BBC iPlayer Release For Android Downloads, 2013
- Automating testing for BBC iPlayer mobile, 2014 (series of articles)
BlaBlaCar
Box
CapitalOne
- Test-Driven Development – Ready, Set, Go with Google Cloud Test Lab, 2016
- Robot Pattern Testing for XCUITest, 2018
- Improvement and Parallelization of Android Automation Testing, 2020
- Using Stub vs Mock in iOS Unit Testing, 2020
- Using Apple’s Main Thread Checker Tool on UI Tests, 2021
- Getting Started With iOS UI Testing, 2021
Carousell
Carsales
Circle K
- Testing strategy, 2021
Compass
Disney + Hotstar
DoorDash
- Why We Use KIF-Quick for User Interface Tests, 2016
- Using Automated Testing to Scale Android Development with a Growing Team, 2017
- Contract Testing with Pact, 2018
- How to detect iOS memory leaks and retain cycles using Xcode’s memory graph debugger, 2019
- Our "Tech Stack" in the Android Dasher App, 2019
- A Framework For Speedy and Scalable Development Of Android UI Tests, 2020
- Building Multiple Distinctly Branded iOS Apps from a Single Codebase, 2021
- How to Speed Up SwiftUI Development and Testing Using PreviewSnapshots, 2023
- How We Reduced Our iOS App Launch Time by 60%, 2023
Dropbox
- Modernizing our Android build system, 2019 (series of articles)
- Revamping the Android testing pipeline at Dropbox, 2020
- How we sped up Dropbox Android app startup by 30%, 2021
- Introducing Focus, a new open source Gradle plugin, 2022
eBay
- Functional iOS Testing in Swift, 2015
- Test automation for Android testing, 2016
- Parallizing UI tests on iOS, 2016
- Android Accessibility Automation with Espresso, 2017
- Speed By A Thousand Cuts, 2020
- eBay Motors: Screenshot Testing with Flutter, 2020
- Homepage Speed Improvements on eBay Android, 2020
- The Journey to Integrating Android App Bundles, 2020
eDreams ODIGEO
- Creating a Post-commit hook with Swiftlint Autocorrect, 2020
- Keep those warnings away! — Add Android Lint to your CI pipeline, 2021
- Tuist Your Circle, 2023 (series of articles)
Engenious
Entri
Etsy
Expedia
- Timed releases for mobile apps, 2012
- Buck: How we build Android apps at Facebook, 2013
- Building Mobile Apps with Open Source Tools - Mobile @ Scale, 2013
- How Facebook Tests Facebook on Android, 2013
- Airlock – Facebook’s mobile A/B testing framework, 2014
- Mobile End to End Testing at Scale, 2015
- Stetho: A new debugging platform for Android, 2015
- Improving Facebook’s performance on Android with FlatBuffers, 2015
- Performance instrumentation for Android apps, 2015
- Open-sourcing ReDex: Making Android apps smaller and faster, 2016
- Automatic memory leak detection on iOS, 2016
- The mobile device lab at the Prineville data center, 2016
- Android accessibility debugging with Stetho, 2016
- Managing resources for large-scale testing, 2017
- Rapid release at massive scale, 2017
- Open-sourcing RacerD: Fast static race detection at scale, 2017
- Turning iOS End to End Testing up to 11, 2017
- HotSwap: Bringing hot code reloading to Buck, 2018
- Open-sourcing Flipper: a new extensible debugging tool, 2018
- MobileLab: Highly accurate testing to prevent mobile performance regressions, 2018
- Superpack: Pushing the limits of compression in Facebook’s mobile apps, 2021
- Open-sourcing Mariana Trench: Analyzing Android and Java app security in depth, 2021
- How WhatsApp tests software?, 2023
Flipkart
FloBiz
Ford
- Testing strategy, 2021
FunCorp
- Creating Impactful Messages With Ad Testing, 2021
- Testing Your Implementation on Ad Networks, 2021
- Writing your profiler to analyze application performance on Android, 2021
- Stopping NSZombie Invasion, 2022
- Jetpack Microbenchmark: Code Performance Testing, 2022
- Make your iOS app suitable for UI auto-testing, 2023
GitHub
Gojek
- How to Use Templates to Improve the Android Studio Experience, 2019
- How We Improved Performance and Build Times in Android Studio, 2019
- Screenshot Testing our Design System on Android, 2020
- Test Mobile Apps Using Web Traffic Interception and Mocking, 2020
- Running CI for mobile engineers at scale, 2020
- Reducing Build Time For Gojek #SuperApp, 2020
- Making Our iOS Components Accessible, 2021
- Better Secure Than Sorry | Tips To Secure An iOS App, 2021
- Mono Repo Vs Multi Repo: Tips To Re-evaluate Codebase Structure, 2021
- Reducing Our Build Time By 50%, 2022
- Demystifying Code Generation On iOS, 2022
- Migrating An Xcode Command Line Tool Project to SPM, 2022
- Espresso: Fresh Start to Android UI Testing, 2013
- Building Scalable Mobile Test Infrastructure for Google+ Mobile, 2013
- Android UI Automation, 2013
- Breaking the Matrix - Android Testing at Scale, 2013
- Make Chrome the best mobile browser, 2014
- Going Green: Cleaning up the Toxic Mobile Environment, 2014
- The Importance of Automated Testing on Real and Virtual Mobile Devices, 2014
- Automated Accessibility Testing for Android Applications, 2015
- Mobile Cross-Platform Integration Testing, 2015
- Integration Testing with Multiple Mobile Devices and Services, 2016
- SRE for Mobile Applications, 2018
Grab
- Deep Dive into iOS Automation at Grab - Integration Testing, 2019
- Marionette - Enabling E2E User-scenario Simulation, 2019
- Journey to a Faster Everyday Superapp Where Every Millisecond Counts, 2019
- Tackling UI Test Execution Time Imbalance for Xcode Parallel Testing, 2020
- How Grab is Blazing Through the Superapp Bazel Migration, 2020
- App Modularisation at Scale, 2021
- How we improved our iOS CI infrastructure with observability tools, 2023
Gravel
Halodoc
- Testing strategy, 2021
Helpshift
Huawei
- Android | Product Flavors and Build Variants, 2020
- Automate Deployment to Huawei AppGallery Connect using Fastlane, 2020
- React Native | Integrating Your Applications With AppGallery Connect, 2021
- Android UI Testing Made Easy: Espresso vs. Barista, 2022
- Robolectric : The Ultimate Testing Framework for Android Developers, 2023
- How to Test the Navigation Component in Jetpack Compose?, 2023
- Unit Test in Jetpack Compose, 2023
HubSpot
Instabug
- Testing strategy, 2021
Intel
Karumi
- Testing strategy, 2021
Kaspersky
La Redoute
leboncoin
- Writing Custom Lint Checks with Gradle, 2014
- Managing iOS Continuous Integration at Enterprise Scale, 2015
- Mock the Internet, 2015
- Effective Layout Testing Library for iOS, 2016
- UI Automation: Keep it Functional – and Stable!, 2016
- 3x3: Speeding Up Mobile Releases, 2016
- 3x3: iOS Build Speed and Stability, 2016
- Upgrade Testing on iOS: Keeping up with 3x3, 2016
- Open Sourcing Test Butler, 2016
- iOS: Test Pyramid, 2016
- Open Sourcing Dex Test Parser, 2017
- Managing documentation at scale, 2019
- LinkedIn’s approach to automated accessibility (A11y) testing, 2020
- Faster testing on Android with Mobile Test Orchestrator, 2020
Livefront
- 4 tips for using Carthage, 2017
- How to add a dynamic Swift framework to a Command Line Tool, 2018
- Swift expected nil, not , 2018
- Unit Testing race conditions by creating chaos (Swift), 2018
- Adventures in iOS Dev Automation, 2018
- The First 2 Commits Every Android Project Should Have, 2019
- Android Static Code Checks — Keep Your Codebase Tidy With Detekt, 2020
- Dagger Hilt: Testing injected Android components with code coverage, 2020
- How to connect your Android emulator to a local web service, 2021
- Five Reasons To Write Unit Tests, 2021
- Tracking Android project build times, 2023
- XCTestCase Life Cycle Management, 2023
Lyft
- Which hardware are you using to run your CI, 2021
- Testing strategy, 2021
- Building an Enterprise IntelliJ Plugin for Android Developers, 2021
- Mobile Performance @ Lyft, 2021
- Monitoring CPU performance of Lyft’s Android applications, 2022
- Shift-Left iOS Testing with Focus Flows, 2022
- Detecting Android memory leaks in production, 2023
Medium
Mercadona Tech
Mercari
- Super fast and parallelized Android UITest(Appium) environment using AWS, Docker and Android emulator, 2018
- How HeadSpin will change mobile testing and monitoring?, 2019
- Specifying Kotlin tests with Spek, 2019
- Testing Redux-based iOS app, 2019
- Building automated workflow using Slackbot and CircleCI, 2020
- Compiling for iOS on Apple M1, 2021
- Bazel Remote Execution for iOS Builds with Apple Silicon, 2021
- Automatically generating snapshot tests from Xcode Previews, 2022
- Android automated testing to support one-week releases, 2022
- Leverage Kotlin in your Android CI, 2022
- Fast and reliable iOS builds with Bazel at Mercari, 2023
- Mercari QA and Compose for Android automation, 2023
Monese
- Mobile testing at Monese, 2020
Mozilla
NatWest
- Testing strategy, 2022
Netflix
Nordstrom
- Testing strategy, 2021
Outlook
PagerDuty
Parimatch Tech
PayPal
Picsart
- Continuous integration for iOS with Nix and Buildkite, 2017
- iOS linting at Pinterest, 2017
- Developing fast & reliable iOS builds at Pinterest, 2019
- Ad Metrics Quality and Testing on Mobile, 2019
- Pinterest + ktlint = ❤, 2021
- Moving Pinterest’s iOS Builds to Autoscaled EC2 Mac, 2022
- Pre-Submit UI Tests at Pinterest, 2022
Qonto
Razorpay
realestate.com.au
Revolut
Riot Games
Robinhood
- Testing strategy, 2021
- Removing 30% of our iOS crashes, 2022
Shazam
Shopify
- Introducing the Super Debugger: A Wireless, Real-Time Debugger for iOS Apps, 2013
- Building a Dynamic Mobile CI System, 2017
- Scaling iOS CI with Anka, 2018
- Mobile Tophatting at Shopify, 2019
- iOS Application Testing strategy at Shopify, 2019
- The Unreasonable Effectiveness of Test Retries: An Android Monorepo Case Study, 2019
- Mobile Release Engineering at Scale with Shipit Mobile, 2019
- Release process, 2021
- Testing strategy, 2021
- Reusing Code with React Native Packages at Shopify, 2021
Showmax
Slack
- Valera Zakharov: Testing, 2017
- Android UI Automation, 2018 (series of articles)
- UI testing is so easy - said no developer ever, 2018
- Mobile performance testing at Slack, 2018
Snap
- Testing strategy, 2021
SoundCloud
- Continuous Integration at SoundCloud, 2015
- Leveraging frameworks to speed up our development on iOS, 2017
- Automatic Stubbing of Network Requests to Deflakify Automation Testing, 2018
- Integration Testing for Memory Leaks, 2018
- Running Android UI Test Suites on Firebase Test Lab, 2018
- Release Quality and Mobile Trains, 2019
- Gradle Remote Build Cache Misses, 2019
- Solving Remote Build Cache Misses by Annoying Your Colleagues, 2019
- Speeding Up Builds with Dagger Reflect, 2020
- The Magic of Generating an Xcode Project, 2020
- Breaking Loose from Third-Party Lock-In with Custom Refactoring Tools, 2020
- Tests Under the Magnifying Lens, 2021
Spotify
- Shaving off 50% waiting time from the iOS Edit-Build-Test cycle, 2013
- Protect Your Baby! How Spotify Does Testing for Mobile, 2015
- Scaling Android Application Testing at Spotify, 2017
- How We Gave Superpowers to Our macOS CI, 2020
- Which hardware are you using to run your CI, 2021
- Testing strategy, 2021
- Introducing XCMetrics: Our All-in-One Tool for Tracking Xcode Build Metrics, 2021
- Introducing XCRemoteCache: The iOS Remote Caching Tool that Cut Our Clean Build Times by 70%, 2021
- Introducing Ruler: Our Tool for Measuring Android App Size, 2022
- Switching Build Systems, Seamlessly, 2023
Square
- iOS Integration Testing, Part 1, 2011
- iOS Integration Testing, Part 2, 2011
- Better Android Testing with Robolectric 2.0, 2013
- The Resurrection of Testing for Android, 2013
- iOS Build Infrastructure, 2015
- iOS 9 upgrade: Why did my unit tests grind to a halt?, 2016
- XCKnife: faster distributed tests for iOS, 2016
- measureBlock: How Does Performance Testing Work In iOS?, 2018
- Announcing cocoapods-generate, 2018
- Shipping Binary Frameworks With Swift 5.0, 2019
- Instrumenting Firebase Test Lab, 2020
- Kotlin-Multiplatform Shared Test Resources, 2021
- Herding Elephants, 2021
- Getting Square's iOS build ready for Apple Silicon with Bazel, 2022
- Stampeding Elephants, 2023
- Supercharging Continuous Integration with Gradle, 2023
Strava
Stream
- Let's test openly, 2022
Stitch Fix
- iOS Code Signing, 2015 (series of articles)
- Continuous Integration and Deployment for iOS, 2016
Swiggy
Target
- Testing strategy, 2021
The Guardian
Thoughtworks
Thumbtack
Tokopedia
- How We Solve The Sideloading Crash After App Bundle Implementation, 2019
- Release Strategy — a twisted tale in apps, 2019
- Modern Way to Reduce Your Android Apps Size With Dynamic Feature, 2020
- Understanding the aspects of iOS App Launch Time, 2020
- Automating Image Compression Using TinyPng & Git Hooks, 2020
- How Tokopedia Achieved 1000% Faster iOS Build Time, 2020
- Simplify Code Review Process with Auto Mention Code Review Systems, 2020
- Making Developers Life Easier With Jenkins-Slack Integration, 2020
- Monitoring Android Codebase, 2020
- Continuous Integration Google Play Store Internal App Sharing In Tokopedia, 2020
- Saving Tons of Time and Money During Remote Work with Auto Upload APK System, 2021
- Facilitate Your iOS Crash Log Translation For Numerous Builds, 2022
- Getting Started with iOS App Modularization — An Introduction, 2022 (series of articles)
- Stop Wasting Time on Unit Testing: How Tokopedia Achieved 8X Faster Results, 2023
Toptal
- Automated Android Crash Reports with ACRA and Cloudant, 2014
- Android Testing Tutorial: Unit Testing Like a True Green Droid, 2015
- Fastlane: iOS Automation on Cruise Control, 2017
- Android DDMS: A Guide to the Ultimate Android Console, 2017
- How to Write Automated Tests for iOS, 2017
- iOS Continuous Integration with Xcode Server Explained, 2018
- A Splash of EarlGrey: UI Testing the Toptal Talent App, 2020
- Investing in Unit Testing: Benefits and Approaches, 2022
- Unit Testing in Flutter: From Workflow Essentials to Complex Scenarios, 2022
Trendyol
- Get the Most Out of UI Tests With XCode Test Plans, 2020
- How to Test Deeplinks with XCUITest, 2020
- Integrate Slather to Trendyol Project, 2021
- UI Test Roadmap with Kaspresso, 2021
- Trendyol Android Team Unit Test Practice, 2021
- Mobile App Complexity: Things to Consider While Estimating Test Effort, 2021
- The Different Types of Testing on Trendyol iOS App, 2021
- Differences Between Mobile Web and Mobile Platform Tests, 2021
- Mocking API Calls in UI Tests, 2021
- How to Make iOS UI Testing fast and reliable, 2021
- How to Write Unit Tests for Selector Functions in Swift, 2021
- Device Selection for iOS App Testing, 2021
- Meaningful Error Messages for iOS UI Tests, 2021
- Make UI Testing possible with TYGenerator, 2021
- Automated Visual Testing With Snapshots, 2021 (series of articles)
- Modularising Trendyol Android App for Build Efficiency, 2022
- Distribute Unclear Responsibilities in The Team With Automation, 2022
- Sample Apps to Achieve 80% Shorter Build Times in Trendyol Android Project, 2023
- Revamping Trendyol’s iOS App: A Modularization Success Story, 2023
- Mock Generator Development With Using Mockolo Library, 2023
- Trendyol Fulfillment Android Instrumented Test CI, 2023
- Managing iOS Tests at Scale: A Symphony, 2023
- Android Test Doubles In Unit Test, 2023
- Trendyol and Tuist: Engineering Apps at Scale, 2023
Turo
Uber
- The Uber Challenge of Cross-Application/Cross-Device Testing, 2015
- Octopus to the Rescue: the Fascinating World of Inter-App Communications at Uber Engineering, 2015
- Using the Octopus Framework, 2016
- Harnessing Code Generation to Increase Reliability & Productivity on iOS at Uber, 2018
- Scaling Mobile Device Management for macOS with Chef at Uber, 2019
- Measuring Kotlin Build Performance at Uber, 2019
- Introducing Uber Poet, an Open Source Mock App Generator for Determining Faster Swift Builds, 2019
- Testing strategy, 2020
- Measuring Performance for iOS Apps at Uber Scale, 2023
UPMC Enterprises
Walmart
Wayfair
WeTransfer
Whatnot
Wix
Wrike
Zenjob
The collection is proudly sponsored by Runway, the leading mobile release management platform that helps teams better coordinate and automate app releases.
Support «How They Automate on Mobile» collection on GitHub Sponsors.
Want to contribute? Just fork and raise a PR!
- All the authors and the companies they represented in the resources above
- HowTheyTest for the inspiration
- MobileNativeFoundation for the open discussions
Help us keep the project open and inclusive. Please read and follow our Code of Conduct.
This project is licensed under the terms of the MIT license. See the LICENSE file.