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: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:22
◼
►
So more specifically than that,
00:14:24
◼
►
I want to eliminate watch connectivity.
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: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: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
◼
►
[BLANK_AUDIO]