Giter Site home page Giter Site logo

pocket-casts-ios's Introduction

Pocket Casts is the world's most powerful podcast platform, an app by listeners, for listeners.

Setup

If you don't already have it, you need to install Bundler:

gem install bundler

Next you'll need to install all the dependencies needed for CocoaPods and FastLane using this script:

make install_dependencies

External contributors

If you're an external contributor run make external_contributor. After that you should be able to build and run the project.

Swift Formatting

We use SwiftLint to ensure code is spaced and formatted the same way and follows the same general conventions. We have a script that will run it over the whole project.

Once the required dependencies are installed via bundle exec pod install, you can run:

make format

You should do this before making a pull request.

Running

Open the .xcworkspace file, select the Pocket Casts project and the Simulator Device you want to run on, and hit the play button.

Localization

You can learn more about localization at docs/Localization.md

Protocol Buffers

The app uses Google Protocol Buffers to define our server objects.

To update server objects you'll need to install the protobuf command line tool as well as the Swift Protobuf translators. This can be done via Homebrew with:

brew install protobuf
brew install swift-protobuf

To update the protobuf files you can then run:

Replace the {API_PATH} with the full path to the pocketcasts-api/api/modules/protobuf/src/main/proto folder

make update_proto API_PATH={API_PATH}

pocket-casts-ios's People

Contributors

adincebic avatar alisoftware avatar bikrrr avatar bjtitus avatar chipsnyder avatar crazytonyli avatar danielebogo avatar danreylop avatar deco354 avatar dependabot[bot] avatar emilylaguna avatar fsalata avatar geekygecko avatar gibachan avatar hanneskaeufler avatar iangmaia avatar jairhenrique avatar jgcaruso avatar johnspurlock-skymethod avatar leandroalonso avatar maarut avatar mokagio avatar mrpolanco avatar mylesbarros avatar pocketcasts avatar rviljoen avatar sergioestevao avatar spencertransier avatar woxtu avatar yaelirub avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pocket-casts-ios's Issues

Accessibility: Podcast page expand has accessibility issues

User report

"Expand Podcast” Button does not work, after double-tapping on it Nothing happens, podcast is not expanded so I can’t read what the podcast is about.

Additional information

It appears this is related to the podcast header being a UITableViewCell with content that appears. Tried firing off all sorts of accessibility notifications but it didn't seem to help. This might need to be part of a reworking of the podcast page, since that's a complex page.

Filters: episodes from unsubscribed podcasts added to the Unplayed filter

Initially reported in 5201571-zen and continued discussion on Slack: p1652147666837189-slack-C02A333D8LQ

This is the second time now I’ve launched the app and noticed a feed that I’m not subscribed to is populating one of my filters.
The podcast is called Prestige TV and it’s showing up in my Unplayed filter. I’m not able to interact with any of the episodes in the filter list, and last time this happened I had to search for the podcast from Discover -> subscribe -> unsubscribe to clear the episodes out of my filter.

On May 12, it happened again but added other different podcast episodes to the filter:

Image.from.iOS.MOV

App Version: 7.20
Device: iPhone14,2
OS: 15.5

CarPlay: change podcast artwork to mirror chapter artwork

Steps to reproduce the behavior

  1. Play a podcast with a custom chapter art different from the podcast art
  2. It doesn't display on the CarPlay display

Additional information

Example:

The artwork on CarPlay:

132536129-8ed31aa4-39ab-498e-ad27-c202f8bc4eab

Ps.: this does work as expected in Apple's Podcasts app and it doesn't seem to be car-unit-specific.

Up Next: The swipe row actions are triggered too easily when trying to perform a move

Reports: #4612684-zen and #4602537-zen

User feedback

Video below (the person narrates it as well, so worth turning the sound on):

IMG_135124759.MOV

Also:

iOS v 7.19- the control surface in the up next list has gotten incredibly finicky (maybe not in this version, but in the last month). I used to be able to easily drag and re-order podcasts in the list. Now I’m constantly trying to engage the ‘handle’ and the ui can’t tell if I’m trying to slide right to remove from list or slide up/down.

Additional information

We believe this would be fixed if we replace SwipeCellKit with the default Apple implementation.

Apple Watch: Shortcuts not working

