Release Notes for v4.13.1 (2025.07.21)

 

Overview

 

This release, more than any other in recent memory, includes A LOT of small changes, and notably no large changes. I still have a bunch of behind-the-scenes code changes I want to make that won’t mean anything to the end user, but will make my life easier. It has been nearly four weeks since the v4.13.0 release, so its time to cut a new one.

 

Also, I have a baby due two days ago. This makes it important to cut this release sooner rather than later, as you might imagine.

 

Changes

 

Fixes

 

- Fixes (maybe) a crash related to CMCServiceBrowser, again.

- Fixes (maybe) a crash related to the Events View Controller.

- Fixes (maybe) a crash associated with updateReachable(). It still isn't entirely clear to me what the cause of the crash is.

- Fixes a DataStore issue in userReadAll() where the createdOnOrAfter argument was being ignored, and consequently it was just reading EVERY user record.

- Fixes a crash associated with using PenguinUser.userId without first initializing the keys.

- Fixes a Streamie Cloud recording issue where the handler for starting an upload was accidentally deleted.

- Fixes a CMCTimer2 logging issue where the debug parameter was being ignored.

- Fixes a number of crashes associated with CMCTimer2 by rejiggering the entire class with better internal locking.

- Fixes a Mac Catalyst issue where a horizontal line was being drawn as a shadow on a toolbar.

- Fixes an issue handling push notifications related to webhooks where we were looking in userInfo instead of aps. This issue prevented Streamie from reacting correctly when a webhook was modified on another device.

- Fixes an issue with CaptureStreamingSession where everything would fail if run on a Mac with no audio input source. Now, errors related to setting up audio capture will be ignored.

 

Adds

 

- Adds a Store tab. There used to be a Store tab, and now it is back again. I've moved the various upgrade screens out of Settings => Purchases => Upgrade to this new tab.

- Adds the Twitter tracking pixel to the Web Help service.

- Adds support for a new per-member setting, "remote first" which causes Streamie to try a remote connection first instead of a direct connection. This was a customer request.

- Adds support for editing shares -- specifically, for choosing a new camera for a given share.

- Adds iOS, tvOS, iPadOS, macOS 26 version number normalization support to Rockhopper.

- Adds monthly subscription support. Woo!

- Adds silent audio generator support to Capture Streaming Source. I'm not sure what I was doing wrong before (possibly dropping the 4-byte AAC output packets?), but with the help of ChatGPT, we seem to have a solution that doesn't create audio that makes clicking noises. With these changes, Capture Streaming Session will use the built-in audio capture if audio is enabled on the source, and it will fall back to the new silent audio generator. UPDATE: I was wrong. YouTube videos still end up with a clicking audio sound.

- Adds a string error conversion for the CaptureStreamingSession Error type.

- Adds new text block at the top of the StoreProducts screen, which is the main screen in the new Store tab. The text block gives some introductory details about the Streamie Store.

 

Updates

 

- Updates the Permissions to include Functions (on the Home screen) and Webhooks (in the Settings tab).

- Updates UniFiService and the app coordinators to start / stop all of the service instances when the app needs to pause / resume.

- Updates the Logger so that it only does the optimized writes for Penguin, and not for Streamie. I want the output written to the log right away to prevent log data loss.

- Updates Streamie's mechanism for deciding if it is in "demo mode" or not; a single global now handles this responsibility instead of an annoying heuristic.

- Updates each of several error types with text descriptions. There's about sixty more to do.

- Updates CMCDiscovery.Browser to start / stop when backgrounding / foregrounding the app.

- Updates the Help screen so that the About, Welcome and Release Notes buttons present their content by pushing it onto the navigation stack instead of presenting a pop-up.

- Updates the Account => Webhooks screen so that it auto-reloads when a webhook changes.

- Updates the Account => Shares screen so that it'll auto-refresh whenever it receives a notification that a share has changed.

- Updates how ChinstrapPenguinServer handles device offline alerts: instead of individual timers, we now set a deadline and a single timer periodically checks for pastdue deadlines.

- Updates the web Help Service to support the new monthly option in the pricing matrix. See: https://help.streamieapp.com/a/pricing

- Updates the product description text shown on the Settings => Purchases => Products screen.

 

Improves

 

- Improves debug logging for starting / stopping / pausing / resuming the app.

- Improves the performance when loading the root directory of a file server by reading in parallel all of the table-of-contents files.

- Improves the error handling in Streaming Session related to the video encoder. Previously, we only handled the situation where the encoder fails because we requested a codec that is not available (like HEVC on an older device). We still do that, but now all other errors result in the encoder being restarted. We may end up needing to throttle this, I suppose. The main situation in which we may need to handle an encoder restart is when we're recording to an output quality other than "original".

- Improves ChinstrapService, CameraRecorder with a pause() and resume(). Previously, it would continue to run all of the reachability checks for cameras and file servers, which we really don't need it doing while the app is supposed to be paused (in the background).

- Improves CameraRecorder to prevent slowness of writing from causing increasingly long recording files. The ten minute cycle timer now strictly fires every ten minutes. If the previous write has not concluded, then the next set of recordings are purged. This came up because a customer's SSD was dying and it could not write fast enough, which at the time caused increasingly long recording files, which subsequently took even longer to write, causing a cascading failure situation.

- Improves Stripe support for processing subscriptions or purchases with a zero balance (such as when using a 100% off coupon).

- Improves the redirect that occurs when tapping on a subscription: instead of sending the user to the Stripe invoice page, we send the user to the subscription management page.

 

Other

 

- Increases the message label font size in the alert controller. The message font size is now the same as the title. The title is bold, which separates it from the message.

- Added and then removed PostHog from the app and website. I thought it might be useful, but it was not.

- Changes the updateFeatures() function so that the "relayAccess" feature is enabled for paid accounts. This enables those accounts to remove access their devices even if both ends of the connection do not have UPnP support.

- Changes the updateFeatures() function so that it imposes a 30-day period for unfettered Streamie use instead of 14 days.

- Changes the expired purchase grace time from seven days back down to three.

- Removes some deprecated code related to Streamie Cloud recording.

- Replaces the settings image button with an "Options" label button in the iOS streamer navigation bar. I had been meaning to do this for ages, and just never got around to it until now.

- Refactors all of the notification handling code out of CMIAppCoordinator, CMTAppCoordinator into the new CMCNotificationHandling protocol.

- All app-update messages now display for an entire day, essentially making them permanent so that they have to be manually dismissed. Related to this, the toggle for disabling the alerts about an app update being available has been removed.

 

Details

 

Created: 1 week ago

Updated: 4 days ago

Author: Curtis Jones

Topics: Release Notes

 

About Streamie

 

Streamie provides a best-in-class user experience on your iPhone, iPad, Apple TV and Apple Silicon Mac, with an intuitive user interface that makes it simple to discover, stream, record, monitor and share your HomeKit, Google Nest, Ubiquiti UniFi Protect and ONVIF-compatible IP and RTSP cameras. Streamie keeps you informed with motion event notifications and it works with most cameras using its advanced audio and video codec support. You can watch your cameras from anywhere, record 24/7 to your private NAS, remotely manage multiple locations, device permissions and seamlessly synchronize settings across your devices; configure Hubitat smart home automations, live stream to YouTube and rely on the in-app technical support system when you need help -- and you can also reach us by phone. Download Streamie today for all of your CCTV needs.