git filters & diff drivers: a technical overview

As I was investigating potential solutions for storing store secret files in our git repos securely, I recently looked into how some little known features of git, namely filters and diff drivers, work. While most git users will rarely need to know about the technical details of how those work on most cases, I found …

Gradle modularization delivers 3x faster Android builds

hi there 👋. In this blog post, we explore the build performance difference between modularized vs. monolithic architectures, using Pocket Casts Android as an example1. Designed by rawpixel.com / Freepik TLDR; We compared build performance between Pocket Casts Android’s modularized architecture (37 modules) and a monolithic version (1 module). Results show modularization delivers 2-3.6x faster …

An Adventure with Swift Charts

As you all may already know, one of the cool new things introduced in WWDC 2022 was Swift Charts, a framework to create charts with SwiftUI. To learn more about the Swift Charts’ potential, let’s go on a thrilling adventure to replace the chart in WooCommerce iOS with this ✨✨ shiny new framework ✨✨. To …

Swift: Why is my @MainActor code running in the background?

@MainActor was introduced introduced in Swift 5.5 by SE-0316 as a way to tell the compiler that certain code should always be run on the main thread. However, we have seen some cases where functions annotated with @MainActor were still being called on a background thread. This post explores what was happening, and how it …

Breaking down large pull requests

When working in a software development team, reviewing pull requests (PRs) is part of our everyday work. It is best practice to keep PRs small and concise, just so we can avoid missing potential issues and spending too much time understanding code changes – thus ensuring productivity. At WooCommerce Mobile, we have several teams working …

Clean config files with YAML anchors

Some context Recently we have been working on migrating our CI infrastructure from CircleCI to Buildkite. As a result, we are manipulating and creating a lot of YAML config files across our various apps, libraries, and tools. Given that we have many similar and common values and nodes across pipelines, jobs and steps in each …

Building an Editor by Sharing Code Between Android, iOS, and Web with React Native

When WordPress began rolling out the powerful new Gutenberg editor for building web pages (and, soon, entire websites), we were excited to bring that power to our users on mobile.  Why React Native We know firsthand how hard it is to make a great editor. We have built native editors for Android and iOS before …

Two simple techniques to make your release process more asynchronous and decentralized

How following simple conventions can remove the need for unscheduled synchronous meetings to release new versions of your apps.

Automattic Apps Division has team members distributed across 22 timezones. When it comes to shipping new versions of our apps, that spread makes the traditional synchronous and meeting-driven approach impossible.

Being a distributed team forced us to put processes in place that allow work to happen in an asynchronous and decentralized way without the need for everyone to be online simultaneously and with no ad hoc decision-making…

How We Use Feature Flagging on iOS

Great features take time to build. We release a new version of the WordPress for iOS app every two weeks. But sometimes a feature takes more than two weeks to develop. In those cases, we use feature flagging to gate in-progress features so we can continue to build and test them without exposing them to regular users before they’re ready.

With a feature flag in place, you can present different user interface elements or different menu options to a user based on which build of the app they’re running — whether that’s a local debug version, an internal testing version, or an App Store version. And it’s not just limited to UI. You can also swap out entire sections of backend logic using a feature flag.

In this post, we’ll look at how we implement feature flags in WordPress for iOS…

Screenshot Script

When I make pull requests for user interface changes, I include screenshots so everyone else involved in the product can see what I see.  It’s especially helpful for designers to quickly compare their mockups with the final result.  Folks have asked me if I use a particular program to create them — I don’t! It’s a fairly manual process, which I’ve now automated to make life easier. Read on to learn how to create screenshot images with a single terminal command…