There are two issues reported by a user (#4667298-zd). Creating this bug report to track the progress, even though we've also seen this and experienced the same on Apple's first-party apps.

Issue 1

They keep getting an Allow "shortcut name" to run actions from "(null)" confirmation.

Issue 2

Sleep timer action fails: "Could not run 'set sleep timer'. This action encountered a problem while running on your iPhone".

User notes that, on their phone, the Set Sleep Timer action causes the app to open. They’re wondering if this is connected to the shortcut failing in the watch.

iPhone XS with iOS 15.1
Apple Watch 5 with watchOS 8.3 (19S55)
More info: #p1643942220812459-slack

Clip Sharing

This issue will need to wait for the server task for it to be completed, but covers everything from the user pressing "Create Clip" to the video being available in a share sheet.

Screen Shot 2022-03-15 at 4 06 12 pm

Design

pdeCcb-wX-p2

Watch: migrate the Watch app to SwiftUI

Phase 1 - Isolated screens

  • EffectsInterfaceController
  • MenuController (Edit This item is TBD see below on the comments)
  • FilesOrderInterfaceController
  • PodcastEpisodeOrderController
  • PodcastsOrderInterfaceController

Phase 2 - Episode List Prep

  • Reference each other and should be merged together or account for the navigation
    • EpisodeController
    • PodcastEpisodeListController

Phase 3 - Episode Lists and Inter-dependencies

  • PodcastsInterfaceController
  • DownloadInterfaceController
  • FilterInterfaceController
  • FilesInterfaceController
  • [ ] Reference each other and should be merged together or account for the navigation
    • UpNextInterfaceController
    • NowPlayingInterfaceController

Phase 4 - Remaining views (Should be done sequentially)

  • FiltersInterfaceController - #1524
  • InterfaceController
    • handle state restoration
  • SourceInterfaceController

Phase 5 - Review unknown elements

  • Static Notification Interface Controller Scene
  • NotificationController (Empty view)
  • Clean up any remaining WatchOS 7 migration warnings
  • Ensure Screenshot Automation Watch still runs

Add help text on "Storage & Data Use" screen for iOS discrepancy

There's a long-standing bug where iOS reports a lot more storage usage than we do. This seems to be because iOS caches some of the data we no longer need, and we have no control over that. The OS will reclaim that space if it needs it.

See Russell's Slack explanation here: p1639438147134300-slack-C02A333D8LQ

We keep getting support requests about this. It may be useful to add some help text to this screen explaining this discrepancy, so users don't have to wonder about it or question our app's credibility.

Podcast Settings: Play Speed changes when switching podcast's settings

Steps to reproduce the behavior

  • Open a podcast
  • Open podcast settings
  • Tap on playback effects
  • Switch “Custom for this podcast” on
  • Increase play speed to 1,5
  • Leave podcast settings an podcast
  • Open another podcast’s settings
  • Go back to the first podcast’s settings —> play speed is not 1,5 anymore, but 1,1 (you can increase the speed by 0,1 each time by repeating the procedure)

Additional information

it doesn't seem to happen on iOS 15 (only iOS 14).

Apple Watch: app should copy and respect phone setting for whether to use cellular or not

If you turn on "Warn Before Using Data" the phone app will warn you before streaming or downloading episodes over your cellular connection. Presumably, if you turn that on, you care about your data and don't want it used unless you're explicit about it.

On the watch we seem to ignore this setting, it isn't copied to the watch and we have this logic in the DownloadManager:

#if os(watchOS)
    let sessionToUse = WKExtension.shared().applicationState == .background ? cellularBackgroundSession : cellularForegroundSession
#else
    let sessionToUse = useCellularSession ? cellularBackgroundSession : wifiOnlyBackgroundSession
#endif

While the other developers I've talked to aren't quite sure if this would apply when the watch sends things to the phone to be downloaded, it can't hurt to set this for what our users want. Eg: the "Warn Before Using Data" settings should be synced to the watch, and we should alter the logic so that cellular can't be used on the watch if that settings is true. If there are currently cases where Apple ignore this, it might be something they fix in future so it would be helpful if we did the right thing at our end.

Playback: Video Playback Pauses after Minimizing the Now Playing Screen

Playback on a video episode pauses with certain conditions after the Now Playing screen is minimized.

Steps to Reproduce

  1. Play a video episode like this one: https://pca.st/xp4qsr9v
  2. Expand the Now Playing screen
  3. Minimize the app
  4. Open the app either from the lock screen player or the notification player
  5. Minimize the Now Playing screen

Following the same steps with an audio episode does not pause playback.

Screen Recording

5262864-zen.mov

Additional Information

  • Reported by beta tester in #5262864-zen

Spatial Audio: figure out what's required to support spatial audio in EffectsPlayer

When a podcast is played through DefaultPlayer (eg: streamed with trim silence off) and you have the app set to play spatial audio, the effect works out of the box.

However when you play a podcast through EffectsPlayer (eg: downloaded, or trim silence downloaded on the fly content) it doesn't work.

That seems to be what this video is saying as well: https://developer.apple.com/videos/play/wwdc2021/10265/

That support for it is out of the box in AVPlayer (the playback engine behind DefaultPlayer) and enabled by default, but that you need to do some work to get it to work with AVAudioEngine (the playback engine behind EffectsPlayer)

Apparently AVSampleBufferAudioRenderer supports it so that might be one thing to look into. There's an entire sample project for it here:
https://developer.apple.com/documentation/avfaudio/audio_engine/playing_custom_audio_with_your_own_player

Apple Watch: no Wearable Logs Sent in Ticket

User having trouble logging in to the Pocket Casts Watch app. They sent a ticket along with logs and no wearable logs were included.

Cases

  • 4629344-zen
  • 4851559-zen
  • 4858784-zen
  • 4528819-zen
  • 4528819-zen

I18n: images with English content

We have images with hardcoded text on it.

How To Upload View

Found in: /podcasts/Files.xcassets

These images are separated out by theme. A couple of possible options are:

  1. Opt to not translate
  2. Recreate UI approximations in code
  3. Translate a single theme and opt to only use that theme
  4. Translate all themes for all languages

The preferable approach is (2).

Playback: improvement to resuming playback after an interruption (from notifications or navigation)

Context: when the app is playing an episode and there's a notification or audio instruction from a navigation app, the app pauses and resumes when the interruption is over. However, there's still a second or two missing in the playback when the audio fades in.

One of the users requested for the iOS app but maybe there's a better way of handling it. (4952386-ZEN)

Also, another user reported this in 5247106-zen for the CarPlay app.

Up Next: Queue Emptied Unexpectedly

What's happening:

Multiple reports of Up Next lists disappearing:

my up next list just wiped out without no reason

However recently I’ve experienced a problem with the up next queue - one day most of the episodes vanished from the queue and only about the top 20 episodes were left.

User Reports:

#105828-zen
#106235-zen
#106088-zen

Pocket Casts (7.18), running on an iPad 6th generation and on an iPhone SE (2020) both on iOS 14.6

Connection error shown for previously played episodes

Expected behavior

No connection error shown.

Actual behavior

"Check your Internet connection and try again." error is shown for podcasts that were previously played.

More info

This error has occurred multiple times (five within a month) and never while I was using the app. My app version is 7.19.3 (870), though it may have auto-updated since this last occurred, which was March 28th.

  • The podcast episode on March 28th was paused with 15 minutes left
  • I have a Pocket Casts Plus account
  • I have an Apple Watch and most likely paused the episode from the Watch
  • I was on a cellular connection for most of the episode, and my devices switch to WiFi when I got close to my house at the end (around the time I paused it)
  • I can't recall ever seeing this error when it happens - it's typically after time has passed and I open the app again
  • Auto-download is not enabled
  • I was able to extract my debug log via the support view, but it didn't go far back enough (March 28th).

Crash: app crashes when there is no data connection

I noticed that my app crashed (7.20 Beta) when I lost internet reception temporarily. To replicate it, you can:

  • Open Pocket Casts
  • Choose a Podcast and have the episodes list open
  • Switch your WiFi and Mobile Data off
  • Try to play an episode (try a couple). The app should then freeze, then crash after a few mins of being frozen

Screen Recording:

RPReplay_Final1653030495.MP4

Playback time: currentTime() not changing

A user is having an issue with the playback time not changing. Related: 4576716-zd-woothemes

Additional information

In PlaybackManager currentTime is determined like so:

func currentTime() -> TimeInterval {
    guard let episode = currentEpisode() else { return -1 }
    
    if seekingTo >= 0, seekingTo <= duration(), !playing() { return seekingTo }
    
    let playerTime = !aboutToPlay.value ? player?.currentTime() ?? 0 : 0
    
    if playerTime <= 0 {
        let startFromTime = startFromTimeForCurrentEpisode()
        return episode.playedUpTo < 1 ? startFromTime : episode.playedUpTo
    }
    
    return playerTime
}

In the report is informed that this time gets "stuck", you can see it in their logs:

2021-12-07 10:10:58 saving played up to 1.38 for episode Consider the lobstermen
2021-12-07 10:10:59 Sent position 1 status 2 for episode Consider the lobstermen to server
2021-12-07 10:11:30 saving played up to 1.38 for episode Consider the lobstermen
2021-12-07 10:12:02 saving played up to 1.38 for episode Consider the lobstermen
2021-12-07 10:12:34 saving played up to 1.38 for episode Consider the lobstermen
2021-12-07 10:13:06 saving played up to 1.38 for episode Consider the lobstermen
2021-12-07 10:13:06 Sent position 1 status 2 for episode Consider the lobstermen to server
2021-12-07 10:13:38 saving played up to 1.38 for episode Consider the lobstermen
2021-12-07 10:14:10 saving played up to 1.38 for episode Consider the lobstermen
2021-12-07 10:14:42 saving played up to 1.38 for episode Consider the lobstermen
2021-12-07 10:15:14 saving played up to 1.38 for episode Consider the lobstermen
2021-12-07 10:15:14 Sent position 1 status 2 for episode Consider the lobstermen to server
2021-12-07 10:15:46 saving played up to 1.38 for episode Consider the lobstermen
2021-12-07 10:16:18 saving played up to 1.38 for episode Consider the lobstermen

I can see this happening in the code above if the seekingTo time is still set or aboutToPlay both of which might be subject to either race conditions or a path we haven't coded for.

Light/dark mode: follow the system preference by default

When doing a fresh install of the app, the option "Use iOS Light/Dark Mode" is not enabled by default (Settings -> Appearance). This results in the app being in light mode when the system is in dark mode.

My proposal is that we enable that as default for new installs.

Why only new installs?

If an existing user has that option disabled and a chosen theme different from the Default, I assume that they want to use this theme always — it doesn't matter if the system is in light/dark.

That's why my proposal is to change only for new installs without affecting existing users.

watchOS/Downloads: reports of downloads on watchOS being corrupt/put together badly

User report

On my Watch, sometimes the downloaded episodes are "corrupted". The audio at the start will be of the episode already in progress, and after a couple of minutes the episode will go on as normal, thus skipping the first few minutes. Like, instead of playing [0 1 2 3 4 5 6 7], the episode goes [3 1 2 3 4 5 6 7].
It doesn't happen every time, so I just delete the file and download again, but it's annoying if it happens when I'm on-the-go (my Watch is wi-fi only and I don't take my phone with me every time).

