Loading...
Home
  • Tech Blogs
  • Videos
  • Conferences
    • Droidcon News
    • Upcoming Conferences
    • Become a Partner
    • Past Events
    • Keep Me Informed
    • Diversity Scholarships
  • Community
    • droidcon Team
    • How to Hold a Droidcon
  • Android Careers
Sign In

Global CSS

droidcon News
Building Multiplatform Mobile Apps in Kotlin
Speaker: Russel Wolf Source: droidcon Online 2020 Multiplatform Series Webinar (Part 1 of 3)
Transcript
en-us
00:00
Gerty thanks very much so yeah I'm
00:06
Russell wolf I'm a multi-block from
00:09
engineer at clutch late I go in touch
00:12
lab in this past February um after
00:16
hadn't been doing mostly bought some
00:18
stuff for a little over two years
00:20
especially funny Greg you were talking
00:22
about the the like initial release of
00:26
multi-platform in in 2017 so that like
00:31
that that like first released I was
00:33
concurrent with with cotton 1.2 was just
00:36
um JVM and JavaScript because because
00:40
cotton native was still kind of in in
00:42
early development at that point and it
00:46
became possible to do like con carne de
00:49
got like added to multi platform in
00:51
February of 2018 and I was looking back
00:56
at my get history recently um and I
01:00
guess I like did my first like wrote my
01:03
first code in but wrote my first month
01:06
on code the day after that release so I
01:11
jumped in pretty early so and and that
01:16
that was not quite yet though I really
01:18
did but but um one of my projects they
01:21
still need teen was almost about from
01:23
settings library um so yeah that's
01:28
that's a few notes ago me let's talk a
01:36
little bit uncommon so Carlos gave up
01:40
pretty good kind of interruption to my
01:44
work so I don't want to we keep those
01:47
details do too much um but it's a quick
01:50
summary so caught multi-platform in
01:54
takes takes the different levels of
01:56
outland unless you compile but from but
01:59
gnostic code to multiple different
02:02
targets so that might be JVM which is is
02:05
Android or or like server-side Java
02:08
JavaScript which might be browser or
02:11
might be node who are native
02:14
might be desktop native and that it or
02:18
iOS and then even use black or acidic
02:24
code to to talk to the eyes of those
02:27
individual platforms and like we're all
02:30
very used to the the smooth JPN Interop
02:32
that that cotton has on the on the top
02:35
and the Android side and you have you
02:38
have similar interrupt with the platform
02:40
api's of whichever of the platform
02:42
you're on from your platform good and
02:47
one thing I do want to know there is cuz
02:48
up I did see a question go by on it from
02:52
the first talk so you you can do expect
02:56
the actual on to uh to talk between your
02:60
your comment and your platform code and
03:02
in a lot of cases it can be nice and it
03:05
can do certain things that interfaces
03:06
can't like like having expect
03:08
instructors or expect a little functions
03:11
but one of the disadvantages sometimes
03:14
is expecting actual is forced by the
03:19
compiler to be one-to-one relationship
03:22
so there is exactly one actual
03:25
declaration per platform for each expect
03:27
declaration and one of the that doesn't
03:30
have to sometimes of that is it's you
03:32
can't swatch Swift that out for in your
03:34
custom so sometimes it can be nice to
03:37
still stick to old-fashioned interfaces
03:39
because it lets you like a passing a
03:41
test mark instead and yet the other
03:47
point I wanna make is some of them is
03:50
very well suited to to normal at farms
03:55
in radicular so like yes you can even
03:57
share between between any of these
03:58
people at forums but they provide um but
04:02
one of the things that's nice about
04:03
mobile is to your users like Android iOS
04:07
are roughly the same thing and like yes
04:10
under the hood they're doing lots of
04:11
things but um there's a lot of
04:14
opportunities to share code between
04:16
mobile Android iOS apps because they're
04:20
probably going to be doing the same
04:21
thing because your users and like your
04:24
beer crunch matters and so if you
04:27
usually want
04:30
and I'm not going to one saying this the
04:34
difference when but Mexico's Mountain
04:38
Coffee launched this like Colin for
04:41
cross-platform mobile development page
04:43
to say you know like their interest also
04:47
in in pushing this use case as like one
04:50
of the key cases well not the platform
04:52
I mean yeah I really think it is the one
04:56
of the best ones but of course uh like
05:03
it's it but that's all I say like how do
05:05
you actually like I started with it so
05:08
yeah this gives it give us a great
05:09
introduction but one of the things that
05:13
you can find if you if you've been had
05:15
upon in this case for a while is like
05:19
Colin went over the last two years has
05:21
been a bit of a moving target like the
05:24
best practices involved the tooling has
05:27
changed dramatically from what it was
05:29
two years ago and it's like it's gotten
05:32
a lot more stable easily than than it
05:34
was early on in terms of breaking change
05:36
things happening but there's still a lot
05:38
of kind of of old information out there
05:42
that can get confusing there's also the
05:46
diffusion of like well I resist
05:48
so what puzzles all talking in the first
05:50
talk about I think here are some of the
05:53
kind of libraries that you've used to
05:54
replace what you're used to on the DBM
05:56
and that's that's also kind of one of
05:60
the one of the early sticking points a
06:02
lot people starting out half of like yes
06:05
even my Android code is even though I
06:07
under code just kind of doing the same
06:08
doing the same thing as it was doing
06:11
natively it's still talking to different
06:12
libraries and that still has a change
06:14
that you have to get used to and then of
06:18
course there's all this new
06:18
configuration stuff that you have to
06:19
learn so uh I touch Ladd we kind of were
06:27
were think about all this stuff and kind
06:29
of getting feedback about the
06:31
difficulties that people having and
06:33
that's what um who had us to put
06:37
together this demo project called can't
06:38
get this both a
06:41
it's a product template as well as a
06:46
documentation so that you can have any
06:52
source for like what is the kind of
06:54
up-to-date
06:55
that's practice I mean when were
06:58
committed to keeping that up to date um
07:01
so one of the dungeons in bet that we
07:05
made with it is once you have kind of
07:10
thought built was installed like that
07:12
you have Xcode and energy installer or
07:17
IntelliJ it pretty much runs out of the
07:20
box
07:21
um and that was uh that was important to
07:23
us because because one of the pieces of
07:24
feedback we were getting was during
07:27
teams would like set up a hack week and
07:28
they wanted to investigate all the month
07:29
clap for him and they would spend the
07:33
entire time just trying to get something
07:34
running and that means you have no time
07:36
to actually like see how it works for a
07:38
use case and that would that cause
07:39
people to dismiss it as as not ready
07:42
even though if they kind of gotten over
07:44
those sorts of big hurdles they might
07:45
have actually made a lot of progress so
07:48
we wanted to kind of help teams get over
07:50
that hole or hurdle more quickly
07:51
um so here's here's what the weather
07:59
somebody that looks like it's if a
08:01
single screen its makes a web call to
08:04
grab a list of dog breeds now lets you
08:08
select which ones are your favorites on
08:10
and doing so it crunching the whole kind
08:14
of lick but basic step but you might see
08:18
in a typical crowd app so you um you
08:21
make the book called you say things
08:22
through the database and then you quit a
08:23
database to lay that out in the UI so uh
08:29
a couple notes on the architecture of
08:32
that on so the data later on is mostly
08:37
shared so that's the the networking
08:42
logic the database logic
08:44
um the kind of glue that holds
08:46
everything together and get in kind of
08:48
like the data that then gets close back
08:50
out to the UI on UI itself on its it's
08:55
too
08:55
seven native you eyes and that lets you
08:59
kind of continue to leverage your like
09:03
native toilet expertise in kind of doing
09:06
the top of a build-up at UI and of like
09:09
working with the latest
09:10
he is that those platforms provide and
09:14
one of the kind of common themes and a
09:18
lot of decisions that we made in
09:19
building camp kit um was kind of making
09:23
things play nicely with colonnaded a
09:26
threatening model obviously it's kind of
09:29
see that as a bit of a theme as I walk
09:33
through some of the some of the code so
09:42
I'm not gonna go super deep on the
09:45
concurrency model um I'm gonna have some
09:48
great talks on it that I had heard to
09:50
you to check out but the kind of short
09:55
version of it is kala native is much
09:59
stricter about mutability and mutability
10:03
and threads then you're used to on the
10:06
radio so anything that is mutable on can
10:11
only move in a single threaten : d axis
10:12
by single thread something that's
10:15
immutable can you share across multiple
10:18
threads and immutable here does not mean
10:22
Albertus VAR or whispers mutable list or
10:26
what you might be thinking of for when
10:28
you see one a vm Kotlin an immutable
10:30
here means frozen which is this new API
10:35
that exists Justin got the native that
10:39
means that objects and everything that
10:42
it had the reference to UM can't be
10:45
changed into a throw a runtime error if
10:47
it does what that ensures is that when
10:52
you pass something across threads um it
10:56
must be in the exact same state in every
10:58
thread and you can't get into these
10:60
weird on base conditions and where what
11:04
do you might get inconsistencies and
11:06
hard to debug errors
11:09
um so those rules are like simple to
11:12
state that implications kind of can take
11:14
a little bit beautifully kind of like
11:17
grass that you're working with and
11:18
they're they're a little different than
11:20
what you're used to in the day vm um but
11:22
it is very possible to work with them
11:24
and it can help you write better like
11:27
safer code in particular like it plays
11:30
nice with um with architecture that kind
11:35
of focuses on immutable data and kind of
11:39
like a bit of a more functional style
11:40
which is a bit the way the industry has
11:43
been going lately anyway
11:49
so let's talk a bit about some of my
11:52
memories that exist in candy space and
11:55
kind of how we're using them in get get
11:57
and I'll start with Colin Xcode routines
12:02
so cover teens are Cotton's asynchrony
12:07
library on that you're probably used to
12:10
coming from the Android world and
12:15
there's kind of two two major at the i/o
12:18
stuff that we make using a kit there's
12:20
like you didn't spend functions where
12:21
you're just kind of like on suspending
12:23
and waiting for single value and there's
12:25
flows where you're listening to strength
12:27
values and these are course so you can
12:32
use these in your you can use any of
12:36
these API is in your common code on iOS
12:41
but suspend function you just don't get
12:44
don't get exposed to a swift obviously
12:46
you can't use it from like your UI ll
12:48
codify us so the way to work around that
12:53
is you can kind of manually pass some
12:56
sort of way on the callback and in in
12:59
cotton 1.4 there will be a there will be
13:03
a kind of thing that generates that on
13:05
that we honestly you don't have to upset
13:08
the manual yourself and another kind of
13:13
important piece of what we're doing in
13:16
can't get is uh so
13:20
curtains
13:22
on another native the release version
13:24
are single-threaded which in practice
13:29
often means me in front of but you can
13:31
be single-threaded on backgrounds right
13:32
as well and that obviously has some
13:36
limitations so there's a preview movies
13:39
of multi-threaded routines that hasn't
13:42
emerged in the main trunk yet because
13:44
there's some some issues that are still
13:46
working on in terms of the memory leaks
13:50
that can happen but camp gate which is
13:54
is trying to find EB I mostly stayed in
13:58
the art but a little bit forward-looking
13:60
makes use of that one for the branch to
14:02
kind of get you started get you started
14:07
ready vote with it in the hopes that
14:08
like by the time that code is production
14:10
that will obvious able and another kind
14:15
of note around our covert easy surgeon
14:17
camp kit were expected to do some
14:20
summary factors at some point in their
14:22
teacher around how we can look over team
14:23
scopes so like right now the shared code
14:26
is creating its own scopes and like to
14:28
adjust that so that at least on the
14:31
Android side the Android code can pass
14:33
in things like email scope you get um
14:36
but you get natively in Android so if
14:40
you're looking at the code today like
14:41
expect some changes there at some point
14:42
the future so moving on from her teams
14:46
on the dependency vector that we use in
14:50
get get is pointing or I should say the
14:55
identity manager so that I don't step
14:57
into the middle of that like dependency
14:58
injection versus service locator today
15:01
but uh we're using a again this is a
15:06
preview of the next version Aquinas it's
15:09
an alpha of going 3.0 and it's what what
15:16
that adds in this was was computed by by
15:19
Kevin again is he it basically on had
15:26
some thread safety by kind of enforcing
15:27
that the configuration of coin happens
15:29
on the main thread on iOS so that you're
15:32
not accidentally passing something
15:33
across threads
15:36
and within our our usage of it in camp
15:41
kit we have kind of a couple different
15:44
innovation points across comedy and
15:46
Python codes you can within point you
15:49
you can kind of injects the MCS at
15:51
different levels so we have the core
15:53
module what you see in the middle here
15:56
that passes to kind of use that kind of
15:59
only only need to be configured from
16:01
common on we also have a via expected
16:05
platform module which lets the the
16:10
common code look less the farm code have
16:14
seen kind of computer sees that coin
16:16
needs to have access to you know we also
16:19
have this extra declaration lambda which
16:22
lists not just the platform code of the
16:25
shared library but also the the like
16:29
talk about location pass dependencies in
16:31
and that lets us insert the android
16:34
application context into the graph and
16:40
then yeah
16:40
one of the pointing to a coin is there's
16:44
a on a test if you have a expose which
16:50
we have we have a test test encamping
16:52
the demonstrates call it check modules
16:55
which provides kind of the same sort of
16:58
graph checking that you get in something
17:00
like daggered or at compile time but it
17:03
runs at unit test time is dead so if
17:05
you're concerned about moving from
17:07
something that's kind of compiled time
17:09
tracking your graph to something that's
17:11
runtime checking it um having something
17:13
like that in place can still help you
17:15
kind of feel confident that your graph
17:17
is staying consistent so case or is the
17:25
cross platform on HTTP client that that
17:29
jeffrys provides and yes it's it's a
17:33
coaching aware if you could be client
17:35
I'm sorry I just did the code that
17:37
innovation but in the wrong order um but
17:40
uh so it does it's under version by a
17:45
felon X serialization library which I
17:48
want with more detail on because we
17:49
don't actually do anything there so Kate
17:56
where right now is not multi-drive safe
17:58
and that it like it's um it's built
18:01
against the not really certain of our
18:04
routines and does it work very well if
18:07
you kind of call it from different
18:09
threads so we have this this workaround
18:15
kind of buried and yank it which is this
18:17
network lambda they didn't see on the
18:19
right there and that basically kind of
18:22
forces the case or calls to happen from
18:25
the main thread um so that k-chart can't
18:28
handle is on threat eternally in the way
18:29
that expected so hopefully that goes
18:33
away over time but it's not stopping you
18:37
from using this stuff right now if
18:39
you're currently see what alight we
18:46
already read about as well earlier today
18:48
but it is the I'm a be cross-platform
18:51
app that base library
18:54
um so what's neat about it on compared
18:58
to use on Lightroom is it generates its
19:01
modeling queries from sequel statements
19:04
um so what you see on the right here is
19:08
like the code that you write is just the
19:10
create table statement and the like the
19:14
data class to implement that is then
19:16
like are generated by by see little a
19:19
and so that it's kind of like the
19:24
universe of what room does what room
19:26
room you kind of need to find your your
19:28
entities in your gala objects and then
19:30
you have to like annotate them with with
19:32
C code that match see the way kind of
19:35
the opposite and says like just or from
19:36
this equal and then you'll like you can
19:39
generate the calling code that's correct
19:41
that meeting said maybe match about
19:42
yourself and then it has problem
19:47
specific runtimes so you you kind of
19:49
pass a separate I'm forgetting that were
19:53
these what you use if you do that's
19:54
different engine onto it from Android M
19:57
for iOS that exactly right inquiries or
20:03
anything we have in here is only for my
20:04
setting so that's that's my library so
20:09
it's key value store so see the light is
20:13
you are like complicated structure data
20:15
storage whatever settings is your I just
20:19
have like one or two little main values
20:22
like a timestamp or user ID or something
20:24
that I want to age and I also have some
20:29
update listener guys which are non
20:31
currently using can't get so yeah I want
20:34
to say too much about it cuz excited
20:36
being my thing and you can we talk about
20:38
in some of the other talks it doesn't
20:40
play a huge role on the epic side yeah
20:45
similar to um to do plate you kind of
20:48
you passing off at home if you delegate
20:50
that's kind of what's after you rioted
20:53
acting storage and that lets you uh as
20:55
you share that back storage from your
20:57
shared code and you are formed
21:01
stately is a lever in touch lab that's
21:06
focused on various parts of concurrency
21:09
management so part of what it does is it
21:14
adds kind of common definitions of the
21:16
different called animated freeze api's
21:17
on so that you can call those from
21:19
common and not just from your native
21:20
code
21:23
it's our module it also kind of had some
21:26
different threading per gives so this is
21:28
the similar on the right is using sea
21:30
views guard stable ref which essentially
21:34
like enforces that the reference that it
21:36
contains is only access from a single
21:39
thread and that's that's part the
21:41
internals of that of that now recall
21:43
that we use and workaround Couture and
21:46
then another thing it has this not from
21:51
a Yank it but is kind of worth
21:52
discussing this is module called base of
21:55
state that essentially lets you handle
22:01
state in animal they started context by
22:03
kind of having a single thread that your
22:05
mutable state lives on and then it
22:08
provides you API is to kind of go in and
22:10
talk through that state Wyeth writing
22:12
for you so there's there's a questions
22:15
versus of some questions implemented on
22:17
top of that that are much more
22:20
performant than the kind of old or CD
22:22
collections that were obvious on the
22:23
topics and did last time ago three
22:30
quickly is a permanent which is volume
22:33
library that we've recently been putting
22:37
together a touch lab and it's uh but
22:43
kind of key piece of it is um it's
22:46
immutable after like your body variation
22:49
is immutable after you firstly period
22:51
which then makes it safe to pass between
22:53
threads so it's not yeah merged into
22:58
can't kid there's if there's a key are
22:59
open right now on so you'll see it there
23:01
soon and yeah we're interested to hear
23:06
feedback if you if it's if it is or it
23:09
isn't hitting or these cases so
23:14
and that's what libraries I'm also
23:15
talking a little bit about I'm just some
23:17
notes some other notes on integration um
23:21
so uh there's there's a bunch of kind of
23:25
what new Gradle things that get added
23:28
when when you go from Calgary and to cut
23:32
the multi-platform and from that we have
23:36
them all kind of set up for you
23:37
initially but we can talk about what
23:39
some of it is so the big thing is the
23:44
way that you set up your NFC's changes
23:47
because you access 500 different targets
23:49
so within your column block or you you
23:52
you have a couple of that now within
23:55
which you you call these different
23:56
target function so like this Android
23:58
function or the iOS are 64 iOS I fix
24:00
people are and that tells the build
24:04
system like these are the platforms that
24:06
my code is gonna build - and then that
24:10
will generate on main test source that's
24:12
for each for each of those targets which
24:15
you could then kind of stuff let me get
24:16
to your appendices floor a lot of MCS
24:21
these days are being published with real
24:23
metadata which means you can kind of gel
24:25
set them from your common main and
24:29
Gradle will figure out how they kind of
24:31
put the right vendors he's in place but
24:34
certain things like this you know
24:35
library you still have to specify for
24:37
each platform no small note here is
24:41
there there is a helper function called
24:45
iOS that essentially does what this
24:47
block here on the right is doing of
24:48
checking whether you're on even this
24:51
emulator or using by son iOS on and it's
24:56
an intermediate source set and between
24:58
them and it doesn't always play nicely
25:00
with Ivy especially the vendor X to do
25:04
so you might see that in some other
25:06
examples but we tend to recommend like
25:08
sticking with the NATO operation for now
25:10
until the IV side and that kind of
25:13
difference I guess cleaned up
25:16
another thing you might be noticing here
25:18
is is we're using a complan build
25:21
scripts I tend to find like it takes a
25:25
little bit of getting used to
25:25
moving from Gradle
25:27
no scripts but it's really nice having
25:30
tomorrow complete and being able to uh
25:34
especially what kind of new great lady
25:37
eyes that are involved in the other
25:38
bathroom side um it's nice happens ma
25:41
didn't need to be able to make these a
25:43
bit more discoverable and then we have
25:46
configuration to opt into generics on
25:49
the objective-c side which in column one
25:53
3x aren't aren't automatically uh for it
25:58
to like Darren's not Anurag that
25:60
important to see in Swift in column with
26:02
a three but it will be in one not four
26:04
and then we opted into the experimental
26:07
reckons API because we were accusing him
26:09
in about two places we have in there on
26:14
the real side is um we have a version of
26:19
the cocoa pod scale plugin so um there's
26:22
a fork of the official Japanese plugin
26:24
um and so general Konev must be around
26:29
Cove odds is it on uses a bunch of the
26:34
iOS integration configuration so without
26:38
that you kind of have to manually on the
26:41
frameworks and a set of a Gradle task to
26:43
copy that framework over to Xcode and
26:46
there's like two different ways that you
26:48
could do it that were in different
26:49
samples for a long time um you know like
26:52
oh gods kind of helps handle that all
26:55
more seamlessly under the hood
26:58
unfortunately the charge plug-in is not
27:01
you can't really configure the framework
27:03
that it generates so one of the things
27:06
that we wanted as we were building up
27:09
gem kit was the ability to debug things
27:13
in Xcode and to do that you need to have
27:15
a dynamic framework instead of a static
27:16
framework which the default cocoa pod
27:20
plugin didn't allow for so we've added
27:23
is on the ability to kind of specify the
27:26
frameworks look um within the gobots
27:29
extension so that you can't so that
27:33
whatever you want to add i'm you can ice
27:35
in there so you like generally sanity
27:39
you'll need
27:41
and also some adjustments in how the pod
27:43
file is generated which helps deal with
27:46
some caching issues that can that can
27:48
cause you issues when you're on like
27:51
trying to make sure you're getting a
27:52
clean build and yet a still in like
27:56
we're still kinda back we don't let me
27:58
that and kind of like figuring out what
28:00
are the things we can do to do with it
28:02
to kind of help develop my flow so looks
28:04
know if you got these cases then morning
28:11
us good side um
28:13
so you young just like has a um I think
28:20
I can plug in for experts you can debug
28:22
your caulking code you need even like
28:25
step into your hot encode from the
28:26
expert debugger um and can't get it set
28:31
up so that you the common sources are
28:33
already in the asset project so you can
28:36
Mikey me get me like talk to the right
28:37
source but you do have to like install
28:40
that plug-in yourself on guest outside
28:44
so in a little short time but in the
28:47
time remaining output got a couple kind
28:51
of things that we've built on top of
28:53
this less interesting um so in general
29:00
um camp it's been really nice for um for
29:06
letting us like not just for kind of
29:08
like from people like here do we even
29:10
get sorta quickly but also for us to
29:11
kind of predict things quickly
29:13
so one ones that I did recently um I
29:15
want to do a blog post to go into more
29:17
detail on at some point soon but it's
29:21
I've seen it a since by a couple times
29:22
lately is around in Iran between our ex
29:27
weapon co-routines
29:29
so this is a thing I've got together to
29:32
kind of like roughly does that where you
29:33
can so the the Derek memory upload
29:37
doesn't get exposed to tube got to see
29:41
because because flow is interface and
29:43
see generics only working classes what
29:47
if you add a wrapper class around it you
29:49
can kind of maintain that type safety
29:51
and pass it up to look this web side
29:55
then you can add this extra kind of
29:58
durable generic function on the swift
30:01
side which lets you uh I think I passed
30:04
the test the different callbacks that
30:06
that flow is looking for and hook them
30:09
into the arts web server wall so this
30:14
isn't um it isn't perfectly thread safe
30:18
has written if you're doing a bunch of
30:20
device threading things on your arts
30:22
website but it does it's kind of like a
30:24
start of how to make them talk to each
30:26
other and once we also look build some
30:32
production code with this so good client
30:37
that was that I think it's kind of like
30:39
prototype like what does feature module
30:41
will look like in in our existing app
30:43
and we're able to use can't get as
30:45
that's kind of a starting point for that
30:47
configuration so we yeah I think we make
30:52
something use to plug it into the client
30:53
field system and in particular like
30:55
there I was attending raju area than
30:57
their Android code on so we did a bunch
30:60
of work around kind of being able to
31:02
toggle between building that building
31:05
the share drain work from from source or
31:09
just like referencing as binary and it's
31:15
been nice kind of like working with
31:17
clients and being able to to kind of go
31:20
back and update cake pitch with
31:22
learnings that we've had from from you
31:23
didn't using similar period into
31:25
production so I think I'm gonna energy
31:30
over but but a couple of just kind of
31:31
like quick final thoughts
31:33
so like the general nice thing of be
31:38
I'll call on what the platform is is you
31:42
have a lot of flexibility so I
31:46
a lot about libraries here in local
31:48
immigration things um but depending on
31:52
what you want to share or like if you
31:54
just have kind of like a pure Islamic
31:55
thing you don't need to use any of that
31:58
if you don't want to try it out or any
31:59
of that stuff like if you just want to
32:01
write your own code you can do that and
32:03
share it really easily absol wanna um
32:08
definitely the sites like this like I'm
32:12
a huge own of the stuff and and I
32:15
definitely think it's kind of the future
32:17
of how a lot of us will be building
32:18
mobile apps um but it's definitely an
32:20
early adopter phase now and you should
32:23
make sure and if I come from lying into
32:24
that so look like there some questions
32:27
earlier or around like is a production
32:28
ready and I think what production ready
32:32
means is different to each team in each
32:34
organization
32:36
so there are you doing a production now
32:38
because to them it is production ready
32:40
um your your opinion of that will will
32:44
vary depending on kind of like your your
32:45
needs but it's definitely out of phase
32:50
where it makes a lot of sense to
32:52
evaluate it and see if it is over that
32:53
line for you so yeah I think with that I
32:59
will pass things over to questions nice
33:04
job thanks so much
33:05
Russell fantastic here so we're gonna
33:09
get the questions going pretty quick
33:11
before I do that here I've got to give
33:16
you the you know you get a stream in our
33:19
live audience here so that they can go
33:29
that was great job okay so I'm gonna
33:33
have Willie bring up our questions here
33:35
and his screen should be sharing with us
33:37
at this point here so you should see the
33:40
questions from slide Oh coming up on
33:42
your screen
33:43
I'm gonna pop out for this sure all
33:47
right so at the top we have what is the
33:50
best see ICD workflow to share
33:52
multi-platform live inside a mobile team
33:53
like single Depot or or a shared lib I
33:58
that is a thing that will vary mighty in
34:01
like what they one of the nice thing is
34:05
about about what kind of modularity of
34:10
problem of the platform is you can kind
34:13
of continue to lean on the same like
34:17
build pipelines and stuff that you are
34:18
the are in area code as you try to
34:20
introduce it so like the new piece is
34:23
now you have the shared library that
34:24
you're going to want to like build and
34:26
test and if you're in a neighborhood
34:28
something we both don't need to kind of
34:29
like publish the article or in the same
34:31
you know you can kind of test them all
34:32
at once
34:34
I don't know that I can like yeah I
34:39
don't know they want to point to kind of
34:40
like a single best workflow I think you
34:44
can you can kind of like make that
34:47
choice depending on on what your needs
34:48
are and on like maybe how much good your
34:50
faring and how how much you need to test
34:52
library isolation versus uh versus kind
34:56
of all together so do you find it
34:60
beneficial or detrimental that KMP
35:01
doesn't include shared UI I wouldn't say
35:07
I certainly don't find detrimental um if
35:11
I think it's like campi is trying to do
35:16
a different thing than flutter is like
35:17
flutter is trying to be shared UI and
35:21
maybe kind of like skips over the
35:23
details of some sort of the hood um came
35:27
he is no it's kind of working at that
35:29
lower level sharing things that are kind
35:32
of like more of a logic layer and less
35:36
less than we do love learn so I think
35:41
that means that panky is a lot more
35:42
flexible um so like like flutters didn't
35:46
have a pretty big impact on the
35:48
architecture and the build process I
35:49
their whole application if you're using
35:51
it campy you can kind of like slot in
35:54
wherever you wanted hit be as much or as
35:56
little as you want and you're not paying
35:60
a huge penalty for even if you're just
36:03
using a little bit
36:07
any tips on improving and build times um
36:12
certainly is something that that we're
36:14
doing something you know um you know did
36:16
something at that um my Japanese has
36:19
been improving over time so like if you
36:20
try this stuff like six months ago
36:22
it definitely does build faster than it
36:24
it did then off the top of my head I
36:30
don't have kind of like specific tips
36:33
um like I mean marginalising always
36:38
helps if you're if you're doing stuff in
36:40
large scale like any way that you can
36:42
kind of not need to be build on your
36:45
pollinator code will help
36:49
have you get around the colony to close
36:52
well Prince of all so they're not a
36:59
company to close were principal eg
37:00
biting iOS collect classes in KP and
37:02
using index code or console classes
37:04
inveteracy not the expose properly so
37:09
this is dissipated on the about there's
37:12
there's there's there's some limitations
37:14
around in the internet around the fact
37:17
that you can't kind of go back and forth
37:20
multiple times between cotton and
37:23
Objective C and you like each each each
37:30
Colin very each binary that you like you
37:33
teach framework that you create
37:34
aggregate encode kind of doesn't know
37:37
about the others on and the way around
37:40
it is I mean the the the easy way around
37:45
it if you can is to kind of do more
37:48
things at the column level because like
37:52
if you're if you're kind of like just in
37:53
the cotton world that you don't have as
37:55
much for the limitations and if you're
38:00
not able to do that then it's just about
38:02
kind of like segue anything so you don't
38:04
have too many interdependencies and
38:06
community modules so like if you have
38:07
multiple frameworks um making sure that
38:11
they do independent enough things that
38:13
they don't need to talk to the same
38:15
stuff in the hood so that you don't have
38:16
to worry about kind of which version of
38:18
column they are in the club
38:26
Clee that sort of also enters the next
38:27
question of what is your experiences
38:29
with dependencies between two libraries
38:30
so it is like it's possible to have
38:34
multiple column libraries in your
38:35
framework as out of one 370 I mean we've
38:39
been doing some kind of testing of some
38:42
limitations of that and and some
38:46
blogging about that I think but um so
38:49
it's it's possible to have to you can't
38:54
like they won't be aware of they did you
38:57
you can't really make paps common types
38:58
between them
38:59
um so if they have their dependencies
39:01
between them again you'll want to do
39:03
that more on the common layer than depa
39:05
so after that - see you later do I know
39:11
any framework for a colony by um so
39:14
there's a couple people that have done
39:16
like some things there's nothing that
39:19
seems to have really caught on very
39:21
largely in the community um I tend to
39:26
think it's like it tends to not meet my
39:29
focus and I tend to think it's a little
39:31
bit kind of early to be too focused on
39:34
the UI side of things like we're calling
39:37
really shines is more at the logic layer
39:40
and you'll you'll have a a easier time
39:45
working with it if you have to get into
39:46
that mindset of I'm not going to share
39:48
every step free piece of code but I've
39:51
got to show you that things that make
39:52
sense to share what are the pros and
39:56
cons of different ways of defining
39:58
dependencies
40:00
mostly it's stylistic so doing that they
40:08
like and I think I've done both in
40:12
different projects um one of the links
40:16
like you know anything is going by
40:17
getting style is is he get all of these
40:21
like unused references like I needed
40:24
aren't warnings which we don't get in
40:26
India in the UM and the source it's
40:29
reckoned in version but mostly it's not
40:32
doesn't make a big difference it's the
40:34
same thing in order
40:38
over the backend any tips about how to
40:40
import a library written with KMP from
40:43
the backend written in Jas so I
40:48
personally haven't done a ton on the Jas
40:50
side so like I haven't ace try to get in
40:54
in alarm settings and I'm like hey I
40:57
have a project that was a JX graduate
41:00
are yet um but I haven't um I'm not very
41:04
familiar with kind of like the more more
41:09
like the deeper side of various
41:12
configuration so uh I don't recommend
41:16
I'm asking about that stuff on on slack
41:19
though and if you and you haven't looked
41:22
at us in a little while there were some
41:25
pretty heavy reeve actors to kind of how
41:27
I was configured in it a while ago now
41:32
in column 1 3 Rd um and the
41:35
documentation has gotten a lot better on
41:37
that in the last couple months so if you
41:40
haven't looked closely at it recently
41:41
doesn't take another look and see that
41:42
house what is difference between
41:46
immutability and freeze so in other
41:51
words that I was using when I was
41:53
talking about freeze they are the same
41:55
thing so so like when you call freeze on
41:58
on an object or when a nominated is
42:01
frozen
42:01
um it's immutability is like a distant
42:04
force that's being immutable topic what
42:11
kind of moves it stops on making towards
42:13
desktop support none that I have been
42:17
part of though I get something that we
42:21
pay some attention to on the library
42:22
side it's easy to to expose try to get
42:28
to a desktop platform or a library or a
42:30
building like will do that but we're
42:32
like the clients that we're talking to
42:35
are mucking around the mobile side
42:38
uh how is the performance of Isis study
42:42
any suggestions best practice to handle
42:44
the chair capture the performance um so
42:48
for that I refer you back to UM Kevin's
42:53
Lagos work where you talked about it
42:55
it's much better than what you had with
43:00
with Atomics in the first day of the
43:02
elections
43:03
um it's not going to be quite as good as
43:05
what you get with just a single for
43:09
everybody but that'sthat's kind of the
43:12
trade-off that you are making by by
43:14
having say that you want to access by
43:16
multiple minutes decide which libraries
43:21
including cam kit largely by the ones
43:24
that we want to be using in the ops that
43:29
we're building and the ones that that
43:32
Adelaide yeah like work well in
43:35
situations that we've encountered and
43:37
that'd be kind of like trust to keep
43:41
updated
43:44
um when do you decide that this logic
43:47
part won't be shared I'm not sure I
43:52
understand specifically what logic part
43:53
that is but um in general like you can
43:57
you can make that sort of decision and
44:00
again you can change it over time
44:03
I get very if you're if you're trying to
44:05
figure out like like what do and don't
44:06
you want to share within as it can go
44:08
bass even kind of like they pick an area
44:13
that seems to make sense start off and
44:14
add more to it over time um it's not
44:17
kind of like a permanent thing um do you
44:24
know if there's a green way to share
44:25
test artifacts the tweeting to MEP
44:27
modules um so but one way that I have
44:32
done it and you can see this in multiple
44:34
settings um if you look at the curation
44:36
in there is create a separate module and
44:41
define those test artifacts in the in
44:43
that that modules main code and then you
44:47
can depend on that module from your test
44:49
code to it takes a bit be suitable well
44:58
great Russell looks like we were able to
44:59
make it through all the questions thank
45:01
you so we've got one more one more that
45:03
popped in let's give you a couple
45:05
seconds stands for that one that's Gary
45:07
yeah sure to use he also what is this
45:11
way to maintain compose Jason KMP so I
45:15
like I say in general make game he is uh
45:18
opinionated on your iPad I'm sure um
45:22
like I tend to find it works a little
45:25
nicer with with like I'm you have an MBI
45:29
stuff that it does then with MEP because
45:31
you might be kind of moving back and
45:32
forth between your your platform in your
45:35
cherry code but but mostly even that is
45:37
not a huge deal
45:40
as far as Jedi compose stuff um don't
45:45
have a great answer for that other than
45:48
that like most of the things that you
45:50
would probably have about the compose
45:53
level are going to be at your UI here
45:56
which is probably your
45:57
pause it there so assuming that is
46:03
correct you're just going to kind of
46:05
leave it your Popham code anyway
46:09
nice well thanks so much this has been
46:14
fantastic to have you Russell also
46:17
Carlos thank you for being with us again
46:19
this is our first installment of the
46:21
multi-platform series so we expect to to
46:24
go deeper will whether there was some
46:26
questions differences with respect to
46:28
flutter and multi platform so we'll be
46:31
covering some of those as well in the
46:33
future future events so anyway really
46:36
have been great to have you all things
46:37
for everybody who signed in to this as
46:40
well it was great having you here with
46:44
us and again check back regularly at at
46:47
droidcon comm and you'll be able to see
46:50
what's coming up next you'll also be
46:53
able to get all of the you'll also be
46:56
able to get all of the presentations
46:58
they're probably within the next day or
47:00
so and we look forward to seeing you
47:02
again at further series here I've heard
47:06
coming online things so once again from
47:08
being with us and we'll see you next
47:09
time
47:17
you
droidcon News

