PodSearch

Under the Radar

166: API Wish List

 

00:00:00 ◼   ► Welcome to Under the Radar,

00:00:02 ◼   ► a show about independent iOS app development.

00:00:04 ◼   ► I'm Marco Arment.

00:00:05 ◼   ► - And I'm David Smith.

00:00:06 ◼   ► Under the Radar is never longer than 30 minutes,

00:00:08 ◼   ► so let's get started.

00:00:09 ◼   ► - So WWDC is next week.

00:00:12 ◼   ► We are super, super excited.

00:00:14 ◼   ► I know I am.

00:00:15 ◼   ► This to me, this is like the biggest event

00:00:17 ◼   ► of the year for me,

00:00:18 ◼   ► 'cause I don't watch any sports or anything.

00:00:20 ◼   ► This to me, this is my Super Bowl.

00:00:21 ◼   ► This is everything.

00:00:22 ◼   ► This is everything Apple's gonna lay out

00:00:25 ◼   ► for the next year in software.

00:00:27 ◼   ► It affects so much of what our jobs will be.

00:00:30 ◼   ► Sometimes they tease some new hardware too,

00:00:32 ◼   ► but this is mostly a software-focused event,

00:00:34 ◼   ► and so I am just so excited for this.

00:00:37 ◼   ► - Yeah, and it's like Apple Friends Thanksgiving,

00:00:40 ◼   ► where we all get together in one place

00:00:43 ◼   ► and get to see each other,

00:00:45 ◼   ► which is also kinda nice.

00:00:46 ◼   ► - Yeah, that's true.

00:00:47 ◼   ► - It is both the spectator spectacle of it.

00:00:51 ◼   ► There's the work aspect that just dictates

00:00:53 ◼   ► what I'm gonna do,

00:00:54 ◼   ► how busy I am gonna be this summer.

00:00:56 ◼   ► If I'm, you know, how much I can,

00:00:58 ◼   ► it's like work on new stuff or be changing old stuff,

00:01:00 ◼   ► and then plus, yeah, it's just being,

00:01:02 ◼   ► spending a week in San Jose with all my Apple friends.

00:01:05 ◼   ► I think that worked out.

00:01:06 ◼   ► This is the 11th year I'll be going to WWDC,

00:01:11 ◼   ► which is kind of amazing when I think about.

00:01:13 ◼   ► Like, it's, you know, I've been going for essentially,

00:01:16 ◼   ► you know, basically as long as my son is old,

00:01:18 ◼   ► and like he's pretty old.

00:01:20 ◼   ► He's in upper elementary school now,

00:01:21 ◼   ► so it's like WWDC has been a part of his entire life,

00:01:24 ◼   ► and as a result, it's kind of an important part

00:01:27 ◼   ► of my life as well.

00:01:29 ◼   ► - Yeah, that's great.

00:01:30 ◼   ► Yeah, coincidentally, this is also my 11th year there.

00:01:32 ◼   ► And yeah, I just love it so much.

00:01:35 ◼   ► And so anyway, we decided this week,

00:01:37 ◼   ► you know, a lot of our podcasts and everything

00:01:39 ◼   ► are doing like predictions and everything

00:01:41 ◼   ► for what might be announced in iOS,

00:01:42 ◼   ► what kind of hardware might come out.

00:01:44 ◼   ► We're gonna focus our WWDC episode,

00:01:46 ◼   ► or our pre-WWDC episode,

00:01:47 ◼   ► on our wish list for what we want from an API perspective.

00:01:53 ◼   ► So as developers, like, what kinds of API additions

00:01:56 ◼   ► or changes are we looking for from the platforms

00:01:58 ◼   ► to make our jobs easier, to make our apps better, et cetera?

00:02:02 ◼   ► - Yeah, and I think too, it's fun for us to look at,

00:02:04 ◼   ► yeah, perhaps at a lower level than many

00:02:07 ◼   ► of the other tech podcasts might look,

00:02:08 ◼   ► because obviously that's what we do.

00:02:10 ◼   ► We get more into the weeds,

00:02:11 ◼   ► and at a bit more of a technical level.

00:02:13 ◼   ► But I'm kind of imagining, like, every year

00:02:16 ◼   ► at the platform State of the Union,

00:02:18 ◼   ► which is the big event after the, you know,

00:02:20 ◼   ► sort of there's the keynote in the morning,

00:02:22 ◼   ► and they have, like, a two-hour break for lunch,

00:02:24 ◼   ► and then they have the platform State of the Union.

00:02:26 ◼   ► And what I always find really fascinating is during that,

00:02:29 ◼   ► there'll be certain points when people are cheering

00:02:32 ◼   ► and, like, losing their minds over ostensibly really small

00:02:36 ◼   ► or minor changes to things.

00:02:38 ◼   ► Like, there'll be some tweak in Xcode

00:02:40 ◼   ► that everyone goes wild for,

00:02:42 ◼   ► and, like, those are the kind of things

00:02:43 ◼   ► that I'm kind of trying to think about,

00:02:45 ◼   ► like, what would I be cheering for

00:02:47 ◼   ► if they announced or changed or tweaked

00:02:49 ◼   ► and announced to the platform State of the Union?

00:02:51 ◼   ► Like, this isn't the stuff that they're gonna announce

00:02:52 ◼   ► in the morning, which is all the big user-facing features

00:02:54 ◼   ► and cool stuff like that.

00:02:55 ◼   ► Like, this is much more, you know, for us, for developers.

00:02:59 ◼   ► - So for me, I think my very first thing

00:03:01 ◼   ► is something that, you know,

00:03:03 ◼   ► a lot of my wishes are more specific to Overcast

00:03:05 ◼   ► and my specific needs,

00:03:06 ◼   ► but I think this one would be one of those things

00:03:08 ◼   ► that would get literally every single person

00:03:11 ◼   ► in the audience to cheer.

00:03:12 ◼   ► I want to eliminate the need

00:03:15 ◼   ► for as many of my UITableView hacks as possible.

