img

Touchlab KotlinConf 2019 Recap

Touchlab attended KotlinConf 2019 in Copenhagen, Denmark. As anticipated, the conference was a milestone event for the development of Kotlin Multiplatform and its community of practitioners and contributors.

VIDEOS! There will most likely be ‘official’ videos published soon, but the content is already up in the live stream so we organized links to each talk for you.

This post also contains reactions to Kotlin Multiplatform sessions attended by Touchlab’s Ben Whitley (multiplatform mobile engineer with iOS background) and Kevin Galligan (Partner). 

Before we jump in, we’d like to call out two important moments from the conference:  

1. During his keynote, Kotlin Lead Language Designer Andrey Breslav highlighted Touchlab as a critical community member to JetBrains’ mission to usher in a new era of mobile development with Kotlin Multiplatform (view clip).

2. During the closing Q&A panel an audience member asked about approaches for getting iOS developers onboard for a KMP pilot. JetBrains’ VP of Developer Advocacy Hadi Hariri recommended organizations speak to Touchlab as we’re actively working with clients on this exact topic (view clip).

Thursday Recap

Opening Keynote by Andrey Breslav (view keynote)

 

Pre conference take

The KotlinConf keynote is must watch for anybody that’s interested in Kotlin. Any major new stuff will be announced.

Ben’s reaction

  •  Think of Kotlin as an entire ecosystem, not just a language. 
  • The goal is to make Kotlin the default language for starting any project and make it a universal solution for every platform. For any and all levels of experience, platforms, scales, and application.
  • Dropped the term “full-stack Kotlin” which I personally hadn’t heard before.
  • No major new features in Kotlin 1.4. Focus is on quality and performance, which is smart, given the current build times. 

 

Kevin’s reaction

  • They are very focused on making Multiplatform a reality. 
  • You’ll be able to run/debug native iOS apps from Android Studio. That will be a huge adoption driver.  
  • 1.4 will bring a lot of stability and performance/compiler improvements, which will be a big deal.

