Under the Radar

221: Optional Fun


00:00:00   Welcome to Under the Radar, a show about independent iOS app development. I'm Mark Orment.

00:00:05   And I'm David Smith. Under the Radar is never longer than 30 minutes, so let's get started.

00:00:09   So what are you working on this summer, Dave?

00:00:11   Yeah, it's funny, because a couple weeks ago we had WWDC, and I think that is, in the moment,

00:00:19   and certainly if you listen to our WWDC episode, it gets a little overwhelming.

00:00:23   The first few couple days of WWDC is very much just trying to wrap your head around what are the things that are new,

00:00:31   what are the things that are interesting, what does Apple want you to care about this year,

00:00:36   and even just being aware of all of the things that are going on.

00:00:40   Apple does a reasonably good job of communicating that in the keynote and State of the Union,

00:00:44   but there's always the little nooks and crannies in places where different things can happen.

00:00:49   And then it's maybe only about now, like usually a couple of weeks after WWDC,

00:00:53   that I really start to get a sense of what my summer is going to look like.

00:00:57   And it's kind of a weird summer for me, because I feel like last summer turned out to be a pretty big summer for me.

00:01:03   In the episode we did where it was like, "What are my summer plans?"

00:01:06   I talked about plans for world domination of widgets, and it turned out that that was successful.

00:01:13   That plan actually came to fruition, which is kind of remarkable in retrospect,

00:01:17   but that was where I was around this time last year.

00:01:20   Whereas this year, it's much quieter. I look at my notebook, and so usually what I've done with WWDC is I'll sit down,

00:01:26   and at the end I find for some reason I don't know why, but paper seems to work better for this than me.

00:01:31   And I'll just sit down in a notebook and I'll write down my ideas for summer plans.

00:01:35   And this year it's fairly plain. There's lots of small changes I expect to make,

00:01:41   but it's almost in a weird way that this fall there will be a lot of point releases to my apps to support the new stuff,

00:01:48   rather than it being a situation where there's either new apps.

00:01:51   At this point I don't really have any plans for any new apps for day one,

00:01:56   and mostly even to my existing apps. It's minor changes and improvements.

00:02:00   It's adding support for the extra large widget in WidgetSmith, which is great, but is a relatively minor feature,

00:02:07   because it's basically the same as the other features, just better.

00:02:11   It's a quieter summer for me, but I'm certainly not complaining.

00:02:15   We can certainly dive into it. I think it's interesting, we'll talk about it more, what it actually looks like in practice.

00:02:20   It's a quiet summer, maybe one that will be spent a bit more outside than trapped inside and feverishly working away.

00:02:28   What about you?

00:02:30   Kind of similar. After the excitement died down from WVDC, and after I watched a bunch of session videos,

00:02:37   and played with a few of the new APIs, I've gotten to the point where I think I have a pretty clear path forward

00:02:44   of how I'm going to be doing things. I've already built certain things using some new APIs,

00:02:49   but it's not major app-changing things. It's stuff that I can conditionally enable.

00:02:55   There's a whole bunch of various niceties that you can conditionally enable with the available macros,

00:03:02   for things like, there's some new properties on URL requests, so you can properly attribute them for the privacy tracking features.

00:03:10   There's the new refund sheet that you can conditionally enable on your purchase screen.

00:03:17   There's stuff like that that we can do, but none of that really requires massive revamping of anything.

00:03:22   That's all stuff you can do in a day or two, just whenever you're running iOS 15.

00:03:26   And some of the new 15 only more major features, things like SharePlay,

00:03:32   I don't think I'm going to really be doing much with that yet.

00:03:38   There's a whole bunch of new niceties in the UI frameworks.

00:03:43   Obviously SwiftUI got a bunch of new stuff that makes everything a lot better there.

00:03:48   There's the UI Sheet Presentation Controller to have a system where you can show sheet style controllers.

00:03:54   There's the built-in async image decoding and thumbnailing stuff finally.

00:04:00   There's a whole bunch of little nice things for developers to be able to use,

00:04:03   but a lot of that stuff, especially the SwiftUI stuff,

00:04:07   a lot of that's going to be harder to actually use in practice until you can require 15,