00:03:19 ◼   ► - Yes.

00:03:21 ◼   ► - I feel like UITableView hacks

00:03:23 ◼   ► have been the bedrock of iOS development

00:03:25 ◼   ► since day one, 10 years ago,

00:03:27 ◼   ► or whatever it was, 11 years ago now, whatever it was.

00:03:30 ◼   ► We all have had to do crazy hacks

00:03:32 ◼   ► to get UITableView to do what we want,

00:03:34 ◼   ► and over time, they have made it better.

00:03:36 ◼   ► They have certainly, like, reduced the amount of hacking

00:03:40 ◼   ► we need to do for common things,

00:03:41 ◼   ► but there's still a lot of common things

00:03:43 ◼   ► that end up being really hacky in UITableView,

00:03:46 ◼   ► and so one thing I think, like, you know,

00:03:48 ◼   ► right on top of this list is

00:03:50 ◼   ► there needs to be better and more straightforward support

00:03:53 ◼   ► for auto layout everywhere in UITableView

00:03:56 ◼   ► and UICollectionView.

00:03:57 ◼   ► Right now, like, there's some places you can use it,

00:03:59 ◼   ► there's some places you kind of can't

00:04:00 ◼   ► or it's really hacky to use.

00:04:02 ◼   ► We need better auto layout support

00:04:03 ◼   ► in TableView and CollectionView.

00:04:05 ◼   ► We also, like, so many apps do things

00:04:08 ◼   ► that are a little bit more dynamic.

00:04:10 ◼   ► Like, in Overcast, I have basically an expanded state

00:04:14 ◼   ► for a table cell, so when you select an episode in a list,

00:04:16 ◼   ► it expands by default and presents buttons

00:04:18 ◼   ► along the bottom, kind of like Tweetbot

00:04:20 ◼   ► does the same thing, I kind of stole it from them.

00:04:21 ◼   ► Like, you know, you tap it and it expands,

00:04:24 ◼   ► and so therefore it has to change sizes

00:04:26 ◼   ► depending on its state, so that is really hacky right now.

00:04:29 ◼   ► I would love to make that less hacky.

00:04:32 ◼   ► Also, the entire, the way the drag and drop system

00:04:35 ◼   ► interacts with CollectionViews and TableViews,

00:04:38 ◼   ► especially TableViews, is really weird and hacky,

00:04:41 ◼   ► and it basically requires a lot of code

00:04:45 ◼   ► and state management and weird edge case handling

00:04:49 ◼   ► in our view controllers, and I would love

00:04:52 ◼   ► to get rid of that code.

00:04:53 ◼   ► I would love for the platform to be able

00:04:54 ◼   ► to do more of that with less hacking,

00:04:56 ◼   ► and there's also an extra reason for this.

00:04:59 ◼   ► You know, obviously, like, the big thing

00:05:01 ◼   ► I'm hoping for, really, is Marzipan,

00:05:03 ◼   ► and maybe we'll get to that, but when you're dealing

00:05:05 ◼   ► with the same code base going between these two platforms,

00:05:09 ◼   ► one of the rumbly rumors we've heard

00:05:10 ◼   ► is that there's gonna have to be some kind of

00:05:12 ◼   ► dealing with, like, selection.

00:05:14 ◼   ► You know, if you think about, like, how a TableView

00:05:18 ◼   ► or a CollectionView would work on the Mac,

00:05:20 ◼   ► you need to deal with things like keyboard navigation,

00:05:23 ◼   ► having, you know, up and down arrows,

00:05:25 ◼   ► navigating up and down the list.

00:05:27 ◼   ► What if you hold down Shift and you select down,

00:05:29 ◼   ► and you can select multiple things at once

00:05:30 ◼   ► using the keyboard or drag a box around them

00:05:33 ◼   ► using the mouse, all of these things are gonna require,

00:05:36 ◼   ► I think, more use that conforms to the system APIs

00:05:40 ◼   ► and less hacking to make it work right,

00:05:42 ◼   ► especially if you want the same code to run on iOS and Mac,

00:05:45 ◼   ► and so the more the built-in functions can do

00:05:49 ◼   ► without us having to write all these hacks,

00:05:51 ◼   ► the better, not only for us and our apps and our sanity,

00:05:54 ◼   ► but also the better sharing between the platforms

00:05:56 ◼   ► that can be achieved that way,

00:05:57 ◼   ► like, especially as this stuff comes to Mac.

00:05:59 ◼   ► - Yeah, and I feel like, too, the UI TableView,

00:06:01 ◼   ► it's this weird, it's like, they gave us UI CollectionView,

00:06:04 ◼   ► which in many ways, you could say, like,

00:06:06 ◼   ► well, that's the super flexible, like,

00:06:07 ◼   ► you can write a complete layout manager if you want,

00:06:10 ◼   ► and, like, you can do everything you want with that,

00:06:12 ◼   ► like, why don't you just roll your own

00:06:13 ◼   ► if you sort of want to go down that road,

00:06:15 ◼   ► but I feel like there is this,

00:06:16 ◼   ► the TableView is such an essential part of iOS development

00:06:21 ◼   ► that there is a benefit for the platform

00:06:24 ◼   ► if it got a modern take on its, like,

00:06:28 ◼   ► most essential widely used control,

00:06:31 ◼   ► and I think that would be beneficial to the platform.

00:06:33 ◼   ► Like, it's kind of amazing in many ways

00:06:34 ◼   ► that many of the behaviors and attributes of UI TableView

00:06:38 ◼   ► are there from, like, iPhone OS 2.0,

00:06:43 ◼   ► that the editing state and the, like, red buttons that appear

00:06:46 ◼   ► and all of the, there's lots of things that feel kind of old,

00:06:51 ◼   ► for lack of a better word, like, they still work,

00:06:53 ◼   ► and it's kind of amazing how this API has been able to,

00:06:57 ◼   ► you know, sort of carry itself forward for so long,

00:07:00 ◼   ► but yes, I would love for it to see kind of a,

