PodSearch

Under the Radar

Under the Radar 98: The Accidental Episode

 

00:00:00   welcome to under the radar a show hood

00:00:01   independent iOS app development I'm

00:00:03   Marco Arment and I'm David Smith under

00:00:05   the radar is never longer than 30

00:00:06   minutes so let's get started

00:00:08   so we want to record a regular episode

00:00:10   this week and in our preamble where we

00:00:11   just kind of casually talk with each

00:00:13   other before we record we ended up

00:00:14   having a better discussion than whatever

00:00:16   we were gonna talk about so we're we're

00:00:18   gonna use that as the episode this week

00:00:20   just some some context here I've been

00:00:23   thinking about trying various ways to

00:00:25   bring back watch offline audio playback

00:00:29   for overcast you can play a background

00:00:32   audio if you're a workout app so one

00:00:34   option I'm considering is just making

00:00:36   overcast a workout app on the watch

00:00:38   where it would have to start its own

00:00:39   workouts manage them in the overcast

00:00:42   interface and then you know you could

00:00:44   you can play the stuff in the background

00:00:46   offline as long as they workout is

00:00:48   running in the overcast app and as it

00:00:50   has all sorts of problems and everything

00:00:52   but it would work you know you you are

00:00:55   the audio and watch expert I don't know

00:00:59   nearly as much about the watch OSAP eyes

00:01:01   as you do so you know I've been bouncing

00:01:03   questions off of you of like can I do

00:01:04   this can I do this like what are the

00:01:06   downsides of this you also know a lot

00:01:07   about health kit and dealing with health

00:01:08   care which I have no experience with so

00:01:10   I'm asking I've been asking you

00:01:11   questions like you know what are the

00:01:13   downsides of being a workout app and

00:01:15   having to save data to health kit and

00:01:17   work with health kit and how all the

00:01:18   permissions for that and you've been

00:01:21   experimenting with a project to have a

00:01:24   workout audio player on the watch right

00:01:26   yeah and so I've been playing since the

00:01:30   LTE watch was announced I was like well

00:01:31   maybe I need to try this and that it

00:01:33   because as we get into and the

00:01:36   discussion you know here it's a lot of

00:01:38   things become pump more possible on the

00:01:39   watch if you are a workout app I was

00:01:41   like well I have a workout app I have

00:01:42   workouts plus plus and the point of

00:01:44   workouts opposed plus is to be this sort

00:01:46   of super user like lots of customization

00:01:49   kind of you know power app and so maybe

00:01:53   adding podcasts playback to that

00:01:55   wouldn't be crazy and so I've been

00:01:56   experimenting with it and kind of

00:01:57   building this out and it's in the II

00:02:00   like working prototype stage at this

00:02:02   point and it's kind of interesting to

00:02:03   see you know is this a viable thing does

00:02:05   it make sense and do we want to take it

00:02:07   on

00:02:08   yeah hopefully you enjoy the discussion

00:02:10   it's I personally I think I like these

00:02:13   kinds of discussions where because like

00:02:14   Marco and I we do this a lot it's

00:02:16   probably fair to say like where it's

00:02:18   useful to think through something out

00:02:20   loud where there's you you're dealing

00:02:23   with all these problems sequentially and

00:02:25   you're able to benefit from each other's

00:02:26   experience and just kind of see how

00:02:28   these things evolve and you often end up

00:02:30   in a place that's so different than what

00:02:32   you may have thought you would when you

00:02:33   were starting all right so with that

00:02:35   here's our discussion we were having

00:02:36   about these crazy things enjoy the

00:02:38   episode and right before we start we are

00:02:40   brought to you this week by Linode fast

00:02:42   powerful web hosting options you can set

00:02:45   up in just seconds and plans start at

00:02:47   just five dollars a month for a Linux

00:02:49   server with one gigabyte or

00:02:52   industry-leading performance with native

00:02:55   SSD storage user enterprise grade SSDs

00:02:57   and access to before two gigabit network

00:02:59   and intel xeon e5 processors these are

00:03:01   the fastest processors available in the

00:03:02   cloud market they have nine datacenters

00:03:04   all over the world an API lets you

00:03:07   easily automate tasks if you want with

00:03:08   super simple scaling and hourly or

00:03:11   monthly billing options they a fantastic