I'm using an iPhone XR and an Apple Watch Series 5 GPS. Both are using the latest iOS/watchOS, and this has been happening for months, even before iOS 15 / watchOS 8

My current Wi-Fi is 5GHz only, so the Watch can't connect to it. All the sync/download on the Watch happens through Bluetooth.

Battery Usage

User report

Just sent a Twitter DM as well but I’m finding the app uses a ton of power. Is this expected? Was surprised to find my new iPhone 13 Pro doesn’t have that much better battery life than my aging iPhone XS, and seems Pocket Casts is the primary culprit.
image1 image0

Additional info

From Chip Snyder:

I spent some time looking onto this and I have a few take-aways for this user.

They're on 7.18.1 and they have 132 podcasts that they subscribe to. Also a few settings that stand out to me:

Auto Download On: yes
Auto Download Only on Wifi: yes
Auto Download Up Next: yes

They have Auto-Download on but our logs don't provide insight into how many are included in the Auto-Download. We might want to add that to the meta-data if these issues persist. I wasn't familiar with the app "No Cell Coverage" but apparently this is a tool that Apple will use to help boost the signal in low connectivity cases.

Thoughts
Given that they have so many podcasts and that they Auto Download I wonder if their battery is being effected by episodes downloading under cellular data. If they're downloading on a cell network (especially a poor cellular network) then they'll definitely have a greater impact on their battery life.

