# Posts on Marco Gomiero

Recent content in Posts on Marco Gomiero

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Code review comments are the rules you forgot to write down

DevFeed: [Code review comments are the rules you forgot to write down](<https://devfeed.tech/articles/code-review-comments-are-the-rules-you-forgot-to-write-down-25590.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2026/code-review-agents-update/>)

Author: Marco Gomiero

Published: 2026-07-27T00:00:00Z

Content type: article

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Code review](<https://devfeed.tech/topics/code-review.md>), [Pull Request](<https://devfeed.tech/topics/pull-request.md>), [Loop Engineering](<https://devfeed.tech/topics/loop-engineering.md>), [context](<https://devfeed.tech/topics/context.md>), [Markdown](<https://devfeed.tech/topics/markdown.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [also](<https://devfeed.tech/tags/also.md>), [code-review](<https://devfeed.tech/tags/code-review.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [markdown](<https://devfeed.tech/tags/markdown.md>), [workflow](<https://devfeed.tech/tags/workflow.md>)

### AI overview

The article describes a workflow for using AI agents to inspect recent pull-request review comments, identify recurring violations of project conventions, and propose updates to instruction files such as AGENTS.md. It presents code-review feedback as evidence of undocumented project rules and discusses using scripts to retrieve review comments.

### Source excerpt

If you work with AI agents, you have an instruction file (and if you don't, you should!) usually called AGENTS.md (with CLAUDE.md symlinked to it, because standards are hard to follow). This Markdown file is automatically added to the AI context, and it should contain all the guidelines for the project and everything that the agent should be aware of. For example, how to build the project, styling, conventions, and anything else that should be known to achieve the best possible result.

## Using an AI skill to triage FeedFlow feedback and create actionable board tickets

DevFeed: [Using an AI skill to triage FeedFlow feedback and create actionable board tickets](<https://devfeed.tech/articles/from-messy-inbox-to-actionable-board-with-one-ai-skill-25592.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2026/inbox-to-board-ai-skill/>)

Author: Marco Gomiero

Published: 2026-07-19T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Obsidian](<https://devfeed.tech/topics/obsidian-md.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [GitHub Copilot](<https://devfeed.tech/topics/github-copilot.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [github](<https://devfeed.tech/tags/github.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [reviews](<https://devfeed.tech/tags/reviews.md>)

### AI overview

This article describes a setup for using AI to triage FeedFlow feedback from sources such as GitHub issues, support emails, crash reports, and app-store reviews. The workflow categorizes incoming feedback and turns actionable items into tickets for later implementation or user responses, using an Obsidian board as part of the manual setup.

### Source excerpt

Maintaining and developing a project is not only about building things. A significant portion of time is spent triaging issues, feature requests, and user questions. This is also the case for FeedFlow. I constantly receive feedback from different sources: GitHub issues, given that the project is open source Support emails Crash reporting: Sentry and Firebase Crashlytics Reviews on the stores: Play Store, App Store From every notification, I need to determine what's a real issue, what's already fixed, what makes sense to add to the roadmap, etc.

## How to import multiple iOS signing certificates to CI

DevFeed: [How to import multiple iOS signing certificates to CI](<https://devfeed.tech/articles/how-to-import-multiple-ios-signing-certificates-to-ci-25591.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2026/export-double-certificate-ci-ios/>)

Author: Marco Gomiero

Published: 2026-07-02T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [certificates](<https://devfeed.tech/topics/certificates.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [ci](<https://devfeed.tech/topics/ci.md>)

Tags: [app-store](<https://devfeed.tech/tags/app-store.md>), [apple](<https://devfeed.tech/tags/apple.md>), [certificates](<https://devfeed.tech/tags/certificates.md>), [ci](<https://devfeed.tech/tags/ci.md>), [distribution](<https://devfeed.tech/tags/distribution.md>), [github](<https://devfeed.tech/tags/github.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [ios](<https://devfeed.tech/tags/ios.md>), [secrets](<https://devfeed.tech/tags/secrets.md>), [signing](<https://devfeed.tech/tags/signing.md>)

### AI overview

A tutorial explaining how to export multiple iOS signing certificates, combine them into a certificate file, encode it with base64, and store it as a GitHub secret for use in GitHub Actions.

### Source excerpt

Some time ago, I shared the GitHub Actions workflow that I use for deploying the iOS version of FeedFlow to the App Store. How to publish a Kotlin Multiplatform iOS app on App Store with GitHub Actions One step of that CI job is setting up the required certificates for signing the app: Apple Development and Apple Distribution. In the past, it was possible to extract these two certificates from the local Keychain by selecting them and using the Export 2 items... option.

## Sliding Doors: ten years of RSS-Parser

DevFeed: [Sliding Doors: ten years of RSS-Parser](<https://devfeed.tech/articles/sliding-doors-ten-years-of-rss-parser-25593.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2026/rss-parser-ten-years/>)

Author: Marco Gomiero

Published: 2026-06-17T00:00:00Z

Content type: opinion

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [RSS Feed](<https://devfeed.tech/topics/rss-feed.md>), [RSS](<https://devfeed.tech/topics/rss.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [Java](<https://devfeed.tech/topics/java.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [macOS](<https://devfeed.tech/topics/macos.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [ios](<https://devfeed.tech/tags/ios.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [macos](<https://devfeed.tech/tags/macos.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [rss](<https://devfeed.tech/tags/rss.md>), [xml](<https://devfeed.tech/tags/xml.md>)

### AI overview

The author reflects on ten years of RSS-Parser, a library that began as part of an RSS-reading app and was later published for other developers. The article describes how the project contributed to the author's learning and career, including its move from Java to Kotlin and Coroutines, and its continued use in developing a new RSS app.

### Source excerpt

Today marks ten years since the first commit of RSS-Parser. TEN YEARS. I want to use this opportunity to reflect on the journey of this library, the sliding doors moments along the way, and the chain of events that made RSS-Parser an important part of my career. The bare bones of the library started earlier, though; it was 2015 when I wrote my first app that I've published to the Play Store. This app was for reading the articles of the tech blog that I was collaborating with (for a while I was reviewing apps, phones, consumer tech - that's when I fell in love with mobile). The blog was built (of course) with the good old WordPress, and at the time I discovered that you can have the published articles formatted in XML - yes, I discovered the existence of RSS.

## Building Shellporter: From Idea to Production in a Week

DevFeed: [Building Shellporter: From Idea to Production in a Week](<https://devfeed.tech/articles/building-shellporter-from-idea-to-production-in-a-week-25589.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2026/building-shellporter/>)

Author: Marco Gomiero

Published: 2026-02-14T00:00:00Z

Content type: article

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [macOS](<https://devfeed.tech/topics/macos.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>), [ide](<https://devfeed.tech/topics/ide.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [ide](<https://devfeed.tech/tags/ide.md>), [jetbrains](<https://devfeed.tech/tags/jetbrains.md>), [macos](<https://devfeed.tech/tags/macos.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

The author describes building Shellporter, a macOS menu bar utility that opens a terminal in the project directory of the active IDE. It uses window information, macOS Accessibility API attributes, IDE-specific resolution strategies, metadata files, and a cache, with support for several IDEs and terminal applications.

### Source excerpt

I work with multiple projects at the same time. My typical macOS setup is one Desktop/Workspace per project, with my IDE and a terminal window. I prefer using a standalone terminal over the one built into the IDE because TUIs, especially those from AI agents, tend to perform better there: no scrolling jank, no weird jumps, and a generally smoother experience. And also I prefer to have a full big window dedicated to the terminal with more stuff to read rather than a small window in the IDE.

## Sunsetting spoton: Android 16 killed the hotspot toggle trick

DevFeed: [Sunsetting spoton: Android 16 killed the hotspot toggle trick](<https://devfeed.tech/articles/sunsetting-spoton-android-16-killed-the-hotspot-toggle-trick-25586.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2025/spoton-sunset/>)

Author: Marco Gomiero

Published: 2025-12-16T00:00:00Z

Content type: article

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Wi-Fi](<https://devfeed.tech/topics/wi-fi.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-16](<https://devfeed.tech/tags/android-16.md>), [api](<https://devfeed.tech/tags/api.md>), [hotspot](<https://devfeed.tech/tags/hotspot.md>), [wi-fi](<https://devfeed.tech/tags/wi-fi.md>)

### AI overview

The author explains why the spoton Wear OS and companion phone app is being sunset. The app used reflection to call hidden Android tethering APIs and let users toggle a phone hotspot from a watch. Android 16 moved the relevant methods and added a permission limited to system apps, preventing the approach from working for a normal Play Store app.

### Source excerpt

spoton is getting sunset. I started this project because I had a very specific (and very lazy) problem: I wanted to enable my phone hotspot without taking my phone out of my pocket. I do it often when I'm travelling or working somewhere without stable Wi-Fi, and every time it was the same ritual: unlock phone, quick settings, find the hotspot tile, toggle, put phone away. At some point, I thought: "This should be a button on my wrist."

## Accessing native macOS API in Compose Multiplatform

DevFeed: [Accessing native macOS API in Compose Multiplatform](<https://devfeed.tech/articles/accessing-native-macos-api-in-compose-multiplatform-25584.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2025/compose-desktop-macos-api-jni/>)

Author: Marco Gomiero

Published: 2025-09-22T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [compose-multiplatform](<https://devfeed.tech/topics/compose-multiplatform.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [compose](<https://devfeed.tech/tags/compose.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [macos](<https://devfeed.tech/tags/macos.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

This tutorial explains how to access native macOS APIs from a JVM-based Compose Multiplatform desktop application. It presents a bridge using a native dynamic library and JNI, and describes using Kotlin/Native to interact with Apple frameworks without writing Objective-C.

### Source excerpt

Compose Multiplatform is an amazing framework for building desktop applications that run on the JVM (Java Virtual Machine) on multiple platforms (macOS, Windows, and Linux). However, things get trickier if platform-specific APIs, like iCloud on macOS, are needed. These APIs are tied to their native platforms and aren't designed to be easily shared across multiple targets. Integrating such APIs into a Compose Multiplatform (in this article, when I mention Compose Multiplatform, I'm referring to Compose Multiplatform Desktop apps that run on the JVM) project requires some additional setup and "creativity".

## Testing a Gradle Plugin that interacts with Git

DevFeed: [Testing a Gradle Plugin that interacts with Git](<https://devfeed.tech/articles/testing-a-gradle-plugin-that-interacts-with-git-25587.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2025/test-gradle-plugin-git/>)

Author: Marco Gomiero

Published: 2025-05-13T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Git](<https://devfeed.tech/topics/git.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [cocoapods](<https://devfeed.tech/topics/cocoapods.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [cocoapods](<https://devfeed.tech/tags/cocoapods.md>), [git](<https://devfeed.tech/tags/git.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

This tutorial explains how to test a Gradle plugin that publishes Kotlin Multiplatform frameworks through Git-based CocoaPods repositories. It uses Gradle TestKit and local Git bare repositories to automate testing without relying on manual verification or actual remote repositories.

### Source excerpt

Some time ago, I built KMP Framework Bundler, a Gradle plugin for Kotlin Multiplatform projects that generates an XCFramework for Apple targets or a FatFramework for iOS targets and manages the publishing process to a CocoaPods repository. (Note: the plugin is currently in maintenance mode; using KMMBridge might be a better option.) After building the Framework, the plugin handles the publishing process by interacting with a Git-based CocoaPods repository. It copies the Framework into the repository, updates the podspec file with the latest version, commits the changes, and pushes them.

## The curious case of a weird VerifyError crash

DevFeed: [The curious case of a weird VerifyError crash](<https://devfeed.tech/articles/the-curious-case-of-a-weird-verifyerror-crash-25583.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2025/bug-hunting-story/>)

Author: Marco Gomiero

Published: 2025-04-06T00:00:00Z

Content type: article

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [debugging](<https://devfeed.tech/topics/debugging.md>), [R8](<https://devfeed.tech/topics/r8.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Compose](<https://devfeed.tech/topics/compose.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-gradle-plugin](<https://devfeed.tech/tags/android-gradle-plugin.md>), [crash](<https://devfeed.tech/tags/crash.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [issue](<https://devfeed.tech/tags/issue.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [r8](<https://devfeed.tech/tags/r8.md>)

### AI overview

A journal-style debugging account of a VerifyError runtime crash in FeedFlow's Android release build after upgrading the Android Gradle Plugin to version 8.7. The investigation tests R8, Compose, Kotlin, and dependency combinations, then narrows the problem to code in the dependency graph involving date-string parsing.

### Source excerpt

This post can be considered as a journal entry. I had to clear my thoughts and vent off through writing after spending time debugging this issue. Maybe it will be helpful for future references or an example of the process to follow in such cases. The other day I was doing the usual dependency update routine of FeedFlow when I discovered a runtime crash that happened in the release version (so with R8 enabled) after updating the Android Gradle Plugin (AGP, in the rest of the article) to version 8.7.

## From an Android to a Kotlin Multiplatform library

DevFeed: [From an Android to a Kotlin Multiplatform library](<https://devfeed.tech/articles/from-an-android-to-a-kotlin-multiplatform-library-25582.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2025/android-lib-to-kmp/>)

Author: Marco Gomiero

Published: 2025-03-16T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Android Library](<https://devfeed.tech/topics/android-library.md>), [migration](<https://devfeed.tech/topics/migration.md>), [Android](<https://devfeed.tech/topics/android.md>), [Git](<https://devfeed.tech/topics/git.md>), [Library](<https://devfeed.tech/topics/library.md>), [Testing](<https://devfeed.tech/topics/testing.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [git](<https://devfeed.tech/tags/git.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [library](<https://devfeed.tech/tags/library.md>), [migration](<https://devfeed.tech/tags/migration.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

An account of migrating the RSS-Parser Android library to Kotlin Multiplatform, covering source-set restructuring, preservation of Git history, platform-specific dependencies, and cross-platform testing.

### Source excerpt

As Kotlin Multiplatform (KMP) continues to gain traction, more Android libraries are transitioning to support multiple platforms. However, this transition doesn't always come for free; depending on the project, there could be different challenges. Recently, I migrated an existing Android library (RSS-Parser, a library to parse RSS feeds). In this article, I will share my experience, cover all the challenges I faced during this journey, and describe the solutions I implemented to overcome them, from preserving git history to handling platform-specific dependencies and testing across different platforms.

## How a transitive dependency caused unexpected Android behavior

DevFeed: [How a transitive dependency caused unexpected Android behavior](<https://devfeed.tech/articles/watch-out-for-transitive-dependencies-an-obvious-rant-25585.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2025/rant-transitive-deps/>)

Author: Marco Gomiero

Published: 2025-01-14T00:00:00Z

Content type: opinion

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Library](<https://devfeed.tech/topics/library.md>), [issue tracker](<https://devfeed.tech/topics/issue-tracker.md>), [navigation](<https://devfeed.tech/topics/navigation.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [bugs](<https://devfeed.tech/tags/bugs.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [fragments](<https://devfeed.tech/tags/fragments.md>), [issue-tracker](<https://devfeed.tech/tags/issue-tracker.md>), [libraries](<https://devfeed.tech/tags/libraries.md>)

### AI overview

The author recounts debugging a crash affecting some Android users and tracing unexpected behavior to a change introduced by an external library. The article advises checking library changes and transitive dependencies during updates.

### Source excerpt

This article is just a short "rant" and a "therapy session" to remind and warn my future self. I was recently debugging a weird crash affecting some users. The issue was related to navigation, fragments, and backstacks. After weeks spent trying to reproduce it, reading online reports, and cross-referencing previous libraries and SDK updates, I finally had an illuminating moment after reading about a similar behavior in the Google Issue Tracker. It made me wonder: Could something have changed in the Android Manifest?

## How to use a project-specific Maven repository when dependency downloads fail

DevFeed: [How to use a project-specific Maven repository when dependency downloads fail](<https://devfeed.tech/articles/don-t-let-maven-block-you-25588.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2025/ublock-maven/>)

Author: Marco Gomiero

Published: 2025-01-05T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Maven](<https://devfeed.tech/topics/maven.md>), [ci](<https://devfeed.tech/topics/ci.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>)

Tags: [binaries](<https://devfeed.tech/tags/binaries.md>), [build](<https://devfeed.tech/tags/build.md>), [ci](<https://devfeed.tech/tags/ci.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [incident](<https://devfeed.tech/tags/incident.md>), [maven](<https://devfeed.tech/tags/maven.md>)

### AI overview

This tutorial explains how to keep a project building when a Maven repository is unavailable or a dependency can no longer be downloaded. It shows how to create a project-specific local Maven repository, recover the dependency binary from the Gradle cache when available, and configure Gradle to use the local repository for that library.

### Source excerpt

As developers, we've all encountered build failures in CI (or on our local machines) due to Maven repository issues preventing dependency downloads. > Could not download foo-lib-1.0.aar (org.acme.foo:foo-lib:1.0) > Could not get resource 'https://mavenrepo.com/org/acme/foo/foo-lib/1.0/foo-lib-1.0.aar'. > Could not GET 'https://mavenrepo.com/org/acme/foo/foo-lib/1.0/foo-lib-1.0.aar'. Received status code 403 from server: There could be many reasons for this: the Maven repository is currently down or is having an incident, the repository has been shut down (hello, JCenter), and the dependency is old and not republished elsewhere.

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

DevFeed: [Publishing a Compose macOS app on App Store: architectures, sandboxing and native libraries](<https://devfeed.tech/articles/publishing-a-compose-macos-app-on-app-store-architectures-sandboxing-and-native-libraries-25576.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2024/compose-macos-app-store/>)

Author: Marco Gomiero

Published: 2024-05-21T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [compose-multiplatform](<https://devfeed.tech/topics/compose-multiplatform.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [architectures](<https://devfeed.tech/tags/architectures.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [desktop](<https://devfeed.tech/tags/desktop.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [ios](<https://devfeed.tech/tags/ios.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [macos](<https://devfeed.tech/tags/macos.md>)

### AI overview

This tutorial explains publishing a Compose Multiplatform macOS app on the App Store, covering code-signing certificates, provisioning profiles, entitlements, packaging, architecture requirements, TestFlight uploads, and App Sandbox restrictions on native libraries.

### Source excerpt

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

DevFeed: [Publishing a Kotlin Multiplatform Android, iOS, and macOS app with GitHub Actions](<https://devfeed.tech/articles/publishing-a-kotlin-multiplatform-android-ios-and-macos-app-with-github-actions-25577.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2024/kmp-app-ci/>)

Author: Marco Gomiero

Published: 2024-05-21T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [Android](<https://devfeed.tech/topics/android.md>), [compose-multiplatform](<https://devfeed.tech/topics/compose-multiplatform.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [SwiftUI](<https://devfeed.tech/topics/swiftui.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [ci](<https://devfeed.tech/tags/ci.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [github](<https://devfeed.tech/tags/github.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [ios](<https://devfeed.tech/tags/ios.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [macos](<https://devfeed.tech/tags/macos.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [swiftui](<https://devfeed.tech/tags/swiftui.md>)

### AI overview

This article introduces a series of posts about using GitHub Actions CI to publish the FeedFlow Kotlin Multiplatform app to Google Play, the iOS and macOS App Stores, and GitHub Releases. FeedFlow targets Android, iOS, and macOS, using Jetpack Compose, Compose Multiplatform, and SwiftUI.

### Source excerpt

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

DevFeed: [How to publish a Kotlin Multiplatform macOS app on the App Store with GitHub Actions](<https://devfeed.tech/articles/how-to-publish-a-kotlin-multiplatform-macos-app-on-the-app-store-with-github-actions-25580.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2024/kmp-ci-macos-appstore/>)

Author: Marco Gomiero

Published: 2024-05-20T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [ci](<https://devfeed.tech/topics/ci.md>), [compose-multiplatform](<https://devfeed.tech/topics/compose-multiplatform.md>), [releases](<https://devfeed.tech/topics/releases.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>)

Tags: [app-store](<https://devfeed.tech/tags/app-store.md>), [compose](<https://devfeed.tech/tags/compose.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [macos](<https://devfeed.tech/tags/macos.md>), [swiftui](<https://devfeed.tech/tags/swiftui.md>)

### AI overview

This tutorial explains how to deploy a Kotlin Multiplatform macOS application to the macOS App Store using GitHub Actions. It covers the CI workflow, release triggers based on tags, and the JDK and Gradle setup, while excluding some native distribution configuration and App Store customization details.

### Source excerpt

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

DevFeed: [How to publish a Kotlin Multiplatform macOS app on GitHub Releases with GitHub Actions](<https://devfeed.tech/articles/how-to-publish-a-kotlin-multiplatform-macos-app-on-github-releases-with-github-actions-25581.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2024/kmp-ci-macos-github-releases/>)

Author: Marco Gomiero

Published: 2024-05-14T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [releases](<https://devfeed.tech/topics/releases.md>), [compose-multiplatform](<https://devfeed.tech/topics/compose-multiplatform.md>)

Tags: [app-store](<https://devfeed.tech/tags/app-store.md>), [ci](<https://devfeed.tech/tags/ci.md>), [compose](<https://devfeed.tech/tags/compose.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [desktop](<https://devfeed.tech/tags/desktop.md>), [github](<https://devfeed.tech/tags/github.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [macos](<https://devfeed.tech/tags/macos.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [play-store](<https://devfeed.tech/tags/play-store.md>), [releases](<https://devfeed.tech/tags/releases.md>), [swiftui](<https://devfeed.tech/tags/swiftui.md>)

### AI overview

A tutorial showing how to deploy a Kotlin Multiplatform macOS app outside the Mac App Store using GitHub Releases and GitHub Actions. It describes the deployment context for FeedFlow and introduces the release trigger and initial JDK and Gradle setup.

### Source excerpt

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

DevFeed: [How to publish a Kotlin Multiplatform iOS app on App Store with GitHub Actions](<https://devfeed.tech/articles/how-to-publish-a-kotlin-multiplatform-ios-app-on-app-store-with-github-actions-25579.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2024/kmp-ci-ios/>)

Author: Marco Gomiero

Published: 2024-05-07T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Xcode](<https://devfeed.tech/topics/xcode.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [SwiftUI](<https://devfeed.tech/topics/swiftui.md>), [compose-multiplatform](<https://devfeed.tech/topics/compose-multiplatform.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [app](<https://devfeed.tech/tags/app.md>), [ci](<https://devfeed.tech/tags/ci.md>), [compose](<https://devfeed.tech/tags/compose.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [ios](<https://devfeed.tech/tags/ios.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [macos](<https://devfeed.tech/tags/macos.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [xcode](<https://devfeed.tech/tags/xcode.md>)

### AI overview

A tutorial showing how to deploy a Kotlin Multiplatform iOS app to the App Store using GitHub Actions. It covers release triggers, Xcode version selection, JDK setup, and Gradle setup with caching.

### Source excerpt

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

DevFeed: [How to publish a Kotlin Multiplatform Android app on Play Store with GitHub Actions](<https://devfeed.tech/articles/how-to-publish-a-kotlin-multiplatform-android-app-on-play-store-with-github-actions-25578.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2024/kmp-ci-android/>)

Author: Marco Gomiero

Published: 2024-04-30T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [Android](<https://devfeed.tech/topics/android.md>), [Google Play](<https://devfeed.tech/topics/google-play.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [github](<https://devfeed.tech/tags/github.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [play-store](<https://devfeed.tech/tags/play-store.md>), [releases](<https://devfeed.tech/tags/releases.md>)

### AI overview

A tutorial showing how to use GitHub Actions to publish a Kotlin Multiplatform Android app to Google Play. It covers release triggers based on platform-specific tags and the setup of the repository, JDK, and Gradle, including encrypted Gradle configuration caching.

### Source excerpt

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

DevFeed: [Using annotations to improve iOS APIs on Kotlin Multiplatform](<https://devfeed.tech/articles/using-annotations-to-improve-ios-apis-on-kotlin-multiplatform-25572.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2023/objc-annotiations-better-kmp-api/>)

Author: Marco Gomiero

Published: 2023-09-19T00:00:00Z

Content type: article

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [interoperability](<https://devfeed.tech/topics/interoperability.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [coroutine](<https://devfeed.tech/tags/coroutine.md>), [interoperability](<https://devfeed.tech/tags/interoperability.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [mvvm](<https://devfeed.tech/tags/mvvm.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>)

### AI overview

This article explains how Kotlin 1.8 annotations can improve iOS APIs in a Kotlin Multiplatform project. It describes using @HiddenFromObjC and @ObjCName to expose iOS-specific implementations with clearer names while keeping shared business logic and reducing misleading duplicate class names.

### Source excerpt

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.8.

## Introducing FeedFlow, a minimalistic and opinionated RSS Reader

DevFeed: [Introducing FeedFlow, a minimalistic and opinionated RSS Reader](<https://devfeed.tech/articles/introducing-feedflow-a-minimalistic-and-opinionated-rss-reader-25570.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2023/introducing-feed-flow/>)

Author: Marco Gomiero

Published: 2023-07-31T00:00:00Z

Content type: release

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [RSS Feed](<https://devfeed.tech/topics/rss-feed.md>), [App](<https://devfeed.tech/topics/app.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [compose-for-desktop](<https://devfeed.tech/topics/compose-for-desktop.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [SwiftUI](<https://devfeed.tech/topics/swiftui.md>), [dogfooding](<https://devfeed.tech/topics/dogfooding.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [article](<https://devfeed.tech/tags/article.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [dogfooding](<https://devfeed.tech/tags/dogfooding.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [macos](<https://devfeed.tech/tags/macos.md>), [release](<https://devfeed.tech/tags/release.md>), [rss](<https://devfeed.tech/tags/rss.md>), [swiftui](<https://devfeed.tech/tags/swiftui.md>)

### AI overview

The article announces FeedFlow, a minimalistic RSS reader built for Android, iOS, and macOS. It opens articles on their respective websites, supports OPML imports, and was created partly to dogfood the RSSParser Android library.

### Source excerpt

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"™). What I want for an RSS reader is the possibility of easily going through my feed and being able to open the article that I want to read on the respective website. Yes, you read it right.

## Migrating to Jetpack Compose: a step by step journey

DevFeed: [Migrating to Jetpack Compose: a step by step journey](<https://devfeed.tech/articles/migrating-to-jetpack-compose-a-step-by-step-journey-25571.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2023/migration-to-compose/>)

Author: Marco Gomiero

Published: 2023-05-12T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [migration](<https://devfeed.tech/topics/migration.md>), [App](<https://devfeed.tech/topics/app.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [Library](<https://devfeed.tech/topics/library.md>), [XML](<https://devfeed.tech/topics/xml.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [migration](<https://devfeed.tech/tags/migration.md>), [xml](<https://devfeed.tech/tags/xml.md>)

### AI overview

A step-by-step journal of migrating the Secure QR Reader Android app from the legacy View system to Jetpack Compose. It covers the migration approach, Gradle and dependency setup, Compose Compiler and Kotlin compatibility, and reusing an existing XML theme with Material Theme Adapter. The author notes that the migration and some dependencies are dated.

### Source excerpt

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

DevFeed: [Organize your Views: SwiftUI edition](<https://devfeed.tech/articles/organize-your-views-swiftui-edition-25574.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2023/organize-view-swiftui-edition/>)

Author: Marco Gomiero

Published: 2023-03-23T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [SwiftUI](<https://devfeed.tech/topics/swiftui.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Code](<https://devfeed.tech/topics/code.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [components](<https://devfeed.tech/tags/components.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [maintainability](<https://devfeed.tech/tags/maintainability.md>), [readability](<https://devfeed.tech/tags/readability.md>), [state](<https://devfeed.tech/tags/state.md>), [stateless](<https://devfeed.tech/tags/stateless.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swiftui](<https://devfeed.tech/tags/swiftui.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ui-components](<https://devfeed.tech/tags/ui-components.md>)

### AI overview

This tutorial explains how to organize SwiftUI views in a Kotlin Multiplatform money-management app. It recommends keeping each screen's entry-point view small, splitting UI into reusable components, hoisting state so views remain stateless, and isolating ViewModel and external-dependency connections. The author reports improved readability and maintainability.

### Source excerpt

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. Long files, large structs, and stateful UI components that hinder reusability are examples that can lead to a messed codebase.

## Organize your Views: Jetpack Compose edition

DevFeed: [Organize your Views: Jetpack Compose edition](<https://devfeed.tech/articles/organize-your-views-jetpack-compose-edition-25573.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2023/organize-view-compose-edition/>)

Author: Marco Gomiero

Published: 2023-03-15T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [SwiftUI](<https://devfeed.tech/topics/swiftui.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [article](<https://devfeed.tech/tags/article.md>), [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

A tutorial on organizing Jetpack Compose views and navigation in MoneyFlow, a Kotlin Multiplatform money management app. It discusses the drawbacks of large navigation classes and presents a structure that delegates screen composable creation to factories, including factories defined in feature modules.

### Source excerpt

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

DevFeed: [How to create a parameterized base test class in Kotlin](<https://devfeed.tech/articles/how-to-create-a-parameterized-base-test-class-in-kotlin-25575.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2023/parameterized-kotlin-base-test/>)

Author: Marco Gomiero

Published: 2023-01-31T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [configuration](<https://devfeed.tech/topics/configuration.md>)

Tags: [argument](<https://devfeed.tech/tags/argument.md>), [class](<https://devfeed.tech/tags/class.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [constructor](<https://devfeed.tech/tags/constructor.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

This tutorial explains how to create a parameterized base test class in Kotlin using JUnit 4's Parameterized test runner. It describes defining test arguments in a companion object, accepting an argument in the base-class constructor, and having test classes reuse the shared setup while running with different arguments.

### Source excerpt

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.

[Next page](<https://devfeed.tech/sources/posts-on-marco-gomiero.md?cursor=WyIyMDIzLTAxLTMxVDAwOjAwOjAwKzAwOjAwIiwgImM4MjNlOWE4LWQ2MDMtNGEyNy1iZWVhLTFhOTA5MjA2NzlkOSJd>)