00:03:13   pricing again all this starts with just

00:03:14   $5 a month for one gig of ram about

00:03:17   twice the amount of ram that you will

00:03:19   get in other hosts like this I think

00:03:21   it's the best deal of my posting I use

00:03:23   it David uses it we lovely note it's

00:03:25   wonderful as a listener of this show if

00:03:27   you sign up at lynda.com slash radar you

00:03:30   will support us and get $20 towards any

00:03:32   Linode plan and with a 7 day money back

00:03:34   guarantee there is nothing to lose so go

00:03:37   to lynda.com slash radar to learn more

00:03:39   sign up and take advantage of that $20

00:03:42   credit or use promo code radar 2017 at

00:03:44   checkout thank you so much to Linode for

00:03:46   supporting this show I've made a lot of

00:03:51   progress in workouts plus plus podcast

00:03:54   player that's good it's just so slow to

00:03:56   download and that it works like it's

00:03:59   just it makes me feel like I'm down like

00:04:01   downloading these files on a like a

00:04:04   dial-up modem and so that makes me like

00:04:06   I'm very curious to see what like an 80%

00:04:08   faster Wi-Fi chip and the new watch will

00:04:12   be and and I forget so last time when

00:04:15   you were talking about this and telling

00:04:17   me all the wonderful things you were

00:04:18   finding the conclusion I believe you

00:04:20   came to was

00:04:21   it's pretty much impossible to do it

00:04:23   right without an active workout running

00:04:25   so you're like if you're just using

00:04:26   audio file player in the background and

00:04:28   you're not doing a workout

00:04:30   what do the main is the main problem

00:04:32   still that like it doesn't wake your app

00:04:33   up when somebody hits the end and stuff

00:04:35   like that I think it is it's along those

00:04:38   lines yeah like a you'll have weird

00:04:40   issues for example around interaction

00:04:43   with the now playing control for example

00:04:46   and things because in order to interact

00:04:47   correctly with an out playing control

00:04:49   you have to be running because you need

00:04:50   to be constantly monitoring the status

00:04:53   of the cue player because when they hit

00:04:56   forward

00:04:57   it's obviously you're not actually it's

00:04:59   not skipping the file forward it's it's

00:05:00   doing a next track and so you need to

00:05:02   intercept that and override it there's a

00:05:05   lot of things like that that if you're

00:05:07   not doing a workout you won't have the

00:05:10   ability to to do that interception like

00:05:13   you'll get your little background you

00:05:15   because as far as its concerned you've

00:05:17   said play this file and it'll just

00:05:19   merrily play it to the end or are they

00:05:21   hitting it there are they hit next and

00:05:23   then it would just stop I wish they

00:05:24   would just wake you up in the background

00:05:26   whenever like an event like that

00:05:28   happened either somebody reaches the end

00:05:30   or somebody advances to the next thing

00:05:31   in the queue like sure I mean I mean

00:05:33   they should and they're like I'm gonna

00:05:35   up now playing side there's a ton of

00:05:36   stuff that you really should do there

00:05:38   yeah I rather than just like doing craze

00:05:41   doing whatever to the file it should

00:05:42   probably be in the same way that on iOS

00:05:44   it does like you get a like an app

00:05:47   delegate callback that says this button

00:05:50   was pressed and then leave it up to me

00:05:52   to do whatever I want to do with that I

00:05:54   mean they probably don't do that because

00:05:56   if they're gonna suspend you you

00:05:57   probably can't be resumed fast enough to

00:05:59   be responsive fund fundamentally the

00:06:01   architecture is intended to be that if

00:06:04   you are running that like it's this

00:06:05   fire-and-forget kind of a thing that you

00:06:07   say like play this file and then you can

00:06:11   kill the app and it would be fine

00:06:13   whereas in order to really do it

00:06:16   properly you need to always be running

00:06:17   which in the current form means you

00:06:19   neither need to be a turn-by-turn

00:06:21   navigation app or you need to be a

00:06:22   workout app and also there's a bunch of

00:06:25   other just like things that seem like if

00:06:27   you're like keeping track of how far

00:06:30   they've gotten for like bookmarking

00:06:31   reasons and things

00:06:33   um being a workout app is also something

00:06:35   that seems somewhat important to be able

00:06:37   to in the same way like I mean

00:06:39   functionally the way I've built it now

