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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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.