Under the Radar

224: Mr. Day One


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:10   So, you getting finished your SharePlay implementation?

00:00:15   I'm so glad that this summer I did not. One of my topics I did write down, which I didn't really see,

00:00:20   was that I had a couple of ideas for Sheets SharePlay things, because that seemed like the big hot new feature in iOS 15.

00:00:25   And you're making reference, in case anyone hasn't noticed, isn't listening to this, who knows this,

00:00:30   Apple just announced that SharePlay won't be shipping with iOS 15, at least in the initial version.

00:00:35   So I'm very relieved that I decided to shelve those projects for the future,

00:00:40   because it seems like that is not coming anytime soon. This would be my inkling.

00:00:45   Though, I will say it is probably a sign that the beta that they just released, I think it's beta 6,

00:00:50   is probably getting very close to the release candidate, both in terms of where we are, you know,

00:00:56   we're recording this in the middle of August, and so it's probably close to final.

00:01:01   And it also, the fact that this is when they announce that they're sort of punting that out into a subsequent release,

00:01:07   makes me think this is pretty much the release candidate, or very close to it, that we're getting to now,

00:01:12   where they're saying this is what it is, and so it's probably getting close to the time to, you know,

00:01:17   like Apple internally is sort of locking things down, and so it's probably just a good reinforcement for us,

00:01:23   that if it doesn't work in beta 6, it probably won't be working on day one, so just be aware of that.

00:01:28   Yeah, I would expect the same thing. This is almost sort of like, they reverted a lot of the Safari UI changes,

00:01:34   you know, gave people all the preferences they wanted to make that more palatable to everybody,

00:01:39   so yeah, it definitely does seem like this is, all right, we're getting down to the wire here,

00:01:43   this is going to be, you know, they're probably feature complete now, it's probably just, you know, significant bugs only,

00:01:47   being fixed from this point forward until release. So, if your pet bug has not been fixed, maybe don't get your hopes up on that one.

00:01:53   Yes, which is an excellent segue into our topic for today, because there is a, I suppose it's a bug,

00:02:00   it's not necessarily a bug, but it is an implementation problem that I've been having with iOS 15,

00:02:06   that I think, at this point, I don't expect to be able to work around in a clean way,

00:02:12   but it created an interesting situation that I think is the actual topic, and that is, in iOS 15,

00:02:19   they introduced on the iPad a new extra large widget size, so as you would expect, as someone who does a lot with widgets,

00:02:26   I wanted to go and implement and support this for the iPad on iOS 15, and it's turned out,

00:02:34   like the actual implementation of that was great, it was straightforward, it works very much like the other widget sizes,

00:02:39   it's just larger, so from a technical perspective, the actual implementation was straightforward.

00:02:43   Where things got strange and a bit complicated for me, however, is for each of the widgets that you provide in your apps widgets extension,

00:02:52   you have to say what sizes of widget it supports, and so the way Widgetsmith is structured is, you know,

00:02:59   there's the small widget that supports the small size, the medium widget that supports the medium size,

00:03:03   the large widget that supports the large size, and so I expected, well, I'll just add an extra large one for the extra large case,

00:03:10   and then you configure and choose which of your widgets you want inside of that using the intent configuration process,

00:03:16   and so what I do there is I just say that I added a widget that only supports the extra large size,

00:03:24   and when I run this on iOS 15, it does what you would expect on the iPad, it shows up in the list in the widget configurator gallery,

00:03:32   and on the iPhone it doesn't appear because the iPhone doesn't support the extra large size.

00:03:36   Great, this is all sort of as expected, and I went, you know, working on this feature, using the iOS 15 SDK,

00:03:43   and it was all going great, until I then went back to iOS 14 and tried running that same, sort of, the code that I had written for this,

00:03:53   and in that case, if you're running iOS 14, there's no supported sizes that I can provide,

00:04:04   because iOS 14 doesn't know what the extra large size is, so I can't provide it,

00:04:09   and so the best I could do is to provide an empty list that says it supports no sizes,

00:04:14   which I thought would make it just sort of hide on that one, and it's the way that widgets are configured,

00:04:20   I have to provide something, I can't provide, I can't sort of hide it on iOS 14, I have to provide something,

00:04:26   just, there's a weird syntax for the way widget builders work, that you can't have it be variable,

00:04:32   you can't put like an if statement inside your widget builder, it just has to be static and common across all the different types.