Sharing Is Caring – Kotlin Multiplatform for Android Developers by Britt Barak (view talk + slides

Pre conference take

This will be a good intro talk. It includes not only native, but JS and backend code.

Ben’s reaction

  • Getting started (aka project configuration and setup) is currently the biggest pain point. Something we can probably all agree on. 
  • Big plurality of different needs, and therefore different architectures. This is still an open ended issue for KMP, and one we’re very familiar with at Touchlab. Because there’s many different use cases and it’s still open ended, this wasn’t intended as a talk on KMP architecture.
  • https://github.com/aakira/kotlin-multiplatform-libraries is a very cool resource to find packages
  • Overall a really good getting started talk, even though a lot of it was very familiar for us at Touchlab.
  • I’d strongly recommend checking out the video of it for Android developers interested in KMP. 

 

MPP in 1.3.X and beyond by Dmitry Savvinov and Liliia Abdulina (view talk)

Pre conference take 

Another KMP intro, from JetBrains engineers

Ben’s reaction

  • Future goal is a complete KMP ecosystem
  • A lot of the talk was a history of KMP through Kotlin versions up until this point
  • Included a shoutout to Touchlab

 

Kevin’s reaction

  • For the future they’re going to focus on docs and onboarding much more, as well as for specific use cases like native mobile. The team had been much more focused on “general” multiplatform.
  • The original discussion of “multiplatform” started in 2016, which is around when Kotlin JVM was 1.0. JS has been around and in use significantly longer than native.

Coroutines! Gotta catch ‘em all! by Florina Muntenescu and Manuel Vivo (view talk)

  

Pre conference take

Concurrency for native will be mostly centered around coroutines, so an intro to coroutines is valuable.

Kotlin Multiplatform in Action: more than 10 projects for iOS and Android with Shared code by Alexandr Pogrebnyak (view talk)

 

Pre conference take

IceRock has been shipping KMP for a while, and has published templates and libraries to help. This will probably be a useful talk for practical KMP advice.

Kevin’s reaction

  • Have released a set of libraries targeted at native mobile development that we should review for use on projects
  • They have a shared UI library for native mobile. Uses native widgets to render. That’s a lot of work to build but assuming we can mix with fully native screens, this is something we’ll be taking a look at.

Bridge the physical world: Kotlin/Native on Raspberry PI by Qian Jin (view talk)

 

Pre conference take

More Kotlin Native. It’s being deployed to an IOT device, which may be interesting to see.

Your multiplatform Kaptain has arrived by Ahmed El-Helw (view talk)

Pre conference take

Careem is shipping KMP in a major platform. This is critical info for orgs getting serious about KMP. We’ll be there for sure.

Ben’s reaction

  • Very early users of KMP
  • KMP exciting and nerve-wracking for management
  • Communication processes were a solution to problems between iOS and Android teams
  • This is a very good “lessons learned” type of talk
  • Shoutout to Touchlab generics patch and Kevin’s blog post about generics 
  • Mentioned basically everything Kevin has put out there at this point, including CrashKiOS and Xcode Plugin. 
  • Ended with a cool/funny poem (last pic)

Shipping a Mobile Multiplatform Project on iOS & Android by Ben Asher and Alec Strong (view talk)

 

Pre conference take

More KMP-in-production experts. We work directly with the Square team doing this, and chat often with Ben, so we’re very much looking forward to see what they have to say.

Ben’s reaction

  • High initial setup cost for KMP, will be worth the effort
  • Features develop parity even if they start out the same (or similar). Good point, not discussed enough
  • Shout-out to Kevin’s concurrency talk. They recommend doing the suspend and lambda methodology (which is what we do pretty regularly).
  • Pros and cons of monorepo, which is under discussed good con for iOS devs: they often don’t even have JVM.
  • Didn’t mention Touchlab CrashKiOS, which is exactly what they need for the improved crash reporting they want. 

 

Kevin’s reaction

  • Square and PlanGrid are some of the earliest shipping apps, and have really had to figure out a bunch of the stuff.
  • I’ve been involved directly with Square, and have worked a fair bit with Ben because they ship on Windows, so we’ve been publishing our libraries to Windows.
  • Great thoughts for introducing your team to and educating your team on KMP.
  • Pick something that the teams don’t like and/or that’s fairly critical and needs to run the same. Sync for PlanGrid and transaction search for Cash.
  • Stopped taking notes because my talk was happening after theirs

 

Kotlin Native Concurrency Explained by Kevin Galligan 
(view talk + slides)

 

Links included in Kevin’s talk

Pre conference take

If you want to do KMP on native, you need to understand concurrency. This is our talk, and a must see, obviously

Friday Recap

I Walk The Line: What Parts Of An App Should be in Kotlin Native – and What Parts Shouldn’t? by Ellen Shapiro (view talk)

 

Pre conference take

Ellen knows mobile tech, and brings a lot of iOS experience to the KMP equation. We’re definitely checking this talk out.

Ben’s reaction

  • Developer enthusiasm is key to adoption of cross platform products
  • Gave away copies of Ray Wenderlich Kotlin book to people who ask interesting questions – good idea for engagement
  • Ellen came up with MVSP (Model ViewState Presenter) architecture to replace MVP. It’s a form of unidirectional data flow partially inspired by SwiftUI
  • Shoutout to Kevin’s talk yesterday, she said “it goes into a ton of detail” 
  • Know why you’re using Kotlin Multiplatform, that will dictate how much and what KMP you should do

Going Native: How I Used Kotlin Native to Port 6 Years of Android Games to iOS in 6 Months by Ana Redmond (view talk)

 

Pre conference take

Ana got into native early on and has done very interesting work. This will be a really good talk.

 

Ben’s reaction

  • Ana is a perfect example of what Kevin (and Ellen in her talk) says: if you’re going to do cross platform or common code, know why you’re doing it. 
  • She’s using KMP for shared UIs; very difficult and impressive. As she says, this is possible because of few external dependencies (basically none), which is why this is a good use case for shared UI.
  • She wrote her own KMP WeakRef wrapper to avoid retain cycles in iOS, pretty smart and cool. Has its limitations, won’t catch retain cycles across KMP and native code. 
  • Lessons learned
    • Classes > Objects: to avoid the threading and mutability issues that Kevin’s always talking about
    • Lists > Arrays: this is vindicating as I’ve found this myself and I’ve been saying it for a while now
    • Initialization order: she found very weird behavior in overriding initializers in KMP. See corresponding pic. Something we’ll be looking into at Touchlab. 

Effective Kotlin-Swift Interoperability by John Rodriguez (view talk)

 

Pre conference take

Kotlin/Swift communication is a huge topic for KMP. Improving the situation for iOS developers will be critical for adoption, so this is a critical topic to understand.

Kevin’s reaction

  • Went very deep on interop details. I learned some new things, especially WRT enums.

Kotlin/Native: Answers Your Won’t Find on the Internet 
by 
Eugenio Marletti (view talk)

Pre conference take

Eugenio is a member of the JetBrains developer relations team, focused on KMP and native. He’s going to be critical to improving the documentation and onboarding experience, so you should definitely check this talk out.