With that bug fixed I'd be interested to see how their battery usage impact changes because they have all of the settings I would encourage them to use. Maybe turn off Auto Download for shows that they don't listen to regularly 🤷 and only download them when added to up next using Auto Download Up Next


Other Research

I did some deep diving into this over the last two days so I want to document some of my findings before the week is out.

I pulled up some of our battery stats and found a few interesting cases. Our biggest impact is while in the background which should be expected given the nature of the app.

Average Users Heavy Users

For our average users our impact is minimal and we shouldn't worry too much IMO. We average about 1.3% of their daily battery usage which is down from the previous release.

Our heavy users use 6.65% on average (this aligns pretty closely to my own use.) Audio is high (2.59%) but that's expected and I haven't found a way to be more efficient there yet. Processing is nearly just as high though.


FileLog

I believe a big contributor to the processing impact is due to the FileLog. Each time an event fires a loggable event the process is

  • Open the log file
  • Seek to the end
  • Write the log
  • Close

This kind of I/O can be expensive. A few recommendations from Apple:

Minimize data writes. Write to files only when their content has changed, and aggregate changes into a single write whenever possible. Avoid writing out an entire file if only a few bytes have changed. If you frequently change small portions of large files, consider using a database to store the data instead.

While streaming an episode our energy impact is on the high side.

Running the same test with the file log disabled moved us back into the low category.

Batching these events and/or moving them to the DB could also be a viable approach to saving us energy usage. However this needs more validation because it's not a 1 to one comparison given the network calls that happen around these screen shots with various intervals. Which raises that we might be able to batch requests as well.

More info: #4529585-zen

CarPlay: Archive Works Inconsistently

User report

This is to report that the Archive button randomly works when using Carplay. Sometimes, pushing this button has absolutely no effect and is not archiving then moving to the next podcast.

Internal reference

108834-zen

Crash: DataManager crash on init

Our top Firebase crash at the moment is a DataManager crash on init.

DataModel
DataManager.swift - Line 15860
DataManager.init() + 15860

At first this just looks like something went wrong with statically allocating a DataManager. On closer inspection though, this crash is always from the ShortcutManager class, which is a little suspicious.

The first thing I notice is that for some reason we init this class like this in AppDelegate:

private lazy var shortcutManager: ShortcutManager = .init()

The other possible odd thing is that all of these updates run from the global dispatch queue:

DispatchQueue.global().async {

Which for this crash is always the queue that crashes:

Crashed: com.apple.root.default-qos
EXC_BREAKPOINT 0x0000000102195224

iPad: add trackpad swipe support

The only place we support trackpad gestures is on the filter list page, for deleting filters.

In the current implementation, we need to check if SwipeCellKit supports this. However, if we remove SwipeCellKit this should work

Replace MaterialBottomSheet with our own implementation

As of June 2021, Material components for iOS are now in maintenance mode. This means that we need to look at replacing our use of this with our own component (or a different third party one). Here are all the places we use it:

Additional information

turns out iOS 15 has a built in implementation of bottom sheets - UISheetPresentationController. I tested it on our effects panel on the player like so:

private func showEffectsPanel() {
	let effectsController = EffectsViewController()

	if #available(iOS 15.0, *) {
	    if let sheet = effectsController.sheetPresentationController {
	        sheet.detents = [.medium()]
	        sheet.largestUndimmedDetentIdentifier = .medium
	        sheet.widthFollowsPreferredContentSizeWhenEdgeAttached = true
	    }
	}

	present(effectsController, animated: true, completion: nil)
}

And the behavior is virtually identical, maybe even nicer than the material bottom sheet. It also looks the same which is nice:

Once we switch to iOS 15+ we can change to this approach.

Playback: Distorted Playback or Audio Quality Issues When Listening Over Bluetooth

This is for compiling any cases related to distorted playback when listening with Bluetooth devices, in case it helps us find a common cause.

#5248291-zen

  • App Version: 7.19.3
  • Device: iPhone 11
  • OS: 15.5
  • Bluetooth device: Bose QC35 II
  • Enabled Playback Effects:
    • Trim Silence
    • Volume Boost

#5278914-zen

  • App Version: 7.19.3
  • Device: iPhone13,2
  • OS: 15.5
  • Bluetooth device: boAt Airdopes 141
    • Enabled Playback Effects:
    • Speed > 1.0x

Buffering: improve buffering indicator and error states

The app's UI currently assumes that once you start a stream, the stream will commence fairly soon. Since we don't control a customer's connection and don't host the podcast content this isn't guaranteed. We need to add some user interface indicators of buffering progress and more information about any errors or slow downs around that. This issue will require some design input.

Apple Watch: tapping on the now playing indicator on watchOS, when playing audio from the phone, doesn't take you to Now Playing

The app is meant to go through the [source chooser] -> [Phone control] -> [Now Playing] but now stops in that middle screen without getting to Now Playing. For me this is 100% reproducible and was reported by a user as well.

My setup is watchOS 8.1, iOS 15.1.1, Pocket Casts 7.19 Build 850.

Additional information

  • Have this setting turned off on your watch: Settings -> Display & Brightness -> Auto Launch Audio Apps
  • Play a podcast in Pocket Casts on your phone
  • On your watch home screen there should now be a small now playing triangle in the top middle of your watch face, tapping that is meant to take you to the Now Playing page of the app that's playing, eg: Pocket Casts

#4749830-zen p1646871379826129-slack-C02A333D8LQ

Playback: video podcast at > 2x speed in full screen on iPad makes the next video ep starts with no sound

in iPad when playing a Video podcast @ >2x speed in Full Screen Mode, the next video ep starts with no sound.

Steps below:

  1. Add few video episodes in the queue
  2. Start playing a Video Podcast @2x speed (tested with TED Talks Daily Video)
  3. Switched to full screen (as the problem is only happening with >2x and with fullscreen)
  4. Jumped to the end of the episode while playing
  5. Let it play the next episode (it will have NO Sound)
  6. Press pause icon and it will directly switched on the volume and not pause the podcast

#4632548-zen

Share Links: links with position in them do not start from the shared position

Steps to reproduce the behavior

  1. Share a link with position from the app
  2. Close the app and wipe the app's data
  3. Open the link
  4. Observe that the web player has the podcast loaded to the proper position
  5. Tap the button to open the podcast in the app
  6. Begin playing the podcast within the app and observe that it does not start playing from the proper position

Additional information

IMG_5090 IMG_5091

What currently happens is that a screen pops up with some options and when you tap the play button the episode card opens but with the timestamp set either to zero or to the last point you were listening at if you had previously been listening to that episode.

IMG_5094 IMG_5095

Download: slow downloads for Podcasts

User report

Shows that used to download in just a few seconds now take minutes to complete the download. If I download the very same episodes in iOS Safari via a direct download off the RSS feed they download in just a few seconds, just like they used to in Pocket Casts

podcasts that I have added via the regular process (search for a podcast in the app search and then subscribe) download super slow in Pocket Casts whereas the podcasts I have added via URL (those podcasts that are paid subscriptions) download at normal speed in Pocket Casts