00:07:04 ◼   ► a modernization of that,

00:07:06 ◼   ► and that I think would definitely make sense

00:07:07 ◼   ► as they sort of seek to make the platform work

00:07:09 ◼   ► across more computing devices and for a TableView

00:07:13 ◼   ► or a CollectionView to be used in more places

00:07:15 ◼   ► to kind of standardize in a, you know,

00:07:18 ◼   ► in a better way with a better API

00:07:20 ◼   ► that just lets us do a lot of these things

00:07:21 ◼   ► that I think are very standard behaviors.

00:07:23 ◼   ► Like, having TableViews that expand and contract

00:07:25 ◼   ► is a very common behavior now,

00:07:27 ◼   ► making that a native experience

00:07:29 ◼   ► rather than something weird with hacks

00:07:31 ◼   ► that inevitably leads to these weird states

00:07:32 ◼   ► where, you know, you have some row that is,

00:07:35 ◼   ► it's like, its height is the expanded height,

00:07:38 ◼   ► but it doesn't have its expanded content

00:07:39 ◼   ► because something didn't get updated correctly.

00:07:41 ◼   ► Like, making that a first class experience,

00:07:43 ◼   ► I think, would be a huge win.

00:07:46 ◼   ► - And it's hard to think of an, of a API

00:07:49 ◼   ► or, you know, like a class on the OS

00:07:52 ◼   ► that is more frequently used in apps than that.

00:07:54 ◼   ► Like, pretty much any app that is not a game

00:07:57 ◼   ► and even many games, like, almost every app,

00:08:00 ◼   ► especially non-games, have a TableView somewhere in them.

00:08:03 ◼   ► If you talk about, like, bang for the buck,

00:08:04 ◼   ► like, how much value can you give the developer community

00:08:07 ◼   ► in improvements to certain APIs?

00:08:08 ◼   ► Like, it's hard to find a bigger target

00:08:10 ◼   ► than UITableView for the combination of

00:08:13 ◼   ► quite how frequently and extensively it is used

00:08:17 ◼   ► and how often we have to resort to bad hacks

00:08:19 ◼   ► to get stuff done.

00:08:20 ◼   ► So, anything that can fix that, I think,

00:08:22 ◼   ► will have a huge payoff in the community

00:08:24 ◼   ► and I certainly want it myself as well.

00:08:26 ◼   ► - So, top of my list of these kind of changes

00:08:29 ◼   ► is a improvement or change in app icons

00:08:34 ◼   ► and the way that we provide them to the system.

00:08:37 ◼   ► As it stands right now, like, especially if you

00:08:40 ◼   ► just sort of get into alternative icons,

00:08:42 ◼   ► like, we provide the system with something like

00:08:45 ◼   ► 20 different sizes if you support both the iPhone

00:08:50 ◼   ► and the iPad, of different sizes of the iPad.

00:08:54 ◼   ► Some of them are, like, shockingly similar.

00:08:56 ◼   ► Like, you'll have two of them that differ only

00:08:59 ◼   ► by one or two pixels, but for some reason

00:09:01 ◼   ► we have to provide both of them.

00:09:03 ◼   ► If you provide alternate icons, like, right now,

00:09:05 ◼   ► some apps have up to, like, 16, 17 alternative icons

00:09:09 ◼   ► and so I have 16, 17 times the 20 icons,

00:09:12 ◼   ► like, it just, something seems wrong there.

00:09:15 ◼   ► And I, you know, and we're writing to,

00:09:19 ◼   ► like, I always kind of, you can tell that you're using,

00:09:21 ◼   ► they're kind of using these old APIs that really

00:09:25 ◼   ► aren't intended for the modern uses

00:09:26 ◼   ► and the flexibility we have with icons,

00:09:28 ◼   ► where, like, you have to specify the includes gloss key

00:09:33 ◼   ► still when you specify, like, app icons.

00:09:35 ◼   ► One of the keys you have to specify in it is that, like,

00:09:38 ◼   ► which is something that if you remember way back in the day,

00:09:40 ◼   ► you could either bake in the gloss effect

00:09:43 ◼   ► that you were supposed to have on your icon,

00:09:44 ◼   ► where it was kind of, you know, shaded light on the top

00:09:47 ◼   ► and then darker on the bottom,

00:09:49 ◼   ► or the system would apply that for you.

00:09:52 ◼   ► And, like, that hasn't been in, you know,

00:09:53 ◼   ► been in iOS for years, but it's still kind of

00:09:56 ◼   ► part of the system.

00:09:57 ◼   ► I would love to see some kind of modernization within that,

00:10:01 ◼   ► that I'm not having to sort of bake and export

00:10:03 ◼   ► just literally hundreds of these files,

00:10:06 ◼   ► which is both, just seems silly from a,

00:10:08 ◼   ► sort of size perspective that, you know,

00:10:12 ◼   ► I'm including these assets that are so similar

00:10:15 ◼   ► and are largely just scaled versions of each other,

00:10:18 ◼   ► like, for them to move to some other file format,

00:10:20 ◼   ► potentially, or just doing something better here.

00:10:23 ◼   ► And I don't know exactly what that is.

00:10:25 ◼   ► That's up to them to decide, but, you know,

00:10:27 ◼   ► if I can provide, like, an SVG and then I can overwrite it

00:10:30 ◼   ► for particular ones if I care, or something like that

00:10:33 ◼   ► would be a massive improvement and just make the process

00:10:37 ◼   ► of kind of handling app icons and alternative icons

00:10:41 ◼   ► much better, 'cause especially, like,

00:10:43 ◼   ► alternative icons seem to be something that

00:10:45 ◼   ► customers just really like.

00:10:46 ◼   ► Like, I've gotten a lot of positive reaction to them,

00:10:50 ◼   ► but the actual process of managing them

00:10:51 ◼   ► just is super cumbersome, so a very low-level API change

00:10:55 ◼   ► that I would love to see.

00:10:56 ◼   ► - And it also, like, that would also just improve

00:10:58 ◼   ► whenever, you know, every fall comes around