00:06:40   it just once a second I have the timer

00:06:44   going and I'm just keeping track of how

00:06:46   far they got and then also seeing has

00:06:49   the cue changed and if it has adjusted

00:06:52   you know she's restarting it thirty

00:06:54   seconds ahead essentially you know it's

00:06:57   mostly I do the back button still

00:06:58   doesn't work but as far as I can tell I

00:07:01   can't fix that because with a cue like

00:07:05   the cue is strictly forward moving it

00:07:08   doesn't go backwards because I get first

00:07:10   what I was good at first what I did is I

00:07:11   I set the cue up as play thirty seconds

00:07:14   of silence played the podcast play

00:07:16   thirty seconds of silence in the hope

00:07:18   that if you hit back it would go back to

00:07:21   the first thirty seconds of silence I

00:07:24   can detect that you've jumped backward

00:07:25   and then readjust play accordingly but

00:07:30   that didn't work because hitting back

00:07:31   just does nothing it just stops so this

00:07:35   is I can tell there's nothing to be done

00:07:36   there like it when you're playing the

00:07:39   file the back button is like meaningless

00:07:42   there's no like all it does is stop

00:07:44   playback so I don't know that seems like

00:07:47   that's just a bug and or a limitation of

00:07:50   how he's implemented yes afford works

00:07:52   and play pause works and now you're

00:07:55   making me do this cuz like I figure I

00:07:57   pretty much have the file transfer side

00:07:59   of it solved I have my transcoding

00:08:01   engine trend it makes it lower bitrate a

00:08:03   base in smart speed if I do it again

00:08:05   what I'm gonna do basically is just have

00:08:07   it automatically sync stuff over

00:08:09   overnight is there our background app

00:08:11   refresh for the main extension like

00:08:14   could I wake up them like periodically

00:08:16   throughout the night and like cue up a

00:08:18   back you a URL task or something like is

00:08:21   that a thing I can do you you could you

00:08:23   could ask to send the file to the watch

00:08:27   but you would have no visibility as to

00:08:30   when or if that is actually going to

00:08:32   happen right there's no way for the user

00:08:36   to prioritize or activate that so like

00:08:42   you could in your app overnight say hey

00:08:44   here's this file when

00:08:46   when when it's convenient please

00:08:48   transfer it to the watch and that would

00:08:50   work but you don't know when and like

00:08:52   that's the part of it like for when I

00:08:54   was thinking through on my side of

00:08:56   things I was like I needed up I'm just

00:08:59   going to do it that it downloads using

00:09:01   you know nsurl connection or nsurl

00:09:04   session because it that way at least I

00:09:06   can show the user what's going on by

00:09:09   giving them that sense of feedback at

00:09:11   least it's not frustrating for like well

00:09:13   where's my file yeah I and it's like I

00:09:16   see where you're going that I think it

00:09:17   works in so far as like if you can do it

00:09:20   when they're not when they're not paying

00:09:21   attention and it works well enough then

00:09:23   that may be good enough and you think

00:09:25   that overnight if you play like if your

00:09:28   watch is plugged in and your phone is

00:09:30   plugged in that it would be use that as

00:09:33   a good opportunity to move things across

00:09:35   unless it needs for them to be unlocked

00:09:38   yeah like I wonder like it is the

00:09:40   session even active if they're both

00:09:42   locked sitting on the table yeah that's

00:09:44   a weird question because I don't know if

00:09:45   it would say that hey this is a great

00:09:47   opportunity to do it right or it would

00:09:49   say the watch is off the wrist I'm not

00:09:51   gonna do anything is the watch connected

00:09:55   in the same way like is it in a like I'm

00:09:58   asleep state because I'm not connected

00:10:00   to a wrist anymore I don't know yeah so

00:10:03   it's a bit of a mess I think I think

00:10:05   first I will try the file transfer thing

00:10:08   I'll just like set it up and just you

00:10:10   know just but I don't have any playback

00:10:11   you I just to see like is it able to

00:10:13   stay on top of things that could

00:10:15   automatically transferred overnight my

00:10:16   idea is just like an automatically sync

00:10:18   over like your whole queue and then you

00:10:20   know once you finish that like you know

00:10:21   basically try to sync overlay 24 hours

00:10:23   of audio that's like you know finish the

