Write

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

When I released FeedFlow (an RSS Reader available on Android, iOS, and macOS, built with Jetpack Compose for the Android app, Compose Multiplatform for the desktop app, and SwiftUI for the iOS app), I decided to publish the macOS version outside the App Store. I went this path because publishing on the App Store has different requirements that I wanted to avoid tackling during the first launch. How to publish a Kotlin Multiplatform macOS app on GitHub Releases with GitHub Actions...

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

It’s been almost a year since I started working on FeedFlow, an RSS Reader available on Android, iOS, and macOS built with Jetpack Compose for the Android app, Compose Multiplatform for the desktop app, and SwiftUI for the iOS app. To be faster and “machine-agnostic” with the deployments, I decided to have a CI (Continuous Integration) on GitHub Actions to quickly deploy my application to all the stores (Play Store, App Store for iOS and macOS, and on GitHub release for the macOS app)....

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

SERIES: Publishing a Kotlin Multiplatform Android, iOS, and macOS app with GitHub Actions. Part 1: How to publish a Kotlin Multiplatform Android app on Play Store with GitHub Actions Part 2: How to publish a Kotlin Multiplatform iOS app on App Store with GitHub Actions Part 3: How to publish a Kotlin Multiplatform macOS app on GitHub Releases with GitHub Actions Part 4: How to publish a Kotlin Multiplatform macOS app on App Store with GitHub Actions It’s been almost a year since I started working on FeedFlow, an RSS Reader available on Android, iOS, and macOS, built with Jetpack Compose for the Android app, Compose Multiplatform for the desktop app, and SwiftUI for the iOS app....

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

SERIES: Publishing a Kotlin Multiplatform Android, iOS, and macOS app with GitHub Actions. Part 1: How to publish a Kotlin Multiplatform Android app on Play Store with GitHub Actions Part 2: How to publish a Kotlin Multiplatform iOS app on App Store with GitHub Actions Part 3: How to publish a Kotlin Multiplatform macOS app on GitHub Releases with GitHub Actions Part 4: How to publish a Kotlin Multiplatform macOS app on App Store with GitHub Actions It’s been almost a year since I started working on FeedFlow, an RSS Reader available on Android, iOS, and macOS, built with Jetpack Compose for the Android app, Compose Multiplatform for the desktop app, and SwiftUI for the iOS app....

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

SERIES: Publishing a Kotlin Multiplatform Android, iOS, and macOS app with GitHub Actions. Part 1: How to publish a Kotlin Multiplatform Android app on Play Store with GitHub Actions Part 2: How to publish a Kotlin Multiplatform iOS app on App Store with GitHub Actions Part 3: How to publish a Kotlin Multiplatform macOS app on GitHub Releases with GitHub Actions Part 4: How to publish a Kotlin Multiplatform macOS app on App Store with GitHub Actions It’s been almost a year since I started working on FeedFlow, an RSS Reader available on Android, iOS, and macOS, built with Jetpack Compose for the Android app, Compose Multiplatform for the desktop app, and SwiftUI for the iOS app....

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

SERIES: Publishing a Kotlin Multiplatform Android, iOS, and macOS app with GitHub Actions. Part 1: How to publish a Kotlin Multiplatform Android app on Play Store with GitHub Actions Part 2: How to publish a Kotlin Multiplatform iOS app on App Store with GitHub Actions Part 3: How to publish a Kotlin Multiplatform macOS app on GitHub Releases with GitHub Actions How to publish a Kotlin Multiplatform macOS app on App Store with GitHub Actions It’s been almost a year since I started working on FeedFlow, an RSS Reader available on Android, iOS, and macOS, built with Jetpack Compose for the Android app, Compose Multiplatform for the desktop app, and SwiftUI for the iOS app....

Using annotations to improve iOS APIs on Kotlin Multiplatform

Kotlin 1.8 has introduced new annotations to improve the interoperability of Kotlin with Objective-C and Swift: @ObjCName: allows to customize the name that will be used in Swift or Objective-C @HiddenFromObjC: allows hiding a Kotlin declaration from Objective-C (and Swift). @ShouldRefineInSwift: it marks a Kotlin declaration as swift_private in the Objective-C API, allowing to replace it with a wrapper written in Swift. You can see the release announcement for more details about the interoperability improvements introduced with Kotlin 1....

Introducing FeedFlow, a minimalistic and opinionated RSS Reader

After months of work, I can finally announce the release of FeedFlow, a minimalistic and opinionated RSS Reader that I’ve built for myself and that’s now available on Android, iOS, and macOS. Motivation I’ve started (again) to stay up to date by building my own feed instead of relying on feeds ordered and decided by someone else. But I wasn’t completely satisfied with the readers already out there (“I can build a better one"™️)....

Migrating to Jetpack Compose: a step by step journey

Some time ago, I decided to migrate Secure QR Reader to Jetpack Compose (in the rest of the article, I will call it Compose, for brevity). QR Reader Secure is a simple QR Reader that I developed some years ago after a failed search for a simple and secure reader for my parents that doesn’t require sneaky, strange, and useless permissions. The app was basic and fully working with the old View system, but I wanted to move to Compose to experience the entire migration process....

Organize your Views: SwiftUI edition

One of the pros of SwiftUI, and generally of declarative UI frameworks, is the capability of defining the UI with the same programming language the application uses. With SwiftUI, it is not necessary anymore to bridge the UI definitions from somewhere else, resulting in a decrease of context switching between two different environments (Storyboards and Swift code, for example) But “with great power comes great responsibility”, and a codebase can quickly become a nightmare without some structure and organization....

Organize your Views: Jetpack Compose edition

One of the pros of Jetpack Compose (in the rest of the article, I will just call it Compose, for brevity), and generally of declarative UI frameworks, is the capability of defining the UI with the same programming language the rest of the application uses. With Compose, it is not necessary anymore to bridge the UI definitions from XML (e.g. with the [in]famous findViewById), resulting in less context switching between two different environments (XML and Kotlin code)....

How to create a parameterized base test class in Kotlin

One exciting feature of JUnit 4 (and 5 as well, but this post will be focused on JUnit 4) is the possibility of running the same test with different input arguments. That is made possible by a custom test runner called Parameterized, which will inject the provided arguments in the constructor of the test class. Instead, the different arguments must be defined in the companion object of the test class....