00:10:59 ◼   ► and there's new devices that come out

00:11:01 ◼   ► and there's frequently new screen sizes

00:11:03 ◼   ► or new form factors or whatever else,

00:11:05 ◼   ► and so every time one of those changes,

00:11:06 ◼   ► or every time Apple just decides that the new OS

00:11:09 ◼   ► has a new design for, like, let's say, like,

00:11:12 ◼   ► the icon in a notification is now two pixels bigger,

00:11:15 ◼   ► and so we have to then create those icons again

00:11:18 ◼   ► at that new size, and, like, so there's frequently a need

00:11:21 ◼   ► for not only are there already a ton of sizes,

00:11:24 ◼   ► but there's frequently a need for new sizes,

00:11:26 ◼   ► and so that would just, like, it would just reduce

00:11:29 ◼   ► all that busy work that we have to do

00:11:31 ◼   ► fairly frequently in the Apple world.

00:11:33 ◼   ► So yeah, I agree, that's a good one.

00:11:34 ◼   ► We are sponsored this week by Linode.

00:11:37 ◼   ► With Linode, you can instantly deploy and manage

00:11:39 ◼   ► an SSD server in the Linode cloud.

00:11:41 ◼   ► You can get a server running in just seconds

00:11:43 ◼   ► with your choice of Linux distro,

00:11:44 ◼   ► resources, and node location.

00:11:46 ◼   ► It doesn't matter if you're working in your first server

00:11:48 ◼   ► or deploying a complex system.

00:11:50 ◼   ► Linode is where to go.

00:11:52 ◼   ► I have, you know, for my blog, I have one server,

00:11:55 ◼   ► and that's its own account, and then I have,

00:11:57 ◼   ► for Overcast, I have, I think, about 25 servers now,

00:12:00 ◼   ► and everything in between I've seen and used,

00:12:03 ◼   ► and it is just wonderful.

00:12:04 ◼   ► Linode is perfectly scaled, whether you want just one server

00:12:08 ◼   ► for a simple thing, or whether you're running something

00:12:11 ◼   ► very complex that has high needs, high demand,

00:12:14 ◼   ► Linode is great for all of it.

00:12:15 ◼   ► I've been with them for about eight years now,

00:12:17 ◼   ► and I just cannot say enough good things about Linode.

00:12:20 ◼   ► They offer the fastest hardware network,

00:12:21 ◼   ► they have outstanding customer support

00:12:23 ◼   ► if you ever need help.

00:12:23 ◼   ► It is super easy to launch a Linode cloud server.

00:12:26 ◼   ► They also now have block storage,

00:12:28 ◼   ► they have new data centers coming up all the time,

00:12:30 ◼   ► and they're hiring.

00:12:32 ◼   ► If you wanna learn more and check out what they're hiring,

00:12:33 ◼   ► go to linode.com/careers.

00:12:36 ◼   ► Now on their hosting side, they have amazing pricing.

00:12:39 ◼   ► This is one of the reasons I've been with them for so long.

00:12:41 ◼   ► They're the best value I've ever seen in web hosting,

00:12:43 ◼   ► especially on an ongoing basis.

00:12:44 ◼   ► So their plans start at just $5 a month.

00:12:48 ◼   ► That gets you an instance with one gig of RAM,

00:12:50 ◼   ► and they have all sorts of resources and specialties

00:12:53 ◼   ► above that if you have bigger needs than that.

00:12:55 ◼   ► As a listener of this show, you can go to linode.com/radar

00:12:59 ◼   ► and use promo code radar2019 to get $20

00:13:02 ◼   ► towards any Linode plan.

00:13:04 ◼   ► So on the one gig plan, that could be four months free.

00:13:06 ◼   ► And with a seven day money back guarantee,

00:13:08 ◼   ► you have nothing to lose.

00:13:10 ◼   ► So give Linode a try today.

00:13:11 ◼   ► That's linode.com/radar, promo code radar2019

00:13:15 ◼   ► to learn more, sign up, and make the most

00:13:17 ◼   ► at a $20 credit.

00:13:18 ◼   ► Our thanks to Linode for their support of this show

00:13:20 ◼   ► and all of Relay FM.

00:13:22 ◼   ► So my big next thing, you know,

00:13:24 ◼   ► obviously, I mean, let's just say Marzipan, right?

00:13:26 ◼   ► Like, we both want Marzipan, we're looking forward to it.

00:13:29 ◼   ► We've done episodes on that already,

00:13:30 ◼   ► so I don't think we need to cover it much here, right?

00:13:32 ◼   ► - Yeah, no, I mean, it is, and I think it overhangs

00:13:36 ◼   ► so much of what we're kind of expecting

00:13:37 ◼   ► to be happy coming this year.

00:13:39 ◼   ► It is both that technology and that platform

00:13:43 ◼   ► and what that's gonna mean, as well as, I think,

00:13:46 ◼   ► I have tremendous curiosity for all of the little, like,

00:13:49 ◼   ► like effects that it's gonna have that ripple out

00:13:52 ◼   ► through the other platforms.

00:13:53 ◼   ► Because lots of these things are suddenly going to have,

00:13:57 ◼   ► like, there's gonna be different changes to,

00:13:58 ◼   ► like we're seeing with UI table view,

00:13:59 ◼   ► or you even start to think about all the basic controls,

00:14:01 ◼   ► like sliders and switches and all of, you know,

00:14:05 ◼   ► these things that are designed with touch in mind,

00:14:07 ◼   ► the tap targets, like, there's so many changes

00:14:09 ◼   ► that are gonna kind of ripple out into all the APIs

00:14:11 ◼   ► in order for this to be a platform that kind of makes sense.

00:14:14 ◼   ► And so it's, you know, I think that's definitely, like,

00:14:17 ◼   ► that's the shadow that overhangs all of the W3C this year.

00:14:21 ◼   ► - Exactly.

00:14:22 ◼   ► So more specifically than that,

00:14:24 ◼   ► I want to eliminate watch connectivity.

