What if you had to build a multiplatform (Android & iOS) and multi-tenant app with the objective of sharing the biggest amout of code possible while having all apps being UI/UX independent?
We want to take you through the discovery trip we made while building this. From architecture to ins and outs of KMM via Gradle magic that enabled us to have a Android, iOS and Desktop app.
Also sharing our rational over each of the options we took: Why not React Native? Or Xamarin? Should we use Compose Multiplatform?
Building an Open Source iOS app: lessons learnedWojciech Koszek
Building an Open Source iOS app: lessons learned
Dec 12, 2016, Hacker Dojo (Santa Clara), 6pm
In this talk I'm going to talk about lessons learned from building Sensorama (http://www.sensorama.org), an Open Source sensor platform for data science. The main theme of the talk will be Open Source: what is great about it, what is bad and how you must become a part of the Open Source community to really move quickly and benefit from it. For this project, I did both the code and the design, so you'll have a chance to see how solo-developer deals with time/feature constraints, which tools I've used and what my approach towards development in this mode is. In other words: I'll tell you what I did to stay sane. If the iOS development were a walk in a dark city park, this talk may turn out to be your flashlight. If you like it, star it at GitHub: https://github.com/wkoszek/sensorama-ios
Agenda
https://www.meetup.com/svmobiledev/events/235836893/
Materials
https://github.com/wkoszek/talks/tree/master/svmobiledev2016
Some links from the slides
Fake it till you make it presentation https://developer.apple.com/videos/play/wwdc2014/223
Designing for Future Hardware https://developer.apple.com/videos/play/wwdc2015/801/
References
WWW: http://www.sensorama.org
GitHub (code): https://github.com/wkoszek/sensorama-ios
GitHub (artwork): https://github.com/wkoszek/sensorama-artwork
Author
WWW: http://www.koszek.com
Twitter: https://twitter.com/wkoszek
LinkedIn: https://www.linkedin.com/in/wkoszek/
Email: wojciech (at) koszek.com
The document provides an overview of building a movie review Android application using existing libraries to minimize coding. It discusses integrating ActionBarCompat for the action bar, Retrofit for making API calls to Rotten Tomatoes, Picasso for loading images, and libraries for pull-to-refresh functionality and card UI design. The application allows users to search for movies and see ratings and details.
The document discusses some challenges and considerations for developing iPad applications for businesses. It notes that while the iPad is aimed at consumers, businesses are also starting to use it as a tool. However, developing software for the iPad brings its own challenges. The document outlines some key questions to ask to determine whether a native iOS application or HTML5 web application is the best approach. It also discusses platform requirements like needing a Mac computer to develop for iOS.
Android Internals (This is not the droid you’re loking for...)Giacomo Bergami
- The document discusses creating native Android applications using the NDK and cross-compiling C/C++ code to run on Android.
- It provides an example of a simple client-server program written in C that is compiled to run within the Android emulator, without using any Google APIs.
- The key steps are setting up the Android development environment, cross-compiling the C code using the NDK flags and libraries, and running the resulting binary within an Android emulator.
The document discusses web apps, defining them as websites that perform a useful function, are targeted at smartphones, and are built using web technologies with some native code. It covers aspects of developing web apps such as tools, tricks, and trade-offs involved in the development process. The key tasks in developing a web app are conceptualizing what it will do, creating wireframes, developing the server-side code, client-side code, and native wrappers for different devices.
Android has grown rapidly since its introduction and now has a large ecosystem. However, fragmentation between devices is a major challenge for developers. While the Android Market allows wide distribution of apps, making money from apps is difficult with the dominance of free apps. AdMob advertising provides an alternative revenue model for developers. To survive, developers need to create unique and frequently updated apps in popular categories that meet user needs across different devices.
ISS Art. How to do IT. Kotlin MultiplatformISS Art, LLC
As soon as Kotlin-Multiplatform technology appeared, we saw in it the opportunity to optimize and accelerate the development of mobile applications.
What were the results? Nikolai Baklanov, our senior iOS Developer will tell you in his presentation “Experience in the use of Kotlin-Multiplatform technology, attempts to reduce everything to one language.”
The document is a presentation about making iPhone app development easy using NimbleKit. NimbleKit allows development of iOS apps using HTML and JavaScript instead of Objective-C, and apps can be published to the Apple App Store. The presentation demonstrates NimbleKit, lists its features like native iOS interfaces and access to device capabilities, and provides resources for learning more about iPhone development.
This document summarizes an Android design course presented by Yonatan Levin. It discusses:
1. The history and goals of the course, which aims to teach designers and developers how to better integrate and communicate through hands-on lessons and a hackathon.
2. Logistics of the course including its schedule over multiple sessions and expectations for watching online videos between lessons.
3. Key technical concepts in Android design like using density-independent pixels (dp) to account for different screen densities, providing multiple versions of assets, and naming conventions.
Flutter vs Ionic vs React Native vs Xamarin - Which is best for Cross-Platfor...simonedaniels3
If you've been looking for the best way to develop cross-platform apps, you've probably come across Flutter, Ionic, React Native, and Xamarin as your top options. But to know which one is best among all just visit at https://www.zenesys.com/blog/flutter-vs-ionic-vs-react-native-vs-xamarin
by Giulio De Donato - The last few years have been incredible for PHP, the community, thanks to best practices emerged from the Medieval period. The talk shows the best of the PHP Renaissance, combining concepts and approaches of different philosophies and languages in order to let you create the perfect PHP application. Take part in the Renaissance, today! Warning: - Vintage concepts as Object Oriented Design will be administered to attendees - Violent scenes against monolithic culture, will be shown during the talk - Some practices will be stolen from: SOLID princ., DDD, SOA - You will take PHP seriously.
Comparisons react native vs. flutter vs. ionic vs. xamarin vs. native scriptMoonTechnolabsPvtLtd
When it comes to mobile app development, one can choose between fully native and cross-platform applications. Both approaches have their own unique advantages. This topic will provide you with a comparison of some of the most popular app development frameworks – 5, to be exact. These include React Native, Flutter, Xamarin, NativeScript, and Ionic.
The e-commerce is one of the main points of modern software. The e-commerce sector is growing about 15% annually, which is why it deserves special attention from software engineers. Speaking of e-commerce and open source at once is not easy. For many years we have identified the concept with pain and despair, so we must work urgently to change the way we understand it should be. What are the important points to consider? Where do we find the line between architecture and pragmatism? Are we walking in the right direction? How can Symfony help in this?
There are times when an extremely powerful platform like Flutter may not prove to be enough for your digital product. That’s when you need Flutter alternatives.
- Android is an open source operating system developed by Google that is used primarily for touchscreen mobile devices like smartphones and tablets. It is based on the Linux kernel and allows developers to write code using Java or Kotlin.
- The Android architecture consists of libraries and APIs on top of the Linux kernel, including a Dalvik virtual machine that executes applications. Apps are built using activities, fragments, intents and other components defined in the Android manifest file.
- Becoming an Android developer provides good career prospects with average salaries for entry-level positions around 3 lakhs per year in India. While Android has a huge user base, developing for its diverse ecosystem of devices can be challenging compared to platforms like iOS.
This document introduces Android Study Jams, which are community-organized study groups for learning to build Android apps using Kotlin. It provides an overview of the Android Study Jams curriculum and resources for getting started, including creating a developer profile, taking an Android Basics in Kotlin course, and earning badges. Participants can benefit from opportunities such as certificates, publishing apps, reimbursement for exams, and prizes.
Ionic - Revolutionizing Hybrid Mobile Application DevelopmentJustin James
This document discusses the Ionic framework for developing hybrid mobile apps. It begins with an overview of Ionic and its features, such as using HTML5, AngularJS, and Cordova to build apps that look and feel like native apps. It then covers various UI elements included in Ionic like lists, tabs, menus. It provides instructions on getting started with Ionic and discusses additional tools like Ionic View, Creator and Crosswalk. It emphasizes that Ionic makes mobile development easier but still requires modern web skills and lists several resources for learning more.
Similar to A Multiplatform, Multi-Tenant Challenge - Droidcon Lisbon 2023 (20)
MUWP SOLUTION by MUWPAY Bridging the current defi world to the future withYvesTshefu1
To MUWP [mu-oop] :
facilitate transfers and payments of multiple tokens from various wallets across different blockchains networks simultaneously, in a single operation
2. ONCE
UPON A TIME…
… A MULTIPLATFORM, MULTI-TENANT CHALLENGE…
A story by @neteinstein / @tiper …………………
(the bald guy) / (the small guy)
#dclx23 / #JustSawSomebodyFromMinderaSpeak
3. @neteinstein @tiper
Mobile Software Craftsman @ Mindera
Helping teams getting better with LoopGain
Co-Founder @ GDG Porto
Burning people @ O Que Arde Cura
Somebody who sometimes the keys I hit on the
keyboard generate a sequence of characters
that resembles working code that somehow find
its way into production @ Mindera
4. @neteinstein @tiper
Mobile Software Craftsman @ Mindera
Helping teams getting better with LoopGain
Co-Founder @ GDG Porto
Burning people @ O Que Arde Cura
Somebody who sometimes the keys I hit on the
keyboard generate a sequence of characters
that resembles working code that somehow find
its way into production @ Mindera
#JustSawSomebodyFromMinderaSpeak
5. And so it begins
AS WITH ALL GOOD STORIES… WITH A COMPANY TRYING TO BUILD 7 APPS FROM A SHARED CODE BASE…
9. Go for it if…
… having a top notch app is core to your business;
… Focused on each ecosystem’s UI/UX — patterns easily recognised by
users
… core features require using the state-of-the-art and leverage all the
platform capabilities.
But…
… you have budget to maintain 2-N teams, given more developers are
needed, as they are specialised.
… more code bases means more alignment, possible bugs etc
10. Go for it if…
… your company’s know-how is .NET/C#
… the app is not core to your business, or it is but you
have a lot of complex code to share among apps
… you want 1 team / reduce costs
But…
… the app might not be as performant as other options;
… developer community support is a real concern;
… can be twice as big as a native file
… not the best for apps with complex graphics
11. Go for it if…
… your company’s know-how is strong in React *
… the app is not core to your business, or it is, but you have a lot of
complex code to share among apps;
… time-to-market frame is key or you’re trying to build a POC, that you
might or might not reuse code from.
… you want to reduce costs
But…
… depending on the complexity of the app, at some point during
development you are likely to need native development
… the app will have “good enough” performance as it becomes more
complex, unless you go for native solutions to cope with that.
12. Go for it if…
… your company’s know-how is strong in Dart;
… you want a complete common app (UX/UI + Logic)
… you’re trying to build a POC, that you might or might
not reuse code from
But…
… finding Dart developers can be challenging (and
expensive)
… there is always the risk of Google dropping Flutter
13. Go for it if…
… you already have good Android devs with Kotlin experience
… having a top-notch app is core to your business
… you want to just share the logic not UX/UI
… you want to reduce costs (less devs and codebase)
But…
… still Beta
… still hard to find devs with proper KMP knowledge
…still exports to iOS as Obj-C
14. Go for it if…
… you already have good Android devs with Kotlin
experience
… a common UI/UX between OSes is desirable
… you want to reduce costs
But…
… still Alpha for iOS
… harder to customize components on each OS
18. 7 dif Apps, 1 Codebase, ideas?
React
Flutter Xamarin
Your option better be good…
19. 7 Apps, 1 Codebase…ideas?
React
Flutter Xamarin
Your option better be good…
20. 7 Apps, 1 Codebase…ideas?
React
Flutter Xamarin
Your option better be good…
Before you ask:
Yes, it’s me and
I had hair…
21. 7 Apps, 1 Codebase…ideas?
React
Flutter Xamarin
Your option better be good…
No, Tiago was
still the same
size…
Before you ask:
Yes, it’s me and
I had hair…
22. 7 Apps, 1 Codebase…ideas?
React
Flutter Xamarin
Your option better be good…
No, Tiago was
still the same
size…
Before you ask:
Yes, it’s me and
I had hair…
Now stop the
questions, let’s
continue.
23. 7 Apps, 1 Codebase…ideas?
React
Flutter Xamarin
Your option better be good…
27. You’re the first one to ask…
💡 Shared logic
🖌 Features might have same or different UX/UIs
Meaning:you need to support both - we’ll decide along the way
💸 Budget
💥 Single code base for 7 tenants didn’t scale
properly…
28. 7 Apps, 1 Codebase, ideas?
React
Flutter Xamarin
Your option better be good…
Kotlin
Multiplaform?
32. Native UI
Native UI
Shared Code
API
Step 3: We can have multiple Apps being fed by the Shared
code layer (each with its UI layer)
Native UI Native UI
33. And how the hell do we
share:
● Common features
● UI components?
Good question!
35. Step 4: Let’s deep dive into the Android side.
Native
App
Code
Profile Register
…
Login
36. Step 4: Let’s deep dive into the Android side.
Native
App
Code
KMP
Shared
Library
Login
Business Logic Module
Profile Module
Register
Business Logic
Module
…
Network Module
...
Profile UI Register UI
…
Login UI
…
37. Step 4: Android: UI Components Library
Native
App
Code
KMP
Shared
Library
Login
Business Logic Module
Profile Module
Register
Business Logic
Module
…
Network Module
...
Profile UI Register UI
…
Login UI
…
Big Button
Android Native
UI Components Library
Text Label
Small Button
...
38. Step 4: A feature has 2 blocks
Native
App
Code
KMP
Shared
Library
Login
Business Logic Module
Profile Module
Register
Business Logic
Module
…
Network Module
...
Profile UI Register UI
…
Login UI
…
Big Button
Android Native
UI Components Library
Text Label
Small Button
...
39. Step 4: Android: and a feature have different logic
implementations (and UI)
Native
App
Code
KMP
Shared
Library
Login
Business Logic Module
Profile Module
App P Profile App T Profile
Register
Business Logic
Module
…
Network Module
...
Profile UI Register UI
…
Login UI
…
Big Button
Android Native
UI Components Library
Text Label
Small Button
...
40. Step 4: Android: and a feature have different logic
implementations (and UI)
App P Native Code
KMP
Shared
Library
Login
Business Logic Module
Profile Module
App P Profile App T Profile
Register
Business Logic
Module
…
Network Module
Homepage Logic
Profile UI
…
Big Button
Android Native
UI Components Library
…
App P Native Code
Profile UI
Homepage UI
Homepage UI
Login UI
Android Native
Common Features
…
41. Step 5: iOS (same with an extra layer to bring Swift sugar
syntax)!
Native
App
Code
KMP
Shared
Library
Login
Business Logic Module
Profile Module
App P Profile App T Profile
Register
Business Logic
Module
…
Network Module
...
Profile UI Register UI
…
Login UI
…
Big Button
iOS Native
UI Components Library
Text Label
Small Button
...
Objective-C to Swift Abstraction Layer
42. Step 5: iOS!
Native
App
Code
Profile UI Register UI
…
Login UI
Objective-C to Swift Abstraction Layer
Again this Native App Code above is a simplified version.
It will contain an Architecture pattern, Navigation, Deep
Links, Pushs, etc as a “normal” app.
44. Step 7: How do we export?
Login Module
Register Module
Register Module
Domain
Module
Profile P
Module
Network Module
App P Business
Library
Profile T
Module
App T Business
Library
45. Step 8: And how do we work with all this?
Dependency
Dependency
Dependency KMP Common Lib
Business Layer (API,
DB..)
Dependency
Dependency
Step 8: How does it work on Android?
Android Common Components
Kotlin Code for Android native
UI components
App T Android
App P Android
Android Common Features
To be shared across tenants
46. Step 8: And how do we work with all this?
Dependency
Dependency
Dependency KMP Common Lib
Business Layer (API,
DB..)
Dependency
Dependency
Step 9: And iOS?
Export
Export
iOS Common Components
Swift Code for Android native
UI components
App T iOS KMP
XCFramework generated from KMP
for iOS App consumption
App T iOS
iOS Common Features
To be shared across tenants
Dependency
App P iOS
Dependency
App P iOS KMP (Exports)
XCFramework generated from KMP
for iOS App consumption
Dependency
Dependency
Dependency
Android Common Components
Kotlin Code for Android native
UI components
App T Android
App P Android
Android Common Features
To be shared across tenants
47. Are you sure you can do
this?
Let’s deep dive to
prove it!
49. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
50. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
51. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
52. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
53. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
55. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
77. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
78. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
79. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
84. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
85. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
90. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
91. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
101. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
102. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
113. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need.
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
114. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
115. Let’s recap ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
121. Let’s “check” ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
122. Let’s “check” ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
123. Let’s “check” ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
124. Let’s “check” ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
125. Let’s “check” ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
126. Let’s “check” ‘the requirements’ {
}
Shared UI components. That can be themed and
customized per need
Shared features. Data, business logic, UI
Architecture agnostic. Each tenant/platform can
have its own MVDeprecatedNextYear
Navigation independent. Each tenant will define
its own
Compose multiplatform support
130. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
Lessons.1 {
}
Life DSL
What we learned on the KMP journey
● Be sure what you are trying to accomplish
Do you need shared logic, features, components? For business sometimes it
all seems the same.
● Get the right team
Being an Android dev is not equivalent to developing KMP properly
● Act as one team, not 2 (Android & iOS)
This needs much closer alignment between OSes make sure that happens
● Start with less repos and break slowly
Multiple repos is cumbersome. Use submodules or merge repos if the team is
small
● iOS will be dependent on Android
Either have everyone working on KMP or make sure the Android team is large
enough
131. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
Lessons.1 {
}
Life DSL
What we learned on the KMP journey
● Be sure what you are trying to accomplish
Do you need shared logic, features, components? For business sometimes it
all seems the same.
● Get the right team
Being an Android dev is not equivalent to developing KMP properly
● Act as one team, not 2 (Android & iOS)
This needs much closer alignment between OSes make sure that happens
● Start with less repos and break slowly
Multiple repos is cumbersome. Use submodules or merge repos if the team is
small
● iOS will be dependent on Android
Either have everyone working on KMP or make sure the Android team is large
enough
132. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
Lessons.1 {
}
Life DSL
What we learned on the KMP journey
● Be sure what you are trying to accomplish
Do you need shared logic, features, components? For business sometimes it
all seems the same.
● Get the right team
Being an Android dev is not equivalent to developing KMP properly
● Act as one team, not 2 (Android & iOS)
This needs much closer alignment between OSes make sure that happens
● Start with less repos and break slowly
Multiple repos is cumbersome. Use submodules or merge repos if the team is
small
● iOS will be dependent on Android
Either have everyone working on KMP or make sure the Android team is large
enough
133. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
Lessons.1 {
}
Life DSL
What we learned on the KMP journey
● Be sure what you are trying to accomplish
Do you need shared logic, features, components? For business sometimes it
all seems the same.
● Get the right team
Being an Android dev is not equivalent to developing KMP properly
● Act as one team, not 2 (Android & iOS)
This needs much closer alignment between OSes make sure that happens
● Start with less repos and break slowly
Multiple repos is cumbersome. Use submodules or merge repos if the team is
small
● iOS will be dependent on Android
Either have everyone working on KMP or make sure the Android team is large
enough
134. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
Lessons.1 {
}
Life DSL
What we learned on the KMP journey
● Be sure what you are trying to accomplish
Do you need shared logic, features, components? For business sometimes it
all seems the same.
● Get the right team
Being an Android dev is not equivalent to developing KMP properly
● Act as one team, not 2 (Android & iOS)
This needs much closer alignment between OSes make sure that happens
● Start with less repos and break slowly
Multiple repos is cumbersome. Use submodules or merge repos if the team is
small
● iOS will be dependent on Android
Either have everyone working on KMP or make sure the Android team is large
enough
135. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
Lessons.2 {
}
Life DSL
What we learned on the KMP journey
● How agnostic do you want to be?
If another team picks up another tenant is it ok to change architectures?
● Compose Multiplatform vs Jetpack Compose
If there is a plan to support other platforms it’s simple to pick up
● Use design tokens
If possible use something like Toolabs with Figma to auto-generate code
● Desktop is useful to force decoupling,
but...
It’s a pain sometimes to support features that are more mobile aimed
136. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
Lessons.2 {
}
Life DSL
What we learned on the KMP journey
● How agnostic do you want to be?
If another team picks up another tenant is it ok to change architectures?
● Compose Multiplatform vs Jetpack Compose
If there is a plan to support other platforms it’s simple to pick up
● Use design tokens
If possible use something like Toolabs with Figma to auto-generate code
● Desktop is useful to force decoupling,
but...
It’s a pain sometimes to support features that are more mobile aimed
137. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
Lessons.2 {
}
Life DSL
What we learned on the KMP journey
● How agnostic do you want to be?
If another team picks up another tenant is it ok to change architectures?
● Compose Multiplatform vs Jetpack Compose
If there is a plan to support other platforms it’s simple to pick up
● Use design tokens
If possible use something like Toolabs with Figma to auto-generate code
● Desktop is useful to force decoupling,
but...
It’s a pain sometimes to support features that are more mobile aimed
138. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
Lessons.2 {
}
Life DSL
What we learned on the KMP journey
● How agnostic do you want to be?
If another team picks up another tenant is it ok to change architectures?
● Compose Multiplatform vs Jetpack Compose
If there is a plan to support other platforms it’s simple to pick up
● Use design tokens
If possible use something like Toolabs with Figma to auto-generate code
● Desktop is useful to force decoupling,
but...
It’s a pain sometimes to support features that are more mobile aimed
140. Drop by our yellow booth if you want to know more
about what we are building at Mindera
…or just go all in fanboy and insult us 🙈
We promise we’ll give you a 🤗
anyway!
Btw, we’re hiring!
141. Mobile is within our
core. We’re grateful to
work with iconic brands.