00:04:39   As far as I can tell, if someone knows the solution to this, part of why I'm mentioning it is I would love to know,

00:04:44   but what it means is unfortunately, on iOS 14, who is going to know more about widget sizes and widget creation than you?

00:04:51   Probably someone at Apple, I suppose. That would be my only hope.

00:04:56   But, I mean, anyway, so it turns out though, if you do that on iOS 14, and you say that a widget supports no widgets,

00:05:05   the entire sort of widget system falls down, and none of your widgets show up at all.

00:05:10   Which is awkward. So, I'm left in kind of this awkward place where I have this feature that I want to add,

00:05:19   but in adding it, it sort of creates this weird separation and issues for myself with a subset of my users,

00:05:27   and specifically it's with the users running iOS 14, because people running iOS 15, they get the great experience,

00:05:34   it should be as expected, but if you're running iOS 14, like right now, the best I can do is I can put another widget size in there.

00:05:42   Say I say it supports extra large and large, say. And so on iOS 14, I'll just provide large.

00:05:51   I wouldn't provide them together, sorry, I misspoke.

00:05:54   On iOS 14, I'd say it supports large, and on iOS 15, I'd support extra large.

00:05:58   And then on iOS 14, there'd be this entry at the end of the list that doesn't actually do anything,

00:06:04   because there is no extra large, and so I'd need to probably have a message in there that just says,

00:06:08   "Widget not supported on your device," or something like that, which is confusing and inelegant and problematic in a lot of ways.

00:06:16   And I haven't really been struggling with this this week, because on the one hand,

00:06:21   I kind of want to make sure that I'm a good platform citizen, that I'm adopting the new technology as it comes out,

00:06:28   but at the same time, it creates this weird problem, and I suspect for a substantial amount of time,

00:06:33   iOS 14 will be the dominant platform that the app is run on, probably at least until the end of the year, I would guess.

00:06:40   And so it's kind of a tricky place that I don't want to necessarily make the experience worse or more confusing or problematic for people in iOS 14,

00:06:48   but I also want to take advantage of this feature in iOS 15, and so I'm kind of stuck in some ways.

00:06:55   And it's just this weird tension between wanting to benefit a relatively small group of users that I don't--

00:07:01   I mean, the iPad is not a particularly widely used platform for Widgetsmith, which is largely, I think,

00:07:05   because widgets on the iPad and iOS 14 were kind of awful.

00:07:08   You can only put them in the Today view, you can't put them on your home screen, and there was a lot of problems with that.

00:07:13   And it's just fair enough. That was where Apple went. They were amazing in iOS 15. I love having them on my home screen there.

00:07:19   I think they actually look really cool, and the way that they sort of deal with portrait rotation layouts and stuff is very clever.

00:07:25   Like, it's awesome. But I wonder if not having extra large on iOS 15 would be a problem or a disappointment to people.

00:07:37   But, yeah. So anyway, that's the struggle that I'm dealing with. And then I have another one that sort of similarly we'll talk about later in the show,

00:07:44   where it's these situations where it's really awkward to have two different use cases that you're trying to deal with or balance between,

00:07:53   and sort of benefiting one user at the expense of the other, which is never great.

00:07:58   Yeah, I think in this case, so often with iOS development, we're able to basically conditionally include or conditionally alter what's being shown on different devices or different OS versions or whatever else.

00:08:11   And so to have this area where you can't do that, this is a very unusual kind of problem to have on iOS.

00:08:17   But I think what you said towards the end there, I think, kind of gives you your answer.

00:08:23   Widgets on the iPad are going to be a pretty small market for a while, because it's going to only go up really with iOS 15's adoption.

00:08:32   And widgets on the iPad in general are probably less of a percentage of your user base simply because there are fewer iPad users than iPhone users by a good margin.

00:08:41   So both of these factors are going to make this a pretty rarely used feature, in addition to it only being supported on 15 and above, and so you've got to wait until that adoption.

00:08:50   So it wouldn't surprise me if the number of people who actually try to use Widgetsmith to make an Excel-sized widget on their iPad is extremely small for a long time.

00:09:03   And so therefore, if it were me, I would just not support that size at all, because its presence in your list of supported sizes will make the experience worse for everyone else who's not on an iPad or, I guess, you can conditionally include it out for iPhones, right?

00:09:23   No. It'll show on iOS 14, which you need to show for everybody.

00:09:26   That's right, okay.

00:09:28   So you're basically running the risk of making an awkward experience for probably well over 90% of your user base for a while in order to provide a new size to iPad users.