User reported in slack at https://pocketcastsbeta.slack.com/archives/C0GKZ8J4A/p1633927356067700

Up Next: investigate auto add to up next reported issue

"Overall, the biggest issue right now is that things aren't being added to the PlaybackQueue/UpNext. I can see in the logs that new episodes were found overnight, and in those podcasts, episodes were even properly archived and removed from the PlaybackQueue. But nothing was added, so no new episodes were queued to download."

Auto add to up next settings:

Log snippet they sent in:

2021-08-18 02:06:06 saving played up to 3373.714285714286 for episode Baylor's minor NCAA penalties + important message
2021-08-18 02:06:06 cleanupCurrentPlayer permanent? true
2021-08-18 02:06:10 deactiveAudioSession succeeded
2021-08-18 02:06:12 deactiveAudioSession succeeded
2021-08-18 02:23:18 Background refresh called
2021-08-18 02:23:36 Refresh complete found 4 new episodes
2021-08-18 02:23:37 UpNextSyncTask: Syncing Up Next, sending 0 changes, modified time 1629269396150
2021-08-18 02:23:37 UpNextSyncTask: Server returned not modified to Up Next sync, no changes required
2021-08-18 02:23:40 Received subscription status paid : 0, platform : 3, frequency : 1, giftDays : 0, expiryDate :  2020-10-20 00:00:00 +0000, supporterPodcasts : 0
2021-08-18 02:23:40 Sync succeeded
2021-08-18 02:53:30 Background refresh called
2021-08-18 02:53:56 Background refresh timed out
2021-08-18 03:24:14 Background refresh called
2021-08-18 03:24:18 Failed to clean up custom images from app group: The file "widget_images" couldn't be opened because there is no such file.
2021-08-18 03:24:23 Refresh complete found 4 new episodes
2021-08-18 03:24:25 UpNextSyncTask: Syncing Up Next, sending 0 changes, modified time 1629269396150
2021-08-18 03:24:25 UpNextSyncTask: Server returned not modified to Up Next sync, no changes required
2021-08-18 03:24:28 Received subscription status paid : 0, platform : 3, frequency : 1, giftDays : 0, expiryDate :  2020-10-20 00:00:00 +0000, supporterPodcasts : 0
2021-08-18 03:24:28 Sync succeeded
2021-08-18 03:59:50 Background refresh called
2021-08-18 04:00:16 Background refresh timed out
2021-08-18 04:30:55 Background refresh called
2021-08-18 04:30:59 Failed to clean up custom images from app group: The file "widget_images" couldn't be opened because there is no such file.
2021-08-18 04:31:08 Refresh complete found 5 new episodes
2021-08-18 04:31:12 UpNextSyncTask: Syncing Up Next, sending 0 changes, modified time 1629269396150
2021-08-18 04:31:12 UpNextSyncTask: Server returned not modified to Up Next sync, no changes required
2021-08-18 04:31:15 Received subscription status paid : 0, platform : 3, frequency : 1, giftDays : 0, expiryDate :  2020-10-20 00:00:00 +0000, supporterPodcasts : 0
2021-08-18 04:31:15 Sync succeeded
2021-08-18 05:01:02 Background refresh called
2021-08-18 05:01:28 Background refresh timed out
2021-08-18 05:31:18 Background refresh called
2021-08-18 05:31:23 Failed to clean up custom images from app group: The file "widget_images" couldn't be opened because there is no such file.
2021-08-18 05:31:30 Refresh complete found 8 new episodes
2021-08-18 05:31:31 UpNextSyncTask: Syncing Up Next, sending 0 changes, modified time 1629269396150
2021-08-18 05:31:32 UpNextSyncTask: Server returned not modified to Up Next sync, no changes required
2021-08-18 05:31:35 Received subscription status paid : 0, platform : 3, frequency : 1, giftDays : 0, expiryDate :  2020-10-20 00:00:00 +0000, supporterPodcasts : 0
2021-08-18 05:31:35 Sync succeeded
2021-08-18 06:01:32 Background refresh called
2021-08-18 06:01:34 Archive episode Good news, parents and guardians! Social media might be getting a little safer for kids., fireNotification? false, removeFromPlayer? true
2021-08-18 06:01:58 Background refresh timed out
2021-08-18 06:32:16 Background refresh called
2021-08-18 06:32:21 Failed to clean up custom images from app group: The file "widget_images" couldn't be opened because there is no such file.
2021-08-18 06:32:26 Refresh complete found 2 new episodes
2021-08-18 06:32:29 UpNextSyncTask: Syncing Up Next, sending 0 changes, modified time 1629269396150
2021-08-18 06:32:29 UpNextSyncTask: Server returned not modified to Up Next sync, no changes required
2021-08-18 06:32:33 Received subscription status paid : 0, platform : 3, frequency : 1, giftDays : 0, expiryDate :  2020-10-20 00:00:00 +0000, supporterPodcasts : 0
2021-08-18 06:32:33 Sync succeeded
2021-08-18 07:04:09 Background refresh called
2021-08-18 07:04:35 Background refresh timed out
2021-08-18 07:35:22 Background refresh called
2021-08-18 07:35:27 Failed to clean up custom images from app group: The file "widget_images" couldn't be opened because there is no such file.
2021-08-18 07:35:33 Refresh complete found 3 new episodes
2021-08-18 07:35:35 UpNextSyncTask: Syncing Up Next, sending 0 changes, modified time 1629269396150
2021-08-18 07:35:36 UpNextSyncTask: Server returned not modified to Up Next sync, no changes required
2021-08-18 07:35:38 Received subscription status paid : 0, platform : 3, frequency : 1, giftDays : 0, expiryDate :  2020-10-20 00:00:00 +0000, supporterPodcasts : 0
2021-08-18 07:35:38 Sync succeeded
2021-08-18 08:08:43 Background refresh called
2021-08-18 08:08:45 Archive episode Census shows pandemic's negative economic effect on LGBT community, fireNotification? false, removeFromPlayer? true
2021-08-18 08:08:45 PlaybackQueue: removing Census shows pandemic's negative economic effect on LGBT community episode
2021-08-18 08:08:46 Archive episode Consumer price index shows less inflation. The producer price index shows more. What's happening?, fireNotification? false, removeFromPlayer? true
2021-08-18 08:09:09 Background refresh timed out
2021-08-18 08:39:07 Background refresh called
2021-08-18 08:39:12 Failed to clean up custom images from app group: The file "widget_images" couldn't be opened because there is no such file.
2021-08-18 08:39:18 Refresh complete found 2 new episodes
2021-08-18 08:39:21 UpNextSyncTask: Syncing Up Next, sending 1 changes, modified time 1629269396150
2021-08-18 08:39:22 UpNextSyncTask: server copy matches our copy, nothing action required
2021-08-18 08:39:25 Received subscription status paid : 0, platform : 3, frequency : 1, giftDays : 0, expiryDate :  2020-10-20 00:00:00 +0000, supporterPodcasts : 0
2021-08-18 08:39:25 Sync succeeded
2021-08-18 09:12:57 Background refresh called
2021-08-18 09:13:23 Background refresh timed out
2021-08-18 09:44:21 Background refresh called
2021-08-18 09:44:26 Failed to clean up custom images from app group: The file "widget_images" couldn't be opened because there is no such file.
2021-08-18 09:44:33 Refresh complete found 5 new episodes
2021-08-18 09:44:36 UpNextSyncTask: Syncing Up Next, sending 0 changes, modified time 1629293962009
2021-08-18 09:44:36 UpNextSyncTask: Server returned not modified to Up Next sync, no changes required
2021-08-18 09:44:39 Received subscription status paid : 0, platform : 3, frequency : 1, giftDays : 0, expiryDate :  2020-10-20 00:00:00 +0000, supporterPodcasts : 0
2021-08-18 09:44:39 Sync succeeded
2021-08-18 10:14:22 Background refresh called
2021-08-18 10:14:23 Archive episode Aid for Afghanistan at risk as the Taliban advances rapidly, fireNotification? false, removeFromPlayer? true
2021-08-18 10:14:24 PlaybackQueue: removing Aid for Afghanistan at risk as the Taliban advances rapidly episode
2021-08-18 10:14:48 Background refresh timed out
2021-08-18 10:51:40 Background refresh called
2021-08-18 10:51:45 Failed to clean up custom images from app group: The file "widget_images" couldn't be opened because there is no such file.
2021-08-18 10:51:50 Refresh complete found 3 new episodes
2021-08-18 10:51:53 UpNextSyncTask: Syncing Up Next, sending 1 changes, modified time 1629293962009
2021-08-18 10:51:53 UpNextSyncTask: server copy matches our copy, nothing action required
2021-08-18 10:51:56 Received subscription status paid : 0, platform : 3, frequency : 1, giftDays : 0, expiryDate :  2020-10-20 00:00:00 +0000, supporterPodcasts : 0
2021-08-18 10:51:56 Sync succeeded