00:04:13   which is probably, for most of us, it's at least a few months out,

00:04:18   and it's more likely probably a year or two out for most of us.

00:04:22   Most of my plan for the summer is really features and fixes, and that's what I've been doing.

00:04:28   I've actually had a really good couple of weeks for programming productivity,

00:04:32   which is rare for me to have two weeks in a row for productivity.

00:04:37   I've actually had a pretty good couple of weeks, and I've been working on just features my users want.

00:04:42   It's actually been really nice.

00:04:44   I'm a little concerned about, there is some stuff, like when I build with the 15 SDK,

00:04:51   a lot of my table views get messed up in my navigation views.

00:04:54   There's a bunch of little visual glitches that happen.

00:04:56   - Oh no.

00:04:57   - So I have some work to do there that I'm going to probably tackle in a week or two,

00:05:02   because right now, if I run it with the 14 SDK on 15, everything's fine,

00:05:07   but then I can't do all my cool conditional enabling of all the 15 stuff.

00:05:11   So I am going to have to dive into that in the next week or two.

00:05:15   But for the most part, I was kind of waiting until beta two, honestly,

00:05:19   to be like, how many of these things will they fix for me so I don't have to deal with it?

00:05:24   But for the most part, with that exception of fixing whatever broke in the UI

00:05:29   from the 15 changes to navigation and table views, I'm mostly just doing feature work now.

00:05:36   The last week I've been working on the watch app, just making it more reliable,

00:05:40   making it sync better. I'm attempting a background API change on that for the watch.

00:05:48   I'm attempting that NSProcessInfo expiring activity thing on the watch.

00:05:52   Have you ever used that for background stuff?

00:05:54   - I feel like I haven't used that in years.

00:05:57   In the early versions of Watchgate, it was important,

00:05:59   but I think when they introduced the background app refresh stuff,

00:06:02   it became less relevant from what I remember.

00:06:05   But I do remember using it at some levels, so you're not completely off base in attempting to use it.

00:06:12   - Yeah, because in iOS we have the UI application begin background task

00:06:17   and end background task stuff.

00:06:19   And on watchOS you can't do that, but there is this NSProcessInfo

00:06:23   perform expiring activity with reason API.

00:06:26   That's this kind of elusive, under-documented thing out there that it seems like no one's using it,

00:06:32   but that's the replacement for begin background task in places where you don't have that API available to you,

00:06:40   not only on the watch, but also any extensions, iOS extensions.

00:06:44   And what I need that for is if you pause a podcast and the app's in the background,

00:06:49   as soon as the audio stops, you have a very small amount of time while your app is not suspended.

00:06:55   And I want to be able to sync your progress to the server.

00:06:58   Because a common problem I have is people go out on a run with their watch,

00:07:02   they do watch local playback with no internet connection,

00:07:05   and then they get back to their house, pause, they take out the headphones and that's it.

00:07:08   And then the watch then, my process is not running for enough time when it's actually internet connected

00:07:14   to perform the sync to sync their progress.

00:07:17   So I'm trying this API now in beta and I'm going to see if it works at all.

00:07:20   But anyway, so this is the kind of stuff I'm working on.

00:07:22   I'm working on improving the reliability of my existing features,

00:07:26   and I'm working on new features.

00:07:28   And it feels really good to be working on new features.

00:07:30   And I'm not, you know, it's nothing super exciting yet.

00:07:32   I'm hopefully building towards more fun stuff.

00:07:35   But it feels good to be able to work on stuff like that

00:07:38   and not have to worry too much about rushing to adopt the new hotness.

00:07:44   I'm still barely adopting last year's new hotness.

00:07:49   I'm still trying to work on adding widgets,

00:07:53   and I've got to redo my CarPlay interface for the new iOS 14 CarPlay API from last year.

00:07:59   So I'm perfectly happy kind of operating a year behind.

00:08:03   And releasing a really good app that uses all of iOS 14's features now or this fall,

00:08:10   I think is a perfectly fine and reasonable place to be, even though it's all one year old.

00:08:16   And then otherwise, keeping compatibility with the old version as long as I can.

00:08:20   And then, you know, I've been kind of floating this idea of a UI refresh,

