Write

Publishing a Compose macOS app on App Store: architectures, sandboxing and native libraries

Everything that broke moving FeedFlow's Compose Multiplatform macOS app from GitHub Releases to the App Store: sandboxing, architectures, and more.

Publishing a Kotlin Multiplatform Android, iOS, and macOS app with GitHub Actions

An index of the series on setting up GitHub Actions CI to publish FeedFlow, a Kotlin Multiplatform app, to Play Store, App Store, and GitHub Releases.

How to publish a Kotlin Multiplatform macOS app on the App Store with GitHub Actions

Part four of the CI series: a GitHub Actions pipeline that deploys FeedFlow's Compose Multiplatform macOS app to the App Store.

How to publish a Kotlin Multiplatform macOS app on GitHub Releases with GitHub Actions

Part three of the CI series: automating the publishing of FeedFlow's macOS app to GitHub Releases, outside the Mac App Store.

How to publish a Kotlin Multiplatform iOS app on App Store with GitHub Actions

Part two of the CI series: a GitHub Actions pipeline to build and ship the Kotlin Multiplatform iOS app of FeedFlow to the App Store.

How to publish a Kotlin Multiplatform Android app on Play Store with GitHub Actions

Part one of the CI series: a GitHub Actions pipeline to build and deploy the Kotlin Multiplatform Android app of FeedFlow to Google Play.

Using annotations to improve iOS APIs on Kotlin Multiplatform

Using Kotlin 1.8's @HiddenFromObjC and @ObjCName annotations to clean up the iOS API surface of a Kotlin Multiplatform project.

Introducing FeedFlow, a minimalistic and opinionated RSS Reader

Introducing FeedFlow, a minimalistic RSS reader for Android, iOS, and macOS built with Kotlin Multiplatform. An overview of the project.

Migrating to Jetpack Compose: a step by step journey

A step-by-step migration of Secure QR Reader from the old View system to Jetpack Compose, with a matching commit for every step.

Organize your Views: SwiftUI edition

The SwiftUI companion to the Compose article: organizing a SwiftUI codebase with stateless views and state hoisting.

Organize your Views: Jetpack Compose edition

How to structure a Jetpack Compose codebase to avoid god classes, giant composables, and other messy-UI traps.

How to create a parameterized base test class in Kotlin

Combining JUnit 4's Parameterized runner with a shared base test class in Kotlin without losing common setup.