Siri: "Play My Podcasts" reverts playback speed

When using "Play My Podcasts" with Siri, the playback speed reverts to 1x.

The following Siri commands, on the other hand, don't revert the playback speed:

  • "Play [podcast name] on Pocket Casts"
  • "Resume Pocket Casts"
  • "Play Pocket Casts"

Steps to Reproduce

  1. Set an episode to play at a speed other than 1x
  2. Use the "Play My Podcasts" command with Siri
  3. Episode will play at 1x

Additional Information

Apple Watch: app is not downloading over WiFi

Issue

A user is unable to get the Watch app to download over wifi when iPhone is in airplane mode. They have the most recent iOS and Watch versions (iPhone 12 and Apple Watch 6). They have tried signing out of the phone app, then back in, restarting the Watch, and left charging > 20 minutes.

Some additional information from this user:

I have a new watch now, still doesn’t work.

I am trying to use W as play source (I use this while running and not carrying a phone.).

The phone is in airplane mode when I try direct download to watch.

Podcasts will load to watch when phone is on, albeit quite slowly. I presume that is through Bluetooth.

This is a feature that used to work and that I used regularly. I find it’s disappearance frustrating.

i18n: Episode Errors are stored as user displayed strings

Changing the language on the device will retain the message in the previous language.

  1. Set the device to a specific language
  2. Generate an episode error by taking the device offline and then attempting to play an episode that hasn't been downloaded.
  3. Switch to a new language
  4. Notice that the error is still in the previous language.