00:14:29 ◼   ► - Yes.

00:14:30 ◼   ► - This is the framework.

00:14:31 ◼   ► Now, I have a lot of wishes on watchOS.

00:14:34 ◼   ► I wish for the entire replacement of watch kit

00:14:35 ◼   ► with actual native UI that Apple uses,

00:14:37 ◼   ► but that seems like it's too much to ask.

00:14:40 ◼   ► I want custom watch faces.

00:14:41 ◼   ► That seems like it's too much to ask.

00:14:42 ◼   ► So I'm going smaller.

00:14:43 ◼   ► I want to get what I need to significantly reduce

00:14:47 ◼   ► or eliminate my use of watch connectivity,

00:14:49 ◼   ► which is the framework there,

00:14:50 ◼   ► which is the framework that is used for the phone app

00:14:54 ◼   ► to communicate with the watch app and vice versa.

00:14:57 ◼   ► Watch connectivity causes me a lot of stress,

00:15:00 ◼   ► a lot of problems.

00:15:00 ◼   ► It is, for Overcast, it is the framework

00:15:02 ◼   ► that both communicates the state of the iPhone app,

00:15:05 ◼   ► if you're playing it and using the watch, like, as a remote,

00:15:08 ◼   ► it communicates back your button presses,

00:15:10 ◼   ► and it also is responsible for the file transfers

00:15:12 ◼   ► that happen between the phone and the watch.

00:15:15 ◼   ► And, you know, so if you have standalone watch playback

00:15:19 ◼   ► for Overcast, those file transfers happen

00:15:21 ◼   ► over watch connectivity, and this has been the source

00:15:23 ◼   ► of a lot of just shortcomings, bugs, performance problems,

00:15:28 ◼   ► bad behavior, confusion for users.

00:15:32 ◼   ► So often, watch transfer problems are only solvable

00:15:36 ◼   ► by, like, rebooting the watch on the phone,

00:15:39 ◼   ► and then they suddenly start working again.

00:15:40 ◼   ► Like, it's just a mess, and it's been a mess

00:15:42 ◼   ► since the Apple Watch first came out,

00:15:44 ◼   ► and so I don't think they're really putting

00:15:45 ◼   ► a lot of work into it.

00:15:46 ◼   ► I don't think it's going to ever be reliable,

00:15:48 ◼   ► so I want to get rid of it completely.

00:15:49 ◼   ► I want to, I want what it takes to have my Apple Watch app

00:15:54 ◼   ► only use watch connectivity, if necessary,

00:15:57 ◼   ► for the phone to watch communication,

00:16:00 ◼   ► and get rid of the file transfer aspect completely,

00:16:02 ◼   ► 'cause that's the worst part.

00:16:03 ◼   ► So my goal here is to make the watch

00:16:06 ◼   ► a standalone app for local playback.

00:16:09 ◼   ► So it would communicate with Overcast sync servers itself,

00:16:12 ◼   ► it would be able to play and download

00:16:15 ◼   ► the files locally itself,

00:16:17 ◼   ► and that's, so what I need to do that,

00:16:20 ◼   ► basically, I need, like, you know,

00:16:22 ◼   ► reliable background downloading,

00:16:23 ◼   ► which I think it might already have,

00:16:26 ◼   ► but I need a few more things from my audio engine

00:16:28 ◼   ► to really work.

00:16:29 ◼   ► Like, for me to actually offer a good audio experience

00:16:31 ◼   ► on the watch, I really could use a few more audio APIs there

00:16:36 ◼   ► so that's what I really need,

00:16:37 ◼   ► and it could take pretty much any form,

00:16:39 ◼   ► like, it could take, you know, the low-level stuff

00:16:42 ◼   ► for decoding audio files, like EXD audio file,

00:16:45 ◼   ► audio file open, stuff like that,

00:16:46 ◼   ► or it can be higher level, it can be AV audio engine based,

00:16:50 ◼   ► but most of that is not on watchOS yet,

00:16:52 ◼   ► so that's what I want.

00:16:54 ◼   ► Give me what I need on watchOS

00:16:56 ◼   ► so that I can eliminate watch connectivity

00:16:58 ◼   ► as much as possible.

00:16:59 ◼   ► - Yeah, and I think the key thing in my mind

00:17:01 ◼   ► for what we need to replace or improve watch connectivity

00:17:06 ◼   ► is for it to not be so horrifically throttled.

00:17:10 ◼   ► Like, so many of its problems,

00:17:11 ◼   ► and the things that, like you said,

00:17:13 ◼   ► like, you know, having background file downloads

00:17:17 ◼   ► is something that exists in the system,

00:17:19 ◼   ► but the issue you have is that they are horrifically slow,

00:17:23 ◼   ► like, and incredibly inconsistent,

00:17:25 ◼   ► so it isn't like, like, if it was just always slow,

00:17:29 ◼   ► like, that would be one thing,

00:17:30 ◼   ► but sometimes it's really fast,

00:17:32 ◼   ► and sometimes it's really slow,

00:17:33 ◼   ► and it's very inconsistent as to what you're doing,

00:17:37 ◼   ► and sometimes the best advice, like, the advice we get

00:17:39 ◼   ► is like, put your phone, put your watch on the charger,

00:17:42 ◼   ► and then it will go faster, which, like--

00:17:45 ◼   ► - Which works about 2/3 of the time.

00:17:46 ◼   ► - It doesn't work every time, which is A, a problem,

00:17:49 ◼   ► and then two, it's, like, that's, why?

00:17:51 ◼   ► Like, the watch is very capable,

00:17:53 ◼   ► and I understand, I'm sure, it's like,

00:17:54 ◼   ► maybe it's battery life or whatever it is,

00:17:57 ◼   ► but it means that there are so many use cases and issues,

00:18:00 ◼   ► and like, your whole system with background file transfers

00:18:03 ◼   ► is because, like, file downloads are super slow,

00:18:06 ◼   ► and I ran into this with work I've done