00:08:25   and SwiftUI keeps tempting me.

00:08:29   Like, "Oh, I should do the whole UI in SwiftUI."

00:08:32   And then every year, major stuff changes in SwiftUI,

00:08:35   and major good stuff gets added that I probably want to use.

00:08:38   And it's like, "Well, now I have to wait until I can require this OS."

00:08:42   So once again, I was about to start tackling UI redesign,

00:08:47   and now I'm like, "Wait a minute.

00:08:49   I want to use all this new stuff. I want to use SwiftUI's new search box and the refreshable

00:08:54   and all the bugs they probably fix and everything. I want to use all that."

00:08:57   But now I can't update my UI until iOS 15 can be required.

00:09:01   So that's probably a separate topic.

00:09:04   But yeah, for the most part, my summer plans are features and refinements,

00:09:09   and finally adopting some of the stuff from iOS 14 last year that I just haven't had time to get to.

00:09:15   Yeah, and I think that's great. I have a similar kind of place.

00:09:19   I've been spending my programming time recently, like we were talking about last episode,

00:09:23   working on this photo editor, viewer changer for Widgetsmith.

00:09:28   And it's just classic feature work.

00:09:31   It's just working on a point release, adding some features, fixing some things,

00:09:35   rounding off some edges that were a bit rough before.

00:09:38   And it is kind of nice.

00:09:40   And I think what I've been really enjoying a little bit too is the sense of

00:09:44   I'm using tools that are stable and straightforward,

00:09:48   and sometimes I'll spend the summer just banging my head against Xcode

00:09:54   because it's half-baked or things are always in flux.

00:09:59   In beta 2 it works, and in beta 3 it doesn't work.

00:10:02   There's things that change and evolve over the course of the summer,

00:10:06   and it's kind of nice to just be working on stuff that's keeping iOS 15 in mind.

00:10:11   But I'm not really taking too much advantage of it because there's just not a huge amount there

00:10:16   that is super important or necessary to take advantage of.

00:10:21   Or even, say, I'm thinking of all my watch-related stuff, the new Always On APIs,

00:10:26   which are interesting, and I'm really glad they're there.

00:10:29   But the way Apple built it, it's like if I do nothing,

00:10:33   I just get a reasonable experience for free, and I can enhance that experience, which is great.

00:10:38   And I look forward to building the enhancements of that experience.

00:10:42   But it's so nice to not have this place where I need to just dive in and learn this whole new thing

00:10:48   or this whole complicated system that I need to manage.

00:10:51   I can start with a good experience and make it a great experience

00:10:56   rather than starting with no experience and then building it up from there.

00:11:00   So it is just kind of this weird place, and I'm kind of loving it.

00:11:04   This summer, I think even just personally, it's kind of nice to be able to be a little more low-key with work.

00:11:10   And I think this is one of those challenges.

00:11:12   I mean, it's certainly a challenge of being an independent developer,

00:11:15   is you're in control of the amount you work.

00:11:19   That's just the reality of not having a 9-to-5 job, is that you can work whenever for however much you want.

00:11:25   And sometimes I'll work crazy hours, and sometimes I'll work very few hours.

00:11:29   And it's kind of nice that I think this summer will be an opportunity to work a little bit less

00:11:34   and to have a bit more of a summer break coming into things

00:11:38   and then be able to dive into a bit more time perhaps this fall.

00:11:43   But it's kind of nice.

00:11:45   It's kind of funny when I look at my plans to be able to be like,

00:11:47   "Yeah, it'll just kind of be trucking away, but nothing too big."

00:11:51   At least at this point, it is really kind of reassuring to not have any plans for any new apps.

00:11:57   I feel like that's always been a part of my summer for a while.

00:12:01   But there's nothing in this summer that after I've let the glow of WWDC wear off,

00:12:06   there's nothing that I'm like, "Ooh, I really want to build."

00:12:08   And so instead, it's just kind of keep swimming and making things a little bit better.

00:12:13   Yeah, and I will say too, it's helping me a lot just to have more time

00:12:18   to pay down my technical debt from having a 7-year-old code base,

00:12:22   or however many years it's been since 2013 and 2014.

