8 min read Beginner
Kotlin testing has a problem that gets worse the more successful your project becomes.
8 min read Beginner
Kotlin testing has a problem that gets worse the more successful your project becomes.
10 min read Advanced
The Default Hierarchy Template in KMP projects is a great way to reduce boilerplate code and start working quickly. However, it came with an unexpected…
KMP 102 · Part 5
6 min read Intermediate
In the last article we dug into the quirks of code exported to Objective-C headers, along with the best practices for what to export.
KMP 102 · Part 4
6 min read Intermediate
In the last post, we learned how to use Kotlin code in Swift. We covered a few techniques to improve the code exported to Swift, and how annotations like @HiddenFromObjC and @HidesFromObjC control the visibility of code in Swift.
KMP 102 · Part 3
8 min read Intermediate
In the last post, we learned how to create an XCFramework from Kotlin code and explored some characteristics of the generated build types.
KMP 102 · Part 2
10 min read Intermediate
In the previous post, we learned how Kotlin/Native exports a collection of .frameworks in the XCFramework format.
KMP 102 · Part 1
4 min read Intermediate
Welcome to the KMP-102 series. We dig deeper into Kotlin Multiplatform concepts, learning more about how to integrate our Kotlin code into iOS and beyond.
Kotlin Koans BR · Part 12
2 min read Beginner
When importing a class or function, you can give it a different name by adding as NewName after the import directive. This can be useful when…
Kotlin Koans BR · Part 13
4 min read Beginner
Implement the extension functions Int.r() and Pair.r() so they convert an Int and a Pair into a RationalNumber.
Kotlin Koans BR · Part 2
2 min read Beginner
Make the joinOptions() function return the list in JSON format (for example, [a, b, c]) by specifying only two arguments.
Kotlin Koans BR · Part 3
4 min read Beginner
Imagine you have several overloads of foo() in your favorite language. You can replace them all with a single function in Kotlin.
Kotlin Koans BR · Part 9
9 min read Beginner
Rewrite the following code in Kotlin, then add the data modifier. A beginner-friendly look at Kotlin classes and data classes.
Kotlin Koans BR · Part 11
12 min read Beginner
Reuse your solution from the previous task, but replace the interface with a sealed interface. That way you no longer need the else branch in the when expression.
Kotlin Koans BR · Part 8
3 min read Beginner
Pass a lambda to the any function to check whether the collection contains an even number.
Kotlin Koans BR · Part 5
2 min read Beginner
The pattern below matches a date in the format 13.06.1992 (two digits, a dot, two digits, a dot, four digits):
Kotlin Koans BR · Part 1
5 min read Beginner
Change the code so that the start function returns the string "OK".
Kotlin Koans BR · Part 4
2 min read Beginner
Swap the trimIndent call for trimMargin, setting # as the prefix value, so the resulting string no longer contains the prefix character.
Kotlin Koans BR · Part 10
7 min read Beginner
Rewrite the given code using Kotlin smart casts and the when expression.
Kotlin Koans BR · Part 7
2 min read Beginner
Specify the Nothing return type for the failWithWrongAge function.
Kotlin Koans BR · Part 6
5 min read Beginner
Rewrite the following code so that it uses only a single if expression, and learn how Kotlin handles nullable types safely.
7 min read Beginner
In previous articles, we established a foundation in Kotlin Multiplatform (KMP) and how it compiles to multiple platforms.
8 min read Beginner
Over the last few articles, we dug into the inner workings of Kotlin Multiplatform: its paradigm, the compiler architecture, the source sets, the development environment, building and running a sample project, and the essential role of Gradle.
KMP 101 · Part 6
9 min read Beginner
In the last article, we created a project using the KMP Wizard and, with little effort, ran our app on Android, iOS, and Desktop devices.
3 min read Beginner
Over the last few articles we covered key KMP concepts, from the multiplatform paradigm to setting up the environment.
12 min read Beginner
Software development is a complex process that demands not only skill and creativity, but also a well-configured development environment.
KMP 101 · Part 3
8 min read Beginner
In the last article (🔗 KMP 101: Understanding How Kotlin Compiles for Multiple Platforms), we learned about the frontend, IR, and backend of the Kotlin compiler.
KMP 101 · Part 2
4 min read Beginner
In the last post (🔗 KMP 101: An Introduction to the multiplatform paradigm), we explored the multiplatform paradigm and how KMP stands out in the ecosystem.
KMP 101 · Part 1
10 min read Beginner
We use a wide range of apps every day on phones, watches, TVs, and computers, all part of a broad digital ecosystem.
Android Plataforma · Part 17
3 min read Intermediate
Android development is a constant stream of new things: new devices, SDK updates, and an endless variety of libraries and tools that ship every single day.
Android Plataforma · Part 1
2 min read Intermediate
Efficiency matters in modern software projects. This article covers modularization in Kotlin/Android projects, the vital role Gradle plays in speeding up builds, and the challenges of managing multiple modules.
Android Plataforma · Part 10
6 min read Intermediate
In the last article we explored CommonsExtension to remove duplication from our configuration.
Android Plataforma · Part 11
3 min read Intermediate
In the previous article, we parameterized the arguments of applyAndroidApp() and appyAndroidLibary() with models.
Android Plataforma · Part 12
5 min read Intermediate
🌱 Branch: 12/improving-android-library-build-time 🔗 Repository:...
Android Plataforma · Part 13
4 min read Intermediate
In the last article we sped up Android module builds by turning off several Android Gradle Plugin (AGP) features.
Android Plataforma · Part 14
3 min read Intermediate
In the last article we extended our platform with the ability to declare JVM modules.
Android Plataforma · Part 15
6 min read Intermediate
In the last article we covered how our platform lets different modules opt into experimental features.
Android Plataforma · Part 16
2 min read Intermediate
Over the last articles, we built a platform from scratch, learning and applying several concepts with the goal of making multi-module Kotlin apps more flexible and scalable.
Android Plataforma · Part 2
1 min read Intermediate
In this post we explore a starter project, understand the challenges of maintaining build.gradle.kts files, and discover how Gradle Composite Builds can help along the way.
Android Plataforma · Part 3
3 min read Intermediate
In the previous article, we understood the challenges a multi-module project brings: maintaining and reusing Gradle files. Let us get a better grasp on how to solve this problem by looking at two concepts: buildSrc and Composite Builds.
Android Plataforma · Part 4
4 min read Intermediate
In the previous articles we saw why modularity matters and why Composite Builds are the right choice for scaling Kotlin projects.
Android Plataforma · Part 5
1 min read Intermediate
In the previous article, we set up our platform with build-logic and registered the greeting task in the main project.
Android Plataforma · Part 6
3 min read Intermediate
In the previous post, we optimized our platform and got it ready for more features.
Android Plataforma · Part 7
8 min read Intermediate
In the previous article, we got our platform ready to take on new features.
Android Plataforma · Part 8
2 min read Intermediate
In the last post, we introduced the first decoration in the Platform and set up our entire app module using the Kotlin DSL.
Android Plataforma · Part 9
4 min read Intermediate
In the last post, we managed to extract the configuration logic for our library modules.