00:18:07 ◼   ► where it's like, the funny thing is,

00:18:09 ◼   ► it's only because of watch connectivity that this is slow.

00:18:12 ◼   ► Like, because so everything is going through the watch,

00:18:16 ◼   ► and like, transfers over Bluetooth and WiFi on watches

00:18:21 ◼   ► are just super throttled, super slow,

00:18:23 ◼   ► and then the amusing thing is if you take,

00:18:26 ◼   ► if you go out with an LTE watch to somewhere with,

00:18:29 ◼   ► like, leave the phone behind, go out and walk somewhere else

00:18:31 ◼   ► that has no WiFi, all you have is LTE,

00:18:34 ◼   ► you can download from the internet at, like, full speed,

00:18:36 ◼   ► and you get, like, nice, blazing LTE data,

00:18:38 ◼   ► and it's like, why can I only get this in the situation

00:18:42 ◼   ► where I'm, like, farthest away from my phone,

00:18:44 ◼   ► and in this, like, very edge case situation?

00:18:47 ◼   ► Like, this should be the primary use case,

00:18:50 ◼   ► that if I have a file that I want, you know,

00:18:51 ◼   ► a user has said they want to move something

00:18:53 ◼   ► onto their watch, it should go at full speed,

00:18:55 ◼   ► and I understand there's battery life,

00:18:57 ◼   ► but like, I think it's, there's so many use cases

00:18:59 ◼   ► that are being held back in the watch because of this,

00:19:04 ◼   ► that it's, ultimately, it would be better for the platform

00:19:07 ◼   ► for battery life to be a little shorter,

00:19:09 ◼   ► but its utility to be dramatically better, and so--

00:19:12 ◼   ► - Exactly.

00:19:13 ◼   ► - Like, that is, I would love to say,

00:19:14 ◼   ► either say goodbye to watch connectivity,

00:19:16 ◼   ► or for it to just, if it worked in such a way

00:19:18 ◼   ► that I didn't notice it, then it's like, at that point,

00:19:22 ◼   ► okay, great, we can keep it, and it's fine,

00:19:24 ◼   ► but otherwise, yeah, replace it with something better,

00:19:26 ◼   ► or just do something to make it so that it isn't so painful

00:19:30 ◼   ► to move data back and forth between the watch and the phone,

00:19:33 ◼   ► and, you know, so, like, just, yeah, inconsistent is,

00:19:36 ◼   ► I think, to be-- - And, like, for me,

00:19:38 ◼   ► like, the number one thing it could do is give us a flag

00:19:41 ◼   ► on the file transfers to say only transfers over Wi-Fi,

00:19:44 ◼   ► because I think almost everything that it's doing

00:19:46 ◼   ► is power saving, trying to do as much transfer

00:19:49 ◼   ► over Bluetooth as possible, and only if Bluetooth

00:19:52 ◼   ► is not available, then it falls back to Wi-Fi or cellular,

00:19:55 ◼   ► and that, it seems to be that logic

00:19:57 ◼   ► that is causing most of the problems,

00:19:59 ◼   ► because Bluetooth is way, way slower for data transfer

00:20:02 ◼   ► than Wi-Fi and cellular, and so, most of the problems,

00:20:06 ◼   ► it seems to be related to that kind of power management

00:20:08 ◼   ► logic, whereas if they just let us, like, okay, look,

00:20:11 ◼   ► here's a file transfer, let us transfer it over Wi-Fi

00:20:14 ◼   ► if I say so, like, the user specified to do this, just do it

00:20:17 ◼   ► and if it offered us that ability,

00:20:18 ◼   ► that would solve a lot of problems.

00:20:19 ◼   ► - Yeah, and there's all kinds of, in the same way that I,

00:20:24 ◼   ► like, watch apps get special abilities when they're,

00:20:28 ◼   ► when they're a workout app, and, like, you ask for

00:20:30 ◼   ► an entitlement, and you, you know, sort of have,

00:20:34 ◼   ► when you're in that, then you can kind of elevate yourself

00:20:36 ◼   ► into a mode where suddenly you run all the time,

00:20:38 ◼   ► and you have way bigger thresholds and quotas,

00:20:42 ◼   ► and everything gets increased, like, make that part

00:20:44 ◼   ► of the system, too, that you ask for, like,

00:20:46 ◼   ► a file transfer entitlement that you kind of, you know,

00:20:48 ◼   ► that presumably they would vet and look at it

00:20:50 ◼   ► a little bit more closely when they're doing review,

00:20:52 ◼   ► to see, to make sure that you're doing it

00:20:53 ◼   ► in an appropriate way, that, you know,

00:20:54 ◼   ► it isn't every time in Overcast that you,

00:20:57 ◼   ► it's like that you're just constantly sending files over,

00:20:59 ◼   ► or, you know, completely destroying the battery.

00:21:01 ◼   ► I mean, I remember they used to do this with the iPhone,

00:21:03 ◼   ► that if you used to download too much data too quickly,

00:21:05 ◼   ► they would reject your app from the App Store,

00:21:07 ◼   ► like, that was a thing that they used to do,

00:21:08 ◼   ► you could do the same thing here,

00:21:10 ◼   ► but, like, make it this thing that you can say,

00:21:11 ◼   ► or it's a user state thing, that if, you know,

00:21:13 ◼   ► there's a way for a user, you know, to initiate this,

00:21:16 ◼   ► that if you start a transfer while the app is

00:21:18 ◼   ► in the foreground, then that gets extra ability,

00:21:22 ◼   ► versus something that is just purely happening

00:21:24 ◼   ► in the background, or whatever, but yes,

00:21:26 ◼   ► like, make this, make this not so crazy.

00:21:28 ◼   ► - All right, what's up next for you?

00:21:31 ◼   ► - So, I think I can follow along with the watchOS,

00:21:34 ◼   ► with something that I think, so I've given up hope

00:21:36 ◼   ► in many ways that it will have custom watch faces this year.

00:21:40 ◼   ► It seems unlikely.