00:09:44   That's only available on the latest OS, and it's only the biggest size, so even then, it's like you're really, I think you're appealing to a pretty small group with that.

00:09:53   And so if you could do it without making things weird or worse for everyone else, sure, go ahead and do it.

00:09:59   But because you can't, I don't think it's worth including that at all.

00:10:03   And I would say don't include it until maybe iOS 15 has very high adoption.

00:10:08   Yeah, I think that is the unfortunate reality.

00:10:12   And I feel weird doing it, though. I'm like Mr. Day One. This is what I do. A new iOS feature comes out, and I'm there on day one, making sure I'm adopting it as soon as I can.

00:10:24   That's the whole reason why WidgetSmith exists and did well, is that it was there on day one.

00:10:29   And I feel strange that this big new thing, one of the significant features for the fall, I would say this fall, the way it's shaping up, there are relatively few new developer features in iOS 15.

00:10:43   And one of them was this new widget size on the iPad, but it is kind of weird to not do it, but I think you're right.

00:10:49   Because ultimately, I think where I'm heading is, I'm going to see, like I was, the app is still better on iOS 15 for the iPad, because now widgets can go on your home screen, and you can have small, medium, and large, just like you could before.

00:11:02   And I can put it out into the world with good support for those, making sure that I'm like, I've been going through and optimizing the app for the iPad in a way that I didn't really before, because it was such a small proportion of the user base.

00:11:16   And so it worked, because it's just like a SwiftUI app, and it works reasonably well when you just kind of like blow it up onto an iPad.

00:11:23   But I hadn't optimized it, I hadn't worked around making sure that it looks reasonable, and then doing the things where I do a split view, and I drag the divider back and forth, and I make sure everything resizes reasonably, and all of those types of constraints.

00:11:36   And I think that's likely what I'm going to do, is I'll do that, and I'll see what happens as a result. And if the iPad adoption zooms up, and I'm getting a lot of attention for that, or hearing from a lot of people that they wish it supported the extra large, like I might go ahead and add it,

00:11:50   or if somehow, as you know, if I hear from somebody, or Apple comes up with a way for me to do this, then that would be great.

00:11:57   Unfortunately, it probably would mean that it would need to be fixed in iOS 14, because iOS 14 is where I'm having the biggest problem with this, and so that seems far less likely and even more problematic, because if it's fixed in iOS 14.7.2 or something like that,

00:12:13   the adoption of that is going to be much slower, I would expect, than the iOS 15 adoption, which has a little bit more of a push behind it usually.

00:12:22   And what's interesting, I mean, this is a great time to be targeting iOS 14, because a couple weeks ago I had to issue an emergency update to Overcast, because there was something wrong with the way I was parsing MP3s, when there were a whole series of null bytes inserted into the middle of them,

00:12:41   and a major dynamic ad insertion platform started doing that, and so I had some issues, and so I kind of had to issue this emergency fix, and my main branch, I was in the middle of migrating everything over to requiring iOS 14, and just the way it was, I mean, yeah, I could have like,

00:12:59   stepped back to a previous commit, branched off of that, issued the emergency update to that, but I'm like, you know what, I don't want to do all that, it's time, it's close enough, so I just took my main branch at the time, which was iOS 14 requiring, and so as part of this emergency bug fix update,

00:13:12   I also raised my deployment target to iOS 14 from iOS 13, and I kind of thought that was going to be a minor risk, and I have heard from literally zero people about it.

00:13:24   I've never raised the bar and heard from zero people before, and in this case, I did, like, I switched from requiring 12 to 13 a few months back now, that was a while ago now, and that I heard from a few people, because that was actually losing some devices in the support list,

00:13:43   but 13 to 14, and also 14 to 15 don't lose any devices, and so it's fantastic that I was able to just bump it up to 14 and literally, it's like I got a free gift, like, now I can use all the 14 stuff and not even think about it.

00:13:59   So, you know, I think maybe it's worth, like, reveling in the fact that we can now use everything from last year for most or many of our apps, but iOS 14 is going to be here for a while, and probably next year, you can assume 15, and next year we can start using Async Await and all that stuff,

00:14:19   and all the new Swift UI stuff in 15 and everything, but it's a great place to be to be optimized for iOS 14, because you get a whole bunch of great stuff. As you mentioned, 15 doesn't have a ton of new developer features, with the big exception of Async Await,