00:10:26   cue and then start just pulling new

00:10:28   podcasts that have come in that aren't

00:10:31   yet there and just just have tried to

00:10:32   sink as much as possible if the workout

00:10:34   hack is a way to simulate a decent or

00:10:37   semi decent podcast audio player I'm

00:10:40   going to go through all that all that

00:10:41   hassle if it can be an overall good

00:10:44   experience for the people who choose to

00:10:45   go all-in on it so if you're willing to

00:10:47   do a workout while you're playing things

00:10:50   on your watch which I think most people

00:10:51   are probably going to be doing one

00:10:52   anyway during those times I'm willing to

00:10:54   have this work again if everything else

00:10:57   can be good like if the transfer

00:10:58   experience can be good if the playback

00:11:00   can be you know passable the awkward

00:11:04   thing is just it's just so hard to know

00:11:05   like the reason you ended up pulling it

00:11:07   is because it worked but it didn't work

00:11:10   well yeah and I suspect you will still

00:11:14   have that same experience of like it'll

00:11:16   work but it won't work well yeah and

00:11:19   then you get into is it the same reason

00:11:21   for the same reason that you pulled it

00:11:23   last time is it better to just wait and

00:11:25   hope that 4.1 or something will make it

00:11:29   better and like ship it when it really

00:11:32   works rather than it it's kind of a

00:11:35   bundle of hacks in a lot of ways and the

00:11:38   way I'm thinking about that now is like

00:11:40   first of all like things have changed

00:11:42   now with the release of the LTE watch

00:11:44   demand is now going to be way higher so

00:11:46   that changes the calculus a little bit

00:11:48   because now all of a sudden like there's

00:11:49   way more people who are going to be

00:11:51   wanting standalone playback also if I

00:11:55   make it a workout app that also solves

00:11:57   the other purpose of just being

00:11:58   convenient when you're working out like

00:12:01   that that's gonna be the app that's

00:12:02   gonna pop up first when your watch

00:12:03   screen wakes up that you're gonna be

00:12:05   able to see everything on just one

00:12:07   screen instead of having to like pay

00:12:08   between two things in the watch app

00:12:10   horse or swap between two apps with like

00:12:12   the rapid swapping features or like it

00:12:14   can be better in these ways beyond what

00:12:17   it was before if that makes sense

00:12:19   oh sure I mean then you're thinking if

00:12:21   you're a workout app then it's just you

00:12:23   need to do all the health stuff yeah but

00:12:26   but like so so what are the repos

00:12:28   already have a privacy policy what else

00:12:31   do I need I mean I think the biggest

00:12:32   things is you look these easy ones like

00:12:35   you have to add a disclaimer to your

00:12:36   apps or description saying that you

00:12:37   integrate with health that's all right I

00:12:39   already have a big pile of those for

00:12:40   subscriptions yeah it's like you need to

00:12:41   have we need to do that and then it's

00:12:43   just you'll need to add some at some

00:12:45   point you'll need to throw up

00:12:48   the health prompt requesting access on

00:12:51   the phone to their health data like a

00:12:54   very common thing that'll happen is they

00:12:56   will gather that they'll not acted

00:12:59   they'll not turn them all on and then be

00:13:01   like why isn't my data there or the

00:13:02   permissions won't sync correctly and so

00:13:04   you have to tell them to go to the

00:13:06   health app go to sources click your app

00:13:08   turn them all off turn them all on

00:13:10   Oh usually that resets it these are just

00:13:15   like from a support perspective that

00:13:17   come up with the health frameworks

00:13:19   because there is such a like all of the

00:13:22   permissions and privacy stuff that you

00:13:24   then have to navigate just is a bit more

00:13:27   tricky I don't think there's that you

00:13:29   have to deal with people getting annoyed

00:13:30   if you're for whatever reason you don't

00:13:32   save the data correctly but I mean

00:13:34   that's just like people people keep CC

00:13:36   there they're very precious about their

00:13:38   workouts of course so like if the app

00:13:40   crashes during the workout they're very

00:13:42   upset because they're like I'm working

00:13:43   hard to earn this stat and you stole it

00:13:45   from me that is worth a joke and

00:13:47   actually how they feel like it feels

00:13:50   like I took something from them that

00:13:51   they worked towards when I suppose it's

00:13:53   true in some ways but yeah I mean those