00:21:42 ◼   ► I will always, I will continue to make them,

00:21:44 ◼   ► I continue to make watch faces, like I've made,

00:21:47 ◼   ► you know, since whatever, last fall,

00:21:49 ◼   ► when I kind of went on, like, this vision quest

00:21:52 ◼   ► of making watch faces, I continue to do it to this day.

00:21:54 ◼   ► Like, I have an idea, and I make it, and that's fun,

00:21:57 ◼   ► and I look forward to the day when that skill

00:21:59 ◼   ► will come back to actually be a useful thing.

00:22:01 ◼   ► But, what I would really like to see,

00:22:03 ◼   ► and I think is perhaps a more realistic change,

00:22:06 ◼   ► is a sort of dramatic improvement

00:22:09 ◼   ► to the flexibility of Clock Kit,

00:22:11 ◼   ► which is the complication system that we have in watchOS.

00:22:16 ◼   ► 'Cause as it stands right now, it is something

00:22:18 ◼   ► that is clear, it was built, I think,

00:22:21 ◼   ► very much for the early, it's like,

00:22:23 ◼   ► for the complications back when, like,

00:22:27 ◼   ► time travel was a thing, that, like,

00:22:30 ◼   ► you did all the, you do all this stuff

00:22:31 ◼   ► with, like, dynamic timelines, and you specify data ahead

00:22:35 ◼   ► in the behind of the current time,

00:22:37 ◼   ► so that it can kind of do time travel back and forth,

00:22:40 ◼   ► and there's just all of these things

00:22:42 ◼   ► in the complication system that feel very,

00:22:45 ◼   ► I mean, it's like, just static.

00:22:48 ◼   ► And I understand there's a desire and a need

00:22:51 ◼   ► for it to be somewhat static, that because the data

00:22:54 ◼   ► needs to be immediately available to the user,

00:22:56 ◼   ► it isn't something that you can kind of,

00:22:58 ◼   ► as soon as the user is raising their wrist,

00:23:01 ◼   ► you call into the application and ask

00:23:03 ◼   ► for the current display, because that would take too long

00:23:05 ◼   ► to show that data to the user, and you don't kind of,

00:23:08 ◼   ► that's not the experience they necessarily want.

00:23:11 ◼   ► But there's so many things in Clock Kit

00:23:14 ◼   ► that I think could be better.

00:23:14 ◼   ► I mean, one that is just, seems really obvious,

00:23:17 ◼   ► is even if you had the same system you have right now,

00:23:20 ◼   ► but allowing apps to provide multiple complications

00:23:24 ◼   ► of a particular family or type, that's just something

00:23:27 ◼   ► that we just can't do right now.

00:23:29 ◼   ► So if a user, for example, wanted you to have two slots

00:23:32 ◼   ► on the modular face, where you have those rows

00:23:36 ◼   ► with three slots, and say you wanted to put two there,

00:23:39 ◼   ► like imagine you're a weather app, and you wanted

00:23:41 ◼   ► to be able to display both the temperature

00:23:44 ◼   ► and the likelihood of precipitation, for example.

00:23:48 ◼   ► Like, there's just something that you just can't do

00:23:50 ◼   ► right now, because for a particular complication family,

00:23:53 ◼   ► you can only export one value at a time.

00:23:57 ◼   ► It's like, that's a very minor change,

00:23:58 ◼   ► but I would love to see that, because there's so many things

00:24:01 ◼   ► that you can kind of imagine that you could make

00:24:03 ◼   ► that experience so much more rich for a user.

00:24:06 ◼   ► And similarly, I think if we can have just more types,

00:24:11 ◼   ► like I feel like so many of the complication types

00:24:15 ◼   ► are so limited and tied down, and use the weird

00:24:19 ◼   ► two-part image system, which I never really understood

00:24:22 ◼   ► why they did that, like vaguely for consistency,

00:24:25 ◼   ► where you can have only two colors at any time

00:24:29 ◼   ► in your images for anything other than the infograph types,

00:24:32 ◼   ► and one of them has to be white, and you can't have

00:24:35 ◼   ► transparency or anything like that.

00:24:37 ◼   ► There's all these strange limits that feel like,

00:24:39 ◼   ► you know, they're kind of holdouts from an earlier time

00:24:43 ◼   ► when Clock Kit was first getting started,

00:24:45 ◼   ► and when they had a different thing for it in mind.

00:24:47 ◼   ► Whereas I think now, complications are very primary,

00:24:51 ◼   ► if not the most primary interaction that a user has

00:24:54 ◼   ► with a watchOS app, and so that system could benefit a lot

00:24:57 ◼   ► from getting a lot, lot better.

00:24:59 ◼   ► - Going to a slightly larger view, my next thing is,

00:25:05 ◼   ► I would love, probably for Marzipan, probably for just iPad,

00:25:09 ◼   ► a three-column split view that we can use.

00:25:12 ◼   ► - Ooh, nice, yeah.

00:25:13 ◼   ► - Because when you look at like, you know, so many apps,

00:25:16 ◼   ► you look at the iPad versions, and they kind of need

00:25:19 ◼   ► a three-column split view, and when you think about

00:25:21 ◼   ► when they move to Mac, they're gonna really need

00:25:23 ◼   ► a three-column split view.

00:25:24 ◼   ► It's such a common interaction pattern among Mac apps

00:25:27 ◼   ► that, you know, we already have the two-column one,

00:25:29 ◼   ► it's fine, it's very limited, like the API for it's

00:25:32 ◼   ► very limited, there's rumors that it's gonna be improved,

00:25:34 ◼   ► but I haven't heard a single rumor saying that they're

00:25:36 ◼   ► gonna also have a three-column option, and I wish they would.

00:25:39 ◼   ► That's it, that's a nice simple one.

00:25:41 ◼   ► - And I think too, there's so many like, really cool,

00:25:45 ◼   ► flexible layouts of that type that you could imagine

00:25:48 ◼   ► and that people make, where you know, it's like,

00:25:50 ◼   ► in making it variable width, where you can change the width