00:12:26   As I've talked on this show before a lot,

00:12:29   I've been migrating a lot of things over to Swift or from old APIs to new APIs or both,

00:12:35   and that takes a lot of time.

00:12:38   It's work that when the platform is moving very quickly with a bunch of must-have changes,

00:12:45   it's really hard to ever make time for that kind of tech debt repayment.

00:12:50   This summer is in many ways a gift that not only are we all burnt out,

00:12:55   from the past year of horrible world situation,

00:12:58   but also we now have way less that the platform is demanding of us for this fall.

00:13:06   And so we're able, if we want to spend time paying down technical debt or making new features,

00:13:11   we're much better able to do that now than we are in some years.

00:13:15   And I'm very thankful for that because I think we all needed that,

00:13:19   and I think Apple needed it too.

00:13:21   So far, I haven't put the beta on my carry phone yet,

00:13:25   partly because I was afraid, partly because I was traveling,

00:13:27   and partly because I hate the new Safari, but I'm about to.

00:13:32   And what I've heard from people seems that the betas are actually pretty good.

00:13:38   They seem pretty stable, and I think that's pretty promising too.

00:13:43   It kind of shows that Apple kind of took this year to be mostly a stability and refinement year as well.

00:13:49   And I always love when they do that, both as a developer,

00:13:53   because it makes my job easier in multiple ways,

00:13:56   and also just as an Apple customer and as an Apple fan,

00:13:58   I love when they take refinement years because it certainly doesn't happen every year.

00:14:03   And every time it doesn't, we're like, "Please, next year take a refinement year."

00:14:07   So when they do, it just makes everything better for everybody,

00:14:10   and it kind of gives everybody a breather with the platform's demands,

00:14:14   and also helps both Apple and the rest of us improve quality and features in our apps,

00:14:19   instead of just trying to catch up on the latest system theme or whatever.

00:14:24   We are brought to you by Instabug.

00:14:27   Building mobile apps presents some challenges.

00:14:30   Bugs, crashes, and performance issues can be a nightmare for developers.

00:14:33   But what if you could not only detect all these issues,

00:14:36   but understand the quality of your app from your users' point of view?

00:14:39   Instabug's lightweight SDK grabs all the insights you need to build quality apps

00:14:44   through comprehensive bug and crash reports, performance monitoring,

00:14:48   and real-time user feedback, all in one SDK.

00:14:51   With Instabug, you can continuously monitor and measure the performance of your app,

00:14:55   as perceived by your users, engage with your users by letting them report issues and questions

00:14:59   right from inside your app, and get all the information you need about bugs, crashes,

00:15:04   and other issues, and fix those issues in record time,

00:15:07   all with a strong focus on privacy and security.

00:15:10   And you don't worry about the hassle of switching to a new tool.

00:15:13   It only takes a minute to integrate Instabug into your app,

00:15:16   and it fits right within your workflow, with support for Jira, Slack, Trello,

00:15:21   GitHub, Zendesk, or wherever you use to handle your issues.

00:15:25   Join over 25,000 top mobile developers around the world who use Instabug to ship high-quality apps.

00:15:32   Go to try.instabug.com/radar.

00:15:36   That's try.instabug.com/radar.

00:15:40   Our thanks to Instabug for their support of this show and Relay FM.

00:15:44   Yeah, and I think, too, like, in addition to just that nice feeling,

00:15:48   it is weird to also have, I've started to think about and feel a bit more confident about tackling

00:15:53   some of the more business-y features, things that I think might help my apps, but aren't technical.

00:16:00   Like, there's the tech debt that you've been talking about, which I think is certainly something we're always paying down,

00:16:04   but I feel like sometimes there's also this, like, I don't know, business and marketing debt that I've been accumulating as well.

00:16:10   And, like, for example, one of the things is localization, and it's something that I, you know,

00:16:16   a couple of my apps are localized and a couple of them aren't, and, you know, the reason some of them aren't

00:16:20   is because I know it's an undertaking. It takes a long time to do it well and reasonably,

00:16:25   and it creates an extra, like, just load on the development process going forward.

00:16:32   But it's also on the flip side. I've also seen the effect of it firsthand, where it can really help with downloads

