►
Description
The title of this talk is a lie. There is no one single way to architect an app. If the app works well, is robust for future expansion, and maintainable - it's architected just fine.
You can mess things up though. And then everything is terrible.
So, tune in to this talk to find out about some ways you can go about architecting your Xamarin.Forms app so you don't hate yourself before development of the app is complete.
Presenter: Brandon Minnick, Senior Cloud Advocate, Microsoft
B
C
Yeah
yeah,
you
were
talking
about
moving
and
the
funny
thing
is
it's
just
30
days
ago.
I
didn't
have
any
of
this
on
my
wall
and
into
my
home
like
in
may
of
last
year,
and
it
wasn't
until
the
last
90
days
that
I
actually
ended
up
with
anything
on
my
walls
other
than
like
white
boards.
Like
that's
the
first
thing
that
went
up
yeah,
that's
enough!
Okay,
it's
cool!
You
know
I
can
do
this.
D
I
know
it's
it's
interesting
in
this
age
of
elvis
being
at
home
and
having
them
and
being
online
because
of
that
yeah.
It's
you
almost
feel
that
need
to
have
cool
decorations
behind
you,
like
I
don't
know
if
you
caught
the
ignite
microsoft
ignite
conference
keynote
yesterday,
but
I
didn't
well
satya
nadella,
the
ceo
of
microsoft
was
speaking
and
yeah.
He
had
shelves
behind
him
with
toys
and
trinkets
on
it
and
that
just
started
a
whole
twitter
rabbit
hole
of
people
trying
to
figure
out.
What's
what's
on
the
shelf
and.
D
C
D
C
D
C
Yeah,
I
think
I
know
what
you're
hiding
in
the
background
there
and
that's
the
the.net
maui
preview.
D
I
wish
I
can't
wait,
although
because
there's
you
have
there's
nothing
there
I'll
catch
it,
I
do
have
that
queued
up
for
today's
talk,
though
I'll
touch
on
that
just
a
little
bit.
Did
you
see
my
presentation.
C
C
D
Sweet
20
seconds.
D
C
This
is
fun
so
yeah,
the
the
whole
maui
thing,
maybe
I'll
need
I'll
talk
with
you
at
some
point,
maybe
offline.
I
got
a
whole
bunch
of
cool
bluetooth
stuff.
I
want
to
consider
doing
I'm
I'm
curious
what
your
thoughts
are
about,
how
best
to
approach
that,
from
a
cross-platform
perspective
on
xamarin.
A
A
D
C
C
C
And
it
was,
it
was
really
cool
because
I
had
to
figure
out.
Oh
there's
a
question
coming
in
about
maui,
I
had
to
figure
out
how
to
do
this
in
a
nice
threaded
way.
Otherwise,
you
know
you'd
lose
in
the
app
crash.
C
It
is
all
before
camera
and
forms
like
xamarin
forms
would
have
made
this
so
much
easier,
a
ui
perspective,
but
instead
I
had
to
like
build
the
the
zibs
and
nibs
and
all
the
other
insanity.
You
know
I
was
just
like
at
least
andrew
at
least
ios
develop
or
harmony.
At
least
threading
was
simple,
with
c
sharp,
like
yeah,
try
and
figure
it
out
with
like
objective
c.
C
No,
no
x,
man
like
I'm
like,
oh,
this
is
so
much
better
his.
So
he
because
I
can
so
easily
handle
all
of
this.
From
a
from
a
maui
perspective,
it
is
an
evolution,
you
know
it's
an
evolution,
forms
and
and
what
the
cool
thing
about
it,
I
think,
is
if
you,
if
you
watch
our
previous
presentation
about
maui,
it
covers
kind
of
like
how
we
got
to
maui
it
really
how
we
went
from
the
the
mess
that
was
microsoft.
C
Development
of
insert
anything
with
an
x
at
the
end
of
it
here
and
then
all
the
ui
approaches
that
microsoft's
had
over
the
years
and
finally
seeing
consolidation
happening
with
net
and
then
finally,
seeing
cross-platform
being
a
thing
with
netcore.net
standard
and
xamarin,
and
seeing
all
this
stuff
come
together
and
microsoft
going
hey,
you
know
what
dot
net
should
be
everywhere
and
we
need
to
take
this
cross-platform
stuff
seriously,
but
we
also
need
kind
of,
like
we've
consolidated
the
the
libraries
and
the
the
api
surface.
C
Let's
start
standardizing
the
the
ui
and
maui
gets
us
there.
Now,
it's
it's
not
gonna
be
around
until
2021.
That's
the
the
current
estimate
with
net
six.
My
guess,
my
understanding
is
that
with
build
this
year
in
what
november
no
dot
net
conf
that
night,
conf
in
november,
is
when
they're
going
to
release.net
5
with
we
hope
a
an
alpha
or
a
beta
version
of
maui.
Okay,.
D
C
Would
come
along
with
net
6
in
some
form
or
another?
Now
my
my
hope
here
I
haven't
played
with
uno
yet,
but
I
don't
think
uno
is
from
microsoft.
It's
not
me!
If
I'm
wrong
about
that
brandon,
it
seems
like.
C
Approach
but
I
haven't,
I
can't
talk
about
it
only
because
I
haven't
played
with
it,
but
it's
when
I
looked
at
it
like
a
year
ago
I
was
like
oh
yeah,
that's
cool
and
keep
in
mind.
You
don't
have
to
switch
to
maui
right
now
and
first
of
all,
it
doesn't
exist.
C
Maui
is
an
extension
of
not
extension
up,
but
it's
an
evolution
of
xamarin
forms.
So
you
know
you,
you
don't
have
to
immediately
move
right.
Well,
I
mean
microsoft's,
not
a
country,
but
yes,
I'm
I'm
joking
there.
Hopefully,
hopefully
everyone
laughs,
it
doesn't
take
me
too
seriously,
but
it'll
be
interesting.
I
think
you
know.
C
The
ultimate
thing
would
be
if
microsoft
started
really
taking
consolidation
seriously
on
the
ui
front
and
got
rid
of
win
ui
three
and
just
said
we're
going
to
go
all
maui,
you
know
and
have
a
standard
way
of
handling
ui
in
dotnetcore.net
yeah.
I
think
that
would
be
great.
I
hope
that's
where
it's
going,
but
you
know
hey
the
cool
thing.
About.Net
is
it's
so
extensible.
C
C
So
if
you
want
to
use
mvvm
cross,
if
you
want
to
use
the
mobile
blazer
bindings,
if
you
want
to
use,
you
know
maui
and
everything
it
offers,
if
you
want
to
use
prism
or
a
mix
of
any
of
these,
if
that's
possible,
you
know
it
all
depends
you
want
to
use
uno,
that's
your
prerogative.
I
don't
think
microsoft's
holding
you
hostage
to
their
technology
alone.
D
Yeah
I
mean
the
I
think
that
so
yeah
circling
back
to
uno,
I
haven't
played
around
with
it
either.
It
is
built
by
developers
based
in
montreal,
but
yeah,
essentially
uno.
You
can
think
of
uno
as
similar
to
xamarin
forms,
and
that
is
it's
a
cross-platform
ui
framework.
D
D
D
I
had
to
do
an
internal
site,
that's
very,
very
ugly,
there's
no
css
or
anything,
but
it's
functional.
I
built
that
this
week,
yeah
the
cool
thing
with
uno.
Is
it
leverages
wasm
so
that
same
cross-platform
app
that
we'll
be
running
on
uwp
on
ios,
on
android,
using
xamarin
will
also
run
on
or
in
the
browser,
and
I'm
not
sure
what
engine
they're
using?
But
if
it's
wasm
I
would
imagine
they're
doing
something.
D
Are
they
doing
stuff
with
blazer?
I
don't.
C
Know,
but
did
the
I
know
that
I
was.
I
was
in
our
meeting
about
blazer
a
few
months
ago
which,
by
the
way,
there's
a
an
indian.net
consortium
talk
about
blazer.
So
if
you
look
at
my
other
meetup,
which
is
the
indy
net
consortium,
we
nick
george
did
a
whole
thing
about
blazer
and
I
don't
know
if
the
two
teams
have
worked
together.
D
Right
on,
but
yeah,
who
knows
great
stuff
and
yeah
kind
of,
like
you
mentioned
earlier,
ari,
like
it
leverages
and
uses
all
of
the
microsoft
suites.
So
of
course,
microsoft
is
not
just
okay
with
it,
but
encourages
it
because
it
gets
more
people
using
the
dot-net
stack
using
the.net
tooling,
like
visual
studio,
so
yeah.
It's
definitely
a
welcome
addition
to
the
net
community,
and
this
is
this.
C
I
don't
know
if
objective
c
yeah
that
what
that
is
a
brutal
language,
all
right,
the
I'm
trying
to
remember
what
I
was
gonna
say
yeah.
I
I
think
you
know
what
what
xamarin
forms
really
offers
you
and
it
seems
like
uno,
would
offer
you
as
well.
Yeah
is
yet
another
presentation,
tier.
You
know
a
solution
for
your
presentation,
so
yeah.
C
I
think
if
you
have
everything
architected
properly
for
your
business
objects
and
just
the
supporting
architecture,
your
application,
you
can
mess
around
with
the
the
the
presentation
to
your
almost
any
way
you
see
fit.
You
know
as
long
as
you're,
not
hard
coding.
You
know
like
hard
dependencies
on
everything.
If
you
code
with
intent,
I
think
you
can
play
with
all
of
these
and
see
what
works
best
for
you.
Microsoft
seems
to
be
going
in
the
blazer
direction
and
by
the
way
we
need
to
get
started
here
in
a
minute.
C
But
I'll
answer
I
just
looked
at
the
clock,
I'm
like
oh
no.
I
plan
on
starting
at
6,
40.
C
About
everything
yeah,
you
know
it's
it's
you
know
we
call
this
the
42
presentation
yeah,
but
again
I
I
gotta
stress
that
you're
not
stuck
with
blazer
or
xamarin
forms,
yeah
or
microsoft's
technologies.
C
When
it
comes
to
that
presentation
tier
you
know,
you're
you're
stuck
with
the
platform
in
the
sense
that
you
know
or
with
the
framework,
but
that's
not
a
bad
thing.
You
wouldn't
you
can't
call
yourself
yourself,
a
microsoft
developer
and
not
buy
into
the
framework.
You
know,
that's
that's
just
part
of
it,
but
I
think
if
you
treat
these
as
presentee
to
your
options,
then
it
might
work
out
better.
But
that's
my
thought
on
that.
So
so
let
me
get
started.
Welcome
to
indie
xamarin
happy
to
have
everyone
here.
C
We
got
a
great
presentation
lined
up
for
you
tonight
with
brandon
minnick
is,
am
I
saying
it
right?
Brandon,
yep,
awesome
and
brandon
knows
everything
about
everything
and
he's
gonna
present.
So
we
meet
every
month
on
the
fourth
wednesday
and
we
we've
got
a
lot
of
topics.
If
you
take
a
look
at
the
the
meetup
site
for
indie
xamarin,
we
record
every
one
of
our
presentations.
So
if
you
missed
anything
or
you're
curious
about
what
we
talked
about,
we've
covered
everything
not
just
xamarin
forms,
but
we've
covered.
C
You
know
why
you
might
choose
xamarin.
We've
covered
xamarin
essentials.
We've
we
covered.net
maui
last
last
month.
C
Think
it
was
last
month
we've
covered
mfractor,
we've
covered
a
lot
of
different
things,
so
you
know
definitely
hit
up
the
meetup
site
and
you'll
see
the
links
to
all
that
stuff.
We
usually
post
a
copy
of
the
presentation
within
a
day
or
two
of
any
meetup.
So
if
your
friends
couldn't
make
it,
you
know
no
harm,
no
foul,
you
know
please
invite
them
to
the
to
our
site
so
that
they
can
take
a
look
and
learn.
C
So,
let's
see,
if
I
can
flip
to
my
slides
here,
because
I
have
all
these
different
screens
yay
a
special
thanks
to
our
sponsors
sandy
solutions-
that's
our
big
big,
sponsor
and
launch
fishers,
which,
when
we're
not
meeting
virtually,
we
meet
at
launch,
which
is
a
co-working
space
mfractor
which,
if
you
haven't
used.
C
It's
like
resharper
for,
for
you
know,
for
xamarin
studio
for
visual
studio
for
mac.
You
know-
or
it's
like
resharper
for
for
xamarin,
really,
because
now
mfractor's
cross-platform,
it's
available
on
windows
and
mac.
C
C
So
you
can
find
all
the
exceptions
that
occurred
and
see
them
in
a
timeline
just
like
a
video
player,
so
very
cool
cool
stuff
tonight,
as
as
usual
we're
one
of
the
many
meetups
that
are
part
of
the
net
foundation.
If
you
haven't
joined
the.net
foundation,
just
definitely
check
this
out.
They
run
the
dotnet
foundation,
virtual
user
group,
which
is
phenomenal.
C
It's
there's,
there's
meetups,
going
on
every
single
day
across
the
globe,
and
the
the.net
foundation
brings
all
that
together
in
one
place,
so
we
got
meetups
all
over
the
place,
but
you
can
you
can
sign
up
for
the
one.net
foundation,
virtual
user
group
and
it'll.
Let
you
know
when
new
topics
of
interest
are
coming
out
and
a
link
to
groups
like
ours.
So
you
know
you
might
be
here
tonight
because
you
heard
about
this
from
the
dotnet,
virtually
the
net
foundation
virtual
user
group.
C
If
you
did
come
that
way,
yay
thank
you
for
joining.
Please
also
hit
us
up
on
indyxamaron
on
meetup
and
you
know
subscribe
to
our
stuff.
Yeah
click
the
bell
subscribe
and
like
kidding
kidding,
although
I
don't
even
I
don't
think
you
can
do
that
when
it's
just
a
live
stream
like
this
again
very
excited
to
have
brandon
here
tonight.
C
If
you
have
any
questions
I'll,
be
monitoring
the
the
chat
window,
that's
coming
through
and
I'll
make
sure
to
bring
those
up
to
brandon,
because
he's
not
gonna
be
able
to
see
the
chat,
possibly
while
he
presents
you
might
be
able
to.
I
think
stream
yard
might
some
of
it,
but
there's
like
a
20
second
delay.
So
I
can
tell
you
once
I
see
it,
but
please
feel
free
to
answer
questions
or
ask
questions
anytime
during
the
presentation
we'll
try
to
get
them
answered.
C
Sometimes
it
might
take
a
few
minutes
and
with
that,
take
it
away.
Brandon.
D
All
right,
perfect
tabbing!
I
was
just
logging
into
the
app
that
I'll
be
showing
off
today.
So
awesome.
I
was
hoping
to
sneak
that
in
really
quick,
so
I
didn't
risk
sharing
any
passwords
with
the
world,
but
oh
we're
already
showing
my
screen.
Look
at
that
whoops.
Let's
go
back
then!
Okay,
awesome
thanks!
So
much
yeah
thanks
everybody
for
for
joining
us
today
and
alright.
D
C
So
we
usually
go
for
an
hour
to
an
hour
and
a
half.
You
know:
okay,
cool,
that's
that's
about!
You
know
what
people
are
comfortable
with.
You
know
it
is.
It
is
getting
into
some
people's
evenings,
but
you
know,
of
course,
if
you
miss
any
of
it,
it's
all
recorded
so
yay.
D
That's
right,
okay,
good
to
know
yeah
just
curious,
because
yeah
happy
to
hang
out
with
everybody
is
answer
to
answer
as
many
questions
as
we
can
get
like
I
already
mentioned.
If
anybody
has
any
questions
drop
them
in
the
chat,
ari
you're
right,
I
won't
be
able
to
see
them
because
I'll
have
my
slides
up
or
I'll
have
code
up
so
feel
free
to
jump
in
anytime.
We
want
to
keep
this
as
interactive
as
possible
because
yeah
at
the
end
of
the
day,
I
already
I
already
know
what
I'm
gonna
say.
D
I
already
know
all
this
stuff,
so
I'm
more
interested
in
answering
your
questions
and
trying
to
help
connect
the
dots
on.
Maybe
some
new
topics
so
feel
free
to
drop.
Any
comments.
D
Aria
will
chime
in
anytime
we'll
have
a
nice
conversation
today,
but
yeah
we're
gonna
be
covering
a
lot
of
stuff,
because
when,
when
already
reached
out
and
asked
me
to
chat
about
architecting
xamarin
forms,
the
scope
of
this
talk
in
my
mind,
just
started
growing
and
growing,
because
there's
so
many
so
many
buckets
that
architecting
falls
into
because
one
of
the
cool
things
with
xamarin
forbes
apps.
Obviously
is
their
cross-platform,
they
run
on
ios
and
android,
and
so
there's
you
know.
D
How
do
you
architect
that
to
make
sure
we
have
this
cross-platform
experience,
we
have
shared
code
and
then
branching
out
from
there
there's
things
like
running
ui
tests.
So
ui
tests
are
it's
basically
code,
emulating
a
user.
So
if,
if
a
user
can
tap
a
button,
we
can
write
a
ui
test
that
can
tap
a
button
that
can
enter
text
essentially
emulate
those
user
workflows.
D
There's
unit
testing,
which
you
know
we're
all
responsible
developers.
So
we
always
write
unit
tests
right
and
how
do
we
architect
our
unit
tests
and
then
one
of
the
cool
things
with
xamarin
being
in
c
sharp
and
c
sharp
having
such
a
strong
back-end
presence
for
things
like
apis
and
websites,
web
servers
is
we
can
even
share
code
between
our
mobile
app
and
our
backend.
D
So
there's
there's
gonna,
be
lots
of
layers
in
this
stock
and
I'll
keep
an
eye
on
the
clock
to
make
sure
we
can
touch
on
everything,
because
I
I
know
we
chatted
about
maui
a
couple
minutes
ago
in
the
intro
and
I
included
well
one
slide
to
give
kind
of
a
sneak
peek
of
what
architecting
will
look
like
in
maui.
D
So,
let's
jump
into
it,
there's
a
couple
slides,
we'll
be
mostly
looking
at
code
today,
but
what
I
want
to
point
out
is
two
links
that
you'll
see
on
the
bottom
of
just
about
every
slide
today.
So
the
bottom
left
that
is
my
twitter,
handle
the
code
traveler.
If
anybody
has
any
questions,
feel
free
to
tweet
at
me
or
shoot
me
a
direct
message,
my
direct
messages
are
always
open.
I'm
always
happy
to
chat
about
xamarin.net
c
sharp.
I
actually
I
used
to
work
at
xamarin.
D
That's
how
I
made
it
to
microsoft
when
they
acquired
us
a
couple
years
ago,
and
so
I'm
definitely
a
big
big
fan
of
xamarin
and
on
the
bottom
right.
This
is
where
you
can
find
the
source
code
for
everything
we're
doing
today.
There's
a
an
app
that
I'll
do
a
shameless
plug
right
now
called
get
trends
that
I
built.
D
Oh
no,
I
hit
my
api
limit.
That's
okay,
because
git
trends
has
a
demo
mode
sure.
D
Well,
ironically,
this
is
in
the
app
store
today.
So
I'll
tell
you
what
let's
go
to
I'll!
Just
show
you
what
fit!
Trends.Com
spell
it
right.
So
this
was
an
app
that
I
created
actually
about
a
year
ago
as
just
a
an
app
to
help
me
because
I
I
love
the
open
source
community.
I
have
tons
of
open
source
repos.
I
think
at
last
count
I
had
over
300.
D
No,
it's
not
that
not
that
they're
all
being
actively
maintained,
but
a
lot
of
them
are,
and
so
one
of
the
problems
I
was
having
with
all
my
open
source
repos
was
just
keeping
up
with
them
and
how
to
manage
them,
because
what
I
found
was.
D
I
had
some
repos
that
I
hadn't
touched
in
years
that
I
found
were
getting
a
lot
of
traffic,
so
they
were
still
getting
12
20
views
a
week,
and
this
is
source
code
that
folks
were
referencing
for
their
apps,
and
so
I
wanted
to
be
able
to
stay
on
top
of
which
open
source
repos
of
mine
are
getting
the
most
traffic.
That
way,
I
can
make
sure
to
keep
those
up
to
date.
D
So
I
created
this
app
called
get
trends
it's
available
in
the
ios
and
android
app
stores
shameless
plug,
like
I
said,
but
what
we're
going
to
do
today
is
check
out
how
I
architected
get
trends
and
with
everything
we're
chatting
about
today.
There's
always
multiple
solutions
to
any
problem,
no
matter
what
anybody
says
I
mean.
I
know
some
folks
are
very
passionate
about
architecture
and
will
subscribe
to
only
one
way
of
doing
things
like
you
have
to
do
dependency
injection.
D
Well,
do
you
have
to
it's
recommended,
but
no
you
don't
have
to
so.
What
we'll
do
we'll
walk
through
get
trends
because
git
trends
has
it's
all
built
in
xamarin
forms,
and
it
also
has
a
suite
of
ui
tests,
a
suite
of
unit
tests
and
even
has
a
cloud
back
end,
all
of
it's
written
in
c
sharp,
it's
all
sharing
code
amongst
everything
and
so
we'll
be
leveraging
a
lot
of
this
code.
D
So
all
that
to
say
at
the
bottom
of
the
slide
boop,
you
will
see
the
link
to
the
source
code
gettrends.com,
just
redirect
you
to
it's
github
repo,
where
you
can
download
the
source
code
play
around
with
it
yourself.
So
all
that
to
say,
don't
worry
about
memorizing
anything
today,
because
it's
all
open
source,
it's
all
available
and
everything
we
reference
is
actually
linked
down
below.
So
there's
some
cool
libraries
we'll
be
chatting
about
like
refit,
sqlite.net
poly
and
all
of
these
are
linked
in
this
readme.
D
D
This
will
look
very
familiar
to
you
because,
like
we've
mentioned
earlier,
xamarin.forms
is
a
cross-platform
ui
that
runs
natively
on
ios
and
android,
and
the
way
xamarin
forms
works
to
be
able
to
still
create
the
native
ui
button
on
ios
or
the
android
widget
button
on
android
is
that
in
xamarin
forms
when
we
just
say
button,
but
when
we
compile
for
ios
our
code
that
we
called
button
in
xamarin.forms
gets
turned
into
the
native
ui
button
and
likewise
on
android,
that
button
in
our
shared
code
gets
turned
into
the
native
android
widget
button.
D
Actually
it's
probably
been
updated,
android
x,
but
anyways.
This
allows
us
to
essentially
write
our
code
once
and
write
it
on
both
platforms,
while
still
getting
the
native
performance
and
native
look
and
feel,
and
so
how
do
we
do
this?
Well,
we
have
a
we'll
say
a
common
project.
D
Well,
there's
a
check
box
next
to
git
trends,
because
the
ios
app
is
referencing
the
code
and
essentially
that's
how
we're
we're
sharing
our
code
between
these
two
projects.
Now,
yes,
this
one's
pretty
basic,
wanted
to
share
just
in
case
anybody's
new
to
xamarin
or
xamarin
forms,
but
I
also
wanted
to
talk
about
my
recommendations
for
this,
which
is
to
use
a
dotnet
standard,
2.1
library,
there's
a
couple
rules
of
well,
I
guess
first,
what
is
net
standard
right?
D
Dot
net
standard
is
a
a
way
to
make
a
c-sharp
project
that
has
no
run
time,
so
why
would
we
ever
want
to
do
that?
Well,
in
this
case,
we
want
to
leverage
the
native
runtimes.
No
thanks.
Dropbox
we
want
to
leverage
the
native
runtimes
like
for
ios.
We
want
to
use
the
mono's
ios
runtime
and
likewise
on
android.
We
want
to
use
its
mono
android
runtime,
and
so
what
dot
standard
gives
us?
D
The
ability
to
do
is
create
a
project
that
has
no
runtime
included
and
really
all
it
is,
is
just
a
giant
interface
that
says
here
are
all
these
apis.
You
can
access
specifically.net
api,
so
things
like
system.datetime,
well,
any
system,
library
really
all
those
ones.
We
know
and
love
and
there's
a
contract
in
place
that
I
xamarin
ios,
xamarin,
android.net,
core,
3,
etc,
have
all
said.
D
We
will
support
all
the
available
interfaces
in
or
all
the
available
apis
in
this
specific.net
standard.
So
so
yeah
basically.net
standard
is
just
a
project
that
can't
do
anything,
but
we
can
run
it
on
different
platforms
like
xamarin.ios
same
and
android.net,
core,
etc,
and
so
when
we
are
creating
our
standard
performance
projects,
my
recommendation
to
you
is
to
create
a
dot-net
standard
library
and
then
for
the
version
of
it
crank
it
all
the
way
up.
D
The
the
latest
greatest
version
is
done
at
standard
2.1,
which
I'm
referencing
here,
and
that's
really
all
you
need
to
do
to
get
started
because
down
at
standard
2.1,
the
bigger
what
the
number
means,
the
bigger
the
number,
the
more
apis
are
available.
So
down
at
standard
2.1
has
the
latest
greatest
stuff,
like
iasync,
innumerable
async
streams,
all
that
fun
stuff
and
again,
when
that
code
gets
compiled
down,
it'll
run
using
the
native
runtimes
for
xamarin,
ios
name
and
android.
D
D
Let
me
rephrase
that
the
difference
is
that
the
net
standard
project,
when
you
compile
it
it'll,
generate
a
dll.
So,
for
example,
if
we
jump
into
our
code-
and
let's
see
if
I
dig
into
the
outputs
for
my.net
standard
library
there,
it
is,
we
have
gittrends.dll.
So
this
is
a.net.
Standard
project
creates
a
dll
again,
it
doesn't
have
any
runtime.
D
This
dll
just
gets
sucked
up
by
whatever
runtime
we're
using
in
this
case
xamarin
android,
here
boop,
and
so
with
the
difference
with
there
we
go
with
a
shared
project,
as
a
shared
project
does
not
generate
a
dll.
The
shared
project
actually
is
subsumed
from
whatever
project
is
referencing
it.
D
So
what
we
would
see
if,
if
this
get
trends
library
was
a
shared
project,
it
would
not
generate
a
dll
and
when
we
build
for
ios
all
the
code
that
exists
in
this
shared
project
would
just
be
built
as
if
it
existed
in
this
git
trends.ios
library,
and
so
there's
some
pros
and
cons
there.
But
the
recommend.
The
reason
I
recommend
using.net
standard
is
dotnet
standard,
allows
you
to
install
nuget
packages
directly
into
the
library.
D
So
if
we
look
at
our
code
here,
our.net
standard,
I've
got
all
these
awesome
nuget
packages
from
amazing,
open
source
libraries.
Here.
If
this
was
a
shared
project,
we
would
see
zero
nuget
packages
because
it's
impossible
to
add
them
to
a
shared
project
and
the
tough
thing
there-
and
this
is
the
reason
why
I
recommend
using
down
at
standard-
is
if
we
can't
add
dot.
D
If
we
can't
add
nuget
packages
to
our
shared
code
well,
then
we
have
to
make
sure
both
our
ios
projects,
which
we
can
add
new,
get
packages
to
and
our
android
projects.
We
can
also
add
new
packages
to
are
in
lockstep,
and
I've
been
burned
with
shared
projects.
A
couple
times
where
I
updated
xamarin
forms
nuget
package
in
the
ios
project
and
forgot
to
do
it
in
android,
went
to
run
the
same
app
that
worked
beautifully
on
ios
on
android
and
all
of
a
sudden.
D
Nothing
worked
so
you'll
hit
weird
little
things
like
that,
so
you
can
use
them
dot
or
shared
projects
are
super
powerful,
but
it's
one
of
those
things
with
great
power
comes
great
responsibility.
D
So
if
you
don't,
if
you're
new
to
net,
stick
to
dot-net
standard
for
now,
if
you
have
you
shared
projects
before,
if
you
understand
those
the
power
which
that
power
really
just
means
more
opportunities
for
you
to
shoot
yourself
in
the
foot
by
accident,
which
I
definitely
still
do
occasionally,
if
you
understand
all
those
things,
go
for
it
with
a
shared
project,
but
if
you're
new
to
xamarin.net
it's
hard
to
make
similar
mistakes
like
that
with
dot-net
standards,
so
yeah
so
right.
D
Now
the
caveat
is
what,
if
we're
also
targeting
uwp
well,
uwp
doesn't
yet
support
net
standard
2.1.
So
same
same
for
everything
we
talked
about,
I
still
recommend
using
standard
over
a
shared
project,
but
in
this
case
our
peak.net
standard
level
will
be
2.0,
which
is
still
good,
still
has
everything
we
get
and
we'll
say
everything.
D
We
need
to
create
a
great
app
it's
just
about
a
year
behind
and
it
doesn't
have
cool
things
like
async
streams
or
iasync,
innumerable
which
I
know
I
fell
in
love
with
when
they
debuted
so
just
something
to
keep
in
mind.
If
we
are
targeting
uwp
for
now,
we
can
only
go
up
to
dotnet
center
2.0,
but
if
we're
only
doing
ios
and
android
crank
it
all
the
way
up
to
dotnet
standard
2.1
all
right,
how
are
we
doing
on
questions
ari
anything
coming
in
any
anybody?
Any
fans
of
shared
projects
out
there.
C
No,
you
know
I,
I
have
something
to
add
about
shared
projects.
I
used
to
always
use
shared
projects
because
going
the
pcl
route,
which
is
what
you
used
to
have
to
do.
Yes
and
shared
projects
got
you
around
that,
but
that's
where
I
learned
about
exactly
what
you
said,
which
is
the
the
nougat
versioning
nightmare.
You
know
like
hey,
you
know
I
referenced
one
version
of
let's
say:
newton's
off
json
example
in
ios
and
use
the
feature
it
has,
but
I
use
the
wrong
an
older
version.
C
It
didn't
have
that
feature
in
android.
Well,
visual
studio
doesn't
know
what
doesn't
exist
in
each
project,
so
you
know
the
the
shared
project
overlays
those
projects.
So
basically
it's
like
it
all.
The
files
that
are
in
that
that
shared
project
are
part
of
both
the
projects
that
are
referencing
it,
so
it's
kind
of
like
they're
injected
as
if
they
were
part
of
that
project.
The
problem
is
you
run
into
a
lot
of
compatibility
issues
there
you
also
run
into-
and
I
100
agree
about
going
the
dot-net
standard
route.
C
Well,
we're
getting
some
questions
in
yeah
all
right.
The
a
couple
things
there.
One
I
think
you'd
be
safe,
going.net,
standard,
2.1
and
ios
and
android,
but
you
got
to
have
the
shared
libraries
have
to
be
the
lowest
common
denominator,
so
you'd
have
to
have.net
standard
2.0
for
that
head
project
that
you're
talking
about
that
contains
everything.
C
But
you
know
the
ios
and
android,
I
think
could
be
2.1
because
they
can
reference
2.0.
But
you
can't
go
the
other
way
around,
but
be
very
careful
if
you
go
the
shared
project
route
you're
going
to
have
to
get
used
to
compiler
directives,
because
we're
going
to
have
to
know
about
if
the
platform
is
ios
run
this
code.
If
the
platform's
android
run
this
code
and
your
code
gets
real
ugly
real
fast.
C
D
Ooh,
that's
a
good
question
and
we'll
touch
on
that
later.
When
we
talk
about
donette6
and
donette
maui
towards
the
end.
C
C
Well,
my
thought
there
is
good
explaining
shared
projects,
it's
magic
and
I
think
they
had
their
place
when
you
had
pcl,
but
I
don't
think
they
had
their
place
now.
That.Net
standard
exists.
C
Does
get
trends
use
any
caching
like
in
memory?
Caching,
for
example,
when
internet
connectivity
is
not
good,
so
I
imagine
yeah.
Well,
you
know
offline
good
offline
patterns,
yeah.
C
Of
course,
let's
see,
I'm
gonna,
I'm
gonna
post
a
good
chat
or
a
good
article
about
resilient
network
connectivity
in
xamarin
I'll
put
that
in
the
in
the
comments
for
everyone,
because
you
learn
about
refit
and
poly
and
acavatch
how
those
things
can
really
help
you
and
if
matt
su
stucup
was
here,
he
talked
probably
about
the
the
built-in
stuff
in
azure
that
handles
online
offline.
Sync,
for
you.
D
Yeah,
so
just
that
question
about
caching
yep
there's:
this
is
using
a
sqlite
database
which
we'll
also
touch
on
in
just
a
minute
that
stores
the
data
every
time
we
pull
it
down
from
github.
So
this
this
app
just
pulls
all
the
github
apis.
The
funny
thing
here
is
I'll.
Show
you
the
secret
behind
it
is.
D
This
is
just
using
github
apis
and
all
the
github
apis
are
available
to
anybody,
and
so
what
I
did
I'm
not
signed
in
dang
it
well,
if
I
was
signed
in,
we
would
see
a
option
here
to
look
at.
I
think
it's
it's
called
insights
and
on
insights
is
where
you
can
see
these
numbers
so
like
how
we'll
get
meta
with
this.
We'll
look
at
the
data
from
my
get
trends
repo,
but
all
these
daily
views
daily
clones
unique
views,
unique
loans.
D
All
this
data
is
just
coming
from
the
github
apis
and
it's
available
on
the
website,
but
it's
buried
in
this
insights
tab
and
the
reason
I
want
to
create
this
or
reason
I
did
create
this
app
was.
I
didn't
want
to
have
to
click
on
100
repos
every
week
or
so
dig
into
their
insights,
tabs
and
figure
it
out,
but
yeah.
So,
let's,
let's
power
forward,
we
got
tons
of
fun
stuff
to
talk
about
today.
D
So
that's
just
kind
of
the
overview
of
how
you
want
to
architect
your
app,
but
now
I
want
to
focus
in
on
specifically
in
on
xamarin
forms.
So
I
think
the
first
thing
that
is
important
to
talk
about
is
mvvm.
D
So
if
you've
never
heard
of
mvvm,
it
stands
for
model
view
view
model
and,
like
any
architecture,
you
know
maybe
you've
heard
of
mvc
model
view
controller.
Mv.
Excuse
me,
mvu
model
view
update.
It's
basically
just
a
way
to
architect
your
app
that
separates
concerns
so
model
in
mvvm.
Let's
get
that
oh
model.
D
This
is
essentially
our
pocos,
our
plain
old
c-sharp
objects.
This
is
just
structure
of
our
data
and
I'll
show
you
what
that
looks
like
in
code
in
just
a
minute,
but
basically
models.
Don't
do
anything,
there's
no
logic
in
them.
D
But,
for
example,
when
we're
pulling
down
data
from
the
github
api
github
api
is
going
to
give
me
back
data
for
like
the
total
number
of
views,
and
that
has
a
model
which
is
a
list
of
int,
probably
a
list
of
it,
but
that
that
model
just
defines
the
data
the
shape
of
the
data.
If
you
will,
it
doesn't
actually
do
anything,
the
view
is
just
the
ui.
So
again
the
ui
doesn't
do
anything.
It
just
knows
like
in
this
case,
to
draw
this
rectangle
color
it
color
the
background
white.
D
Add
this
image
add
some
text,
but
the
view
doesn't
even
know
what
image
is
going
to
appear
here.
The
view
doesn't
know
what
numbers
or
what
words
for
the
text
are
going
to
appear.
It
just
knows
going
to
give
me
an
image,
url
and
somebody's
going
to
give
me
some
text
and
when
they
do,
this
is
where
I
put
them.
So
our
view
is
intentionally.
D
D
This
is
where
all
that
logic
takes
place,
so
the
model
defines
the
shape
of
our
data.
The
view
describes
how
our
ui
looks
and
the
view
model
is
kind
of
that
glue,
holding
everything
together,
because
the
view
model
knows
how
to
take
action.
So,
for
example,
when
I
do
that
pull
to
refresh
it's
the
view
model
that
knows,
okay,
I've
got
to
go
hit
the
github
apis
and
here's
how
I
surface
the
data
to
the
view
so
that
the
view
can
drop
on
the
screen
now.
D
The
reason
we
recommend
mvvm
is
well
partly
because
xamarin
forms
was
literally
architected
around
the
mvvm
paradigm.
So
it's
literally
the
de
facto
architecture
I
mean
you
can
you
can
have
libraries
like
the
reactive
extensions
will
allow
you
to
do
things
that
are
like
closer
to
mvu.
Some
people
will
claim
it's
not
pure
mvu,
but
there
are
ways
to
do
other
architectures,
but
the
intent,
the
creation
of
xamarin
forms,
is
all
around
the
assumption
that
we'd
be
using
the
mvvm
architecture.
D
So,
for
example,
what
does
a
model
look
like?
Well,
I
have
a
model
here.
This
is
my
referring
sites
model.
Let's
make
this
a
little
bit
bigger
and
just
wondering
what
a
referring
site
is.
The
github
apis
will
also
tell
you
where
that
traffic's
coming
from
so
in
this
case,
this
github
repo
is
getting
some
traffic
from
other
github
repositories
that
are
probably
pointing
to
this
repo.
Somebody
did
a
blog
post
that
points
to
this
repo
or
just
a
plain
old
google
search
that
landed
somebody
in
this
repo.
D
So
that's
a
referring
site
and
let's
see
this
is
this-
is
a
little
complicated.
Let's
jump
down
to
the
base
class
here,
much
better,
so
this
model
just
has
a
couple
properties
in
it.
So
the
date
time
for
when
the
data
was
downloaded,
the
name
of
the
referrer,
which
would
be
google
or
github,
we
make
sure
that
the
referrer's
uri
is
valid.
That's
what
the
code
in
this
constructor
is
doing
just
to
make
sure
well.
This
was
something
unique
to
the
way.
Github
gives
me
the
data.
D
Sometimes
it
includes
the
full
url,
but
for
popular
sites
like
google,
it
just
says
google,
so
I
have
to
do
some
logic
like
adding.com
if
it's
missing
and
making
sure
everything's,
https
and
then
and
also
the
it
gives
me
the
uri.
So
if,
if
we're
back
looking
at
the
referring
sites
in
this
app,
if
I
tap
on,
I
write
code,
sometimes
it'll,
take
me
to
the
uri
and
and
that's
it
but
yeah.
D
I
tapped
on
that
thing
or
I
tapped
on
that
that
item
in
the
list
and
we
navigated
to
its
url,
but
none
of
that
logic
happens
in
the
view.
This
view
is
literally
just
a
couple
properties
that.
D
Now,
if
we
look
at
a
view
model,
let's
actually
check
out,
let's
hide
that
don't
want
to
give
away
what
that
common.
Folder
is
just
yet
if
we
look
at
a
view
model,
for
example,
that
referring
sites
view
model.
So
this
is
the
this
view.
Model
is
the
business
logic
behind
this
page.
So
things
like
what
happens
when
I
do
pull
to
refresh
well,
there's
somewhere
in
here
a
refresh
command
whoops!
D
That's
what
I
wanted,
so
this
command
executes
anytime.
We
do
a
pull
refresh.
So
if
I
were
to
put
a
breakpoint
right
here,
do
a
pull
to
refresh
the
debugger
hits
this
breakpoint.
So
it's
the
view
model
that
knows
what
to
do
anytime.
The
user
takes
an
action
and
there's
more
code
in
here
about
you
know
what
what
do
we
do
if
the
user
clicks
on
it?
D
It
timed
out,
because
I
had
hit
the
breakpoint
and
that's
fine,
but
the
view
model
is
what
handles
all
the
logic.
So
it
gets
things
like
this
referring
site
list,
so
that
was
the
model
we
were
just
looking
at
again.
The
model
doesn't
do
anything,
but
it
just
defines
the
shape
of
our
data
and
it's
the
view
model
that
handles
and
knows
what
to
do
with
that
data
and
what
was
the
other
thing?
The
view
of
course
model
view
view
model.
D
So
the
view
this
might
look
a
little
funny
to
folks
who
have
been
doing
xamarin
for
a
while.
I
actually
I
create
this
pages
folder
in
my
app.
I
started
this
way
back
in
the
day,
because
every
let's
do
referring
sites
page,
because
everything
in
xamarin
is
a
it's
a
content
page.
So
it's
like
oh
well
I'll,
make
a
folder
called
pages
and
then
later
it's
like,
oh
well.
Technically,
this
is
the
view
in
mvvm,
so
you'll
see
probably
most
projects
we'll
call
this
folder
views.
D
I
actually
have
a
views
folder
down
here,
which
makes
it
even
more
confusing,
but
these
views
are
basically
views
for
a
specific
page.
So
the
referring
sites
has
some
specific
views
for
it,
but
if
we
look
at
this
well,
first
of
all,
I
do
all
my
ui
in
c-sharp,
which
is
has
come
a
long
way.
We
recently
got
c
sharp,
markup
extensions
and
xamarin
forms
4.6,
which
are
basically
extension
methods
that
allow
us
to
create
that
give
us
a
fluent
syntax
for
our
ui.
D
So,
for
example,
I
can
create
a
collection
view
and
I
can
say,
dot
bind,
and
this
should
look
and
feel
familiar
if
you've
done
any
work
in
xaml,
because
yeah
we're
just
creating
bindings
we're
putting
things
in
a
grid.
One
of
the
things
I
love
about
this
c
sharp
markup
is.
It
allows
me
to
define
my
rows
by
literally
giving
them
a
name
if,
if
we're
working
in
zamble,
you
just
have
to
say
row
0
is
auto
and
row.
D
2
has
an
absolute
length
of
well
in
this
case,
whatever
the
shadow
height
is
and
bro,
I
guess
no.
This
is
row
two
there
we
go
see.
That's
why
I
don't
like
or
that's
why
I
do
like
the
fact
that
I
can
define
them,
because
now
I
can
define
each
row
and
I
don't
have
to
remember-
is
this
row
zero?
I
mean
it's
the
first
row,
but
it's
row
zero
because
counting
starts
at
zero
in
c
sharp
and
I
would
always
get
that
confused
in
my
head
and
anytime,
I
would
create
a
new
ui.
D
There
was
always
something
in
the
wrong
quadrant
because
of
just
trying
to
remember
all
that
stuff,
so
yeah
with
these
markup
extensions,
I
can
just
say
this
row
is
called
title.
This
row
is
called
title
shadow.
This
row
is
called
list
and
then,
when
I
put
things
into
the
grid,
for
example
like
this
reviewing
referring
sites
refresh
view,
I
can
just
tell
it
it's
going
into
the
title
shadow
row:
it's
going
to
span
three
columns
or
span
three
rows
and
then
span
all
the
columns
which
is
really
cool.
D
D
We
have
these
bindings
that
are
essentially
tie
our
view
model
and
our
views
together.
So
the
view
doesn't
know
what
to
do
it.
All
it
knows
to
do
is
any
time
portal
refresh
happens
from
the
user.
It
just
shouts
out
to
the
viewmodel
and
says:
hey,
hey,
refresh
command,
execute,
but
that's
all
it
knows.
It
doesn't
know
anything
more
than
there's
something
called
refresh
command
and
it's
the
view
model
that
handles
all
that
logic,
so
essentially
mvvm.
D
What
is
it
it's?
We
have
a
dumb
ui
that
we
call
the
view
that
doesn't
know
how
to
do
anything.
It
just
knows
how
to
shout
to
its
associated
view
model.
The
view
model
handles
all
the
logic
and
the
view
model
can
also
shout
back
for
when
things
are
updated.
So
when
those
integer
values
for
the
total
view
counts,
get
updated,
the
view
model
can
shout
back
and
say,
hey
view.
D
I've
updated
these
and
they're
always
listening
to
each
other
and
when
the
view
hears
that
it
goes.
Oh
thanks
for
that
data.
I
know
to
I
know
where
to
draw
this
on
the
screen,
and
so
what
this
allows
us
to
do
and
the
reason
we
recommend
it,
because
you
might
be
looking
at
this
and
going
gosh.
That
is
a
lot
of
overhead
and
you're
not
wrong,
but
the
benefit
here
is.
D
Let's
say
I
wanted
to
redo
this
entire
ui
and
ironically,
this
was
an
effort
that
we
did
a
good
friend
of
mine,
luis
pujos,
reached
out
to
me
after
I
initially
pushed
this
app
to
the
app
store,
because,
if
I'm
being
honest,
the
first
version
that
I
released
the
app
store
looked
terrible,
I'm
not
a
designer
everything.
Functionally
was
great.
There
was
no
bugs
no
crashes,
so
hey.
I
take
that
as
a
win,
but
didn't
look
great
and
my
buddy
luis
who's.
Also
a
xamarin
developer
in
the
xamarin
community
he
reached
out.
D
I
was
like
hey.
Can
I
help
you
make
this
look
like
a
real
app
should
and
he
was
the
one
that
came
up
with
these
this
layout
and
what
that
meant
was.
I
basically
selected
all
the
code
in
my
referring
sites
page
and
said,
delete
and
then
using
luis's
templates.
D
We
recreated
it
and
what's
great
about
mvvm
is
I
could
do
that
and
I
didn't
have
to
touch
any
code
in
my
view
model,
so
I
didn't
have
to
change
anything
in
the
logic
I
just
got
to
redraw
or
tell
my
app
how
to
draw
this
new
ui,
and
so
that's
the
real
benefit
of
mvvm.
Is
we
have
these
separations
of
concerns?
D
So
if
we
want
to
rip
out
a
layer
in
our
app
we
can
if
we
want
to
change
the
view,
if
we
want
to
do
a
version,
2.0
update
like
we
did
with
git
trends,
we
can
do
that
and
we
don't
have
to
touch
any
of
the
logic
and
we
know
as
long
as
we
wire
up
those
bindings
in
the
new
ui.
It's
just
gonna
work,
because
all
that
view
model
logic
is
still
there
and
we
hadn't.
We
didn't
touch
it.
D
There's
no
risk
at
accidentally
deleting
logic
code,
there's
no
risk
at
accidentally,
adding
bugs
into
our
view
model,
because
it
had
no
idea
that
we
changed
the
ui
and
that's
and
that's
the
point
of
mpvm.
So
mbvm
gives
us
that
flexibility.
It
gives
us
a
separation
of
concerns
and
I'll
say,
most
importantly
to
me.
It
also
helps
us
define
where
files
live
and
what's
nice,
with
xamarin
forms,
essentially
going
with
mvvm
as
a
de
facto
architecture
is
that
I
can
open
just
about
any
xamarin
forms.
D
App,
there's
tons
of
xamarin
forms
app
open
sourced
on
github
and
when
I
pop
them
open-
and
I
want
to
see
something
like
you
know-
maybe
there's
an
app
that
already
made.
That
is
doing
something
really
cool
like
he
created
this
really
cool,
looking
ui.
Well,
I
know
when
I
open
up
aria's
app
and
look
at
the
code.
D
I
just
look
for
a
folder
called
views
or,
if
you're
weird
like
me
and
name
it
pages,
I
can
look
for
these
folders
and
I
can
figure
out
pretty
quickly
where
that
code
lives
that
already
made
and
figure
out
what
he's
doing
and
likewise,
if
maybe
the
app
is
also
doing
something
really
cool
like
it's
using
a
azure
api
that
I've
never
tried
out
like
I
already
was
talking
about
online
offline
sync
and
all
that
cool
stuff.
Well,
how
is
he
doing
that?
D
C
To
add
there
and
thanks
this
is
really
interesting.
The
I
see
that
you're
talking
about
how
you're
building
your
ui
via
code
instead
of
xaml.
So
could
you
speak
a
bit
to
the
pros
and
cons
of
that?
You
know
if
there's
a
performance
impact
and
so
forth.
Oh
good
question.
D
Well,
I
think
some
context
is
important
here.
I
I
never
did
any.
I
was
never
a
web
developer
and
I
never
did
any
winforms
or
wpf
before
I
started
doing
xamarin,
and
so
when
I
started
working
at
xamarin.
Actually,
the
reason
why
I
even
applied
for
a
job
at
xamarin
was,
I
knew
c
sharp.
I
I
wanted
to
make
ios
and
android
apps,
but
I
didn't
want
to
learn
objective-c
and
I
didn't
want
to
have
to
spend
the
time
to
rewrite
the
app
again
in
java.
D
So
what
I
heard
about
this
weird
x-zamarin
company
that
was
on
the
west
coast,
I
was
like
oh,
oh
wow,
yeah,
that's
really
cool
and
the
apps
will
totally
native
great.
So
when
I
joined
xamarin,
xero
forms
wasn't
really
a
thing
yet,
and
we
did
everything
in
c
sharp
because
well,
that's
kind
of
the
value
prop
of
xamarin
is
we
could
do
everything
in
c
sharp.
D
D
Xaml
has
since
become
the
more
popular
way
to
create
uis,
I
think
probably
75
percent
of
xamarin
forms
developers
use
xaml.
So
if
you
do
too
you're
not
alone,
but
for
me
I
had
never
used
ammo
before
and
I
was
struggling
enough
just
to
learn
mobile
at
the
time
I
was
still
new
to
ios
and
android.
There's
100
000
apis
that
are
unique
to
both
platforms
and
you
have
to
learn
the
mobile
life
cycle
and
for
me
I
didn't
want
to
add
xaml
to
that
learning
curve.
D
And
so
that's
why
I
use
c
sharp
and
circling
back
to
your
question.
There
is
a
we'll
say,
a
slight
performance
benefit
for
doing
things
in
c,
sharp,
because
c
sharp's,
all
ahead
of
time
compiled,
whereas
xaml
is
just
in
time
compiled.
So
what
that
means
is
when
I
launch
a
new
page.
So,
for
example,
I
click
this
referring
sites
button
boop
that
code
to
display
this
page
to
run
this
and
the
associated
business
logic
everything's
in
c.
So
it's
all
been
compiled
ahead
of
time.
D
If
this
was
in
xaml,
the
xaml
parser
has
to
first
essentially
transpile
that
xaml
code
into
c
sharp,
and
then
it
can
generate
it.
So
you
get
a
little
performance
bump
by
doing
everything
in
c
sharp.
Now
that
being
said,
a
couple
years
ago
we
came
out
with
the
xaml
compiler
or
xaml
c
yeah
and
xample
c
helps
a
lot
now
totally
anecdotal.
When
zamblc
first
came
out.
D
I
was
like
how
good
is
this
right,
so
I
I
made
a
kind
of
simple
dummy
app
and
did
that
that
test,
just
like
this,
like
tap
a
button
that
launches
a
new
page
and
without
xaml
c
it
took
about
300
milliseconds
for
that
page
to
load,
when
I
enabled
xaml
c
that
dropped
in
half
so
about
150
milliseconds.
So
that's
totally
anecdotal.
D
That
is
gonna
that
time
difference
is
gonna,
be
different
for
everybody,
because
everybody's
sample
pages
are
different
and
so
more
complicated
uis
are
gonna,
take
longer
to
load,
no
matter
what
you're
doing
and
or
whether
you're
doing
c
sharp
example,
but
xaml
c
still
doesn't
compile
all
the
xaml.
It
compiles
a
lot
of
it,
but
it
doesn't
cover
everything.
So
c
sharp
will
always
have
that
performance
benefit
over
xaml.
D
Now
all
that
being
said,
if
your
app's
running
fine
in
xaml,
don't
don't
turn
around
and
change
it.
I
mean
if
there
is
a
weird
case
where
you're
seeing
performance
problems
and
you
think
you
can
squeak
out
some
more
performance
by
porting
it
to
c-sharp
from
xaml
it's
worth
a
shot,
but
the
the
difference
is,
I
won't
say
negligible,
but
I
mean
we're
talking
in
the
milliseconds
or
in
the
tens
of
milliseconds
between
c
sharp
and
sample.
So
that
is
one
benefit.
D
The
other
things
I
actually
let
me
show
you
because
I
did
a
a
talk
recently
on
all
this
fun
stuff.
Let's
see
where
I
highlighted
some
of
them
here
so
sample
first
c
sharp.
So
that's
the
performance
we
were
talking
about.
Refactoring
and
maintenance
is
nice,
because
I
can
do
things
like
this
and
see
sharpware.
D
If
I'm
in
my
viewmodel-
and
I
want
to
change
the
name
of
this
command,
I
can
just
say
rename-
maybe
call
it
new
refresh
command
and
then,
if
I
flip
back
to
the
sites
page,
because
this
is
all
type
safe,
it's
all
in
c
sharp.
It's
already
been
updated,
whereas
if
I
did
that
and
my
ui
was
in
xaml,
then
the
xaml
doesn't
automatically
get
updated
because
it's
xaml
is
essentially
just
a
hard
coded
string.
So
we
have
to
remember
to
update
all
our
bindings
if
we
change
any
of
the
property
names.
D
Likewise,
if
you're
ever
jumping
into
a
new
code
base,
it's
really
nice
when
everything's
in
c
sharp,
because
I
can
say,
find
references
and
I
can
find
find
out
exactly
where
this
empty
data
view.
Title
is
being
used
in
both
my
view
and
also
on
that
page.
So
it
makes
it
really
easy
to
come
up
to
speed
where,
if
everything's
in
xaml,
then
the
best
way
I
found
and
if
anybody
knows
a
better
way
to
search
xaml
or
to
search
symbol
bindings.
D
I
should
say:
let
me
know,
but
the
best
way
I
figured
out
how
to
do.
It
is
just
to
literally
use
the
search
bar
here.
So
we
get
a
little
bit
refactoring
performance
benefits.
Then
there's
some
silly
things
like.
I
never
understood
this
syntax,
like
this
automation
id
just
to
use
a
constant
so
like
in
c
sharp,
it's
a
string
constant.
So
I
can
just
say:
class
name,
dot,
string,
constant
name,
whereas
in
xaml
it's
x,
colon
static
and
then
I
have
to
include
the
namespace,
but
it's
not
even
namespace.classname.
D
C
Right
answer,
your
question:
I
know
resharper
and
impractor
will
take
care
of.
Like
the
refactoring
point
does
work.
I
haven't
tried
it
without
resharper
because,
like
I
always
have
resharper
installed,
and
I
already
have
impractor
so
yeah.
Maybe
I'm
spoiled
you
know,
but
it
will
handle
those
bindings
for
you
and
it'll
even
give
you
the
the
intellisense.
D
To
let
you
choose
that
stuff
yeah,
that's
a
good
point
yeah!
If
anybody's
listening
and
you
make
your
uis
and
sample,
make
sure
you're.
Also
using
empractor,
I
found
empractors,
essentially
a
a
must
have,
and
yes,
it
costs
money,
but
it's
one
of
those
productivity
things.
That's
just
worth
it
and
plus
you
can
probably
get
your
company
to
pay
for
it
too.
But
the
last
thing
here
and
then
we'll
get
back
on
the
rails
to
architecture.
D
Is
these
converters,
so
creating
converters
and
samples
is
really
annoying
because
you
have
to
create
a
whole
separate
class.
This
I
value
converter
is
not
type
safe,
so
everything's
an
object,
object,
value,
object,
parameter
and
then
you
have
to
cast
it.
C
And
john
bachelor
points
out
that
jetbrains
writer
does
a
great
job
with
xaml
bindings,
of
course,
jetbrains
resharper
same
company,
so
ryder
is
very
cool
and
you
get
a
lot
of
the
resharper
capabilities
built
into
the
ide
there.
You
go
zama
fans.
D
I
don't
know
I
I
hear
great
things
I
honestly
haven't
tried
it
really
good
yeah.
I
mean
my
thing
is
mostly
just
I
work
at
microsoft,
and
so
I
try
to
stay
on
the
the
preview,
slash
dog,
fooding
channel,
of
visual
studio
over
studio
for
mac,
because
I
want
to
try
and
catch
all
the
bugs
before
or
help
catch
bugs.
I
should
say,
because
I
personally
won't
catch
all
of
them,
but
before
it
gets
to
stable.
D
All
right,
so
the
last
thing
I
want
to
touch
on
in
xamarin
forms
and
really
just
in
mvvm
in
general,
is
I
do
recommend
dependency
injection.
Now
I
mentioned
at
the
top
of
the
show
that
some
people
are
almost
religious
and
they're
fervor
for
for
slash
against
dependency
injection.
D
I
personally,
I
used
to
be
not
against
dependency
injection,
but
service
location
was
so
easy.
I
was
like
this
is
fine
and
it
wasn't
until
I
got
into
unit
testing,
which
we'll
touch
on
a
little
later,
that
I
really
fell
in
love
with
dependency
injection
and,
if
you've
never
heard
of
dependency
injection
or
maybe
you've,
never
done
it
in
the
xamarin
forms
app.
D
That,
oh,
hey,
I'm
not
even
using
that
here,
I'm
using
autofaq,
so
microsoft
also
makes
a
dependency
injection
library
the
one
I'm
using
in
this
is
auto
fact,
but
basically
what
you
do
if
we
look
at
my
view,
model
you'll
notice,
this
constructor
has
tons
of
things
being
injected
into
it,
and
these
are
all
different
services.
D
There's
also,
this
is
xamarin
essentials
interfaces
which
I'll
talk
about
a
little
bit
later,
but
what
dependency
ejection
does
is,
instead
of
using
static
classes,
we
can
inject
that
into
the
constructor,
so
any
outside
class
that
we're
going
to
be
referencing.
We
can
pass
in
and
the
reason
this
is
or
one
of
the
reasons
this
is
nice
is
we
can
kind
of
set
it
and
forget
it.
So
I
have
this
dependency
injection
container,
where
I
just
register
all
these
types.
D
So
if
any
class
wants
to
use
app
info
implementation
or
if
they
want
to
use
and
my
analytics
service
or
background
fetch
service
they're
all
registered
in
this
container,
and
what
that
allows
me
to
do-
is
where's
a
good
example
for
grabbing
that
down
here
after
the
splash
screen.
D
Paint
page
that's
right
page
there
it
is
so
to
initialize
my
repository
page,
I
can
just
say
container.resolve
and
then
it
initializes
it
for
me.
So
what's
actually
going
on
here
with
dependency
injection,
is
this
repository
page
has
all
these
dependencies,
but
everything
is
registered
ahead
of
time.
So
when
I
say
resolve
all
these
implementations
are
just
added
in
for
me,
so
I
don't
have
to
worry
about
newing
up
a
main
thread
class
or
first
run
service
or
any
of
this
stuff.
D
It's
all
just
done
for
me,
and
a
big
benefit
is
that
we
can
do
things
like
single
licenses
for
some
of
my
services,
so
anyways
get
a
little
bit
ahead,
but
dependency
ejection
is
something
that
I've
recently
fell
in
love
with.
I
recommend
it.
It
is
complicated,
though
so,
if
you're
a
new
developer,
if
you're
new
to
csharp.new.net,
it's
probably
easier
to
stick
with
service
location
or
the
service
locator
for
getting
started.
C
I'd
love
to
add
something
to
that
one
thing:
service,
location
and
dependency
injection
to
do
is
thinking
abstractly
and
coding
with
intent,
so
you'll
get
out
of.
It
is
building
the
interface
first
figure
out.
What's
the
intent
of
what
your
code
should
be
before
you
think
about
implementation,
and
then
you'll
actually
write
your
implementation.
So,
as
you
come
up
with
better
implementations,
at
least
your
intent
stays
the
same
because
you
know
if
you're
doing
crud,
you
know
your
c
r.
U
and
d
really
aren't
going
to
change,
but
your
implementation
might
so.
C
Your
interface
will
have
your
create,
read,
update
and
delete
kind
of
yeah
just
but
then.
B
C
Be
able
to
swap
that
out,
as
you
get
better
or
as
you
find
issues
so,
whether
you
use
service
location
or
use
dependency,
injection
ioc
you'll
be
in
good
shape,
just
architecturally
by
starting
with
that
pattern.
D
Yeah
and
like
I
said
it
is,
it
is
tough.
You
know
it
took
me
a
couple
years
of
doing
c
sharp
before
I
felt
comfortable
with
this
dependency
magic
or
dependency
injection
magic,
but
yeah
once
once
you
can
kind
of
wrap
your
head
around
it.
It
is
beautiful
because
yeah
there's
even
things
where,
like,
if
a
class
references,
a
class,
it
references,
another
class
versus
another
class
that
references
back
to
the
same
class.
D
Nope
can't
do
this
and,
like
I
already
was
saying
it,
it
forces
you
to
essentially
rethink
how
you
architect
and
write
your
codes
to
avoid
those
circular
dependencies
and
really
what
that
comes
down
to
why
those
are
bad
is
those
can
lead
to
memory
leaks
and
worse,
oh,
maybe
it's
worse
depending
on
your
take
on
it,
but
it
could
also
lead
to
what
we
call
spaghetti
code
where
the
code
just
becomes
unmaintainable
so
yeah
forcing
yourself
to
think
about
that
dependency,
injection
architecture,
essentially
yeah.
D
It
helps
you
write
cleaner
code
well
said
yep
all
right,
so
something
else
we
have
in
our
xamarin
forms
architecture
is
what
we
call
the
service
layer,
so
we
mentioned
earlier
the
view
model
that
does
all
the
work
like
when
I
click
a
button.
It's
the
view
model
that
knows
what
to
do
after
the
click
or
when
I
do
a
pull
refresh.
It's
the
view
model
that
knows
how
to
execute
that
refresh.
D
Well,
if
there's
code,
that
I
say
is
agnostic
to
a
view
model
where,
for
example,
writing
code
that
hits
the
github
apis
well,
I
have
a
couple
view
models
that
all
need
to
hit
the
github
apis.
So
that's
not
really
specific
to
a
view
model.
Then
we
can
put
that
in
what's
called
a
service
layer
and
the
benefit
there
is
well
there's
a
couple
benefits
the
one
one
big
one
being
that
separation
of
concerns,
so
that
single
responsibility
principle
where
each
class
is
responsible
for
essentially
one
thing.
D
So
I
have
a
class
that's
responsible
for
interacting
with
the
github
apis,
and
I
can
now
share
that
class
between
multiple
view
models.
I
don't
have
to
rewrite
any
code
and
so
to
kind
of
simplify
this
a
little
bit
one
of
the
ways
I
think
of
like
when
I
think
of,
should
this
go
in
the
service
layer.
I
ask
myself:
will
I
be
using
this?
In
other
view,
models
well
multiple
view
models
need
to
use
this
code.
Then
I
break
it
out
and
I
put
it
in
the
service
layer.
D
And
so
what
that
looks
like
in
git
trends
is
I
have
a
folder
called
services.
So
again,
these
are
all
things
that
are
agnostic
to
specific
pages
so,
like
I
use
app
center
to
do
to
track
crashes
and
get
crash
reports
and
timing
things
I
use
like
we
mentioned
the
github
apis,
and
these
are
all
this
is
all
code
that
accesses
the
github
api.
D
These
are
singletons
and
the
dependency
injection
container
takes
care
of
all
this.
For
me,
which
is
great
but
what's
nice,
is
when
I
have
two
view
models
that
need
to
use
the
github
api
v3
service.
D
Well,
I
don't
need
two
separate
instances
of
these,
because
my
services
don't
maintain
any
state,
there's
nothing
in
the
service
that
is
specific
to
things
like
the
app
went
away,
but
is
the
view
refreshing
is
the
view
busy,
all
that's
handled
by
the
view
model.
These
are
all
stateless
that
just
know
how
to
hit
an
api
and
get
data
back
or
do
some
image.
Caching
or
translate
languages
and
skit
trends
handles
a
couple
different
languages
like
spanish
and
dutch
and
portuguese
shout
out
to
the
community.
They
added
all
these
awesome
languages.
D
For
me,
since
the
app's
open
source,
I
just
got
all
these
awesome.
Full
requests
that
were
like
hey,
I
speak
spanish,
wouldn't
it
be
cool
if
we
had
spanish
language
support,
I
was
like
yeah.
That's
awesome.
I
don't
do
you
mind,
opening
a
poll
request,
so
we
are
still
looking
for
chinese.
If
you
know
anybody
that
speaks
chinese,
send
it
my
way,
because
I
have
a
lot
of
chinese
users
for
git
trends,
but
we
don't
have
a
chinese
translation
yet
so
anyways
yeah
services,
they
are
potentially
view
model
agnostic.
D
They
can
be
used
by
multiple
view
models.
I
recommend
keeping
them
stateless,
so
they
can
stay
as
singleton,
so
we
don't
have
to
create
a
new
instance.
Every
time
we
want
to
say
pull
something
from
a
github
api,
but
one
of
the
things
we
mentioned
at
the
top
of
the
show
a
little
teaser
is
poly
and
refit.
These
are
two
must-have
libraries.
If
you've
never
heard
of
them,
poly
allows
us
to
do
automatic,
retries
and
exception
handling.
D
So
when
you
think
about
resiliency
like
we
were
talking
about
earlier,
if
let's
say
well
before
kovid,
let's
say
I'm
on
the
bus
and
the
bus
is
switching
cell
phone
towers
or
it's
going
through
tunnels.
Well,
the
user
might
lose
that
internet
connection
briefly,
which
would
cause
that
api
request
to
fail
well
with
poly,
I
can
tell
it
to
automatically
retry,
and
so,
when
that
happens,
my
code
automatically
hits
the
api
again
and
you
can
set
how
many
retries
you
want.
D
I
think
my
default's
three
you
can
set
things
like
how
long
to
wait
between
retries,
because
you
don't
want
to
retry
right
away
because
computers
operate
in
the
nanosecond
scale,
the
millisecond
scale.
So
if
I
couldn't
connect
to
the
cell
phone
tower
a
millisecond
ago,
there's
a
likely
chance
that
I
won't
be
able
to
connect
to
it
again
right
now
and
so
just
to
show
you
what
that
looks
like
in
the
code.
C
D
You
were
exactly
right
in
the
first
part,
the
view
model
is
responsible
for
getting
the
data
and
then
it
essentially
it
jams
that
data
into
a
model
and
the
view
knows
what
to
expect
from
that
model.
So
they
all
kind
of
work
seamlessly
together
but
yeah.
It's
all
up
to
the
view
model
to
do
the
heavy
lifting
the
model's
just
kind
of
hanging
out
and
going
hey
here's
what
the
data
needs
to
look
like.
Let
me
know
when
you
got
it
and
when
you're
ready
for
me.
D
So
here's
a
example
and
code
of
what
poly
looks
like
this
is
a
method
I
wrote
called
attempted
retry,
where
kind
of
like
it
sounds:
it'll,
wait
and
retry
automatically.
So
I
use
this
for
all.
My
api
calls
like
if
I
jump
back
to.
D
So
like
this
api
service,
we'll
always
call
attempt
and
retry
when
I
want
to
get.
For
example,
the
repository
view
statistics
and
so
what's
nice
is,
I
tell
poly
the
number
of
retries
I
set
my
default
to
three
and
because
we
don't
want
it
to
retry
right
away
because
again,
if
we
couldn't
connect
to
the
internet
a
millisecond
ago,
probably
won't
be
able
to
connect
to
it
now
a
millisecond
later
and
what
I
do
is
what's
called
an
exponential
back
off.
D
So
I
tell
it
to
it
passes
in
the
number
of
retries,
but
it'll
weight,
two
to
the
power
of
the
number
of
retries,
so
this
code
is
basically
just
doing
to
the
power
of
n.
So
this
means
the
first
retry
will
wait
two
seconds
between
when
that
api
call
failed
to
when
it
tries
again,
because
that's
two
to
the
one,
the
second
time
it's
two
to
the
two
squared.
So
that's
four,
so
it'll
wait
four
seconds
and
then
the
last
time
will
be
eight
seconds
in
between
and
so
hopefully
eight
seconds.
D
Point
in
retrying,
because
I
already
know
that
this
has
failed
because
of
well,
not
necessarily
because
of
the
user,
but
because
of
something
on
the
user
side
or
the
client
side.
So
yeah
I
just
checked
to
see.
If,
if
that
is,
if
it
was
forbidden,
if
it
was
unauthorized,
then
I
don't
retry
and
then
all
the
other
ones
yeah
retry.
D
Oh
my
gosh,
I
don't.
I
laugh
when
I
think
about
life
before
I
found
refit
because
refit,
if
you
have
to
access
apis,
see
there
we
go
so
refit.
Lets
us
define
our
apis
the
same
way
if
you've
ever
done
anything
in
asp.net
core.
If
you
created
an
api
or
controller
in
asp.net,
core
or
asp.
framework,
you
you're
familiar
with
this
attribute
syntax,
and
so
all
I
have
to
do
is
tell
refit
to
say.
D
D
Well,
that's
because
I
need
the
user
to
pass
those
in,
and
so
this
is
it
this
one
line
of
code.
I
can
call
from
my
app
just
like
this
and
it
knows
to
make
a
git
request
that
github
api.
So
before
this
I
had
a
a
base
class
that
was
kind
of
generic
and
static,
and
I
would
just
copy
paste
that
everywhere
for
doing
git
apis
in
c
sharp.
D
Once
I
found
refit,
I
just
deleted
that
because
I
can
just
easily
define
my
api
endpoints
like
this,
so
huge
huge
fan
of
refit
here
you
can
pass
in
headers.
You
can
do
things
like
you
can
even
pass
in
headers
at
runtime
all
sorts
of
cool
tricks.
You
can
do
with
refit
and
it'll
save
you
tons
and
tons
of
time
trying
to
manually
write
that
code.
D
Oh
all,
right,
hey
all
right!
I
noticed
we
have
about
eight
minutes
before
the
top
of
the
hour.
Is
it
cool
if
we
keep
going
a
little
longer.
C
I
think
that
it's
okay,
you
know,
I
mean
we're.
Recording
the
whole
thing,
heads
up,
yeah,
the
refit
stuff
and
the
oh.
We
got
a
question
come
in.
Does
it?
Oh,
that's
a
good
question.
Asp.Net.
I
heard
nerd.
C
D
Yeah,
you
nailed
it
if
I
zoom
out,
so
I
have
this
github
api
client,
which
is
defined
up
here.
So
this
is
that
interface
that
refit
interface
and
yeah
every
action
that's
taken
using
this
client
will
reuse
the
same
http
client
with
the
same
base.
Url
and
let's
see
where
do
I
define
this?
D
C
A
D
So
I
have
some
code
here
that
creates
http
client,
but
that
client
gets
passed
in
you
just
say
restservice.4
that
that's
the
refit
api
we're
just
looking
at
and
then
you
pass
in
your
http
client
and
that's
where
I
pass
in
my
github
api
url
but
yeah.
No,
you
nailed
it.
We
give
it
what
base
url
and
it'll
reuse
http
client,
because
if
anybody's
listening
and
you
are
disposing
of
http
client,
don't
hdecline
is
meant
to
be
reused,
never
dispose
of
it.
There's
whole
things
with
sockets,
but
we'll
say
trust
me,
reuse.
C
And
that's
because
it's
a
re-entrant
object,
that's
the
that's
the
key
I'll
post,
the
I'll
post,
that
link
http
client
as
re-entrant
yeah,
if
you're
using
a
using
around
it
you've
been
using
it
wrong,
which
I
didn't
know
until
a
couple
years
ago,
when
I
read
about
it,
I
also
put
the
links
to
the
resilient
network
handling
and
or
resilient
network
connections
in
xamarin.
C
Those
are
on
the
indie
xamarin
meetup
page
because,
for
whatever
reason,
youtube
wouldn't
let
us
put
the
links
to
those
in
the
chat,
so
it's
there,
but
you
can
also
just
search
for
resilient
network
connections
in
xamarin.
There's
great
articles
that
talk
about
how
to
effectively
use
refit
and
poly
and
even
akavatch,
for
you
know,
caching,
your
your
stuff
and
on
the
mvvm
stuff,
I
did
put
a
link
in
the
chat
about
the
microsoft,
learn
article
that
covers
how
to
create
mvvm
models
and
it
walks
you
through
that
whole
thing.
D
All
right
and
rounding
out
our
xamarin
forms
architecture.
If
you
do
want
to
have
local
caching
or
you
want
to
store
data
locally
well,
then
you
got
to
have
a
database,
and
so
I
wanted
to
bring
this
up
because
sql
there's
a
library,
sqlite
net.
If
you've
been
doing.
Let's
show
this.
This
is
just
a
nuget
package,
so
get
trends
nuget
package.
D
Where
are
you
whoops
sqlite
net
dash
pcl,
ignore
pcl?
That
was
what
it
was
originally
named
like
10
years
ago,
when
frank
krueger
made
it,
but
this
is
going
to
be
the
most
performant
database
that
you
can
add
the
reason
I
say
that
is,
it
doesn't
have
all
the
bells
and
whistles
of
something
like
entity
framework,
but
as
of
today,
don't
use
entity
framework
in
your
xamarin
apps.
There's
known
issues
with
entity
framework,
the
team's
aware
of
them.
D
I've
been
working
with
the
team
and
matt
soka
has
also
been
working
with
the
team
internally
to
help
pin
those
down,
but
there's
we'll
say,
use
cases
where
things
like
just
initializing.
The
database
connection
on
an
entity
framework
in
a
xamarin
app
takes
three
seconds
and
if
you
are
pulling
data
from
your
database
when
the
app
launches
well,
that
means
your
app
launch
is
going
to
be
delayed
by
three
seconds,
which
is
a
lifetime
in
mobile.
D
D
Let
me
show
you
this
base
database
first,
because
I
want
to
point
out
I'm
using
poly
again
now,
specifically
I'm
catching
these
sql
light
exceptions,
but
what
I
recommend
is
to
use
sql
lite
when
you
initialize
it.
There
are
things
like
enabling
right
ahead
logging,
which
will
give
you
a
little
bit
of
boost
in
performance,
and
so
we
won't
dive
too
deep
into
the
databases.
D
But
I
did
want
to
recommend
sqlite.net
and
also
when
you
do
things
make
sure
to
include
poly,
because
what
I
found
is
sometimes
with
when
you're
saving
stuff
to
a
database.
D
D
Where's
my
reference-
this
should
should
have
done
it
like
this
find
references.
Oh
there,
we
go
so
any
time
we're
doing
settings
with
the
database.
I
put
it
in
this
attempt
and
retry
now
the
biggest
difference
here
with
this
poly
retry
is
the
number
of
retries.
I
crank
it
up
to
12
and
I
only
I
do
the
same
exponential
back
off,
but
at
the
millisecond
scale,
so
the
first
time
I'll,
wait,
two
milliseconds,
then
so
on
and
so
forth,
because
milliseconds
is
like
a
lifetime
when
it
comes
to
cpus
and
databases.
D
All
right
on
to
testing
now
there's
two
kinds
of
testing
for
our
xamarin
apps.
There
is
ui
testing
which
we'll
talk
about
first
next
up
we'll
talk
about
unit
but
ui
testing,
emulates
a
user
using
your
app.
So
users
can
tap
buttons
on
the
screen
they
can
pull
to
refresh.
They
can
enter
text
into
text
boxes
they
can
navigate
to
and
from
pages
sorry
there's
a
question
sure
what
about
dapper.
D
No
clue
I've
never
used
it.
Oh
so
damper.
C
So,
oh!
Yes!
Yes!
Yes,
that's
right!
I
don't
know
that
it
wouldn't
work
the
lahi.
I
don't
know
if
I'm
saying
that
right,
I
haven't
tried
it,
but
it
might
work.
I
don't
know
why
it
wouldn't
because
it
seems
to
work
with
tottenham.
C
Another
thing
you
can
look
at
is
also
akavatch,
which
is
a
whole
caching
framework.
C
And
it'll,
let
you
manage
the
lifetime
of
you
know
any
cached
object.
It's
pretty
cool!
It's
in
that
same
link
that
net
foundation
posted
above
resilient
networking
and
xamarin.
D
Right
out,
yeah,
no
good
question,
that's
right!
I
I
I
remember
dad
for
now
yeah,
I'm
unsure
how
its
performance
does
on
xamarin,
but
you
know
if
it's
something
where
you
try
it
out
and
it
works
great
go
for
it.
But
if
you
notice
things
like
we've
been
seeing
with
any
framework
core,
where
there's
things
like
three
seconds
to
do
a
database
connection
or
a
couple
seconds
to
do
a
database
migration.
D
Those
are
essentially
show
stoppers
for
me,
which
again
the
team's
aware
of
it,
we're
looking
into
it.
Hopefully
someday
we'll
be
able
to
do
everything
in
any
framework
core
because
yeah,
it's
great
for
back-end
databases
that
live
on
servers,
really
powerful
servers
that
are
always
turned
on.
But
mobile
is
this
kind
of
unique,
weird
edge
case
that
you
have
to
make
sure
you
you
plan
ahead
for
it.
D
So
yeah,
circling
back
to
testing,
ui
testing,
emulates,
a
user
and
the
way
this
works
in
xamarin
forms
is
xamarin.
Forms
has
every
ui
element
in
xamarin
forms,
so
a
button
a
view,
a
label,
content
page
anything
that
exists
in
xamarin
forms
has
a
property
called
automation
id,
and
so
what
I
like
to
do
here-
and
this
is
where
reo
is
saying
there-
are
places
where
I
do
recommend
a
shared
project.
D
This
is
one
of
those
places,
because
what
we
want
to
do
with
our
ui
tests
is,
we
want
to
use
automation
ids
for
everything.
Let
me
show
you
what
this
looks
like
real,
quick,
let's
jump
over.
D
D
D
There
we
go
so
when
I
create
this
close
button.
I
tell
it
to
use
this
automation
id,
and
this
is
my
xamarin
forms
code.
Now
in
my
ui
test
code
is
the
one
I
open
first
jump
back
to,
that
we
can
reference
that
same
id.
Automation,
ids
are
just
string
constants
and
it's
essentially
a
unique
identifier
that
we
can
use
for
our
tests.
So
this
close
button
is
using
that
same
string,
constant
close
button
that
we're
using
in
our
xamarin
forms
code.
D
So
the
reason,
let's
see
so
the
reason
I
recommend
having
a
shared
project
is
well
the
reason
I
recommend
sharing
that
code.
First
is
so
that
you
can
have
these
public
string
constants
that
are
shared
by
both
xamarin
forms
and
the
ui
tests.
I
learned
this
the
hard
way
because
I
used
to
just
hard
code
the
strings
and
I
kept
having
typos,
so
my
ui
test
would
fail
because
I
couldn't
find
the
button,
but
it's
because
I
spelled
the
word
close
button
wrong
in
my
testing
code.
D
D
We
pass
in
that
button
that
we
initialized
that
uses
the
same
constant.
The
ui
test
will
scan
what's
visible
on
the
screen
for
that
string,
constant
and
if
it
finds
it,
it'll
tap
it.
If
it
doesn't
my
test
fails.
So
the
reason
I
recommend
using
a
shared
project
here
is
going
back
to
the
fact
that.net
standard
libraries
generate
a
dll
if
what
we're
doing
by
using
a
shared
project
is
just
speeding
up
our
compilation
time.
So
I
don't
there's
two
things
going
on
here.
D
D
Well,
it's
got
to
build
this
whole
dot-net
standard
library
and
its
dll,
and
then
it
can
build
its
own
dll
and
then
run
the
ui
tests,
which
can
get
a
little
painful
so
having
a
slimmed
down
separate
project,
essentially,
for
these
constant
strings
makes
everything
really
really
fast.
In
fact,
it's
a
shared
project.
We
lose.
We
get
away
from
the
overhead
of
having
to
first
generate
the
dll,
then
compile
the
head
project.
So
this
is
one
place
where
we're
just
using
string.
Constants.
D
D
So
these
are
all
my
automation,
ids,
but
all
that
all
those
translations,
all
these
resex
files
also
are
shared
so
that
I
can
run
my
ui
tests
and
I
can
test
out
the
app
in
spanish
and
I
can
test
out
the
app
in
german
and
the
only
way
to
do
that
is
to
share
all
the
information
between
xamarin
forms
project
and
my
ui
test
project,
but
resex
files,
just
don't
work
in
shared
projects,
there's
a
lot
of
code
generation
that
happens
in
the
background
by
visual
studio
and
that
just
for
whatever
reason,
isn't
supported
in
shared
projects.
D
So
I
had
to
use
it
in
standard
library
here,
so
I'm
being
a
little
bit
hypocritical,
but
that's
okay,
because
using
resex
files.
So
that's
my
excuse,
anyways
and
then
there's
also
things
like
we
can
share
certain
services
like
this
mobile
sorting
service.
So,
like
the
app
closed
out,
but
we
can
sort
by
views,
we
can
sort
by
clones
we
can
sort
by
stars
and
all
that
logic
I
want
to
be
able
to
verify
in
my
tests.
D
So
I
put
it
in
my
mobile
common
project,
so
my
ui
tests,
my
unit
test
can
also
verify
that
as
well
and
there's
also
some
models
here.
Ui
tests
have
these
cool
things
called
backdoor
methods
where
you
can
literally.
C
D
C
Good
with
you
eyes-
and
so
I
know
that
there's
so
if
you
haven't
seen
it,
go
check
out
sync
fusion,
they
through
a
whole
set
of
libraries
and
as
long
as
your
app
makes
less
than
one
million
dollars
a
year.
It's
free,
so
that's
kind
of
cool.
I
didn't
know
that,
which
is
why
I
wasn't
using
their
stuff,
but
they're
free,
I
believe
telerik
and
infogistics
also
have
ready-made
templates.
I
know
there's
a
number
of
sites
out
there.
There
was
even
like
a
xamarin
gallery
at
one
point.
C
I
don't
have
the
link
to
it.
Let
me
see
if
I
can
find
it
yeah,
there's
a
was
it
the
xamarin
forums,
there's
a
really
cool,
like
xamarin
forms
like
control
gallery
at
one
point.
That
was
really
I
just.
I
don't
know
where
it
is
at
one
point
I
don't
know
where
it
is
anyway,
somewhere
on
the
internet.
At
one
point
I
had
it
linked,
but
yeah
syncfusion,
infrastics
telerik
they
they've
got
that
stuff,
syncfusion's,
free
and
I'll.
See.
C
If
I
can
look
that
stuff
up,
the
other
thing
is
is
as
you
get
as
you
build
components
in
your
apps
that
you
like,
because
you
will
you'll
be
like
wow.
You
know.
I
worked
really
hard
on
that.
You
can
extract
that
relatively
easy
easily
into
a
reusable
view,
so
try
to
build
your
libraries
of
those
reusable
views
like
if
you
go
the
xaml
route,
because
I'm
a
xaml
guy.
C
I
find
it
very
easy
to
have
those
reusable
components
and
then
I
just
inject
them
in
the
xaml
and
then
I
can
just
swap
it
out.
You
know,
as
I
see
fit
or
reuse
it
all
over
my
application,
like
a
header
very
another
one,
to
take
a
look
at
go.
Take
a
look
at
sharknado.
C
I
keep
shark
nato,
sharp
nato
I'll
I'll
write
these
down
real
quick,
so
people
will
forget
so
sharp
nato
is
one
there's
like
a
sharp
nato
ui.
I
know
matt
and
james
were
talking
about
some
of
the
cool
stuff.
It's
got
with,
like
the
the
like
the
blur
background
effects
and
everything.
That's
really
neat
there.
You
go
yeah
material
frame.
D
Yeah,
I
just
think,
what's
really
ironic,
is
I'm
literally
using
those
in
this
app.
D
C
Sweet,
let
me
write
down
the
other.
Someone
was
kind
of
a
team
special
job,
also
progress
or
probably
tulera
cat
stuff
and
logistics.
C
Infusion
is
free
malahi
as
long
as
your
app
makes
less
than
a
million
dollars.
So
if
it
makes
a
million
or
more
then
hopefully
that
means
you
can
afford
it,
but
it
really
is
free.
You'll
see
just
I
can
walk
you
through
it.
If
you
ever
have
a
question
just
ping
me,
I
I'm
at
re
on
twitter,
but
yeah,
it's
it
is
free.
C
Let's
see
what
else
are
there
any
other
questions?
How
does
mvvm
work
if
you
want
to
display
more
than
one
record
from
your
database
on
the
screen?
Doesn't
model
only
describe
the
data
types
of
one
record?
I
can
answer
that
one,
but
I'll.
Let
you
do
it.
D
Sure,
hopefully,
we're
on
the
same
page
all
right,
but
I
was
gonna
say
if
your
view
model
just
has
a
list
of
that
model.
I
mean
I
do
this
for
all
the
lists
in
this
app
like
each
of
these.
D
The
data
that
appears
in
each
of
these
rows
is
a
repository
model,
and
that
contains
the
data
for
the
name
of
the
repository,
the
avatar
url,
the
numbers,
reviews
and
stars,
and
so
yeah.
You
just
put
it
into
a
list,
and
then
you
can
use
nvvm
to
essentially
extrapolate
that
view
for
each
row
and
it'll
populate
in
our
in
our
list
like
this.
Is
that
what
you
were
thinking
too.
C
I
wasn't
listening.
I
was
looking
something
up,
so
yes,
I
nailed
it.
I
really
want
once
you
have
data.
So
if
you
have
your
your
view
model,
you
know
once
you
once
you've
got
your
data,
you
can
display
anything.
You
want
the
way
you
want
to.
You
know
you're
not
bound
to
a
particular
data
type.
You
can
make
things
as
a
as
complicated
or
simple
as
you
like.
You
know,
that's
that's
really
up
to
you.
D
C
C
I
just
posted
something
about
visual,
so
visual
material
that'll.
That
may
help
that's
another
cool
thing.
That's
out
there
and
I'm
trying
to
find
you
know.
Oh
here's,
the
the
xamarin
ui
kit
templates
from
sync
fusion,
all
right.
I
can
do
this
without
nice,
no
problem,
I'm
always
got
it.
It's
so
deep.
D
Yeah
the
ecosystem
is
pretty
amazing.
That's
I
will
say
just
a
general
recommendation.
If
you
are
about
to
do
something,
google,
it
first
to
see
if
it
already
exists
like
this,
so
sharp
nato,
this
material
frame.
This
is
sharp
nato
material
frame
and
you
can
do
cool
things
like
that.
Has
this
little
bit
of
elevation,
so
it
looks
like
it's
popping
out
of
the
screen
and
I
do
things
like
if
it's
disabled,
the
elevation
will
go
away,
so
it
almost
shrinks
back
into
the
screen.
D
So
it's
it's
subtle,
but
you
can
see
that
elevation.
Isn't
there
compared
to
these
other
ones.
So
yeah
just
super
cool
things,
and
this
is
like
a
couple
lines
of
code
because
who
makes
sharknado
jean-marie
did
all
the
heavy
lifting
for
us
and
he's
way
better
at
it
than
I
am
so
yeah.
Definitely
just
do
a
quick
search
to
see,
like
maybe
there's
like
a
shadow
button
that
somebody's
already
made
that
we
can
leverage.
D
All
right,
so
circling
back
to
the
architecture
next
up
is
unit
testing.
Your
your
unit
test
has
to
reference
your
in
this
case
xamarin
forms
project
because
that's
where
your
services
live.
That's
where
your
view
models
live.
That's
where
your
database
lives
and
the
rule
of
thumb
with
unit
testing
is
have
a
test
for
every
service
have
a
test
for
every
view
model,
and
probably
more
specifically,
I
should
say
every
public
api,
because
this
services,
each
service
class,
will
have
protected
and
private
methods
and
a
common
question
to
get
is
well.
D
D
Those
public
apis
will
reference
those
private
methods,
and
so
you
can
still
get
to
them
and
you
just
have
to
make
sure
you
have
a
test
that
covers
those
paths,
and
so
what
this
looks
like
in
git
trends:
let's
go
ahead
and
shrink
that
down
a
little
bit.
So
my
unit
test
all
these
tests
you
can
see.
I
have
here's,
my
all
my
tests
for
all
my
services,
all
my
tests.
For
all
my
view,
models
I
even
test
all.
I
have
this
test
to
make
sure
we
have
res
x.
D
D
D
I
made
this
as
a
tool
to
help
me
because
I
saw
the
need
and
love
that
other
folks
are
using
it
all
around
the
world,
but
the
only
way
I
can
survive
as
an
individual
developer,
an
indie
dev
on
a
free
app
is
by
having
all
these
unit
tests.
So
things
like
you
know
all
these
apis,
so
testing
things
like
making
api
requests
for
valid
repos,
making
api
requests
when
it's
unauthenticated,
making
ipa
api
requests
for
invalid
repos.
D
Having
all
these
things
here,
allow
me
to
add
new
features,
and
then
I
can
quickly
run
my
suite
of
unit
tests
same
with
my
suite
of
ui
tests
and
know
that
I
didn't
break
anything
and
then,
of
course,
every
time
you
add
something
new
add
a
new
unit
test
for
it,
and
this
is
really
where
dependency
injection
comes
into
play
because,
specifically
with
xamarin
essentials,
if
you
try
to
use
certain
xamarin
essentials,
libraries
in
your
unit
tests,
it
just
blows
up.
D
There's
certain
samurai
essentials
apis
that
just
don't
account
for
net
core,
which
is
I'm
using
this
unit
test,
library.net
core
library,
and
so
they
just
don't
work,
and
so
the
only
way
around
this
is
to
essentially
mock
them
out,
so
basically
creating
about
this
folder
for
mock
services.
D
So
things
like
the
browser,
well,
dot
net
core
doesn't
have
a
browser,
but
xamarin
essentials
does,
and
so,
if
I
have
code
in
my
service
layer,
my
view
model
layer
that
opens
up
a
browser
and
I
try
to
unit
test
that
it's
going
to
blow
up
it's
going
to
fail,
not
because
my
code
is
bad,
but
because
there's
just
no
implementation
for
a
browser.
So
there's
this
amazing
library,
xamarin
essentials
interfaces,
that's
made
by
my
good
friend
ryan
davis,
and
he
essentially
takes
every
version
of
xamarin
essentials
and
then
creates
an
interface
around
it.
D
Now
there
they
are
so
I
can
create
all
these
mocks
so
like
or
analytic
service
right
like
this
is
app
center.
App
center
doesn't
have
a
thing
for
net
core
because
it's
made
for
ios
and
android
and
then
all
these
xamarin
essentials
interfaces
that
I
can
mock
out
and
what
this
ends
up.
Looking
like
is
back
in
that
xamarin
form
source
code.
D
For
things
like
I
do
some
background
fetch.
I
can
tell
xamarin
forms
dependency
injection
that
I'm
just
going
to
pass
in
an
iap
info
which,
in
the
xamarin
forms
dependency
injection.
This
will
inject
into
it
the
xamarin
essentials
iap
info,
but
in
my
unit
testing
it's
going
to
eject
in
a
mock
app
info
that
I
created.
D
So
this
is
where
dependency
injection
really
became
critical
for
me
was
when
I
started
to
essentially
up
leveled
to
making
sure
I
unit
tested
everything
like
a
good
responsible
developer,
which
I
mean
really
it's
only
my
app
store
apps
have
unit
tests.
I
have
a
lot
of
just
playground
open
source
projects
that
I
don't
probably
should
but
yeah.
D
If
I'm
gonna
push
it
to
the
app
store,
it's
gotta
have
a
suite
of
tests
because
I'm
the
only
developer
working
on
it
and
I
need
to
make
sure
I
don't
break
anything
or
if
anybody
from
the
community
opens
up
a
pull
request
that
they
didn't
accidentally
introduce
any
new
bugs.
So
highly
recommend
xamarin
essentials
interfaces,
it's
just
a
nuget
package,
but
yeah
when
you're
doing
unit
testing.
This
is
really
where
dependency
injection
come
well
for
me
became
critical.
D
All
right,
we're
almost
there
a
couple
more
slides,
because
the
next
thing,
because
that
we
want
to
talk
about,
is
including
our
back
end,
because
xamarin
forms
is
all
done
in
c.
Sharp
our
unit
tests
are
all
in
c
sharp
or
ui.
Tests
are
all
in
c
sharp
and
our
back
end
is
also
all
in
c
sharp.
So
we
can
create
apis.
D
Some
interfaces-
nothing
in
here
should
be
anything
where
we
rely
on
a
specific
framework.
So
we
can
use
a
shared
project
and
again
that
make
sure
we
don't
create
a
dll
every
time
we
can
take
advantage
of
that
compiling
performance
benefit,
but
again,
if
you're
uncomfortable
shared
projects,
you're
not
familiar
with
them.
D
Dotnet
standards
still
totally
cool,
and
what
this
looks
like
and
get
treads,
is
this
little
folder
right
here?
So
things
like
refit,
so
I
have.
I
have
azure
functions.
If,
if
you've
never
heard
of
azure
functions,
it
is
azure's
serverless
implementation,
so
functions
are
really
cool
because
they're,
basically
just
a
method
that
runs
in
the
cloud,
it's
serverless,
so
it
only
when
it's
not
needed.
It
scales
all
the
way
down
to
zero,
which
means
that,
yes,
this
is
an
azure.
D
D
Needs
to
be
done
in
my
azure
function,
but
that's
also
code,
I'm
leveraging
in
my
mobile
app.
So
I
can
share
that
code,
even
though
yes,
it's
a
service,
and
so
I
have
all
the
refit
implementations,
any
models
that
I'm
passing
back
and
forth,
like
specifically,
these
dtos
so
like
we
are
passing
back.
D
This
generate
token
dto.
So
this
is
what
has
to
be
generated
on
the
server
side,
but
it's
also
what's
going
to
be
received
on
the
client
side,
and
so
instead
of
duplicating
that
code
and
making
sure
well
duplicating
code
is
always
bad,
because
if
we
update
something
on
the
server
side,
then
we
have
to
remember
update
on
the
client
side.
Instead,
we
can
just
share
that
as
a
model
between
the
two.
So
anything
we
want
to
share
between
our
cloud
back
end
and
our
mobile
app.
D
Stored
here
and
then
that
way,
we
can
share
it
between
our
our
servers,
our
apis,
our
azure
functions
on
the
back
end
with
the
mobile
app,
and
this
really
to
me
is
the
biggest
benefit
when
it
comes
to
being
a
c-sharp
developer,
because
yeah
there's
technically
swift
servers
and
kotlin
servers,
but
they
aren't
very
popular.
I
can't
speak
to
whether
you
know
their
performance
or
anything
cause.
D
I
haven't
used
them,
but
they're,
that's
not
usually
the
go-to
when
you're
creating
back
ends,
you
don't
usually
say:
oh
I'll,
make
this
back
and
then
swift,
but
with
c
sharp.
We
have
very
robust
tools
like
asp.net,
core
and
azure
functions,
and
all
these
great
things
that
we
can
leverage
and
it's
all
a.net.
So
it's
a
dot-net.
We
can
share
code
and
that
way
we
don't
have
to
worry
about
maintaining
server-side
code
versus
client-side
code.
We
can
share
that
code
between.
D
C
I
did
have
a
question
from
bachelor.
James
was
saying
there
were
reasons
not
to
have
interfaces
within
xamarin
essentials.
Any
idea
what
reason,
what
that
reason
could
be,
and
thank
goodness.
D
Yeah,
thank
goodness
for
ryan
davis
and
sam
essentials
interfaces.
I
I
don't
know
my
hunch
is
that
well
here's!
Here's
here
was
my
experience.
I
agreed
with
james
until
I
needed
to
do
uta
testing,
because
until
then
all
my
xamarin
essentials
code
was
running
on
a
xamarin
app,
so
yeah
the
browser
implementation
worked
every
time
because
xamarin
essentials
has
that
implemented
for
ios
and
android
and
great
and
so
yeah.
D
We
don't
want
to
overtake
that
because
that
was
that's
kind
of
like
an
but
basically
yeah.
We
don't
want
to
step
on
anybody's
toes,
and
you
know
ryan
made
this
library
he
she
he
should
and
does
get
all
the
credit
for
doing
it,
and
so
that's
been
a
trend.
I've
noticed
where
folks
will
ask
that
for
other
xamarin
essentials
things
as
well
like
hey,
can
we
bring
this
in
and
the
initial
answer
is
typically
well.
It
already
exists.
This
already
works
great,
and
so
yes.
C
D
Could
implement
it,
we
could
roll
it
in
we'd
have
to
tweak
it
to
fit
into
xamarin
essentials,
but
for
now
yeah
just
use
this
other
library.
So
yeah,
I
don't
know,
I
don't
know
if
it's
maybe
something
we
could
get
on
the
roadmap
but
yeah.
I
wish
I
had
an
answer
because
I
I
wonder
the
same
thing
I
I
wish
it
was
in
there.
I
know.
I
know
the
original
design
decision
was
to
keep
it
simple,
which
is
why
everything
was
just
static.
D
D
C
Question,
let's
see,
can
you
show
some
code
where
one
of
these
ids
is
defined
set.
C
Let's
talk
on,
I
think,
that's
the
automation
id.
Let's
talk
about,
let's
answer
that
one
after
the
future
architecture,
so
people
can
see
the
rest
of
your
presentation.
So
if
you
don't
mind
mark
on
that,
one.
D
No
problem
that
that'll
be
a
quick
answer
too
so
yeah
last
but
not
least
like
what's
what's
next
right,
you
know
we,
I
r
and
I
were
chatting
about.net
maui
coming
and
yes,
it
is
coming
it'll,
be
in
dot
net
six
dot
net,
six,
the
first
release,
so
the
very
alpha
preview
of
dot
net
six
should
be
available
to
everyone
in
november
2020.
D
So
we're
only
a
couple
months
away
from
at
least
seeing
the
alphabets
alphabets
alphabets,
but
I
personally
won't
be
porting
my
apps
to.net
maui
until
we
get
at
least
a
release
candidate
out,
because
the
initial
preview
releases
those
apis
are
subject
to
change.
So
I
don't
I'm
I'm
being
selfish
here,
but
I
personally
don't
want
to
have
to
port
my
app
to
an
alpha
version
of
net
maui
and
then
have
to
report
it
again
with
if
the
apis
happen
to
change,
but
with
dot-net
maui.
D
D
So
things
like,
if
we're
in
our
xamarin
forms
project,
and
we
need
to
access
an
api
that
exists
in
our
ios
project,
we
have
to
do
things
like
either
dependency
injection
service
locator
to
do
what's
called
inversion
of
control
and
get
back
into
the
parent
project,
and
that's
not
easy
like
when
I
was
first
learning
xamarin
that
took
me
a
while
to
wrap
my
head
around.
C
D
I
imagine
it's
true
for
other
new
developers
and
so
what
we're
doing
with
dot
net
maui
is.
We
will
be
marching
towards
this
world
of
what's
called
a
single
multi-targeted
project.
Now
multi-targeting
is
a
thing
it's
been
around
for
a
couple
years,
but
it's
mostly
used
in
libraries.
So
actually
speaking
of
xamarin
essentials,
cameron,
ascend,
joel's
github,
if
we
check
out
the
xamarin
essential
source
code,
camera
essentials
is
using
a
multi-targeted
library,
and
so
if
we
look
at
things
like,
if
we
talk
about
the
browser,
let's
check
it
out
so
you'll
notice.
D
So
the
way
multi-targeted
projects
work
is
if
I
zoom
out
and
look
at
the
cs,
proj
what
we
do.
We
say
target
frameworks
and
then
we
include
the
frameworks
we
want
to
target
so
dotnet
standard,
xamarin.ios
tv,
os,
android,
the
different
flavors
of
android
tizens,
everyone
mac.
So
all
of
these
frameworks
are
targeted
in
this
one
project,
and
your
next
question
is
probably
well
hang
on.
There's
no
way
you
can
do
that
because
you're
going
to
blow
up
the
compiler,
because
there's
apis
that
exist
in
android
that
don't
exist
in
ios
and
you're
right.
D
So
the
way
we
handle
that
is
by
using
the
file
names,
so
browser.android.cs
will
only
compile
when
we
are
compiling
for
android.
Likewise,
browser.ios.cs
will
only
compile
when
we
compile
the
ios
project
and
obviously
shared
is
the
one
that
gets
compiled
for
all
of
them
and
then
there's
also.net
standard
but
anyways.
If
we
look
at
the
shared
code,
this
is
this
is
using
partial
classes.
So
this
is
the
world
of
multi.
D
Single
multi-targeted
projects
is
everything's
a
partial
class,
so
the
shared
file
has
the
generic
api
layer
right.
So
like
open
async,
this
is
the
one
we
call
from
our
xamarin
forms
apps
when
you're
using
xamarin
essentials.
I
say:
oh
wait,
open
async
and
I
pass
in
the
url
and
then
they're
doing
something
under
the
hood
they're
calling
a
different
met,
a
different
method,
we're
just
calling
a
different
method
and
what
we'll
notice
is?
There's
a
lot
of
methods
missing
from
here
and
and
that's
because
those
methods
live
in
the
platform-specific
implementation.
D
So
by
using
partial
classes,
we
can
have
our
shared
code
and
our
platform-specific
code
in
the
same
project
and
then,
instead
of
having
all
these
different
projects
and
using
a
version
of
control
to
get
back
into
the
platform-specific
apis,
we
can
just
rely
on
the
compiler
to
know.
Oh,
hey,
I'm
compiling
for
ios,
let's
make
sure
to
include
browser.ios.cs,
and
so
that's
where
we
can
call
platform
openasync-
and
this
is
has
all
the
sf
safari
view
controllers.
D
All
the
platform-specific
apis
for
ios
can
go
in
this
file
and
we
don't
have
to
do
any
ioc
craziness.
So
the
future
in.net
maui
will
be
to
leverage
these
multi-targeted
projects,
and
the
difference
here
is
xamarin.
Essentials
can
do
this
now.
Do
this
right
now,
because
it's
just
a
nuget
package,
it
doesn't
have
to
worry
about,
including
a
runtime.
D
If
you
make
a
new
get
package,
you
should
be
using
multi-targeted
projects.
Well,
let
me
represent,
I
highly
recommend
it
I
say
should
be
using
because
literally
five
days
ago
I
just
ported.
My
nuka
package
called
async
weight,
best
practices
over
to
single
multi-targeted
project,
but
multi-targeted
projects
has
been
around
for
about
two
years
now,
so
it
only
took
me
two
years
to
catch
up,
don't
feel
bad
if
you
haven't
yet
either,
but
for
libraries,
yeah
multi-targeted
all
the
way,
because
it
makes
your
code
a
lot
easier
to
write
and
maintain.
D
You
have
to
worry
about
inversion
of
control,
but
what
we
don't
have
yet
and
what
is
coming.
In.Net,
6
and
maui
is
the
ability
to
do
this
with
run
time.
So
libraries,
you
can
do
that
today
for
creating
a
new
get
package.
Multi-Targeted
project
awesome
dot
net
maui.
We
can
now
expand
this
to
things
like
here
in
this
screenshot.
We
see
well.
First
of
all,
we
just
see
one
project.
D
There's
not
my
app.ios
there's
not
my
app.android
there's
not
myapp.uwp,
there's
just
my
app
and
if
we
want
to
access
those
platforms
specific
apis,
we
just
create
a
file
called
bluetoothadapter.android.cs
and
we
can
do
whatever
we
want
with
the
android
apis.
If
we
want
to
hit
ios
apis
bluetoothadapter.ios,
we
can
do
whatever
we
want,
and
that
way
we
can
just
use
partial
classes
and
this
secret
sauce
in
the
compiler,
with
file
naming
to
access
all
the
platform-specific
apis
for
us.
D
So
the
other
cool
things
that
we're
working
on
is
being
able
to
share
fonts
font.
Embedding
is
actually
already
a
thing
in
xamarin
forms
like
I'm
doing
that
in
git
trends
I
have
fonts
in
my
xamarin
forms
project
here,
resources
fonts,
so
I
have
all
my
fonts
here
and
then
I
just
have
some
assembly
attributes
to
say
export
this
font
and
I
give
it
a
name,
so
I
can
reference
it
elsewhere
in
my
xamarin
forms
code.
D
But
this
way
I
don't
have
to
add
each
ttf
otf
file
to
my
ios
project
and
my
android
project
and
make
custom
renderers
for
it
like
we
used
to
have
to
do
now.
I
can
just
use
this
assembly
attribute
and
then
in,
like
my
splash
screen
page,
for
example,
I
can
just
say:
font:
family
roboto,
bold,
so
multi-targeted
projects
are
the
future
and
what
that
entails
is
a
partial
class
for
it's
not
shown
here
but
well.
We
could
go
back
to
essentials,
so
a
partial
class
for
yeah.
D
So
public
static,
partial
class
browser
public
status,
static,
partial
class
browser,
and
these
two
can
just
reference
each
other
as
much
as
they
want.
It
just
happens
to
be
that
this
one
is
our
ios
specific
apis,
and
this
one
is
our
shared
apis,
so
non-platform
specific,
and
this
is
how
we
will
be
able
to
take
advantage
of
multi-targeted
projects
in
maui.
I'm
really
looking
forward
to
this
if,
but
we
won't
be
able
to
play
around
with
this
for
another
couple
months.
D
So
one
of
my
plans
is
when
dot
maui
comes
out
in
november
and
we
get
our
first
peek
at
it.
I'll
probably
take
a
simple
sample
app
or
dummy
app
that
I've
made
in
the
past.
That
is
not
in
the
app
store
and
then
try
to
port
that
over
using
these
partial
classes
and
the
file
extensions
just
to
get
a
feel
for
this
partial
class,
because
I
don't
know
about
you,
but
I
never
used
partial
classes.
I
always
thought
like.
D
I
knew
they
existed
and
I
know
that's
how
xaml
works
with
it
takes
advantage
of
partial
classes,
and
I
knew
that
but
like
I
never
saw
the
need
to
create
a
partial
class
myself,
but
now
I
see
the
light
like
having
partial
classes
and
compiler
specific
file,
extensions
or
platform
specific
file,
extensions
for
the
compiler.
This
is
just
going
to
be
a
beautiful
world.
You
know
imagine
having
somebody
new,
join
your
xamarin
development
team,
they've,
never
done.net
before
you
don't
have
to
teach
them
about
inversion
control.
A
This
a
lot
of
information,
so
we
have
a
couple
questions.
C
The
first
one:
let's
see,
can
you
share
some
code
where
one
of
these
ids
is
defined,
so
I
think
that's
we
gotta
circle
back
to
that.
Yep.
D
So
these
are
just
and
we're
also
assuming
you're
talking
about
or
the
question
is
asking
about
automation,
ids.
So
if
that's
the
case
great,
because
I'm
about
to
show
you,
if
not
feel
free
to
make
another
comment
to
correct
us,
but
for
example,
let's
see
I
had
that
referring
sites
page,
so
it's
literally
just
a
public,
constant
string,
you
can
name
it
whatever
you
want.
I
could
have
named
it
apple
tree,
wouldn't
make
any
sense,
but
because
this
constant
just
needs
to
be
the
same
it
just.
D
Let
me
rephrase
that
it
needs
to
be
a
unique
identifier
and
it
needs
to
be
the
same.
Reference
in
my
xamarin
forms
app
as
my
ui
test
app.
It
could
be
whatever,
but
obviously
apple
tree
wouldn't
make
since
here.
So
what
I
do,
I'm
kind
of
lazy
and
I'm
also
bad
at
thinking
of
names
so
to
keep
it
unique.
D
I
just
say
name
of
and
reference
the
the
actual
constant
and
the
class
that
it
lives
in,
and
I
do
this
I
have
tons
of
tabs
open.
Let's
do
this,
don't
save
anything
so
I'll.
Show
you
one
side
by
side
like
the
repository
page.
D
Also
has
a
collection
view
so
since
these
both
have
collection
views
in
them
to
keep
them
unique,
that's
why
I
use
the
name
of
the
class
that
resides
it
plus
the
name
of
the
automation
id,
and
so
when
I
reference
auto
repository
page
automation,
ids.collectionview,
my
ui
test
knows
to
look
for
this
string.
That
is
repository
page
automation,
ids
collection
view.
So
this
is
just
the
way
I
do
it
like.
I
said
you
can
just
you
can
always
just
do
reflection
view
one
two
three
and
that's
fine.
It
just
has
to
be
unique.
D
C
I
was
making
a
joke
every
time.
Every
time
I
see
something
in
the
in
the
in
code.
That
says,
I
don't
know
whatever
there's
not
even
a
variable
name,
but
just
a
guide
is
in
there
and
no
one
knows
what
it
means
you
know.
Do
it
come
from?
What
does
it
stand
for?
Well,
didn't
you
know?
That's
our
application,
id
and
azure.
You
know
azure
ad
well,
instead
of
variable
name
for
that.
C
So
we
had
a
question
if
you
have
an
external
set
of
apis
that
you
manage.
What
is
your
method
of
authentication
from
the
mobile
app
into
that
and
how
do
you
handle
new
users
etc?.
C
So
asp
nerd-
and
I
also
pointed
him
to
the
xamarin
essentials
web
authenticator,
because
azure
ad,
you
know,
there's
a
whole
authentication
system
for
that
and
another
thing
that
you
might
want
to
take
a
look
at
asp.
Nerd
is
azure's.
Api
management
and
azure
has
or
probably
amazon
aws
has
this
as
well.
It'll
actually
take
any
number
of
apis
that
you've
got
and
it'll
abstract
them
put
them
behind
a
single
set
of
security.
D
C
D
Yeah,
so
let
me
we'll
break
this
into
a
couple
parts,
so
if
you're
using
azure
azure
actually
makes
it
pretty
easy
to
implement
authentication,
I
just
want
to
show
you
this,
like
I
was
telling
ra.
I
created
my
first
website
just
this
week.
Like
I
said
I
never
was
a
web
developer
before
getting
into
mobile,
and
if
I
try
to
navigate
to
this
website,
it
should
ask
me
for
my
microsoft
credentials.
This
is
just
an
internal
tool,
that'll
be
used
by
my
there.
We
go
by
some
microsoft
employees
and
so
yeah.
D
Let
me
click
into
it.
There
we
go
so
this
authentication
authorization,
it's
turned
on
and
specifically
I'm
using
active
directory.
If
you
wanted
to,
you
could
do
a
social
auth
or
something
like
that,
but
check
this
out.
If
I
just
turn
this
off,
save
it
and
shoot,
I
forget
the
url
for
my
website.
Let
me
launch
the
website
again
and.
C
Go
back
a
couple
hold
down
the
the
back
arrow.
D
Should
let
me
write
in
and
there's
the
website,
so
this
was
actually
pretty
easy
to
do,
just
because
we
have
this
little
toggle
and
azure,
but
this
requires
you
to
have
an
account
already.
So
that's
one
of
the
also
one
of
the
reasons
why
it's
super
easy.
D
Let
me
show
you
what
I'm
doing
in
get
trends,
though,
because,
let's
see
just,
let
me
think
ahead,
real
quick
to
make
sure
I
don't
give
away
any
api
keys,
yeah,
okay,
so
in
this
app,
so
I'm
using
azure
functions,
serverless
functions
for
my
apis,
so
things
like
certain
things
need
to
be
authenticated.
Certain
things
don't
so
things
like.
D
I
keep
the
url
for
this
stored
in
the
cloud,
because
if
I
want
to
change
the
video,
then
I
can
just
swap
this
out
in
azure
and
I
don't
have
to
release
a
whole
new
version
of
the
app
if
it
only
if
the
url
was
hardcoded
in
the
app,
I
would
have
to
release
a
whole
new
version
of
the
app,
but
so
this
is
just
anonymous.
So
anybody
can
hit
this
api
and
get
this
video
url.
D
I
don't
know
why
you'd
want
to
do
that,
but
you're
welcome
to
use
my
video
anytime.
You
want
because
it's
an
honest
api
there's
certain
things
that
I
want
to
keep
hidden
and
azure
has
the
or
specific
azure
functions.
Allow
me
to
increase
the
authorization
level
and
so
to
do
this
one.
This
one
is
what
I
use
to
pass
in
the
syncfusion
api
key,
because
I
do
have
a
paid
syncfusion
account
and
when
you
have
a
paid
sync
fusion
account,
they
give
you
a
special
key
that
you
have
to
load
into
your
syncfusion
controls.
D
Come
on
android
force
quit
there
we
go
because
if
you
launch
the
app
without
that
api
key
you'll
get
this
warning,
we
go
get
past
the
splash
screen,
boop
and
I'll.
Give
you
a
little
heads
up.
You
might
get
a
preview
warning,
but
if
I
click
on
one
of
these
there
we
go
syncfusion.
This
is
kind
of
their
their
way
to
make
sure
people
are
using
or
paying
for
the
service
right.
So
I
keep
these
api
keys
again
stored
in
the
cloud,
so
I
can
rotate
them.
D
If
I
have
to
like,
if
an
api
key
gets
compromised,
I
want
to
be
able
to
rotate
it
and
again,
if
that
was
hardcoded
into
the
app,
then
I
couldn't
plus,
if
I
had
coded
into
the
app
well,
this
app
is
totally
open
source.
So
then
anybody
would
have
access
to
my
api
keys
so
yeah.
This
works
by
essentially
blocking
anybody
that
hits
this
api.
Without
a
specific
api
key.
You
can't
get
my
secret
top
secret
syncfusion
apis.
D
So
I
mean
I
I
I
joked
earlier,
but
I
said
that's
a
topic
for
a
whole.
Another
meetup
aria.
Actually,
I'm
happy
to
come
back
and
we
can
chat
more
and
dive
into
it
deeper,
but
yeah.
That's
always
authentication
is
really
tough
and
I
think
one
of
the
things
I'm
fortunate
with
in
this
app
is
when
you
log
in
you're
logging
into
your
github
account,
and
so
I
didn't
have
to
actually
create
a
authentication
server,
because
github's
doing
that
for
me-
and
I
just
follow
the
oauth
flow.
D
Oauth
is
kind
of
this
authorization
standard,
and
so
I
just
basically
tell
github,
I'm
like
hey
this
user
wants
to
log
in
with
their
account
and
github
goes:
okay
asks
the
user
for
their
credentials,
you'll
actually
notice.
My
credentials
are
now
cached,
but
you'll
notice.
It
launches
the
browser.
D
Oauth
always
will
launch
a
browser,
because
that
prevents
me
as
the
app
developer
from
ever
seeing
your
credentials.
So
certain
developers
don't
like
that.
Oauth
launches
the
browser
and
they
will
do
what's
called
an
implicit
workflow.
Don't
do
that
because
that,
if
that
app
developer
is
malicious,
then
they
can
have
code
that
logs
your
password
to
wherever
and
then
they
just
got
your
login
info.
D
So
yeah
oauth
launches
the
browser
there's
just
basically,
I
just
send
the
user
over
to
github
ask
github
to
ask
them
to
authenticate
with
github
and
then
what
github
does
github
just
tells
me
as
a
mobile,
app
developer
that
says
yep.
This
is
brandon
minic
or
yep.
This
is
ari,
and
then
it
gives
me
an
authentication
token.
So
I
never
see
your
username
and
password
oauth
kind
of
handles
that
for
me,
and
so
that's
one
way
to
do
it.
D
You
could
always
have
a
social
login
like
github,
twitter,
facebook,
google,
somewhere
some
service
that
handles
authentication
for
you
or
in
the
case
of
that
website
we
were
showing
earlier.
You
can
use
azure
ad,
which
just
want
to
make
sure
I
turned
it
back
on
so
good
question
yeah
all
right.
Maybe
we
can
queue
that
up
for
a
future
meetup,
because
that
is
a
very
complex
topic.
That
indications
are
all
sorts
of
answers.
C
Now,
to
be
fair,
if
you
don't
want
to
use
social
login
and
you
don't
want
to
use,
you
know,
federated
logins
or
azure
active
directory
and
that
stuff
which
those
are
cool,
they've
got
a
learning
curve,
but
you
know
there's
a
lot
of
libraries
that
will
make
it
really
easy,
including
xamarin
essentials
and
it's
a
web
authenticator.
C
That's
just
built
in
takes
care
of
all
this
stuff
for
you,
but
let's
say
you've
got
just
using
asp.net,
not
asp.net
core,
but
just
you
know
traditional
asp.net
with
web
api
and
it
builds
that
whole
web.
They
call
it
owen,
you
know,
along
with
bearer
tokens
and
so
forth.
Refit
is
very
easy
for
handling
that.
So
you
know
you
can
use
refit
to
just
tie
it
to
the
token
endpoint
of
the
the
asp.net
web
api
site
that
gets
built
for
you.
C
That
comes
with
authorization
and
authentication
provider
out
of
the
box.
It's
all
taken
care
of
for
you
now
when
it
comes
to
managing
users.
That's
a
different
thing.
There's
examples
that
handle
that
for
you,
that
also
will
sometimes
come
out
of
the
box.
I
think
at
one
point
there
was
something
there,
but
then
at
one
point
there
wasn't,
I
don't
remember.
I
ended
up
just
writing
my
own
stuff
and
the
framework
has
its
own
identity
context
that
you
know
will
build
all
that.
C
You
know
it'll,
build
the
asp.net
users
roles
and
everything
in
your
database
and
take
care
of
all
that
for
you
and
if
you
just
take
a
look
at,
you
know
how
that
works
in
the
traditional
asp.net
web
api
default
project,
you'll
you'll
be
in
good
shape
there.
If
you
just
need
something
simple
yeah,
I
think
the
best
advice
I
can
give
you.
C
D
Yeah,
I
think
the
the
best
advice
I
can
give
anybody
that
is
new
to
user
management.
Authentication
authorization.
Don't
you
don't
create
your
own
tool?
This
is
very
complex
stuff.
I
mean
I
use
it,
but
I'm
not
an
expert
in
it
and
so
make
sure
you
leverage
the
existing
tools.
Like
I
already
mentioned,
you
know,
editing
framework
has
tools
built
in
azure.
Has
tools
built
in
aws?
Has
tools
built
in
leverage
the
tools
made
by
the
experts?
D
D
Probably
the
biggest
attack
is
a
phishing
attack
and
then
it
comes
to
just
like
you
never
change
the
default
password
on
your
user
database
like
it
was
password
password
or
admin
admin
like
yeah.
That's
how
then
like
companies
like
well,
I
won't
throw
any
company
under
the
bus,
but
major
corporations
leak,
all
this
user
data
and
it's
things
and
it's
our
data.
It's
like
my
credit
card
info.
D
My
address
all
my
private
data
that
I
trusted
you
with
is
now
gone
because
you
tried
to
roll
your
own
service,
so
yeah,
don't
don't
try
to
roll
your
own
service
stand
on
the
shoulders
giants,
especially
when
it
comes
to
security.
C
Yeah
they
have
the
budget
to
protect
you.
If
anybody
remembers
that
the
original
version
of
the
sql
server
the
default
sa
password
was
nothing,
it
was
empty,
it
was.
There
was
no
so
oh
gosh
yeah.
That
was
the
bill.
What's
sql
seven
and
I
think
sql
2000
it
wasn't
until
like
people
2005
or
sql
2000.
it
no
sql
2008.
I
think
it
was
sql
2008
is
when
the
you
weren't
allowed
to
set
a
blank
default
password
without,
like
some
ui
ui
warning
going
whoa,
it's
terrifying.
D
Network
good
question
anything
about
net
maui
or
multi-targeted
project.
Sorry,.
C
I
haven't
seen
any
questions
come
through.
I'm
excited
about
the
multi-targeting,
especially
what
looks
like
a
ui
that
makes
it
not
suck
you
know.
So
I
didn't
really
know
anything
about
the
multi-targeting
until
tonight.
Actually,
like
I
had
heard
it,
but
but
no
one
ever
pointed
out
to
me
like
here's,
how
it's
structured
and
now
I'm
like.
Oh
yeah,
it's
one
of
those
things
you
kind
of
have
to
know
how
to
set
up
the
cs.
C
C
I
I
don't
know
I
don't
think,
there's
an
app
that
really
tests
the
security
of
your
application.
I
think
there's,
if
you
haven't
checked
it
out,
go
check
out
the
owasp.
You
know
what
is
it
the
the
application
security
best
practices?
I
I
gotta
remember
top
10
top
oh
wasp
best
practices.
C
D
C
C
Of
knowledge,
but
you
know,
if
you're
concerned,
I
mean
follow
the
best
practices,
for
you
know:
application
development
right
there,
what
brandon's,
showing
you,
those
top
10
web
application
security,
risks
those
to
a
good
extent,
also
lean
into
mobile.
You
can
also
build
you
know,
there's
tests
that
you
could
build
if
you're
part
of
a
corporation
there's,
actually
firms
that
will
do
testing.
You
know
security,
testing
penetration
testing
against
your
application.
C
You
know
it's
it's
not
necessarily
cheap,
but
there's
some
best
practices.
You
know,
for
example,
not
sending
things
in
plain
text
and
non-ssl.
C
You
know
ios,
won't
even
let
you
do
non-ssl
by
default
anymore,
so
yeah
android,
too
yeah
android
is
android
requiring
that
now
I
mean
I
just
I
was
like
gosh.
If
yeah,
I
think
here's
hd
10
https,
you
got
to
ask
yourself
why,
in
this
day
and
age
is
2020,
why?
Why
are
you
not
at
least
using
ssl
other
things
that
you
can
do
to
protect
your
data
using
certificates
for
your
api
authentication?
You
know
that
you
can
revoke
azure
key
vault
can
come
in
handy
there.
C
You
know
not
storing
credentials
in
the
application.
If
you
do
store
credentials,
don't
put.
B
C
In
source
code
store
a
hash,
never
never
check
in
your
code
to
a
public
repo,
it
has
your
credentials
in
it
again.
Things
like
key
vault
will
help
you
there,
because
you
can
keep
your
secrets
out
in
the
cloud
and
when
you
build
it'll
automatically
inject
the
secrets
into
the
build
process,
never
keep
them
in
the
cloud.
C
C
Some
of
this
is
common
sense,
but
you
know
what
I
think
it's
sometimes
it's
not
common
sense,
so
you
something's
happened
or
or
someone
who
knows
better
than
you,
especially
if
you're
new
to
this.
This
is
where
code
reviews
become
a
very
good
thing,
it's
good
to
get
a
sanity
check
from
other
developers,
even
if
you're
a
senior
engineer
or
an
architect,
etc.
C
C
Let
me
see
if
I
can
fix
it
yeah.
I
think
that
kind
of
collaboration
with
other
developers
can
help
and
just
like
you're
you're
asking
here,
you
know
what
would
best
practices
be.
You
know
what
solutions
are
out
there
yeah
ask
people
like
us.
I
think
that
entire
thing
is
also
another
entire
presentation
secure
your
app
writing
secure
code,
there's.
Actually
a
book
from
microsoft
called
writing
secure
code,
it's
a
thick
book
and
it
talks
all
about
all
the
vulnerabilities
it
talks
about
buffer
overflows.
It
talks
about
sql
injection.
C
It
talks
about
replay
attacks.
It's
there's,
you
know,
there's
I
don't
know
it
wasn't
replay
text,
but
it
was
like
a
xss
right.
Yeah
xss
attacks,
there's
a
lot
there,
but
that
top
10
o
wasp.
Oh
it's
so
important.
C
C
From
anyone
and
asp
nerd
I
hesitate
to
go
and
recommend
anyone
just
because
that's
not
really
my
forte,
you
know
I.
I
know
that
I
just
worked
with
a
company
called
dekra.
They
do
it.
B
You
know
there's
there's
others
that
are
out
there.
I
I
I'm
not
saying
that
decker's
going
off,
there's
a
bunch
of
them.
C
I
mean
there's
consulting
terms
all
over
the
place,
but
yeah
you
should
really
just
go.
First
start
with
the
the
less
expensive
approach
of
reviewing
your
own
code
and
going
is
it
do
I
feel
this
is
secure.
You
know
like
if
I
wanted
to
break
into
my
system.
Could
I
get
past
this
and
I
think
you
know
like
if
you
immediately
go?
Oh
yeah,
I
can
just
do
this,
that's
a
hole!
You
need
to
pass.
B
Definitely
yeah
any
other
questions,
anyone
anyone,
mueller
mueller
and
now
we
have
to
wait
the
15
second
delay,
because
we
said
it.
D
That's
right
I
mean,
if
you
do,
I
included
my
twitter
handle
on
the
stream
here
so
feel
free
to
shoot
me
a
tweet
send
me
a
dm
always
happy
to
chat
about
salmon
stuff,
c-sharp,
stuff,
dot,
net
stuff.
C
Awesome
brandon.
Thank
you
so
much
for
your
time,
we'll
make
sure
that
this
video
gets
uploaded
and
I
know
actually,
I
think,
you're
presenting
in
another
couple
months
for
indie,
xamarin
and
then
another
couple
months
after
that,
so
hey.
So,
if
you
check
out
the
indie
xamarin
site,
we've
got
all
those
presentations
listed
very
excited
to
have
had
you
tonight
and
especially
for
future
sessions.
Thank
you.
Brandon.