Tech Showcases,

Developer Resources &

Partners

/portal/rest/jcr/repository/collaboration/Groups/spaces/droidcon_hq/Documents/public/home-details/EmployerBrandingHeader
EmployerBrandingHeader
https://jobs.droidcon.com/
/portal/rest/jcr/repository/collaboration/Groups/spaces/droidcon_hq/Documents/public/employerbranding/jobs-droidcon/jobs.droidcon.com
jobs.droidcon.com

Latest Android Jobs

http://www.kotlinweekly.net/
/portal/rest/jcr/repository/collaboration/Groups/spaces/droidcon_hq/Documents/public/employerbranding/kotlin-weekly/Kotlin Weekly
Kotlin Weekly

Your weekly dose of Kotlin

https://proandroiddev.com/
/portal/rest/jcr/repository/collaboration/Groups/spaces/droidcon_hq/Documents/public/employerbranding/pad/ProAndroidDev
ProAndroidDev

Android Tech Blogs, Case Studies and Step-by-Step Coding

/detail?content-id=/repository/collaboration/Groups/spaces/droidcon_hq/Documents/public/employerbranding/Zalando/Zalando
/portal/rest/jcr/repository/collaboration/Groups/spaces/droidcon_hq/Documents/public/employerbranding/Zalando/Zalando
Zalando

Meet one of Berlin's top employers

/detail?content-id=/repository/collaboration/Groups/spaces/droidcon_hq/Documents/public/employerbranding/Academy for App Success/Academy for App Success
/portal/rest/jcr/repository/collaboration/Groups/spaces/droidcon_hq/Documents/public/employerbranding/Academy for App Success/Academy for App Success
Academy for App Success

Google Play resources tailored for the global droidcon community

Follow us

Team droidcon

Get in touch with us

Write us an Email

 

 

Quicklinks

> Code of Conduct

> Terms and Conditions

> How to hold a conference

> FAQs

> Imprint

Droidcon is a registered trademark of Mobile Seasons GmbH Copyright © 2020. All rights reserved.

powered by Breakpoint One