I am using an iPod Shuffle. Yes, an iPod Shuffle that I’ve bought in the year 2010 as a replacement for my even older iPod Shuffle. It fulfills an essential task in my life: Playing podcasts while I’m out running. It’s sad, but this is currently the _best_ solution for me as I don’t want to carry my Phone with me when I’m running, and there is no good podcast player on Apple Watch. So I regularly connect the iPod to my Mac, start iTunes (😭) and sync my podcast episodes.
On the iPhone, I use Overcast for listening to podcasts, and there was a proper Watch app a few months ago. Although it had its issues and sometimes the episodes wouldn’t transfer, this was the first time in years where I could leave my iPod at home. And it felt good. Really good. Unfortunately, the developer of Overcast, Marco Arment, decided to discontinue the Watch app because of API limitations and changes, which prevented him from making a reliable Watch app.
So back to my iPod Shuffle. 😐
The step back to my iPod Shuffle was hard. It’s still working, but it isn’t satisfying anymore. So we decided to take matters into our own hands and made it our quest to build the best possible podcast app for Apple Watch. “Possible” because of the limitations Apple enforces via its provided APIs and existing bugs in watchOS we can’t work around.
We see this project as an intermediary step to a better podcast support on watchOS. We don’t want to replace Overcast or Apple’s Podcasts app. Our app should be a lightweight companion to these existing apps. A companion that just focuses on one task: achieving the best possible podcast listening experience on your wrist — given the platform’s limitations. If Apple suddenly decides to release a podcast app for the Watch and/or Marco Arment releases a superior Overcast Watch app, our app can slowly be phased out.
In the meantime, we will build and maintain our app and adapt to all watchOS changes that will come out in the future.
We Decided Not to Build a Separate Podcast Ecosystem. 🙅♂️
After many many many hours of prototyping, building proof-of-concepts and experimenting with watchOS’ (and iOS’) limitations, we found a way to achieve a “companion-ness” that felt right. On iOS, all features of MiniCast are contained in a single Action Extension. If we could have shipped an Action Extension without a container app, we probably would have. But that’s not possible on the App Store. So there is a container app which guides you through the first steps, how to enable the extension and how to transfer the first test episode. The primary interaction happens directly in the Action Extension in your favorite podcast app.
We currently support Overcast, Apple Podcasts and Pocket Casts. In these apps, press the “Share” button of the episode, open the MiniCast Action and with one tap, it will be sent to your Apple Watch.
The episode information syncs via CloudKit. We use CloudKit because it provides a good user experience and we don’t have to use a separate infrastructure. Also, there is an essential benefit concerning Apple Watch models with LTE. With CloudKit, Apple Watches can receive information even when they are away from the connected iPhone. We figured that syncing via CloudKit is the only viable way to get a great experience moving forward.
MiniCast on Apple Watch
The main task of MiniCast happens intentionally on the Apple Watch. It should be the companion to whichever podcast app you’re using on your iPhone.
After the episode data has synced to your Watch via CloudKit, you’re able to download the audio file and play it via Bluetooth.
When you’ve finished listening to an episode, just delete it from you Watch by pressing firmly on the watch screen (Force Touch). For discoverability reasons, a hint will show on the screen. It’s a lesson we’ve learned while using many Watch apps and observing people using these apps: Force Touch/3D Touch is not discoverable — until you REALLY know it’s there.
Known Issues — until solutions are possible 👷
- Download is slooooooooow 🐌
We are using URLSession for downloading audio files. URLSession is the recommended API according to Apple to download large files on watchOS. It’s the same API that is available on iOS, macOS or tvOS, but unlike those platforms, watchOS seems to be throttled and slow. An episode of ATP should usually be downloaded in 5–10 minutes, depending on … well, we don’t know. Maybe there are limitations from Apple because of battery and efficiency considerations. Or perhaps it’s because of the Bluetooth connection.
- Download Progress Is Not Updating ⏳
Currently, there seems to be an issue with URLSession that sometimes prevents the app delegate from receiving updated download progress information. The download continues in the background, but there is no possibility to display intermediate progress. Should you notice that the download seems to not progress — just wait. It will download in the background, and you should get a notification when it’s finished.
- We can’t save the progress of playback 💾
We are using WKAudioFilePlayer as recommended by Apple for playing extended audio content. WKAudioFilePlayer is currently the only way to play audio while the app is in the background, but it has the limitation that MiniCast doesn’t get notified of the playback position. So when you’re out running and using the Workouts to track your activity, we can’t save the progress of the playback. Until there is a way to get the playback position reliably, we’ve disabled this feature. ➡️ In the meantime you can press firmly on the screen to change the playback position manually.
- There’s no 30-second forward/rewind buttons in “Now Playing” ⏩
When controlling playback of MiniCast on the Now Playing Screen or through the Workout app, there is no way to change the buttons as there is on iOS. As Marco Arment noted, this has to be addressed by Apple in a watchOS/SDK update.
- It’s impossible to change the Volume in MiniCast 🔊
Another limitation of watchOS. 3rd Party developers are not able to control the output volume as Apple does in its apps. You can still switch to the Now Playing screen to change the output volume. During a workout, you can also swipe to the right to control the volume. It’s not an ideal solution, and we hope to get a proper way to control the volume in the future.
We know MiniCast is NOT perfect. But it’s a solution that works for us, and we think it can work for a few people who want to listen to podcasts on their Apple Watch. MiniCast is primarily made for situations where you don’t want to take a phone with you.
But there is a promise from us: should Apple improve the watchOS platform in the future, we will adapt to these changes and make MiniCast better with each update.
Check out MiniCast on the App Store:
2017–12–13: A Good Day for Podcasts 🎉 …
… because there are not one but two new podcast apps in the story today. Workouts++ also added a podcast feature today, that is entirely different to our solution. You can listen during a workout activity started IN Workouts++. Combining a workout app with podcasts is a nice workaround to the limitations we face with watchOS because workout apps get more leeway regarding what you can do in the background. And they don’t have to resort to WKAudioFilePlayer and can use the better AVAudioPlayer.
But it also has a few downsides: It means no tracking with your usual workout app — Apple’s Workout app, Nike+ Run Club or Strava — or listening to podcasts without a workout in the background. Also, you have to manage your podcasts in a separate app and can’t use your favorite podcast app on iOS to manage your subscriptions, choose the episodes and send them to your Watch.
Competition is a good thing. It keeps us on our toes and makes sure we’re updating the app regularly to adapt to all of Apple’s watchOS improvements and API changes in the future. So, welcome to Workouts++ 😊🙌