00:16:39   and with usage and certainly the customer experience if, you know, your app has a meaningful audience

00:16:49   who doesn't speak, you know, English in my case, the language of the developer. It's certainly a benefit.

00:16:56   And so it's like one of my things on my to-do list is, like, once I kind of knock out some of the technical stuff,

00:17:01   is I think I'll have time to potentially start exploring that and thinking about, you know, localizing WidgetSmith

00:17:06   or trying out some of those things where I just previously, I've been so focused on, you know,

00:17:12   I'm in Xcode so much that I'm not even really thinking about that. Or similarly, it's like Apple is introducing all this,

00:17:19   it's not quite A/B testing, but it sort of is, like, so all these things that we can start to do with our App Store page,

00:17:25   which is something that I'm a little intimidated by in some ways, just because it's not an expertise or an area of mine,

00:17:31   and I know it's going to take a lot of time for me to really kind of explore and understand it as a result.

00:17:37   But it's kind of nice to feel like I have a little bit of the slack to be able to dive into that a little bit

00:17:43   and, you know, at least do a few cursory explorations into that of creating, you know, three different sets of screenshots

00:17:50   and trying them out and seeing if a different set of screenshots works in a different context or those kinds of things

00:17:56   that Apple is allowing us to do now. And so it's kind of cool to be able to explore those a little bit.

00:18:04   And as much as, you know, as much as I think ostensibly I would like to do more and better with that,

00:18:10   it's something that I've learned from history that usually making sure that my technical ducks are in order

00:18:15   is overall much more important and a much better use of my time than spending all this time and effort on the sort of the businessy size

00:18:23   because that's just not an area of expertise and an area of skill to some degree.

00:18:27   And so I can sort of make up for it a bit by, you know, focusing my time where it's better spent.

00:18:33   But it's kind of an interesting aspect too this summer that it's, you know, I feel like for a long time,

00:18:37   the last item on my to-do list has always been like localize this app and I kept pushing it off, pushing it off.

00:18:43   And in some ways I had been pushing it off because I was expecting, oh, this summer I'm going to have to implement a whole bunch of new stuff technically.

00:18:51   And it's kind of nice that when I look through it, it's like, you know, it's like maybe a third of the summer is going to be like mandatory technical work.

00:18:59   Maybe a third of the summer is kind of optional fun technical work. And there's, you know, a third of the summer that is just available for, you know,

00:19:07   this kind of more business and marketing exploration stuff too, I think.

00:19:10   I like the concept of optional fun. Well, that's kind of what I've been working on.

00:19:15   Like in the last, you know, week or so, like when I've been kind of toying with some things, you know, toying with some new APIs I haven't used before,

00:19:22   you know, toying with, you know, different ways to do things that I've been doing for a while but like revisiting old methods that I was doing something.

00:19:30   I'm like, you know, I first tried to do this thing and I got the math wrong and I thought it just didn't work.

00:19:36   Let me try doing it again and maybe I can get the math right and maybe I can get it to work.

00:19:40   And sometimes I succeeded at that. And so it's just, it's fun. I guess it's optionally fun. In the Swift way, there's optionals everywhere.

00:19:47   It's fun! Fun! It's unwrapped fun. That's a terrible joke.

00:19:56   This is the one audience that really would appreciate it though. I'm sure that one absolutely landed perfectly.

00:20:01   Yeah, I'm sure. But yeah, that kind of thing to me, or you know, just again, like moving stuff from old code to new code is actually fun for me.

00:20:11   Like it's in part a pain in the butt. It's certainly a pain in the butt when like you have to re-fix all the bugs and edge cases that you had originally fixed in the original code that you forgot about when you moved it over to the new code.

00:20:22   But overall, like programmers love rewriting stuff. That is fun. Especially when the new way can be smaller, cleaner, possibly more advanced, more resilient or whatever.

00:20:34   And this is all going to get even better once we can require 15 and then we can all use async/await and all that other stuff.

00:20:41   So that part of the annual cycle of optional fun is always here.

00:20:47   Yeah, I think in a weird way that particular situation with async/await is really interesting to me because I'm really excited by it and I really like, oh, I watched a bunch of W3C videos and I was kind of diving into it and it's like, this is really cool.

