PodSearch

Under the Radar

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 ◼   ► more stable

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:13 ◼   ► correctly

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:24 ◼   ► totally new

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:15 ◼   ► reason

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:38 ◼   ► scrollview

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:34 ◼   ► animation

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:53 ◼   ► curve

00:17:54 ◼   ► Braintree is here to help you find out

00:17:56 ◼   ► more at Braintree payments comm slash

00:17:59 ◼   ► radar

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:26 ◼   ► buttons 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:38 ◼   ► builder

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:41 ◼   ► system's

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

00:29:31 ◼   ► week bye