Launching Bezel 4.0
Bezel 4.0 introduces wireless mirroring! The most requested feature since we started. Mirror your iPhone or iPad to your Mac without any cables.
Experts on Apple platforms.
Bezel 4.0 introduces wireless mirroring! The most requested feature since we started. Mirror your iPhone or iPad to your Mac without any cables.
Errors designed for an SDK are different than errors for an app, because errors become API contracts. We describe the pattern we use in RecordKit.
Every Swift error you throw serves four audiences at once: users, your catch blocks, the debugger, and Sentry. We have a pattern to deal with all of them.
Swift tuples don't conform to Equatable. We use parameter packs to create a tuple-like struct with Equatable conformance.
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.
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.
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.
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.
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.
`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?
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.
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.
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.
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.
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.
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.
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.
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.
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.
Observing display reconfiguration changes on macOS. Moving from C function-pointer based API to a modern Swift AsyncStream.
Moving from a C function-pointer based callback API to Swift closures with generics. And a look at the future with parameter packs.
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.
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.
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.
A public service annoucement for those using ScreenCaptureKit in an app that also needs to run on macOS < 12.3 (Monterey).
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.
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.
On older macOS versions, ScreenCaptureKit isn't available. We created an example project demonstrating screen recording using the older AVCaptureScreenInput.