00:13:56   are the big things I mean it's just it's

00:13:58   just one other it's one other Avenue for

00:14:00   things too that you have to now manage

00:14:02   in terms of be like both the user

00:14:05   experience which is a little awkward as

00:14:08   well as I mean in general the confound

00:14:11   haven't had too many issues on like the

00:14:13   compliance or worry about people's data

00:14:15   because I don't actually store any of

00:14:16   their data all their data is in the

00:14:19   health app if the only thing I'd be

00:14:21   doing here is activating a workout

00:14:23   session displaying its data on the

00:14:24   screen during it and then saving it to

00:14:27   health care that's it the other thing

00:14:29   you'll have to navigate on your side

00:14:31   that's related to that is Deakin I think

00:14:33   you will have a fair bit of confusion

00:14:35   around needing to have a workout active

00:14:39   to start offline playback yeah and then

00:14:43   that they need like if you send the

00:14:44   workout the playback will stop will

00:14:47   likely be more confusing because when

00:14:48   you're playing from your phone that's

00:14:51   not the case like you use the watch app

00:14:53   while you're playing from your phone you

00:14:56   there's no connection whatsoever and so

00:14:58   I think they'll likely be confusing as

00:15:02   to want I think why do I need to why do

00:15:06   I need to start a workout I'm not

00:15:07   working out to her I don't want to drain

00:15:11   my battery with the heart rate monitor

00:15:13   all the time I just want to listen to a

00:15:14   podcast it's like well you need to

00:15:16   because the primary purpose is to look

00:15:18   for your app is to listen to the podcast

00:15:20   not to do a workout I imagine there will

00:15:23   be a dissidence there

00:15:24   that's oh definitely yeah and that's

00:15:27   that's the main argument for whether I

00:15:28   should or shouldn't do this or not is

00:15:30   like how bad is that basically yeah like

00:15:33   how bad is combining these things and

00:15:36   then what happens like if watch OS 5

00:15:39   gives me the ability to do it without a

00:15:40   workout then do I remove all these

00:15:42   features that like yeah you are taking

00:15:45   on the people's expectation that oh this

00:15:47   is the app I use for a workout now yeah

00:15:49   and so you are you then becoming a

00:15:51   workout app forever and if they have

00:15:53   Apple changes the way workouts can do or

00:15:55   adds capabilities for workouts will you

00:15:58   then have the problem of people being

00:16:00   like oh I want you going to support the

00:16:02   new something something workout system

00:16:04   it but it may not really besides it's

00:16:06   not really at all aligned with the core

00:16:08   goal of the app I guess the advantage

00:16:09   there is like they don't add new workout

00:16:11   types that often usually it's like it's

00:16:13   once a year it's you know during the

00:16:14   watch OS update they'll add a few new

00:16:15   ones so like it and the way I'm

00:16:17   picturing the UI is like I replace the

00:16:18   star button with a workout start/stop

00:16:20   button and it pops up a tableview list

00:16:22   that just says like alright pick your

00:16:24   workout type and and you know it can't

00:16:25   be smart and like you know sort the last

00:16:27   ones you've used on top just throw that

00:16:29   with the same the system workout app

00:16:30   does yeah but like it doesn't matter how

00:16:32   long that list is and then the API for

00:16:34   all of them is the same so it wouldn't

00:16:36   add like I think it would only add

00:16:38   elements to that list as the workload

00:16:41   right sure I mean necessarily I might

00:16:43   just like workout types I think that's

00:16:45   like so there's an example the recent

00:16:48   addition in this I can watch OS 4 you

00:16:50   can now do location tracking so you can

00:16:53   get the map of where you walked while

00:16:55   you went for your walk but in order to

00:16:57   do that you need to implement all the

00:16:59   core location stuff yourself oh I didn't

00:17:02   know that wait so if I just start a

00:17:04   workout and I do like just record like

00:17:07   you know like I saw the this code sample

00:17:08   online when I looked at it like last

00:17:10   month and so if I just do like you know

00:17:12   saving like the samples or whatever that

00:17:15   does it it doesn't keep a GPS map no oh

00:17:19   god so you have to implement that

00:17:21   yourself

00:17:21   otherwise you lose the ability to have

00:17:23   your GPS maps oh that's really bad so

00:17:26   this is the this is that's more what I

