Swift tuples don't conform to Equatable. We use parameter packs to create a tuple-like struct with Equatable conformance.| Nonstrict
Today we're launching Bezel 3.0! 🚀 Our Mac app to mirror any iPhone, iPad, Apple TV or Vision Pro onto your desktop. Adding a support for full screen, a new welcome screen and translated to 9 languages. To top it off we have a brand new icon.| Nonstrict
Every one in 24 times, when trying to record the camera of the Apple Studio Display, no video is produced and the camera turns itself off. The camera just silently fails without reporting any error.| Nonstrict
In certain situations, when recording audio on macOS using AVCaptureSession and AVAssetWriter, the resulting audio file can sound distorted. This issue is caused by AVCaptureSession reporting CMSampleBuffers of different audio formats.| Nonstrict
Stretching an audio file to a certain length can be useful to fix lipsync issues. Our previous approach didn't work for stretching small durations over a large amount of time. We now have a new solution.| Nonstrict
Audio capture on macOS can sometimes contain gaps. This article explains how to detect and handle these gaps to maintain proper audio/video sync when recording to files.| Nonstrict
`HKWorkoutSession` will throw 'Remote session delegate is not set up' errors at you when sending data too soon. So how do we share data before starting the actual workout?| Nonstrict
The local network permission has, in contrast to other permissions, no simple way to request the permission or check its autorization state. We use `NWBrowser` to roll our own permission helper.| Nonstrict
Today we launch our app Bezel for Apple Vision Pro! 🚀 Bezel makes your iPhone appear as a 3D model in your space with the screen wirelessly mirrored.| Nonstrict
On iOS, Darwin Notifications can be used to send and receive notifications between an app and its extensions. We wrap the old C-style functions to be easier to use from Swift.| Nonstrict
Supporting file dragging in macOS is a breeze with SwiftUI using the new Transferable protocol. However only having a FileRepresentation doesn't work for apps like Finder.| Nonstrict
Timed metadata can be written to a track using AVAssetWriter. However if you append only one AVTimedMetadataGroup the results will be unexpected due to buggy behaviour.| Nonstrict
It is very useful, but also quite a pain to work with custom metadata in mp4 files with AVFoundation. Let's bridge the undocumented gaps and get it to work.| Nonstrict
Stretching an audio file to a certain length can be useful to fix lipsync issues. It isn't immediatly obvious how to do this using Swift. Here is a simple way to do it.| Nonstrict
Today we launch our macOS app Bezel! 🚀 It helps you to show an iPhone on your Mac. Just plug it in the cable and it shows up, simple as that.| Nonstrict
Mathijs gave a talk at CocoaHeadsNL about our journey as a company so far. What have we done in the last year, and what are our dreams for the future.| Nonstrict
Observing display reconfiguration changes on macOS. Moving from C function-pointer based API to a modern Swift AsyncStream.| Nonstrict
Moving from a C function-pointer based callback API to Swift closures with generics. And a look at the future with parameter packs.| Nonstrict
Segment data delivered to AVAssetWriterDelegate is leaked when the delegate is implemented in Swift. You either need to implement the delegate in Objective-C or deallocate the data yourself. This issue is fixed by Apple in macOS 13.3.| Nonstrict
Using AVAssetWriter to create CMAF compliant segments in realtime is unstable on Intel macs when the frame rate is dynamic. You either need to switch away from CMAF, disable expectsMediaDataInRealTime or ensure a stable frame rate.| Nonstrict
A public service annoucement for those using ScreenCaptureKit in an app that also needs to run on macOS < 12.3 (Monterey).| Nonstrict
Saving a screen capture to disk has some interesting edge cases when using ScreenCaptureKit. The documentation and WWDC videos don't really cover using the captured frame samples. We created an example.| Nonstrict
Building a commandline tool using Swift concurrency isn't as straight forward as you'd hope. Running on macOS pre-12 linker errors appear and back deployment is undocumented. We figured it out and documented it in this article.| Nonstrict
On older macOS versions, ScreenCaptureKit isn't available. We created an example project demonstrating screen recording using the older AVCaptureScreenInput.| Nonstrict
The new macOS introduces three new features: Presenter Overlay to add your webcam to a screen share, a new screenshot API, and a built-in picker UI to select a window or screen to share.| Nonstrict