00:14:34   but assuming you're running on 14 for the foreseeable future is a totally safe and reasonable assumption to make, and it's a good place to be for what you can do with your app, which APIs you can use, et cetera, and then just kind of pretend like 15 doesn't exist for a little while.

00:14:48   Yeah, and I think that's reasonable, and that's what I'll ultimately be doing, and it's just, like I said, it's a strange feeling to be like, you know, it's going to be, whenever day one of iOS 15 is, it's like, I'll have an update for it, you know,

00:15:01   but the strange thing is I can actually probably ship that update now, like, ahead of time, but I'm not particularly tied to 15, because I'm not taking advantage of specific features, like, making the iPad version of the app better is just as much better on iOS 14 as it is on 15,

00:15:17   and so it's like I can do my iOS 15 updates in some ways whenever I want, because they're not involving a lot of developer features, and because I need to backwards support iOS 14 anyway, I'm generally avoiding doing things that are iOS 15 only,

00:15:32   because having two different code bases would just be annoying, like I'm just using my old, the way I did search before, even though in iOS 15 there's a better SwiftUI search interface, it's like, well, my old iOS 14 one really works, it's not as good, but it works, and so I'll just keep supporting that in the future.

00:15:46   But it's a bit of a strange feeling, and, you know, it's, I guess it's the brave new world of being slightly more conscious developer, having, dealing with an app that has a wider audience and a wider net that I need to take care of, make sure I'm taken care of.

00:16:01   We are brought to you by Instabug. Building mobile apps presents some challenges. Bugs, crashes, performance issues, these can be a nightmare for developers. What if you could not only detect all those issues, but also understand the quality of your app from your user's point of view?

00:16:16   Instabug's lightweight SDK grabs all the insights you need to build quality apps through comprehensive bug and crash reports, performance monitoring, and real-time user feedback, all in one SDK. With Instabug, you can continuously monitor and measure the performance of your app, as perceived by your users, engage with your users by letting them report issues and questions right from inside the app, and you get all the information you need about bugs, crashes, and other issues, and fix those in record time, all with a focus on privacy and security.

00:16:44   And you don't need to worry about the hassle of switching to a new tool. It only takes a minute to integrate Instabug into your app, and it fits right within your workflow, with support for Jira, Slack, Trello, GitHub, Zendesk, or wherever you handle your issues.

00:16:57   Join over 25,000 top mobile developers around the world who use Instabug to ship high-quality apps. Go to try.instabug.com/radar. Our thanks to Instabug for their support of this show and Relay FM.

00:17:16   But wait, there's more! I've discovered another interesting bifurcation problem in WidgetSmith these last few weeks that I thought would be an interesting topic to discuss.

00:17:27   So one of the features that WidgetSmith has is a way to display an image from a selected album in your photos. So you pick your favorites, pick a shared album, whatever it is that you'd like to do, and it just cycles through pictures at random throughout the day.

00:17:45   And it's a great feature. It's probably my second most widely used widget. It's great. Unfortunately, the way that it had been working previously is that I would just take the picture and center it in the view and fill the space with it.

00:18:04   And this means that sometimes you'd have awkward things where you'd be cutting people off out of the picture or focusing on their mid-sections rather than their faces and things because it was just centering it.

00:18:15   And this was unfortunate but was fine in some ways. But given one of the updates I'd done recently was having a face detection system in it where I try and let you, for single pictures, if you choose a particular picture like you're making a photo frame,

00:18:31   you can automatically have it sort of zoom and pan to focus on the people who are in it because I think very often that's what people are using this for. I mean, certainly what I use it for is I want to have pictures of my kids, my wife, my family.

00:18:43   And I really thought, "Oh, well, why don't I try doing this as an optional feature for the album system where you could have it do this focusing on people automatically?"

00:18:55   So, it sounded great. I went ahead and sort of built this feature out. I'm sitting there testing it on my iPhone 12 mini. That's what I've been using. It's that and a 10R are my two main development devices that I've been using. I was developing it. Everything worked great.

00:19:08   The system was performant. It's fast. It's like everything was good. I was getting ready to ship it. And so then I started doing my compatibility testing phase and started running it on my different devices and on most of them it ran fine.

00:19:20   And I finally get to running it on my iPhone 7. Suddenly the app won't update at all and is showing me the evidence that the widget system is crashing essentially.

00:19:31   And I see this because you end up with this kind of the placeholder view UI for your widget if you've ever sort of seen it where all the text has been sort of almost blurred out or turned into lines.