00:17:28   mean where it's really uh it's like as

00:17:30   people's expectations for what a workout

00:17:32   like because then if all of the overcast

00:17:34   workouts don't have location data

00:17:37   then is that gonna be annoying and

00:17:38   frustrating and know what we want not

00:17:41   what they want and do you want to go

00:17:42   down the road for now implementing core

00:17:44   location tracking and so on so that's

00:17:48   more what I mean conceptually what

00:17:52   you're sort of herders it's like having

00:17:53   a workout app that's super minimal I

00:17:56   mean maybe you could even just like all

00:17:58   I can do is runs and walks right like

00:18:00   even if you just said that that's what

00:18:01   it does it's like it's just four runs

00:18:03   and walks it's the purpose of any sort

00:18:05   of like pedometer plus plus is workout

00:18:07   app we're on the on the watch you can

00:18:09   say like start a walk which for

00:18:12   pedometer plus plus kind of it's like

00:18:14   outdoor walk is the only workout type

00:18:15   yeah because it's it's a pedometer like

00:18:18   that's what it's it's four counting

00:18:19   steps so narrowing it in that way it

00:18:22   doesn't limit it too much but is it

00:18:25   because you know your core purpose is

00:18:28   not specific in fact it has nothing to

00:18:30   do with working out it may be something

00:18:32   that people do while they work out but

00:18:34   it's got nothing to do with working out

00:18:35   like it's I don't know and of course

00:18:39   they have to worry about your cards that

00:18:40   you're still worrying about your card

00:18:41   API and your massive redesign and so who

00:18:45   knows maybe you've got time you get

00:18:46   finished with your cards watch it was a

00:18:48   five will have come out and then it will

00:18:50   all be a mute you know who all be fixed

00:18:52   at that point so you don't even have to

00:18:53   worry about it oh man alright so if I

00:18:56   wanted to do this right I would have to

00:18:58   not only have all the workout stuff

00:19:00   starting and stopping the workout have

00:19:02   that being basically tied to the

00:19:04   play/pause button where they would like

00:19:05   disable it when you're not running a

00:19:06   workout but also have location tracking

00:19:10   in my Abdur in the workout presumably

00:19:12   I'd have to just like you know do

00:19:14   continuous monitoring save the samples

00:19:16   yep can you give location access with a

00:19:19   prompt that only appears in the watcher

00:19:21   does it prompt you on the phone I think

00:19:22   it'll still show up on the phone they've

00:19:25   made it anyone watch was for a couple of

00:19:27   the prompts are now on the like the

00:19:30   motion and Fitness one which is the one

00:19:31   that I'd like interact with a lot is now

00:19:33   possible to used to use to have to do it

00:19:35   on the phone

00:19:36   now it'll pop up and say you can approve

00:19:39   it from the watch but yes I think health

00:19:42   ones still require that you go to the

00:19:44   phone which makes sense because they're

00:19:46   so much more complicated

00:19:47   and I don't know about location it

00:19:50   wouldn't surprise me if you can do it on

00:19:52   the watch now just because they did it

00:19:54   for a look motion and fitness as well

00:19:55   but I don't know that for sure this is

00:19:58   just adding more and more clunkiness

00:20:00   sure it does right and now all in any of

00:20:05   the same thing it's like now you have a

00:20:06   question of you need to have navigate

00:20:09   people with location privacy or people

00:20:12   come like try it looks like why does my

00:20:15   podcast player need to know where I am

00:20:16   and those types of questions which are

00:20:19   enough attack both because if you want

00:20:21   your workout map then I have to do this

00:20:24   but all right so what if so what if I

00:20:28   don't do workout stuff at all

00:20:29   and I and just to recap so if I go back

00:20:32   if I if I do wk audiophile player

00:20:35   yeah I'm sure like what's the best I

00:20:38   could do so like the bet that the

00:20:40   problems that so now we know the

00:20:41   problems of doing a workout at all this

00:20:42   confusion all this overhead all this you

00:20:44   know additional having to prompt for

00:20:45   permissions and manage those permissions

00:20:47   and everything maybe involving the phone

00:20:49   and so ok if I go back to not having a

00:20:52   workout go back to the way I was doing

00:20:54   it before just this time with dub UK

00:20:56   audio file player instead of AP audio

00:20:58   ap file play whatever it is the main

