Systems | Development | Analytics | API | Testing

Test sharding: elevate code quality without slowing down your team

Sometimes teams avoid introducing more tests (particularly UI tests) because they fear slowing down their CI pipeline. Should you have to sacrifice software quality for the sake of fast cycle times? Absolutely not. So, how can you introduce more tests without slowing down your CI pipeline? The answer: employ test sharding. In this post, we’ll dive into what test sharding is and why you should consider it.

App-level store connections in Release Management

Managing multiple apps with different store accounts just got easier. Bitrise Release Management helps developers distribute apps efficiently, whether delivering internal builds or publishing to the App Store or Google Play. It’s built to support teams at scale, with teams relying on it to release hundreds of apps across different platforms and accounts.

Jetpack Compose Fragments: How to Migrate and Integrate in Android Apps

Imagine you’re a toolmaker. You’ve got an old-school toolshed with loads of ancient equipment: hammers, pickaxes, all the stuff people used hundreds of years ago. And then one day you walk into your toolshed to find laser cutters, 3D printers and loads of other digital tools at your disposal. Life would suddenly seem a lot simpler, right?

Introducing Invocation Diffing: debug failures and performance issues in seconds

Troubleshooting builds just got a lot easier. The new Invocation Diffing feature in Bitrise Build Cache allows you to compare two command invocations side by side to see exactly what changed. Whether you're investigating a build failure or a performance regression, this tool gives you a faster path to understanding and resolution.

Chat with your builds, CI, and more: Introducing the Bitrise MCP Server

Have you ever wished you could just ask your CI platform a question instead of digging through logs or scrolling through builds? Well your wish has been granted: Bitrise MCP (Model Context Protocol) Server is here, a new, conversational way to interact with your CI.

A Guide to Flutter error handling

Learn how to gracefully manage and debug errors in your Flutter apps! In this session, we'll explore best practices, common pitfalls, and powerful tools to handle exceptions—from try-catch to error boundaries and custom error screens. Whether you're a beginner or pro, this guide will help you build more resilient Flutter apps.

Kotlin Apply and other Kotlin Scope Functions

Last week, we got a question from one of our users asking us how to use Kotlin Apply. Specifically, the reader wanted to know whether it was best to use the apply function in their Android application, or another of the many Kotlin scope functions. So we got to thinking: Why not write an article about the whole topic of Kotlin scope functions? After all, they’re awesome: they let us write readable, concise code in Kotlin, and work with an object without the need for repeated references.

When Pixel-Perfect Isn't Perfect: The AI Revolution in Mobile App Testing

I’ve always been fascinated by how mobile test automation has evolved. From the early days of scripting interactions in Appium, Espresso, XCUITest, or any other tool, automation has come a long way in validating mobile app functionality. But there’s still one tricky area—visual validation. Functional automation does a great job of checking whether elements exist, buttons are clickable, and text fields accept input.