Under the Radar 48: Late Bloomers
00:00:00
◼
►
welcome to under the radar a show about
00:00:02
◼
►
independent iOS app development I'm
00:00:04
◼
►
Marco Arment and I'm David Smith under
00:00:06
◼
►
the radar is never longer than 30
00:00:07
◼
►
minutes so let's get started today we
00:00:10
◼
►
want to talk about a topic that is near
00:00:12
◼
►
and dear to me it is coming late to
00:00:14
◼
►
things being late bloomers to new
00:00:16
◼
►
technologies and new techniques or new
00:00:17
◼
►
abilities things like interface builder
00:00:20
◼
►
use things like you know if you
00:00:22
◼
►
controller containment you know they
00:00:23
◼
►
basically things that that I either
00:00:26
◼
►
didn't do early on or that I minimally
00:00:28
◼
►
used early on or just never even gave a
00:00:31
◼
►
shot and and that I later and more
00:00:33
◼
►
recently have come to come to realize oh
00:00:35
◼
►
this is actually useful or even maybe
00:00:39
◼
►
now it's useful you know maybe it wasn't
00:00:41
◼
►
that useful in 1.0 but maybe now it has
00:00:43
◼
►
become more useful over time as Apple
00:00:45
◼
►
has made these things better this
00:00:47
◼
►
happens to me all the time my default
00:00:50
◼
►
reaction to new technologies coming
00:00:52
◼
►
coming by is I probably don't need that
00:00:55
◼
►
because much of the time that's true but
00:00:58
◼
►
but that that attitude makes it hard to
00:01:00
◼
►
find those times when it's not true and
00:01:02
◼
►
it often makes me come late to things
00:01:04
◼
►
now the benefit of coming late to things
00:01:05
◼
►
any of the issues that 1.0 brought those
00:01:08
◼
►
have probably been worked out or you
00:01:10
◼
►
will have heard from a bunch of people
00:01:11
◼
►
like this this technology or this thing
00:01:13
◼
►
is not worth using but the ones that are
00:01:15
◼
►
worth using by the time you come late to
00:01:17
◼
►
them yeah you've missed some time of
00:01:19
◼
►
potential improvements and efficiencies
00:01:21
◼
►
and everything but when you get there
00:01:23
◼
►
it's really awesome and easy to use and
00:01:25
◼
►
the tools are better and everything's
00:01:27
◼
►
so it isn't all bad being being a
00:01:30
◼
►
conservative curmudgeon like I am about
00:01:32
◼
►
new technologies are you that way at all
00:01:34
◼
►
yes so I I'm a very strange person in
00:01:37
◼
►
terms of I have like these two different
00:01:40
◼
►
mindsets when it comes to like new
00:01:41
◼
►
technology so you know wEDC
00:01:43
◼
►
Apple announces here's the whole new set
00:01:46
◼
►
of stuff that are nowadays now available
00:01:48
◼
►
for Apple developers and I get really
00:01:51
◼
►
excited and look into and very often
00:01:55
◼
►
start using like totally new
00:01:57
◼
►
technologies you know things that
00:01:59
◼
►
weren't possible before that are now
00:02:01
◼
►
possible and I'll be one of the first
00:02:03
◼
►
people in the world to run down that and
00:02:04
◼
►
try and use it and see we're all it's
00:02:06
◼
►
often it's you know kind of whore half
00:02:08
◼
►
broken and the beta period is really
00:02:09
◼
►
tricky but I like that part of the
00:02:11
◼
►
development cycle and enjoy it
00:02:14
◼
►
whenever Apple introduces something that
00:02:15
◼
►
is a a replacement or extension to
00:02:19
◼
►
something existing you know and so this
00:02:21
◼
►
is a pattern that I think Apple I've
00:02:23
◼
►
seen Apple do many times you know I
00:02:25
◼
►
started developing on iPhone OS 2.2 I
00:02:29
◼
►
think was the first OS version that I
00:02:31
◼
►
was building against Wow it was just way
00:02:32
◼
►
back in the day and you see what it took
00:02:35
◼
►
to build something then and now so much
00:02:39
◼
►
of the stuff that we would write custom
00:02:41
◼
►
you know custom frameworks for or have
00:02:44
◼
►
to do ourselves is now just like built
00:02:45
◼
►
into the system they're all these things
00:02:48
◼
►
that you know a problem that we had to
00:02:51
◼
►
solve manually or directly before and
00:02:53
◼
►
then Apple comes along and says you know
00:02:54
◼
►
enough people are doing this that we
00:02:57
◼
►
should probably create a system method
00:02:58
◼
►
for doing this that'll be more stable
00:03:00
◼
►
and almost certainly more better
00:03:04
◼
►
resilient against iOS changes you know
00:03:06
◼
►
cuz I you know like when iOS 9 goes to
00:03:09
◼
►
iOS 10 Apple's gonna make sure that you
00:03:12
◼
►
know collectionview still works
00:03:14
◼
►
whereas if I've had my own custom
00:03:16
◼
►
collection view class suddenly I'm the
00:03:18
◼
►
one who has to go in and make all the
00:03:20
◼
►
changes to make sure that it works
00:03:21
◼
►
nicely on the new OS and so Apple is
00:03:23
◼
►
rightfully so extending and expanding
00:03:26
◼
►
the universe of things that we can do
00:03:28
◼
►
but I always struggle with the feeling
00:03:30
◼
►
of if I have an existing solution for
00:03:33
◼
►
something that kind of works and that
00:03:36
◼
►
I'm familiar with is a really a hard
00:03:38
◼
►
sell to kind of tear down everything
00:03:41
◼
►
that I built and then replace it with
00:03:42
◼
►
apples thing and especially like you
00:03:45
◼
►
said early on because in that early
00:03:48
◼
►
phase is when there's the most bugs and
00:03:51
◼
►
then you can have the really bad feeling
00:03:52
◼
►
of like regret where it's like oh I
00:03:54
◼
►
should just go back to doing it the way
00:03:55
◼
►
that I used to do it because I knew that
00:03:57
◼
►
I knew at least I knew where all the
00:03:58
◼
►
problems were if there was a bug I could
00:04:00
◼
►
fix it and that was the you know a
00:04:02
◼
►
mindset that's a very easy trap to get
00:04:04
◼
►
into but on the flip side I definitely
00:04:06
◼
►
look at some of these things and I
00:04:08
◼
►
wonder if I'm missing out and history
00:04:13
◼
►
maybe has shown them some ways I'm
00:04:14
◼
►
missing out in some ways I'm not you
00:04:15
◼
►
know obviously the best thing is when
00:04:16
◼
►
you see a technology fly by you don't
00:04:19
◼
►
embrace it and then it ends up dying
00:04:21
◼
►
you know like iCloud core data sync for
00:04:24
◼
►
example like as a technology that when
00:04:26
◼
►
it came out I was like
00:04:27
◼
►
that is interesting like I use core data
00:04:29
◼
►
and I sync data to a server I wonder if
00:04:33
◼
►
this would be cool and I kind of poked
00:04:35
◼
►
my veena poked around a little bit but
00:04:36
◼
►
never really went down their road
00:04:38
◼
►
because I had an existing infrastructure
00:04:39
◼
►
because it turns out that was a great
00:04:41
◼
►
situation right I think that was you
00:04:44
◼
►
know officially killed this last summer
00:04:46
◼
►
and if I had gone all gone all you know
00:04:48
◼
►
all in on that I would have been in a
00:04:50
◼
►
world of hurt but on the flip side here
00:04:52
◼
►
if I had seen cloud kit when it came out
00:04:54
◼
►
and went in on that that's the vastness
00:04:58
◼
►
a technology that seems to be ascendant
00:05:00
◼
►
that seems to be on its way up and so at
00:05:03
◼
►
this point this part it's like huh maybe
00:05:05
◼
►
I should be using that maybe that would
00:05:07
◼
►
be a wise thing for me to be using and
00:05:10
◼
►
having the benefit of time makes that
00:05:12
◼
►
choice a lot easier I think and so you
00:05:14
◼
►
there is certainly a benefit to if a
00:05:16
◼
►
technology is being replaced and/or
00:05:20
◼
►
improved upon that I think you can be
00:05:22
◼
►
more conservative than if it's something
00:05:25
◼
►
you know then just go for it and try it
00:05:27
◼
►
and you know if it doesn't work well
00:05:29
◼
►
yeah what have you lost but that having
00:05:33
◼
►
being a bit more conservative when it's
00:05:35
◼
►
something that is just an extension for
00:05:37
◼
►
me in any way feels like the right
00:05:38
◼
►
approach it also it helps to you know as
00:05:41
◼
►
you mentioned like catching things when
00:05:42
◼
►
they're when they're ascendant that
00:05:44
◼
►
really helps with keeping up with Apple
00:05:48
◼
►
basically keeping up with the new
00:05:49
◼
►
devices that launch new OS capabilities
00:05:52
◼
►
Apple makes it easy on you if you kind
00:05:55
◼
►
of follow their guidelines if you if you
00:05:58
◼
►
kind of like take like the tracks they
00:05:59
◼
►
lay out for you like they pave out a way
00:06:02
◼
►
that they want you to do things whether
00:06:04
◼
►
it's the language choice in this case
00:06:05
◼
►
they do now its Swift whether it's
00:06:07
◼
►
things like using interface builder
00:06:09
◼
►
using storyboards you know using
00:06:11
◼
►
adaptive layouts like all these things
00:06:13
◼
►
like Apple makes things easy to do
00:06:16
◼
►
things their way and then generally
00:06:19
◼
►
speaking if you do things their way you
00:06:22
◼
►
will have less friction or things will
00:06:24
◼
►
be easier for you in the near future as
00:06:26
◼
►
they introduce new technologies new
00:06:28
◼
►
devices things like that and and you
00:06:30
◼
►
don't have to do things their way but if
00:06:32
◼
►
you don't you're generally setting
00:06:34
◼
►
yourself up for more work like for me
00:06:36
◼
►
one of the biggest things about that was
00:06:38
◼
►
was when they brought an adaptive
00:06:40
◼
►
for the iPad like that that changed a
00:06:43
◼
►
lot of things for a lot of people
00:06:44
◼
►
because like if you if you had first of
00:06:47
◼
►
all feel like a separate iPad app and an
00:06:48
◼
►
iPhone app that broke everything because
00:06:51
◼
►
all of a sudden Lee well now your iPad
00:06:53
◼
►
app kind of has a reason to have the
00:06:55
◼
►
entire iPhone app with it so that it can
00:06:56
◼
►
run in skinny mode on the sidebar and if
00:06:59
◼
►
you if you were doing things in a basic
00:07:01
◼
►
way with like a typical you know UI
00:07:03
◼
►
split view controller things like that
00:07:05
◼
►
like then things were easier for you but
00:07:08
◼
►
if you if you were you know away from
00:07:10
◼
►
the Apple way you had more work to do I
00:07:13
◼
►
think - it's an interesting point about
00:07:15
◼
►
how Apple tends to strongly sort of
00:07:18
◼
►
Telegraph where they're going yeah with
00:07:20
◼
►
their announcements that this has been a
00:07:22
◼
►
pattern that we've seen many times where
00:07:24
◼
►
Apple introduces a you know a they solve
00:07:29
◼
►
a problem or they make something easier
00:07:30
◼
►
that you know either you know end of
00:07:33
◼
►
that fall sometimes when it's yeah I
00:07:35
◼
►
remember when you know they first
00:07:37
◼
►
changed the size of the iPhone like that
00:07:39
◼
►
was the year that we got Auto layout if
00:07:41
◼
►
I remember right yep
00:07:42
◼
►
and like they do those kinds of moves
00:07:44
◼
►
where they can because obviously they
00:07:46
◼
►
know what their road map is for the next
00:07:48
◼
►
six months for the next year for the
00:07:50
◼
►
next two years and they can look forward
00:07:52
◼
►
to what that look what that's going to
00:07:54
◼
►
be and start preparing you know pairing
00:07:57
◼
►
the ground for what that's what's going
00:07:59
◼
►
to make development on that platform the
00:08:01
◼
►
best now and so there's definitely a
00:08:04
◼
►
wisdom in looking at what what in order
00:08:07
◼
►
these new technologies and extensions
00:08:08
◼
►
that they're adding to the to the
00:08:10
◼
►
frameworks that what is like asking
00:08:13
◼
►
yourself well what could this mean like
00:08:14
◼
►
they started adding the size classes and
00:08:17
◼
►
there's I always remember there was in
00:08:19
◼
►
the first size class WC session where
00:08:22
◼
►
there's like they have the quadrant of
00:08:23
◼
►
like the compact and wide and so they
00:08:27
◼
►
have like this one is this you know
00:08:29
◼
►
these devices fall in this category this
00:08:30
◼
►
these devices fall in this category
00:08:32
◼
►
these devices fall in this category and
00:08:33
◼
►
this to this category we don't actually
00:08:35
◼
►
have any devices that category yet and
00:08:38
◼
►
obviously like super visual you could
00:08:40
◼
►
say like huh you know that's just the
00:08:41
◼
►
way it fell out it's like no Apple is
00:08:43
◼
►
actually telling us that I think in that
00:08:45
◼
►
case it was the I believe it was the the
00:08:47
◼
►
6 plus and landscape which which has I
00:08:50
◼
►
believe it has the the normal which is
00:08:52
◼
►
like iPad size or
00:08:54
◼
►
chantal class and the compact vertical
00:08:56
◼
►
class yeah exactly like those types of
00:08:59
◼
►
things like Apple is telling you
00:09:00
◼
►
something there and so being aware of it
00:09:02
◼
►
even if you're not going to adopt the
00:09:04
◼
►
new technology it's probably a good
00:09:05
◼
►
thing to be kind of suspicious when they
00:09:07
◼
►
start changing things to see like what
00:09:09
◼
►
could this mean down the road cuz
00:09:12
◼
►
they're not gonna waste their time just
00:09:13
◼
►
adding you know adding stuff for no
00:09:16
◼
►
yeah I mean one of the things for me
00:09:17
◼
►
that so to get into some specific
00:09:19
◼
►
examples here one of the things for me
00:09:21
◼
►
in this area was viewcontroller
00:09:23
◼
►
containment or have having child view
00:09:25
◼
►
controllers basically and implementing
00:09:27
◼
►
your own parent view controllers and you
00:09:29
◼
►
know for I think for most iOS developers
00:09:31
◼
►
you've seen you know kind of view
00:09:33
◼
►
controller bloat disease it is so easy
00:09:36
◼
►
to have tons of code in view controllers
00:09:39
◼
►
because that's kind of just where
00:09:40
◼
►
everything falls and I know there's
00:09:42
◼
►
different models there's like mvvm and
00:09:43
◼
►
stuff I haven't like gotten some any of
00:09:45
◼
►
those yet so I can't really speak to
00:09:46
◼
►
them but every iOS developer has seen
00:09:49
◼
►
the the massive view controller syndrome
00:09:50
◼
►
and one of the things that helps that a
00:09:52
◼
►
lot is by making child view controller
00:09:55
◼
►
so like you know like an overcast you
00:09:57
◼
►
know I'll have like different panels and
00:09:59
◼
►
everything and rather than having like
00:10:00
◼
►
on the nap playing screen they're like
00:10:01
◼
►
the effects panel rather than having
00:10:03
◼
►
that be part of the now playing view
00:10:05
◼
►
controller that is its own view
00:10:07
◼
►
controller that can be presented or
00:10:08
◼
►
stuck in various places you know just
00:10:10
◼
►
using the stock stuff using things like
00:10:12
◼
►
popovers and split views and navigation
00:10:14
◼
►
of course you know all these things page
00:10:15
◼
►
view controllers using all those things
00:10:17
◼
►
can get you very very far but one of the
00:10:19
◼
►
biggest things I've done recently I
00:10:20
◼
►
started making my own parent view
00:10:22
◼
►
controllers also now one of the things I
00:10:24
◼
►
did was I I have replaced UI split view
00:10:27
◼
►
controller with my own custom version of
00:10:29
◼
►
something that does fairly similar
00:10:31
◼
►
things but does them kind of more my way
00:10:33
◼
►
because when I when I was looking at
00:10:35
◼
►
overcast code I have spent so much time
00:10:37
◼
►
and there were so much like hacky weird
00:10:40
◼
►
like configuration and exception code
00:10:42
◼
►
things like in you know intercepting
00:10:44
◼
►
traitcollection changes and weird things
00:10:46
◼
►
like that all to get UI split view
00:10:49
◼
►
controller to do what I wanted the
00:10:51
◼
►
amount of code I have to just bend this
00:10:53
◼
►
existing component to my will is so much
00:10:56
◼
►
and so fragile and and so hacky I can
00:10:59
◼
►
actually make my own split view
00:11:01
◼
►
equivalent controller that just does
00:11:02
◼
►
things the way I want them to want the
00:11:03
◼
►
way I want it to with actually far less
00:11:06
◼
►
code like buy it by a mile
00:11:08
◼
►
because the built-in components they
00:11:10
◼
►
have all these limitations in place that
00:11:12
◼
►
you know Apple thinks they should be
00:11:13
◼
►
designed this way but the reason one of
00:11:15
◼
►
the reasons necessary is because like
00:11:16
◼
►
they have all these different options
00:11:18
◼
►
and how you can configure them if they
00:11:19
◼
►
have to work in all the different ways
00:11:20
◼
►
they have they can't make as many
00:11:21
◼
►
assumptions as you can
00:11:23
◼
►
they can't rule out certain options that
00:11:25
◼
►
you won't use so in their
00:11:26
◼
►
implementations they're never going to
00:11:28
◼
►
accommodate everything but at the same
00:11:29
◼
►
time they have to be like so complex to
00:11:31
◼
►
accommodate all the things they do
00:11:32
◼
►
manage to to encompass when you make one
00:11:35
◼
►
for yourself you can do anything you
00:11:38
◼
►
want and only what you want and that's
00:11:41
◼
►
incredibly powerful and you know writing
00:11:43
◼
►
everything yourself is not always the
00:11:44
◼
►
best solution that's not always a good
00:11:46
◼
►
use of time but in cases like this like
00:11:48
◼
►
I've been fighting with UI splitview
00:11:49
◼
►
controller and and various like adaptive
00:11:52
◼
►
layout things for over a year now and
00:11:54
◼
►
it's just like this I I don't need to do
00:11:56
◼
►
this like why am I doing this when I
00:11:57
◼
►
could just write and so I took one day
00:11:59
◼
►
like let me see if I can write my own in
00:12:00
◼
►
one day and sure enough of course it was
00:12:03
◼
►
it was easier than I ever imagined
00:12:04
◼
►
because the the you know if you control
00:12:06
◼
►
containment stuff is very much here and
00:12:07
◼
►
how it's it's been a wrap for a while I
00:12:09
◼
►
think was ins Iowa it's like five or six
00:12:11
◼
►
it's it's kind of old right six I think
00:12:13
◼
►
yeah yeah so it's been out for a while
00:12:16
◼
►
so all the stuff was very very easy to
00:12:18
◼
►
do I also made a custom UI page view
00:12:21
◼
►
controller it basically didn't I want to
00:12:23
◼
►
do some some custom gesture and view
00:12:26
◼
►
handling that it just was not capable of
00:12:27
◼
►
doing without tons of hacks so I just
00:12:29
◼
►
made my own and my the one I made is not
00:12:32
◼
►
as good as theirs for general purpose
00:12:34
◼
►
use but for my use it's way better and
00:12:36
◼
►
it really is not that much code and it
00:12:38
◼
►
it's more it's more of like basically
00:12:41
◼
►
removing times where you have to really
00:12:44
◼
►
hack with UI kit because you like it's
00:12:46
◼
►
so complex there's so much there that it
00:12:47
◼
►
has to do and so much of my of my time
00:12:50
◼
►
designing interfaces in the past has
00:12:51
◼
►
been fighting UI kit to just try to
00:12:54
◼
►
customize something the way I want it
00:12:56
◼
►
and over time it's become easier but
00:12:58
◼
►
there's still places where you have to
00:12:59
◼
►
do it especially like around new
00:13:01
◼
►
technologies like adaptive UI and stuff
00:13:03
◼
►
like that when those things kind of come
00:13:04
◼
►
out and so to to hit yourself out of the
00:13:07
◼
►
business of hacking UI kit is so freeing
00:13:10
◼
►
and so so good for your overall code
00:13:12
◼
►
health and technical debt I highly
00:13:14
◼
►
recommend it and one of the biggest ways
00:13:16
◼
►
is view controller that you basically
00:13:18
◼
►
use and view controllers properly and
00:13:19
◼
►
not trying to hack the existing ones if
00:13:21
◼
►
they don't fit your needs
00:13:22
◼
►
yeah but I think what you're speaking
00:13:24
◼
►
there is such the strange tension that
00:13:27
◼
►
when you are looking at these new
00:13:28
◼
►
technologies because the base building
00:13:30
◼
►
blocks in iOS are overall I would say
00:13:34
◼
►
really really good like the number of
00:13:37
◼
►
things that you can build was just a
00:13:39
◼
►
his immense like I mean I was one of my
00:13:41
◼
►
favorite talks wotc I don't know if they
00:13:44
◼
►
did one this last year because I
00:13:45
◼
►
previously had always been like what's
00:13:47
◼
►
new in UI scrollview mmm and they would
00:13:49
◼
►
build these really sophisticated
00:13:52
◼
►
interactions that were just a scrollview
00:13:54
◼
►
at the end of the day and but it's that
00:13:57
◼
►
strange tension where if you use a page
00:14:00
◼
►
controller like it's like you can get
00:14:02
◼
►
that first thing working really quickly
00:14:05
◼
►
but you very cool you'll start to run
00:14:09
◼
►
out of runway and it's a question I
00:14:11
◼
►
suppose of how much control you want to
00:14:14
◼
►
have and how much you want to be
00:14:15
◼
►
responsible for all the weird edge cases
00:14:17
◼
►
all the strange issues that are gonna
00:14:20
◼
►
happen I suppose either way if you use
00:14:22
◼
►
UI page controller like there's just
00:14:24
◼
►
gonna be there's gonna be some issues
00:14:26
◼
►
that you just can't work around and
00:14:27
◼
►
you're just like oh well like it just
00:14:29
◼
►
doesn't work the way I like it to in
00:14:30
◼
►
this particular situation so then you're
00:14:33
◼
►
like okay let me just build my own and
00:14:34
◼
►
now of course you're like the important
00:14:37
◼
►
thing I think maybe is to say is when
00:14:39
◼
►
you do that you are it's good to be sort
00:14:41
◼
►
of cognizant and keep your eyes open for
00:14:44
◼
►
what you're taking on when you do that
00:14:47
◼
►
because you know apples engineering
00:14:50
◼
►
teams are know like they're not they're
00:14:52
◼
►
no slouches like they are really good at
00:14:55
◼
►
what they're doing and it takes a lot of
00:14:56
◼
►
engineering work to build the UI
00:14:58
◼
►
pagecontroller for example like that's
00:15:00
◼
►
not just a simple thing they threw
00:15:02
◼
►
together in a day and so if you're gonna
00:15:05
◼
►
replace it you probably need to be aware
00:15:07
◼
►
that you're it's gonna be a lot more
00:15:08
◼
►
work than you think and there's gonna be
00:15:09
◼
►
weird edges and problems that you're
00:15:13
◼
►
gonna have to run into you like I
00:15:14
◼
►
remember this with activity plus plus
00:15:17
◼
►
where it has this kind of custom
00:15:20
◼
►
animation where you starts off with the
00:15:22
◼
►
Rings and if you tap it like the Rings
00:15:24
◼
►
unfurl and turn into the bar graph which
00:15:27
◼
►
is this kind of cool animation that I
00:15:29
◼
►
thought of and I was like oh I really
00:15:30
◼
►
want to build this and I started to see
00:15:33
◼
►
if I could build this with UI view
00:15:35
◼
►
because I would far prefer to do it with
00:15:37
◼
►
some kind of built-in mechanism and in
00:15:40
◼
►
the end I couldn't because just it was
00:15:43
◼
►
just too complicated of a thing to get
00:15:45
◼
►
performant and to get to look right and
00:15:47
◼
►
so I ended up just building it myself
00:15:48
◼
►
using like raw core graphics that I you
00:15:52
◼
►
know I do the animation of each frame of
00:15:54
◼
►
that animation and draw its you know
00:15:57
◼
►
just like I'm just essentially just
00:15:58
◼
►
drawing that to a bit a bitmap and
00:16:02
◼
►
displaying it each frame which is great
00:16:04
◼
►
it looks just how I want it but it means
00:16:06
◼
►
there's all kinds of weird issues and
00:16:09
◼
►
performance problems and compatibility
00:16:11
◼
►
things between different platforms that
00:16:13
◼
►
if I was just using UI view animation
00:16:16
◼
►
just wouldn't happen and so really the
00:16:19
◼
►
trade-off was worth it like I couldn't
00:16:20
◼
►
do it at the other way but I kind of
00:16:23
◼
►
wish that I was able to use do so do it
00:16:25
◼
►
the other way and I think that's
00:16:26
◼
►
something when I don't think of these
00:16:27
◼
►
new technologies that Apple puts out
00:16:28
◼
►
like there's this I definitely always
00:16:30
◼
►
have that tugging sense of aw man I wish
00:16:32
◼
►
I could just use whatever it is I wish I
00:16:34
◼
►
could just use auto layout I wish I
00:16:36
◼
►
could just use size classes but then as
00:16:39
◼
►
soon as I hit that edge I have such this
00:16:41
◼
►
tension it's just saying like oh I'll
00:16:42
◼
►
just throw my hands up and walk away
00:16:43
◼
►
which is perhaps a bit childish well but
00:16:46
◼
►
you know it's you have to always be
00:16:48
◼
►
defensive of your time like when you're
00:16:49
◼
►
when you're trying out something new or
00:16:51
◼
►
when you're thinking about rewriting a
00:16:52
◼
►
system component for your own use like
00:16:54
◼
►
it's very easy to fall into a time hole
00:16:56
◼
►
here and just burn tons of time doing
00:16:59
◼
►
something that actually isn't productive
00:17:00
◼
►
part of the the judgement of when to do
00:17:02
◼
►
that and when not to just comes with
00:17:04
◼
►
doing it wrong for a number of years and
00:17:06
◼
►
eventually gaining that wisdom and part
00:17:07
◼
►
of it is kind of just luck you know a
00:17:09
◼
►
lot of times you can't really tell
00:17:10
◼
►
what's gonna be a good use of your time
00:17:11
◼
►
upfront but you know that's the risk you
00:17:13
◼
►
take with new stuff all right a sponsor
00:17:15
◼
►
this week is Braintree go to Braintree
00:17:17
◼
►
payments comm slash radar by next year
00:17:21
◼
►
maybe even next week there could be a
00:17:22
◼
►
whole new way to pay for things maybe
00:17:25
◼
►
it'll be the next Bitcoin or the next
00:17:26
◼
►
Apple pay or maybe even both fortunately
00:17:29
◼
►
Braintree its full stack payment
00:17:31
◼
►
platform is easily adaptable to whatever
00:17:34
◼
►
the future holds so you can adapt easily
00:17:36
◼
►
to if you use Braintree in your apps you
00:17:38
◼
►
can accept everything from pounds to
00:17:40
◼
►
PayPal to whatever the next big
00:17:41
◼
►
innovation is from any device with just
00:17:44
◼
►
one integration and when that new
00:17:46
◼
►
payment method comes out all you have to
00:17:47
◼
►
do is update a few lines of
00:17:49
◼
►
no late nights no complicated recoding
00:17:52
◼
►
no stress about staying ahead of the
00:17:54
◼
►
Braintree is here to help you find out
00:17:56
◼
►
more at Braintree payments comm slash
00:17:59
◼
►
that's Braintree payments comm / radar
00:18:02
◼
►
thank you very much to Braintree for
00:18:04
◼
►
sponsoring our show one other thing that
00:18:06
◼
►
I was thinking about with this topic
00:18:07
◼
►
though is it's something that I wrote
00:18:10
◼
►
that I you run into if you are behind
00:18:12
◼
►
the times like I'm very often behind the
00:18:15
◼
►
way you know like Apple has this new
00:18:16
◼
►
technology this new approach that
00:18:18
◼
►
they're recommending and I'm late in
00:18:20
◼
►
adopting it the thing that I always
00:18:22
◼
►
noticed too is that you'll run into that
00:18:24
◼
►
can be really annoying is suddenly all
00:18:26
◼
►
the documentation all the example code
00:18:28
◼
►
all the things that you see on Stack
00:18:31
◼
►
Overflow suddenly don't work for you
00:18:34
◼
►
anymore thank you that you have to not
00:18:37
◼
►
only not only have you built your own
00:18:39
◼
►
approach like you were even if it's not
00:18:40
◼
►
like you're just going down the road
00:18:41
◼
►
it's like doing something custom like if
00:18:42
◼
►
you just have old code then suddenly you
00:18:45
◼
►
have this new thing that Apple has put
00:18:47
◼
►
out there pushing and that's where all
00:18:48
◼
►
their focus is going suddenly that's
00:18:50
◼
►
where all the documentation is written
00:18:51
◼
►
for and the you know the example code
00:18:52
◼
►
they publish will use that new thing and
00:18:54
◼
►
so there's not a lot of great examples
00:18:57
◼
►
and it becomes harder and harder and
00:18:58
◼
►
like the biggest example is probably
00:19:00
◼
►
Swift like I remember sort of you had
00:19:02
◼
►
there was this transition period where
00:19:03
◼
►
all of a sudden all the answers on Stack
00:19:06
◼
►
Overflow for you know questions I had
00:19:09
◼
►
about the new technologies we're all all
00:19:11
◼
►
the example code was just written in
00:19:12
◼
►
Swift or you know people like snippets
00:19:15
◼
►
and that can become really awkward and
00:19:18
◼
►
it's probably a good reason to try and
00:19:20
◼
►
adopt some of these things with some
00:19:23
◼
►
urgency just to not be sort of fall
00:19:25
◼
►
behind to a degree that you just can't
00:19:27
◼
►
work out what to do or perhaps moreover
00:19:30
◼
►
you're wasting time like I remember
00:19:32
◼
►
sitting there wasting time like trying
00:19:33
◼
►
to translate the swift code into
00:19:36
◼
►
objective-c and then trying to work out
00:19:39
◼
►
how to then take that concept and apply
00:19:41
◼
►
it into my own app but I have to do this
00:19:43
◼
►
like level of indirection whereas if it
00:19:45
◼
►
my app wasn't Swift like you like oh I
00:19:47
◼
►
see what they're doing there I can build
00:19:49
◼
►
it you know for myself now and that's
00:19:51
◼
►
something that I think it takes a lot of
00:19:52
◼
►
experience to realize that you're not
00:19:54
◼
►
just running into technical issues
00:19:57
◼
►
you're running into like educational and
00:19:59
◼
►
learning issues as
00:20:00
◼
►
well oh yeah but you know that's just
00:20:02
◼
►
kind of par for the course and it has
00:20:03
◼
►
thing to move on and new things come in
00:20:05
◼
►
you know it's kind of like part of the
00:20:07
◼
►
cost of sticking with old stuff is that
00:20:10
◼
►
everyone else moves on it seems you know
00:20:13
◼
►
and that that isn't actually no it isn't
00:20:14
◼
►
everyone that's how it seems like when
00:20:15
◼
►
you're searching for help or
00:20:16
◼
►
documentation or or looking for where
00:20:18
◼
►
Apple's attention is going like once the
00:20:20
◼
►
new thing comes out all those people
00:20:22
◼
►
move on to it and if you are lagging
00:20:24
◼
►
behind or you string the old thing
00:20:25
◼
►
that's just again it's just part of the
00:20:26
◼
►
cost of doing business you know oh sure
00:20:28
◼
►
but it's it's a weird feeling when
00:20:30
◼
►
you're like it's some ways I love that I
00:20:34
◼
►
have some you know I've apps on the App
00:20:36
◼
►
Store that have been have existed for
00:20:38
◼
►
years and never see this is a it's I
00:20:41
◼
►
took a very classic issue in software
00:20:42
◼
►
engineering of what are you dealing with
00:20:44
◼
►
legacy code that you have things that
00:20:46
◼
►
work they should go back to and I mean
00:20:49
◼
►
it's a crazy feeling when you go back
00:20:51
◼
►
and look at code and run blame and get
00:20:53
◼
►
and you see you know this was code was
00:20:55
◼
►
written back in 2009 or 2010 what was I
00:20:59
◼
►
doing like why did I have this strange
00:21:02
◼
►
exception and so often you run into this
00:21:05
◼
►
situation where like you were coding
00:21:07
◼
►
around an iOS bug in iOS 5 that you no
00:21:12
◼
►
longer need to code around and at some
00:21:14
◼
►
point like you have this weird cycle
00:21:16
◼
►
where you're coding around to prop a bug
00:21:18
◼
►
that then gets resolved and then your
00:21:21
◼
►
code your fix starts to actually be the
00:21:23
◼
►
bug and caused the problem because
00:21:25
◼
►
you're doing stuff that isn't is sort of
00:21:27
◼
►
counter to what the modern approaches
00:21:29
◼
►
and that's probably why it's so hard to
00:21:31
◼
►
be a UI could engineer yeah no I
00:21:34
◼
►
definitely don't envy the you know and
00:21:36
◼
►
envy that team where they do this really
00:21:39
◼
►
cool amazing work but like the number of
00:21:42
◼
►
day having at work across all the
00:21:43
◼
►
different devices and all the different
00:21:45
◼
►
things and having an iOS because that
00:21:48
◼
►
another thing that's kind of crazy is
00:21:49
◼
►
the way they approach with binary
00:21:50
◼
►
compatibility and like you can still run
00:21:53
◼
►
an iOS 4 app on iOS 10 like it'll
00:21:57
◼
►
probably be a little bit broken and
00:21:59
◼
►
janky but like they do a lot of work to
00:22:01
◼
►
keep things forward which is perhaps
00:22:03
◼
►
another year like I was saying earlier
00:22:05
◼
►
but another reason why being like I keep
00:22:09
◼
►
telling myself to be less of a
00:22:10
◼
►
curmudgeon about the new stuff because
00:22:12
◼
►
I'm probably wasting a lot of
00:22:14
◼
►
that you know Apple is paying engineers
00:22:17
◼
►
to do this work and then I'm just like
00:22:19
◼
►
walking past them and saying nope nope
00:22:21
◼
►
I'll do it myself I'll take care of this
00:22:23
◼
►
myself where that's probably an
00:22:25
◼
►
inefficient use of my time yeah all
00:22:28
◼
►
right so let me give a few examples of
00:22:30
◼
►
some of the more recent things that I
00:22:31
◼
►
have that I've been working with in the
00:22:33
◼
►
last few weeks doing overcast 3.0 in the
00:22:35
◼
►
last few versions I've made extensive
00:22:36
◼
►
use of kvo key-value observing and this
00:22:40
◼
►
has been helped tremendously by the
00:22:41
◼
►
Facebook the FB kvo controller it is a
00:22:44
◼
►
fantastic open source component I highly
00:22:46
◼
►
recommend that anybody using kvo or
00:22:48
◼
►
curious about kbo do it with the FB kvo
00:22:51
◼
►
controller don't do worth of raw calls
00:22:53
◼
►
because they're full of bug potential
00:22:55
◼
►
and the Facebook one boys a lot of that
00:22:56
◼
►
is very nice to use generally this is
00:22:59
◼
►
you know this is in very short terms a
00:23:01
◼
►
way to have some code notified whenever
00:23:04
◼
►
a certain value of a different object
00:23:07
◼
►
changes so this is kind of and I think
00:23:11
◼
►
this is what reactive cocoa is all about
00:23:12
◼
►
mostly it's like basically and please
00:23:15
◼
►
forgive me if that's wrong but basically
00:23:16
◼
►
like kind of having having views and
00:23:19
◼
►
controls basically update themselves
00:23:21
◼
►
based on values that changed and also
00:23:24
◼
►
similar to what OS tended with bindings
00:23:25
◼
►
which have never never made its iOS but
00:23:28
◼
►
honestly having used them very briefly
00:23:29
◼
►
and they're kind of cool I know people I
00:23:30
◼
►
know there's potential issues but they
00:23:32
◼
►
can't be pretty cool where I've been
00:23:35
◼
►
moving basically is moving rather than
00:23:38
◼
►
having like a view controller that has a
00:23:40
◼
►
stock UI switch and having the view
00:23:43
◼
►
controller manage the state of that UI
00:23:44
◼
►
switch and be notified when the switch
00:23:46
◼
►
is toggled to go change the value to
00:23:48
◼
►
assign it the value when it's loaded or
00:23:50
◼
►
when the value changes moving all of
00:23:52
◼
►
that into a custom subclass of UI switch
00:23:55
◼
►
or whatever the control is and having
00:23:57
◼
►
the control manage itself and that takes
00:23:59
◼
►
tons of code out of the view controllers
00:24:03
◼
►
and makes way more reusable components
00:24:05
◼
►
way easier if you're in testing it's way
00:24:07
◼
►
easier to test these things also and it
00:24:09
◼
►
really eliminates tons of potential
00:24:11
◼
►
weirdness and bugs and edge cases like
00:24:14
◼
►
one of the screens that I just made
00:24:16
◼
►
uses a table view that has a couple of
00:24:18
◼
►
switches and buttons in it in the old
00:24:20
◼
►
way of me doing these things I'd either
00:24:22
◼
►
not monitor for underlying changes like
00:24:24
◼
►
if a change gets synced over that that
00:24:25
◼
►
would change one of those switches or
00:24:27
◼
►
I'd monitor from the viewcontroller and
00:24:29
◼
►
if any of those values change I just
00:24:31
◼
►
call table view reload ruler data and
00:24:33
◼
►
just reload the entire table and that
00:24:35
◼
►
sucks like if you can avoid doing that
00:24:37
◼
►
you should and I don't need to reload a
00:24:40
◼
►
whole table to change the value of one
00:24:41
◼
►
switch that there were like the
00:24:43
◼
►
underlying data to happen to change it
00:24:44
◼
►
during during that views presence on
00:24:46
◼
►
screen I can just subclass that switch
00:24:48
◼
►
and just have like rather than having
00:24:50
◼
►
like you know a whole bunch of playing
00:24:52
◼
►
UI switches in the table view the one
00:24:53
◼
►
that has the rotation setting that's now
00:24:56
◼
►
an OC rotation switch and now I can in
00:24:58
◼
►
my table view when I'm making the cell I
00:25:00
◼
►
can just say accessory view equals OC
00:25:03
◼
►
rotation switch and the switch itself in
00:25:05
◼
►
its code man it watches the value it
00:25:09
◼
►
adds itself as a target and has its own
00:25:11
◼
►
target implementation of like here's how
00:25:14
◼
►
I'm going to change this value now and
00:25:15
◼
►
you know and this is basically making
00:25:17
◼
►
these components self-contained and
00:25:19
◼
►
where this really shines not only
00:25:21
◼
►
cleaning up your view controllers and
00:25:23
◼
►
code reuse and testability and
00:25:24
◼
►
everything else where this really is
00:25:26
◼
►
awesome is another bad word that I I
00:25:29
◼
►
didn't use for a long time interface
00:25:32
◼
►
builder I recently started using
00:25:34
◼
►
interface builder to design some of my
00:25:36
◼
►
main screens as well as I started using
00:25:39
◼
►
IB designing and this is this is a thing
00:25:43
◼
►
where you can in a couple of methods and
00:25:44
◼
►
put a couple annotations on your file
00:25:46
◼
►
just look up IB design a ball you can
00:25:48
◼
►
basically make custom controls appear
00:25:50
◼
►
correctly interface builder so if you if
00:25:53
◼
►
you need to draw draw things custom on
00:25:55
◼
►
on a button or style in a certain way or
00:25:57
◼
►
whatever else you can do all that and
00:25:59
◼
►
have that show up interface builder
00:26:00
◼
►
rather than just having a big empty
00:26:01
◼
►
white view or like a none store
00:26:04
◼
►
something like that using that basically
00:26:07
◼
►
I'm trying to get as much as much code
00:26:09
◼
►
as possible out of view controllers
00:26:10
◼
►
because again it's that's kind of like a
00:26:11
◼
►
bad technical debt bug potential kind of
00:26:14
◼
►
written area so just try to make smaller
00:26:16
◼
►
view controllers and a big thing a big
00:26:18
◼
►
thing with that is using interface
00:26:19
◼
►
builder as much as possible and
00:26:21
◼
►
interface builder is not like a panacea
00:26:23
◼
►
but if you if you do my my approach of
00:26:26
◼
►
like having self-contained components
00:26:27
◼
►
that manage themselves and if you take
00:26:30
◼
►
advantage of things like I'd be
00:26:31
◼
►
desirable a lot of things become easier
00:26:33
◼
►
for instance portrait and landscape
00:26:35
◼
►
differences with Auto layout oh again
00:26:37
◼
►
I'm also using auto layout now interface
00:26:39
◼
►
that had really I know yeah that's like
00:26:42
◼
►
I thought I'd never do that but I one
00:26:45
◼
►
day I just kind of plaid to them like
00:26:46
◼
►
you know I mean I'm gonna learn how to
00:26:47
◼
►
do it and then I can decide whether I
00:26:48
◼
►
really need to use it or not and it
00:26:50
◼
►
turns out yeah it's not it's not easier
00:26:52
◼
►
intuitive but neither is anything else
00:26:55
◼
►
about interface builder and and once you
00:26:57
◼
►
figure out oh you have to like right
00:26:59
◼
►
drag from itself to itself like weird
00:27:01
◼
►
well these all the little weird things
00:27:03
◼
►
you have to do to make interface builder
00:27:04
◼
►
work correctly there most of us are
00:27:07
◼
►
totally undiscoverable once you figure
00:27:09
◼
►
those out Auto layout Internet face
00:27:11
◼
►
builder really isn't that bad it's not
00:27:13
◼
►
easy but it actually can be more
00:27:17
◼
►
productive in some case depending what
00:27:18
◼
►
you're doing it's what you know basic
00:27:20
◼
►
things like if you're gonna have a
00:27:21
◼
►
difference between a portrait and
00:27:22
◼
►
landscape layout it makes us so much
00:27:24
◼
►
easier to it in fact my one wish for it
00:27:26
◼
►
is that I wish that the size classes
00:27:30
◼
►
were more granular more like CSS like I
00:27:33
◼
►
would love to be able to say if the you
00:27:35
◼
►
know if the width of this view is less
00:27:37
◼
►
than 300 points then change this
00:27:40
◼
►
condition rather than just being like if
00:27:42
◼
►
this is horizontal or vertical compact
00:27:44
◼
►
you know the the size classes that we
00:27:45
◼
►
have now are very coarse and I would
00:27:48
◼
►
like things to be more powerful more
00:27:50
◼
►
like what CSS does with like media
00:27:52
◼
►
queries and stuff but other than that I
00:27:54
◼
►
I have had fantastic luck in in my
00:27:57
◼
►
recent redesign and and cleanup of this
00:28:00
◼
►
code basically using stuff that's new to
00:28:02
◼
►
me that is not new to anybody else in
00:28:05
◼
►
iOS development I'm still not using
00:28:07
◼
►
storyboards but not going crazy no no I
00:28:10
◼
►
I mean that's that would be crazy but I
00:28:13
◼
►
have found it really like these things
00:28:15
◼
►
make so many things easier like like the
00:28:17
◼
►
like as I mentioned where they're
00:28:19
◼
►
self-contained buttons and things that
00:28:20
◼
►
makes it easier implement custom themes
00:28:22
◼
►
because I have all the controls that
00:28:23
◼
►
have a theme Abul property I have them
00:28:26
◼
►
monitor for appearance changes in my
00:28:29
◼
►
appearance manager class and then they
00:28:30
◼
►
can just redraw themselves makes it
00:28:32
◼
►
easier to support dynamic text that way
00:28:34
◼
►
also because I had a little trick in my
00:28:36
◼
►
app where my my appearance did change
00:28:39
◼
►
notification I just mapped it to the
00:28:42
◼
►
text category size did change
00:28:44
◼
►
notification so basically all my
00:28:46
◼
►
handling like if you if if you switch
00:28:49
◼
►
into into or out of dark mode and
00:28:50
◼
►
overcast or if you go and change system
00:28:52
◼
►
font size and
00:28:53
◼
►
so all my labels can redraw themselves
00:28:56
◼
►
everything can resize itself I can do
00:28:58
◼
►
this without this kind of technique and
00:29:00
◼
►
without any ologies I for many years I
00:29:02
◼
►
have but it just makes it so much easier
00:29:04
◼
►
and more reliable to do it this way and
00:29:05
◼
►
it makes the code a lot more manageable
00:29:07
◼
►
and and it does make it easier to take
00:29:09
◼
►
advantage of new technologies that Apple
00:29:11
◼
►
introduced it's going forward and so
00:29:12
◼
►
that's that's I think where most of the
00:29:13
◼
►
value is here so you know I guess maybe
00:29:15
◼
►
I'll uh probably try Swift pretty soon
00:29:17
◼
►
but I don't maybe I don't go crazy there
00:29:20
◼
►
either we'll see not yet just you know
00:29:22
◼
►
one step at a time slowly slowly walk
00:29:25
◼
►
down this road yeah exactly
00:29:27
◼
►
all right well we're out of time this
00:29:28
◼
►
week thank you very much everybody for
00:29:29
◼
►
listening and we will talk to you next