00:25:53 ◼   ► of things dynamically or swipe in, like, there's so many

00:25:56 ◼   ► cool things, and I think many of these, you definitely see

00:25:59 ◼   ► it on the Mac a lot, but it does seem like something

00:26:03 ◼   ► that is kind of, just kind of an obvious need, and would,

00:26:08 ◼   ► yeah, it would be useful in so many cases, and like,

00:26:10 ◼   ► because iOS development is so often based on navigation

00:26:14 ◼   ► controllers, like, which is functionally, in some ways,

00:26:18 ◼   ► like multi-column layouts, like you're just pushing

00:26:20 ◼   ► from view to view to view, like it seems like such a,

00:26:23 ◼   ► it seems such an obvious thing for them to do,

00:26:26 ◼   ► and maybe even is, in many ways, it would be even better

00:26:28 ◼   ► if it wasn't just three, it was just, you know,

00:26:31 ◼   ► like multi-column layout, and you can decide however many

00:26:35 ◼   ► you want, and it'll just handle it, would be even better

00:26:38 ◼   ► in that score.

00:26:39 ◼   ► - That's a good point, yeah, because like,

00:26:40 ◼   ► 'cause as you mentioned, there is a very close relationship

00:26:43 ◼   ► between navigation controllers and split views, like,

00:26:45 ◼   ► 'cause so often the pattern is, you show in the right side

00:26:49 ◼   ► of the split view, the topmost controller in a navigation

00:26:52 ◼   ► stack, and if you collapse the app down to more of a phone

00:26:55 ◼   ► size, then it'll re-collapse onto a single navigation

00:26:58 ◼   ► controller, instead of having these two different sections,

00:27:00 ◼   ► and so a three-pane version has to do basically the same

00:27:03 ◼   ► thing of like, if there's room for one pane, you show it

00:27:05 ◼   ► in one big stack, if there's room for two, you show it,

00:27:07 ◼   ► you know, you show the last one on the right, et cetera,

00:27:09 ◼   ► and so, the same logic going to three, I think, would be

00:27:12 ◼   ► obvious, and a very easy thing to put into the system

00:27:16 ◼   ► split view controller, and the good thing is, like,

00:27:17 ◼   ► this is one thing that is fairly easy for third parties

00:27:20 ◼   ► to write, you know, we don't have as much, like,

00:27:22 ◼   ► we don't have any access to any private navigation controller

00:27:25 ◼   ► APIs that might be necessary to do some of this stuff

00:27:27 ◼   ► more gracefully, but we can do it, like, overcast split view

00:27:29 ◼   ► controller is 100% custom, it is not a UI split view

00:27:32 ◼   ► controller at all, it is totally custom, because I needed

00:27:35 ◼   ► some more of this control, but yeah, so to have that

00:27:37 ◼   ► built in would be wonderful.

00:27:39 ◼   ► - Yeah, and I think that, just, that uniformity would be

00:27:41 ◼   ► great, I've built my own UI split view controller as well,

00:27:43 ◼   ► for the same reason, like, it's just, there is, it's like,

00:27:46 ◼   ► the current one we have doesn't do enough, and so everyone

00:27:50 ◼   ► writes their own, which means that users have to learn

00:27:53 ◼   ► how to use each of them, and they all behave slightly

00:27:56 ◼   ► differently, which is never quite as good of an experience.

00:27:58 ◼   ► - And again, now that we're coming to the Mac with all this

00:28:00 ◼   ► stuff, it's really important to have it work, you know,

00:28:03 ◼   ► perfectly, and as expected on the Mac as well, and the more

00:28:06 ◼   ► complicated the problem set becomes here, the less likely

00:28:10 ◼   ► it is that each app is going to do it well.

00:28:13 ◼   ► - Yeah, exactly.

00:28:15 ◼   ► And one quick thing I just wanted to mention, I would,

00:28:17 ◼   ► I thought that I would get used to it, and this is not

00:28:19 ◼   ► an API change, this is an Xcode change, I thought I would

00:28:22 ◼   ► get used to it, I have not, the new interface builder,

00:28:26 ◼   ► like, control picker, where you have to--

00:28:28 ◼   ► - Oh yeah, you have to, like, search?

00:28:29 ◼   ► - You have to click on it, and then, like, search around

00:28:31 ◼   ► and, like, in this floating window that then goes away,

00:28:33 ◼   ► and you, if you wanna drag two things in, you have to click

00:28:35 ◼   ► the thing twice, I thought I'd get used to it, it's a year

00:28:38 ◼   ► later, I have not gotten used to it, still hate it every

00:28:40 ◼   ► time I use it, I would love to have the old one back,

00:28:43 ◼   ► thank you.

00:28:44 ◼   ► - Yeah, me too.

00:28:45 ◼   ► And finally, I also would love audio intents, full blown

00:28:49 ◼   ► audio SiriKit intents for picking things by a search,

00:28:53 ◼   ► you know, audio intents with variables in them, like,

00:28:55 ◼   ► anything like that, that would help.

00:28:57 ◼   ► - Variables in programming, Marco, what are you talking

00:28:59 ◼   ► about, this seems-- - I know, right, like,

00:29:00 ◼   ► 'cause we already have, the thing is, they're in there,

00:29:02 ◼   ► the variables are in there already, they just aren't

00:29:05 ◼   ► activated by the user, so, like, let us make parameterized

00:29:09 ◼   ► intents and shortcuts.

00:29:11 ◼   ► Anyway, good luck, everybody, getting everything you want,

00:29:14 ◼   ► thanks for listening to our wish list, and we will talk

00:29:16 ◼   ► to you in two weeks.

00:29:17 ◼   ► - Yeah, and if you run into us, or see us next week,

00:29:19 ◼   ► by all means, say hi, it's always nice to interact

00:29:22 ◼   ► with listeners.

00:29:23 ◼   ► - Absolutely, bye everyone.

00:29:25 ◼   ► - Bye.

00:29:25 ◼   ► [BLANK_AUDIO]