00:21:00   downsides to that is if somebody hits

00:21:03   next track or previous track on their

00:21:04   pods playback will stop and it will it

00:21:07   won't be able to be restarted until they

00:21:09   you know go to my app again and you

00:21:11   won't know where they left off so what

00:21:14   so if they got alright so fundamentally

00:21:18   like the problem is that it's like you

00:21:19   if you if you go down that road like the

00:21:22   issue is it changes it from being able

00:21:26   to like be the basic expectation with a

00:21:28   podcast that you have a bookmark where

00:21:29   you're keeping track and you like are

00:21:32   offsetting from that doesn't work unless

00:21:35   you can keep track of that bookmark

00:21:36   right so if the user so let's say you

00:21:39   know they they get back to their house

00:21:40   they end the workout and they turn off

00:21:42   their headphones or whatever it is like

00:21:44   they they stop playback somehow and I'm

00:21:47   not notified of that at all right not at

00:21:49   all or at least you are almost certainly

00:21:53   not like your app theoretically could be

00:21:54   in the like if it was the last thing

00:21:58   they had running you may be in the not

00:22:00   fully background

00:22:01   but not for grounded state so you may

00:22:04   have some visibility but you have no

00:22:07   guarantees of that or no expectation of

00:22:10   of getting that event because it's not

00:22:12   an event that you get like you know you

00:22:14   would get the event when they finish it

00:22:16   you'll get the like did finish to end

00:22:18   notification the next time your app was

00:22:20   for grounded but but it won't wake me up

00:22:23   in the background and tell me it love

00:22:24   these events as they happen oh I don't

00:22:25   believe so now this I hate this so much

00:22:30   why isn't this easy yeah

00:22:33   our engineers they're our job is to

00:22:35   solve hard problems because like

00:22:37   literally like every day I'm gonna be

00:22:40   getting questions from people every

00:22:41   single day with LTE watches saying why

00:22:45   haven't you done this yet why is there

00:22:46   no podcast Apple I haven't you'd like

00:22:48   and the worst thing is if Apple does it

00:22:50   if Apple does their version of podcasts

00:22:53   if they bring it to the watch they're

00:22:56   gonna use real api's that I can't use

00:22:58   and so that's gonna just make me look

00:23:01   bad and make my user to complain and I'm

00:23:03   gonna lose users for that because

00:23:05   they're gonna be like well y-you know

00:23:07   what if Apple can do it why can't you do

00:23:09   it you know they're already oh also

00:23:11   while I have you here talking about

00:23:13   audio api's is there any streaming API

00:23:15   that we can use on the watch said the

00:23:18   only way to do streaming as best I can

00:23:19   tell would be to so it would be to do

00:23:24   the crazy hack saying I mentioned before

00:23:25   I used to do in the first version of

00:23:27   audio books back in iPhone OS - yeah

00:23:30   where I would download mp3 files

00:23:32   sequentially and after I had like the

00:23:35   first the first two Meg's of it

00:23:37   I would tell to give hand give that

00:23:39   those two Meg's to the player and then

00:23:41   have it start playing those and then

00:23:44   keep backfilling like the you know it's

00:23:47   like I'm on a train trying to build the

00:23:49   tracks as I go yeah which is not

00:23:53   straight it's like is is streaming in so

00:23:56   far as most people's definition of

00:23:58   streaming is just instant playback

00:24:01   technically streaming is a different

00:24:03   thing than fast start for most user

00:24:05   expectation perspective streaming is

00:24:07   fast start so as long as you could do

00:24:12   something like that you would from a

00:24:14   user's perspective it would base

00:24:15   they'd be streaming and I mean you'd

00:24:17   hope like if the watch is fast enough

00:24:19   and the network connection is fast

00:24:20   enough like if the download completes in

00:24:23   you know ten seconds

00:24:25   it doesn't really matter like the fact

00:24:28   that it you have to wait ten seconds

00:24:30   like that's not a huge killer like even

00:24:32   if you're streaming there's usually like

00:24:33   a buffering interval so yeah but yeah

00:24:36   there's no there's not a strict

00:24:38   streaming interface in the same way that

00:24:39   like AV player you can just pass an HD

00:24:41   HTTP URL and it takes care of it for you

00:24:45   everything has to be file based yeah and