00:19:43   It's not like a sad mac or a bomb. Yeah. It's very similar to that. If you're a widget developer you know this look and it's like, "Oh no. Something's crashing."

00:19:51   And in this case I was able to connect it to the Xcode and do a bit of debugging on the device and I was able to discover that I was overrunning the memory limit.

00:20:01   But only on the iPhone 7 it turned out. Which originally was strange to me because usually when I've hit memory bugs they're fairly common across the devices and a lot of my sits...

00:20:13   It is a common bug that I've run into that very often with SwiftUI especially there's a limit to how complicated you could make your view hierarchy because otherwise you overrun the memory limit.

00:20:23   And I think it's only 30 megs. So you get a 30 meg memory limit for your extension which is enough but is not huge by any means.

00:20:31   And so a little bit more of an investigation and digging around and it seems like the iPhone 6s, the iPhone 7, and the iPhone 10/iPhone 8 and 8 Plus,

00:20:43   those iPhones, essentially all of those before the XR/XS generation, there's something different in them that uses dramatically more memory for this face detection algorithm that's using the vision framework that Apple provides.

00:20:58   Which I can only imagine is there's something in the actual system on a chip, like in the A12 or the A13 or whatever there's a change where suddenly this operation that was having to be done maybe on CPU is now being able to be done in the image processor directly on device.

00:21:15   And so it doesn't need to load the image in a different way or whatever it's doing is different. Which A, this is just sort of a public service announcement that makes sure you test everything on all the devices that your app supports because you never know when you'll hit one of these.

00:21:31   It was definitely a surprise to me that I was kind of very close to submitting this update. I was in sort of the final phase of this before I ran into it because it didn't seem like it was anything. It wasn't a performance problem, it wasn't that it was slow.

00:21:45   It was just like this very different behavior because the underlying algorithm runs totally different on a different CPU architecture.

00:21:51   So A, make sure you test on all the devices you support if you can because you never know when it's just going to completely be different. Some strange thing could be different.

00:22:01   But then the other thing that I meant that was slightly awkward once I realized this, and this is I think more relating to the other situation is dealing with obviously this feature is then one I can't provide to all of my users.

00:22:14   If you have an iPhone XR or XS and better, I can provide it to you. It works great. It's lovely. I've been running it on my main phone for a long time and I love it. It works exactly like I would hope that I see more pictures of my kids' smiling faces rather than weird off-framed things and seeing pictures of people's mid-sections or things that are unflattering framings.

00:22:38   But if you have one of the older phones, I can't do it. There's no way that I've been able to find that I'm able to get the vision framework to run in less memory, even if I provide a tiny version of the image.

00:22:50   If I scale it down to 64 by 64 pixels and see if it would still run, it's like, nope. For whatever reason, it always goes over memory there.

00:22:59   But it's a strange thing to communicate then to my users because in my release notes or in my "what's new" section, I'm going to say, "Hey, there's this cool new thing," but only if you're running these particular phones or if you're dealing with a UI where now I need conditional UI based on iPhone version, not just based on iOS version.

00:23:17   It's kind of awkward. I still think I'm going to go ahead and do the feature, but in a weird way, it makes me slightly inclined to emphasize it less obviously or potentially even. The strangest thought was in the "what's new" area of the app, there's a tab that just shows you what's new,

00:23:33   is like, do I need to do an if conditional there? And what's new is different if you're on an iPhone XR or if you're on an iPhone 7, which seems really funny and kind of strange that if two users, one of them has an iPhone 7, and the XR person says, "Oh, look at this cool new feature,"

00:23:54   and the other person downloads the app, downloads the exact same version from the app store, opens it up, and it just doesn't say it. It says the other little bug fixes and performance improvements that I did in the app.

00:24:05   It just seemed like a strange situation and one that I'm still trying to think through, but it's that one that feels much more like a communication question of how do I communicate this to my users in a way that doesn't cause confusion or problems rather than one that is quite as problematic as the first one with widget sizes.

00:24:22   Yeah, you're really hitting tough problems today. Like I say, I have faced the fear of such differences many times, both recently and throughout the past, developing my audio engine.

00:24:36   And I always think, whenever I attempt some kind of fairly sophisticated processing on the live audio stream, I always think, "Well, this might not work so well on the iPhone SE," or the first-gen iPhone SE, which is basically a 6S, or the iPhone 7 or whatever.