00:20:59   But since I need to require 15 in order to use it, I don't expect to really like, you know, sink my teeth into it until much, much later.

00:21:10   Because it's still going to be in flux probably and I can't use it in practice because it's not the kind of thing you can really like, you know, if iOS 15 do this, if iOS 14 do that, like you're going to drive yourself insane trying to do that.

00:21:24   And so instead it's just kind of like, cool, it's nice to know that's coming. Like maybe this time next summer it'll be transitioning a bunch of my code over to that where, you know, I hope that iOS 15 is doing what iOS 14 is now.

00:21:39   Like for me anyway, like iOS 14 is like 90% adoption or something like that among my active users.

00:21:46   And like if that's where iOS 15 is next summer, then, you know, adopting async/await and requiring iOS 15, you know, September of next year seems pretty reasonable and safe.

00:21:58   And so it's kind of an interesting, and which is also interesting to think through in terms of, I think we'll finally be able to drop all those, I remember for a while we were kind of stuck with, there are a couple sort of versions of iOS that were still slowly dying, which I think they'll have finally died.

00:22:13   And so next year kind of feels like a year where maybe that kind of sort of step function change where we can adopt a bunch of stuff that, you know, we've been waiting on, but up until now, it's like, you know, it's cool to look at, but I kind of feel glad, I'm glad in some ways, though, that I just don't need to touch it because, you know, I'm not going to, yeah, I can't require iOS 15 for a while at least.

00:22:35   And so I'm not going to go near that kind of a fundamental technology in a way that maybe, you know, some of the system level features, sure, I'll, you know, I'll ifdef them in and here, here and there, but I'm not going to do anything like that for such a fundamental, like change to the way that concurrency works in applications, which is, you know, all the things you want to mess with.

00:22:55   And in theory, async await should make it safer, but concurrency is, you know, it's by far the cause of, you know, a huge, a huge swath of bugs. Like I just recently discovered, lead aside, but I just finally fixed, I think, fingers crossed, the biggest crashing bug in widgetsmith.

00:23:10   And it turned out it was this weird threading bug. And it's like, yeah, threads are hard. Like concurrency is really challenging. And I couldn't find this thing. It was one of those issues where like the bug doesn't show up in the wrong place.

00:23:23   So you took a lot of detective work to actually track trace it back to where the threading issue was happening. And maybe that's back to the theme of what I think what we're saying for this summer is I kind of like that I've been able to spend a couple of days, just doing the breadcrumb detective work to try and find this crash.

00:23:40   And it turns out it's like, oh, this one, you know, this one, this one Swift dictionary was being accessed by two different threads in this particular circumstance. It's like, it took me forever to work that out. Now that I know that, it's like, well, yes, that would cause trouble.

00:23:53   But it's kind of cool to be able to have the time to do that. And, you know, just in some ways, we waste a couple of days not getting anywhere until you actually find that final path where you can, you can trace the problem.

00:24:04   You're lucky you found it at all. I mean, a lot of concurrency bugs you just kind of never find. Like, most of the ones that I find or most of the situations like that that might cause bugs, usually the thread sanitizer catches it for me.

00:24:18   Like as I'm running it like on device or in a simulator, like I see this giant warning dumped out to my console and I see the little blue warning. I'm like, uh-oh, I did something wrong.

00:24:27   And like usually, if not for that catching it, usually I don't catch concurrency mugs until I just rewrite that code in some other way.

00:24:35   But, and it's a good point though that, you know, we're so excited as a community about, you know, Swift finally getting this like first class concurrency support in this new modern cool way.

00:24:45   But this is 1.0 of that. And it's kind of nice in a way. Like if they never backport this to 14 and we have to require 15 and Mac OS whatever to use it, that it kind of sucks temporarily because we're all like, oh, we want to use it, we're trying to use it right now, but we can't use it until, you know, a year or two from now whenever we can require 15.

00:25:05   But in reality, that's kind of nice really because that's going to give them a chance to work out the bugs and the shortcomings and also work into like what's going to be the idioms for how we use these things.

00:25:17   What's going to be like the good practice, the common case, you know, what's going to be like the quote right styles that we all use for things like how the APIs work with this new capability, how things are named.