Playback: audio stuttered after app was closed or iPhone was locked during video playback

It was reported in 4894605-zen that when the app was closed or the phone was locked during a video podcast playback, there was a glitch in the audio playback. I was able to reproduce this with a few random videos.

User's recording

IMG_0209.MOV

Steps to reproduce

  1. Play a video podcast (e.g. https://pca.st/wzt0vrb6)
  2. Close the Pocket Casts app (let it run in the background)
  3. Noticed audio stuttered in playback
  4. Open the Pocket Casts app again, noticed another audio stuttering
  5. With the Pocket Casts app in the foreground, lock the phone
  6. Noticed another audio stuttering

One of the common events I found in the debug logs is this:

2022-04-04 13:55:12 Playback was paused by iOS, but it looks like we're still meant to be playing, calling play

I'm confirming with the listener if this happens after an iOS update, but it sounds very much like an issue caused by Apple. Not sure if there's much we can do, but opening this report for tracking purposes.

OS: iOS 15.4.1
App version: 7.19.3
Device: iPhone 13 Pro Max and iPhone 11

Accessibility: Improvements and suggestions

I identified several areas in the app where accessibility can be improved. I put more details in this google doc, which you should have access to with this link.

  • Dynamic Text Size needs to be supported throughout the app, the only place I saw support for it was in the navigation bar.
  • When reading over a podcast episode with VoiceOver it reads the m in 2m as meters instead of minutes. I believe this may be fixed when I run it from Xcode but want to make sure it ships this way. Also, suggest changing the m to min so it is clearer to say that it's minutes instead of meters.

Meters

  • On the Discover Tab the plus button for adding a subscription is shown as “Discover add”, which sounds like an internal name for the button. This should say subscribe like the plus button like the other podcasts that are being shown on this page.

Discover Add

Clear previous connection errors

  • Related to #37,

Since network connectivity errors are typically transient, consider clearing them for episodes when the network is back into a known-good state.

Expected behavior

Network connectivity error is cleared for episodes showing it.

Actual behavior

Network connectivity error persists until the user explicitly retries on a per-episode basis.

Steps to reproduce the behavior

  1. Go into 100% loss mode using a tool such as network link conditioner
  2. Attempt to play an episode
  3. Wait for the connectivity error to be shown (e.g. "Check your Internet connection and try again.")
  4. Observe that the error state is retained between app restarts for all episodes that show it
  5. Observe that retrying playback with a known-good network state does not affect any other episodes showing the error

Playback: audio skipped

Initially reported p1650892587223279-slack-C02A333D8LQ

What the listener said:

I was just listening to a 2hour podcast and at about 1hr10min it just skipped back to the beginning. Yet the progress bar still showed that the episode was at 1:10!?

It happened when they played the Biblical Series: Genesis 1 - Chaos & Order episode.

What has been done so far

  • Enabled Legacy Bluetooth Support
  • Disabled Intelligent Playback Resumption
  • Noticed this happens on Bluetooth and over phone speakers

Siri: with "Hey Siri, what's playing?", Siri responds with "This is [episode title] by [day of the week published]."

When using "Hey Siri, what's playing?" with Siri, Siri answers with "This is [episode title] by [day of the week published]."

The expected response should be "This is [episode title] by [podcast author]."

Steps to Reproduce

  1. Play an episode
  2. Ask Siri, "Hey Siri, what's playing?"
  3. Siri will respond with "This is [episode title] by [day of week published]."

Additional Information

  • Reported in #5263803-zen

AirPlay/HomePod: Up Next Queue Doesn't Continue Playing

What the listener said:

Up Next won’t play next podcast in queue if connected to HomePod speakers. I can only listen to my queue if I don’t connect to speakers. Otherwise it stops after the currently playing episode.

I’m connecting to my HomePod via Airplay. Pocketcasts is the only app that has this issue. Only the episode I actively press play will play.

This has been happening for weeks with every podcast.

5253618-zen

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.