00:24:47   we don't have the kind of low-level

00:24:48   access that I could like do my own thing

00:24:51   like I do in the phone version like cuz

00:24:52   I don't use AV player but like I just I

00:24:54   used raw audio playback API is that I I

00:24:57   download the files and chunks myself I

00:25:00   pass them as I have them to you know

00:25:01   it's like but I can't do any of that on

00:25:03   the watch because there's no core audio

00:25:04   right or at least not not for not enough

00:25:06   for background and playback yeah you

00:25:08   would have the same problem you would

00:25:09   have the same problem of using AV AV

00:25:11   audio player where you can use AV audio

00:25:14   player if you're a workout app but then

00:25:16   you don't integrate with the now playing

00:25:18   in or the now playing they're not

00:25:21   playing app and you also can't control

00:25:23   audio volume as a result so if the

00:25:28   Bluetooth volume on the headsets is set

00:25:31   too low

00:25:31   there's no way to raise it up right yes

00:25:34   I had that problem dramatically it's

00:25:36   like at least if you use the file player

00:25:38   API or the cue player API then you can

00:25:41   change its correctly ties into it and so

00:25:44   then you could say if you like I'm

00:25:45   expecting to have a little I can detect

00:25:48   what the current system audio is is that

00:25:51   I can detect what the system volume is

00:25:53   at least so I can tell you if it's if I

00:25:56   can I know if it's low like if the

00:25:58   system volume is like 0.2 then I can at

00:26:01   least know that and pop up a thing that

00:26:03   says please adjust your volume in the

00:26:05   now playing app or something like that

00:26:07   like I can at least tell you I can't I

00:26:09   can't do it for you yeah that still

00:26:11   sucks like it's it still sucks that like

00:26:13   the experience of this will suck but at

00:26:14   least it's better than like it just

00:26:16   being super low and the user of not

00:26:18   really knowing why or having any idea of

00:26:20   how to change the yeah and having no no

00:26:23   mechanism for I want so badly for these

00:26:27   like I would just

00:26:29   the phone audio api is on the lawyers

00:26:32   like why why don't we have I mean I mean

00:26:35   I will say it reminds me in the best

00:26:38   possible like both in a lovely and in a

00:26:40   terrible way of all the development I

00:26:42   did for with audio api's in an iPhone OS

00:26:46   2 like way back what is that eight years

00:26:48   ago like I was dealing with back then I

00:26:52   mean I remember it was a massive deal

00:26:54   like huge like applause during the

00:26:57   keynote when when Steve Jobs was playing

00:27:01   and playing of playing us playing a

00:27:03   track in Pandora and then he hit the

00:27:06   home button and it didn't stop playing

00:27:08   yeah that was like rip-roaring applause

00:27:12   for something that now seems like

00:27:15   completely foolish like and I remember

00:27:16   having to build all these crazy like

00:27:19   there's still a setting in audio books

00:27:21   auto resume playback on launch which at

00:27:26   the time I was an important feature

00:27:27   right now I get some people being like

00:27:29   why would I want to do that like when I

00:27:31   open the app why should just like

00:27:33   immediately start playing it's like well

00:27:35   back in the day you'd get a text message

00:27:37   and you'd quit the app and it would stop

00:27:39   playing your audio and you know you'd

00:27:41   apply to your text message and you'd

00:27:42   come back to the app and you have to

00:27:44   respring the whole thing because there

00:27:45   wasn't multitasking so it would restart

00:27:48   the app from scratch and then you'd want

00:27:50   to keep playing I'm like that was that

00:27:52   was the world in which I had to be I had

00:27:54   to build things and like for the phone

00:27:56   Fiat the watch feels like the phone did

00:27:58   you know eight years ago in the same

00:28:01   room in that way yeah except by year

00:28:02   three of the phone we had multitasking

00:28:07   maybe this June maybe next year you know

00:28:09   we just need to wait one recycle or 4.1

00:28:12   maybe or 4.2 I don't know

00:28:14   so this is show I think we just made a

00:28:17   show an intentionally the accidental the

00:28:22   accidental technical podcast I hear

00:28:25   accidental podcasts are very successful

00:28:27   so yeah maybe it's a good it's a good

00:28:29   pivot for us Wow well thanks for

00:28:31   listening everybody and we'll talk to

00:28:32   you next week