00:25:29   And it will give them more time to adopt the new style including not only async await stuff but also actors into the system frameworks.

00:25:38   And we can start, you know, avoiding more and more bugs about stuff being off the main thread and stuff like that.

00:25:43   Like there's so many, there's so much work to do now that the system is here, there's still a lot of work to do to adopt it and to refine it and to fix the bugs and to adopt all the old APIs to use this new style.

00:25:58   And if it takes us a year or two before we can really require, you know, the version of the OS that include this, that's ultimately fine because that year or two I think we'll be thankful that we didn't jump in with all of our main code yet.

00:26:11   Because then when we do jump in, a lot of those little bugs and shortcomings and unknowns will be fixed.

00:26:16   Yeah, and I mean I think that's the best thing. Like the theme of the summer is just like the sense of, it's just like making everything better and not in, and like I think I'm excited and I enjoy reading the articles from like, you know, Swift Bus and Sindel or things like that where they're like building and stuff where they sync await and exploring and there are people who are doing that work.

00:26:35   And I enjoy reading it and it's like they're off making that part of the iOS world better. And I can focus on making my own lap corner better and more stable and more reliable and then hopefully those paths will join in the future in kind of a cool way.

00:26:50   But it is kind of fun to, yeah, it's like I can enjoy it, I can look at it more academically rather than tactically, which is reassuring rather than when all of a sudden like learning SwiftUI. I remember when SwiftUI came out, I used the very first version of it because it was available on the watch.

00:27:07   It was for the first time you could make real first class watch apps. And it's like that was a rough summer because there were all kinds of issues and especially it was like SwiftUI and the watch, both at the same time, was certainly not making things easy on myself.

00:27:21   And so it's nice to be able to instead, yeah, it's like I'm not using any version one technologies, I think this summer. It's all old stuff for the most part and just little improvements here and there. And I have a lot of tasks I've added to myself of like, look, when you can adopt iOS 15 fully,

00:27:40   then remember to go back and backport this feature. And like I have in a bunch of my SwiftUI stuff, I have like a search controllers and stuff, which I built and it sort of worked well enough. And I'm not probably going to pull them out and do the weird like if 14 do this, if 15 do that, because that's just awkward.

00:27:57   And feel like it's more likely to create bugs in the short term. And so it's like, moreover, see what iOS 15 adoption is like, and maybe in six months, it's actually reasonable to require it. I don't know. And in that case, then I'll be in a great place and I can go back and sort of open up all these little tickets that I have to myself of like go and replace my search with other search or do the drag to pull to refresh or any of those kind of things.

00:28:21   Like, great. I look forward to that. Like, that sounds great. And in the meantime, just work on features and make the apps kind of just more solid and better.

00:28:28   Yeah, that's that's really smart. I mean, you know what you give up in the excitement of not using like the cool cutting edge stuff immediately you gain in productivity and and stability. And that's really it's really nice to be able to use the tools and everything after all the trailblazers have got have gotten through all the bugs and have figured out how things are best done. Like let them do that. If you're not one of them, and I'm certainly not let them do that.

00:28:56   And then when you get there, everything's nicely paved and everything works. Like you can just fly. It's really nice. Sure. Plus, it'll give me a chance to, you know, like, before I jump into my Swift UI redesign, it'll give Apple a chance to release that Mac Pro so I can actually compile Swift UI in a reasonable amount of time.

00:29:12   That is something that I think I'm I still feel like I could use some more speed for sure. Like when I go to compile some of my widgets Smith and watch Smith stuff, which is also if you I like every now and then it is just like what like it just all explodes. And, you know, I think there was a period last week where all of a sudden it was taking like, I don't know, 15 minutes to try and compile my app.

00:29:34   And it turned out it was just like this one very simple like Swift UI change that I had made and it just completely broke and everything. I couldn't work it out for a while. Like how do what? How do I do this? How do I fix it? But eventually I got there and it was fine. So, you know, bring on the Mac Pro, but also just, you know, understand that sometimes that happens. Yes.

00:29:52   Thank you everybody for listening and we'll talk to you in two weeks. Bye.