00:24:51   And I always go back and try it, and then I'm always surprised, like, "Oh, actually, this uses like 2% CPU usage on these devices." So it's like, "Oh, okay, I kind of got that one for free."

00:25:02   But I'm not doing anything with image processing, neural engine, stuff like that where that might be a different situation going on there because the hardware has changed so much over the years.

00:25:15   So I've actually only had good things go whenever I've tested on old devices. So yeah, I honestly can't help you much there either. I'm doing great today.

00:25:26   But yeah, I would say that I don't think people would expect, you know, if you're still using a really old device today, I think you are accustomed to certain new features and apps not applying to your device.

00:25:41   That's just how it goes. If you're using a three-, four-, five-year-old phone, that's going to be a common occurrence for you. And so I don't think people would take offense or even think anything was wrong if you include in the release notes for everyone, "Here's a new feature," and then it just doesn't work on older devices.

00:25:57   I don't think that really matters. And you can even just say in the description, like, "iPhone 8 and above," or whatever the cutoff can be for that. So yeah, I don't think that's really a problem.

00:26:08   Sure. And I hope that's the case. And I think my overall impression is that I'm just going to, you know, I'll do my if/defs for the device in terms of showing the option and the settings for it, hiding from the older phones.

00:26:22   And then on the newer, but still in the "what's new" area, just like you're saying, say, "This is a new feature," and just say, like, requiring, I'm not entirely sure exactly how I'll say it. It's like something that requires an iPhone XR, XS, or newer, something along those lines, probably.

00:26:39   And just sort of, that's probably better than saying, it's like, doesn't work on, and then like a list of all the phones that it doesn't work on.

00:26:46   Right, yeah. Yeah, you want to say positive things, not negative things.

00:26:50   Yeah. And so like, "This is this great new feature, and it works on these, you know, this." And the nice thing is, it seems like it's 25, it's only about 25% of phones that it won't work on, based on my stats, as far as I can tell.

00:27:01   And I suspect, as we're about to, you know, come into September/October timeline, that's going to go down even more because, you know, either more people are going to be updating, older phones are going to be, in some ways, the most likely ones to be replaced, I would say this fall,

00:27:17   just in terms of, you imagine the person who's running an iPhone 6S or an iPhone 7, seems much more likely to be waiting for, you know, a new phone, or potentially, you know, going to not even if they're not getting an iPhone 13, if they go, if they're just going to, you know, a XR, or they're, you know, getting a hand-me-down or things like you would imagine it's the time of year that that's going to get a lot better.

00:27:37   So in some ways, both of my problems will get better with time, but it was just a bit of a strange week when I had these two situations where suddenly there's these strange splits that I'm having to navigate between my user bases where, like, I just don't like it.

00:27:53   It just feels weird and I want to try and simplify things as much as I can. And so it's like, on the one hand, for the first feature with iPhone sizes, it's like, well, I just won't implement it right away.

00:28:02   And I think for this feature, it's like, I'll implement it right away and just, you know, hide it from, you know, just turn it off on some devices and turn it on on others and not worry about it too much.

00:28:13   Like I thought about if there's other ways that I could go around doing this and trying to, you know, get around the memory limit and work really hard and creatively.

00:28:21   I did a little bit of that, but ultimately, spending too much time worrying about minority and especially diminishing minorities of users, I think I'm sort of coming around to the realization that it's okay to have them have less of a rich experience as long as their experience is reasonable, appropriate, good.

00:28:40   But I need to, you know, it's like focusing on the 99 rather than the one in this case, I think, makes a lot of sense.

00:28:48   Yeah, and the bigger your app is that you're dealing with, and your case is pretty big, the more that effect should play into your decision making, because you know, the more people are affected, basically.

00:28:57   Yeah, and I think the stakes of getting it wrong, P feels so much higher. And I think that that caution is, you know, appropriate here in a way that if I was for a lot of my smaller apps from years gone by, and it's like, if I do something and it affects 10% of people, and that 10% of people is actually just like 10 people, it's not a big deal.

00:29:17   In quite the same way. So that's it. It's a brave new world of a quiet update coming into, you know, looking down into September, and I'll have minor updates probably for the first time, I think, in 12 years, 13 years, like I'll have so few updates that things are getting better, but at a very slow pace.

00:29:36   Mr. Day One is gone.

00:29:38   I know.

00:29:40   Alright, thanks for listening, everybody. And we'll talk to you in two weeks.

00:29:44   Bye.

00:29:46   [ Silence ]