Explore the integration of media technologies within your app. Discuss working with audio, video, camera, and other media functionalities.

All subtopics
Posts under Media Technologies topic

Post

Replies

Boosts

Views

Activity

Camera app best practices
As a reminder, the recommended approach to monitor camera rotations, including on upcoming hardware, is to use the AVCaptureDevice.RotationCoordinator / AVCaptureDeviceRotationCoordinator API. In many common scenarios on iPhone Duo, proper use of the rotation coordinator is the only way to ensure that your camera previews and captures use the orientation expected by the user. AVCaptureVideoOrientation has been deprecated as of iOS 17.0 and iPadOS 17.0. When switching cameras in your app, make sure to create a rotation coordinator for that device. To ensure that your app has implemented the rotation coordinator API correctly, you should test different orientations and sizes of your app on an iPad with Stage Manager enabled. Additional information: Sample Code: Supporting device rotation in your camera app Tech Talk: Build a great camera experience for iPhone Duo WWDC23 session: Support external cameras in your iPadOS app
0
0
473
4w
iOS 27 Public Beta 6: CallKit UI remains after ending two outgoing calls in modified Apple Speakerbox sample
Summary On an iPhone 17 running iOS 27 Public Beta 6, the system CallKit UI remains visible after ending two outgoing calls individually. This is reproducible using Apple's “Making and Receiving VoIP Calls with CallKit” sample (Speakerbox), with only two minimal changes to support multiple simultaneous calls. After both calls end, Speakerbox displays “No Calls”, but the system CallKit UI still shows 111, and the Dynamic Island retains a call-related status. Environment Device: iPhone 17 (physical device) OS: iOS 27 Public Beta 6 App: Apple's Speakerbox sample with the modifications below Backend: None. The sample's original simulated calls are used; no external VoIP SDK is involved. Changes to the original sample Only two files were modified. 1. ProviderDelegate.swift Added: providerConfiguration.maximumCallGroups = 3 The original setting remains unchanged: providerConfiguration.maximumCallsPerCallGroup = 1 2. SpeakerboxCallManager.swift Before starting a new outgoing call, hold existing calls that are not already on hold. The hold actions and new start action are submitted in the same transaction: let transaction = CXTransaction() for call in calls where !call.isOnHold { transaction.addAction( CXSetHeldCallAction(call: call.uuid, onHold: true) ) } transaction.addAction(startCallAction) requestTransaction(transaction) No changes were made to the simulated connection timing, startedConnectingAt/connectedAt reporting, CXEndCallAction handling, call removal, or audio handling. The original end-call handler finds the call by UUID, calls endSpeakerboxCall(), fulfills the end action, and removes the call from the app's list. Steps to reproduce Launch the modified Speakerbox sample. Create an outgoing call to 111. Create a second outgoing call to 222. The first call is placed on hold. Wait until Speakerbox shows 111 — On Hold and 222 — Active, with call durations displayed. In Speakerbox, select 222 - End Call. Select 111 - End Call. Confirm that Speakerbox displays “No Calls”. Open the app switcher and inspect the system CallKit UI. Also inspect the Dynamic Island. Open the remaining system call UI and tap End. Expected result After both calls end, the system should no longer display an ongoing call in the CallKit UI or Dynamic Island. Actual result Speakerbox displays “No Calls”. The system CallKit UI continues to display the first call, 111. The Dynamic Island continues to show a call-related “Hold” status. Tapping End in the remaining system call UI does not clear the residual state during the recording. The issue occurs even after waiting for both simulated calls to connect before ending them. This is the system-provided CallKit UI, not an active-call view implemented by the sample app. Reproduction video Recording: 4b03d30e507b874d9c19c0523632e9d6.mp4 00:24–00:26 (approximately): Both calls are present; 111 is on hold and 222 is active. 00:26–00:31 (approximately): End 222, then end 111. Speakerbox displays “No Calls”. 00:31–01:03 (approximately): The system CallKit UI and Dynamic Island retain the call state despite further attempts to end it. Questions Is this an iOS 27 regression, or is additional lifecycle handling required when extending Speakerbox to support multiple calls? Please advise what additional diagnostics would help investigate why the system UI retains an ongoing-call state after both calls have been ended using the sample's original end-call handling. Source and video downloads https://github.com/willbin/callkit-ios27-repro/releases/tag/repro-v1
6
0
1.2k
19h
AVAudioIONode presentationLatency discrepancy
The documentation for -[AVAudioIONode presentationLatency] states that it accounts for both kAudioDevicePropertyLatency and kAudioStreamPropertyLatency. On my MBP the following values are reported for the speakers in the output scope: kAudioDevicePropertyLatency: 11 kAudioStreamPropertyLatency: 390 At the device's nominal sample rate of 44.1 kHz that equates to approximately 9.09 msec. However, the output node on a running AVAudioEngine reports presentationLatency as approximately 0.25 msec. This appears to be the device latency only. Is it necessary to compensate for the stream latency manually despite the documentation?
0
0
103
21h
Media Extension format reader for MKV/WebM in several apps of one developer – appropriate use and conflicts?
I'm preparing several sandboxed macOS apps (macOS 26 and later) for the Mac App Store and would like to add Matroska/WebM support through a Media Extension format reader. Before implementing it, I'd like to clarify a few points. The apps work only with local video files the user opens or adds: a player for many videos at once (video wall), a practice player with loops and markers, an app for precise trimming and export, and a catalog of the user's video library with thumbnails and duplicate detection. None of them is network-facing. Plan: one format reader for Matroska and WebM (own implementation of RFC 9559, no third-party code), embedded as an ExtensionKit bundle. Video is decoded by the system decoders (H.264, HEVC, VP9 after VTRegisterSupplementalVideoDecoderIfAvailable, AV1 where available); no own video decoder. Each app calls MTRegisterProfessionalVideoWorkflowFormatReaders() and VTRegisterProfessionalVideoWorkflowVideoDecoders() at launch and shows a notice with a link to System Settings when the extension is disabled (AVErrorMediaExtensionDisabled). Questions: MTProfessionalVideoWorkflow.h and VTProfessionalVideoWorkflow.h say the registration functions are intended for applications supporting professional video workflows. Is it acceptable to call them from apps like these, which serve video editing, review and library management, but not a broadcast or camera workflow? Users may buy only one of the apps, so I'd embed the same format reader (same ClassImplementationID and CFBundleVersion, bundle identifier prefixed by each host app) in every app. Is that supported? When are AVErrorMediaExtensionConflict and kVTExtensionConflictErr returned, and how can they be avoided? Does the enable switch in System Settings apply per ClassImplementationID or per host app? Would a user who installs a second app have to enable the extension again? Is there a supported way to open System Settings directly at General > Login Items & Extensions > Media Extensions from an app? Are there App Review requirements specific to apps that embed Media Extensions, beyond guidelines 2.4.5 and 4.4? Thanks in advance.
2
0
139
23h
Is MusicKit playback allowed on Meta Quest, and can a preview play as background music for a profile panorama?
I'm building Welink, a mixed-reality app for Meta Quest where people who opt in see each other's profile cards in person. Users connect Apple Music through MusicKit JS, and their card shows recently played songs with Apple Music links, attribution and tap-to-play 30-second previews (streamed, never saved). A few policy questions: Is MusicKit (MusicKit for Android or MusicKit JS in the headset browser) supported and permitted on Meta Quest's Android-based OS for full playback by Apple Music subscribers? Guideline 5.2.5 says previews can't be used for "entertainment value." Would playing a user-chosen song (preview, or the full song for subscribers) when a viewer steps into that person's 360° panorama be allowed, given that the viewer starts it, can stop it, and full attribution is shown? Is it fine to show a user's recently played songs (metadata and cover art) to people they meet, when the user turned that on and can turn it off at any time? Can previews and cover art be cached on-device for about 24 hours for offline demos? Can the Apple Music panel appear in a public demo video, following the Apple Music Identity Guidelines? Any pointers to the right docs or team would be appreciated. Thanks!
0
0
65
1d
MusicKit JS authorize() returns AUTHORIZATION_ERROR "Unauthorized" (no Music User Token) — catalog works
Hi all — hoping someone has hit this. Our MusicKit JS (v3) web app calls authorize() and it rejects with AUTHORIZATION_ERROR / "Unauthorized" (no Music User Token is issued), even though the same developer token returns HTTP 200 for catalog requests (/v1/catalog/us/search) — so the token itself is valid. Setup (all verified): MusicKit JS v3 from js-cdn.music.apple.com/musickit/v3/musickit.js; MusicKit.configure() succeeds, storefront resolves to "us". Developer token is ES256, valid, and includes the origin claim for our exact site origin. Our MusicKit key is enabled for Media Services and tied to a Media ID that has MusicKit enabled. Referrer-Policy: strict-origin-when-cross-origin. Repro: sign in with an active Apple Music subscriber and tap Allow -> authorize() rejects. Reproduces for two subscriber Apple IDs, in Chrome and Edge, with third-party cookies allowed. Error object: { name: "AUTHORIZATION_ERROR", message: "Unauthorized", isMKError: true }, thrown inside musickit.js during the authorize() flow. The served MusicKit build is a prerelease (3.2526.0-prerelease.x). We've ruled out the usual suspects on our side (origin claim, referrer policy, token validity, API version, cookies, and portal provisioning). Has anyone resolved this, or is there an additional server-side enablement needed for a team/Media ID to issue web user tokens? Also filed as FB23587284. Thanks!
4
0
1k
1d
macOS 27 regression: HDMI + DisplayPort Multi-Output audio fails with Core Audio error 1937010544
Hi, I believe I have found a Core Audio regression in macOS 27. This exact hardware configuration worked correctly on macOS 26, and the issue started immediately after upgrading to macOS 27. Hardware: Mac mini M2 2 × MSI MP243X monitors Monitor 1 connected via HDMI Monitor 2 connected via DisplayPort Both monitors expose a 2-channel audio output to macOS On macOS 26: I used Audio MIDI Setup to create a Multi-Output Device containing both MSI MP243X audio outputs. Audio played simultaneously through both monitors without any issues. On macOS 27: Both audio devices are still detected correctly and both work perfectly when selected individually: HDMI only: WORKS DisplayPort only: WORKS HDMI + DisplayPort simultaneously: FAILS This is reproducible even immediately after a full reboot. When I create a new Multi-Output Device containing both MSI outputs and select it as the system output, audio playback cannot start. For example: afplay /System/Library/Sounds/Glass.aiff returns: Error: AudioQueueStart failed ('stop') I captured Core Audio debug logs while reproducing the problem. Core Audio initially reports that StartIO succeeded, but the physical display audio device then fails to establish a timeline. Relevant log messages include: HALS_IOEngine2::_StartIO succeeded Device 3669B540-0000-0000-2623-0104A5351D78 is not running. could not establish a timeline after waiting 10000000 microseconds stopping with error 1937010544 StartIOThread: the IO thread failed to start, Error: 1937010544 I have already tested the following: Both devices at 44.1 kHz / 24-bit Both devices at 48 kHz / 16-bit Recreating the Multi-Output Device from scratch Using the HDMI device as clock source Using the DisplayPort device as clock source Different drift correction configurations Restarting coreaudiod Full macOS reboot Testing both outputs individually immediately after reboot Alternative multi-device audio routing software The behavior is always reproducible. Each MSI MP243X audio endpoint works correctly by itself. The failure only occurs when both HDMI and DisplayPort audio endpoints are opened simultaneously. system_profiler correctly detects both devices at 48 kHz: MSI MP243X Output Channels: 2 Current Sample Rate: 48000 Transport: HDMI MSI MP243X Output Channels: 2 Current Sample Rate: 48000 Transport: DisplayPort This does not appear to be a problem with either monitor or connection individually, because both outputs continue to work independently. The important difference is the macOS version: macOS 26: HDMI + DisplayPort Multi-Output = WORKING macOS 27: HDMI only = WORKING DisplayPort only = WORKING HDMI + DisplayPort Multi-Output = FAILS with AudioQueueStart 'stop' / Core Audio error 1937010544 No hardware, monitor, cable, or connection changes were made between the working macOS 26 configuration and the macOS 27 configuration. This therefore appears to be a regression in the Core Audio/display-audio path introduced with macOS 27 when two display audio endpoints (HDMI + DisplayPort) are opened simultaneously. Has anyone else been able to reproduce this on macOS 27, particularly on Apple Silicon? I can provide the complete coreaudiod logs and run additional Core Audio diagnostics if needed. Additional isolation tests: Both monitors can remain physically connected to the Mac at the same time. With both HDMI and DisplayPort connected: Selecting the HDMI MSI MP243X as the only output works correctly. Selecting the DisplayPort MSI MP243X as the only output works correctly. Opening both audio endpoints simultaneously causes the failure. Therefore, simply having both displays connected does not trigger the issue. The failure appears specifically when Core Audio attempts to run both display-audio endpoints at the same time. I also tested this using third-party multi-device audio routing implementations instead of relying only on Audio MIDI Setup. The same behavior occurs: either MSI MP243X can be opened and used independently, but attempting to route audio to both devices simultaneously fails. This suggests that the issue is below the Multi-Output Device configuration itself and may be related to starting/synchronizing two display-audio IO engines simultaneously. During the failure, the Core Audio log sequence is particularly interesting: The physical device is detected normally. The audio format is configured successfully. Core Audio reports that StartIO succeeded. The device subsequently reports that it is not running. Core Audio waits 10 seconds for a timeline. Timeline establishment fails. The IO thread terminates with error 1937010544 ('stop'). One captured conversion path was: 2 ch, 48000 Hz, Float32, interleaved -> 2 ch, 48000 Hz, Int16, interleaved so both sides were operating at 48 kHz during this test. Another important observation is that restarting coreaudiod does not resolve the simultaneous-output problem. A complete reboot also does not resolve it: immediately after a fresh boot, before launching any third-party audio-routing software, both physical outputs work individually but a newly created Multi-Output Device still reproduces the failure. This makes the issue highly reproducible on this machine. Minimal reproduction: Boot macOS 27 with both MSI MP243X monitors connected. Open Audio MIDI Setup. Verify both MSI MP243X devices work independently. Set both devices to 48,000 Hz. Create a new Multi-Output Device. Select both MSI MP243X devices. Select the new Multi-Output Device as the system audio output. Run: afplay /System/Library/Sounds/Glass.aiff Expected result: The sound is reproduced simultaneously through both monitors, as it was on macOS 26. Actual result: Error: AudioQueueStart failed ('stop') Switching the system output back to either individual MSI MP243X restores audio playback. The problem can then be reproduced again by selecting the Multi-Output Device.
7
9
2.1k
1d
MusicTokenRequestError.unknown for some authorized, subscribed users
A small number of our users can’t connect Apple Music because DefaultMusicTokenProvider.userToken(for:options:) always throws MusicTokenRequestError.unknown. Most users connect without problems and we can’t reproduce the failure on any of our own accounts. Flow: let status = await MusicAuthorization.request() // .authorized let subscription = try await MusicSubscription.current // canPlayCatalogContent == true let provider = DefaultMusicTokenProvider() let developerToken = try await provider.developerToken(options: []) // succeeds let userToken = try await provider.userToken(for: developerToken, options: []) // throws .unknown On failure we retry once with options: .ignoreCache for both the developer token and the user token. The retry fails in the same way. What we see on affected devices: MusicAuthorization.currentStatus == .authorized MusicSubscription.current.canPlayCatalogContent == true The developer token is returned successfully. userToken(for:) throws MusicTokenRequestError.unknown. The NSError has code 0 and the localized description “Unknown error”, and there is no NSUnderlyingError. The ignoreCache retry fails after anywhere from about 10 ms to 2.5 s, so it sometimes appears to go out to the network. For a given account it fails every time: across days, app versions, and after reinstalling both our app and the Music app. Apple Music plays normally in the Music app for these users. Ruled out so far: iOS version: seen on iOS 26.6.1 and 27.2. Device model: seen on iPhone 13 and iPhone 14 Plus. Region: seen in Hungary, Italy, Romania and Japan. Subscription type: one affected user has an individual trial. A family member with her own individual trial on a separate account connects without problems. Family Sharing in general: family plan members connect fine for us. Questions: What conditions cause userToken(for:) to return .unknown instead of a specific case such as .userNotSignedIn, .permissionDenied or .privacyAcknowledgementRequired? Is there a way to get more detail about the cause? Is there a step affected users can take to fix it?
3
1
525
1d
Thin border around VideoPlayer
A thin gray border appears around assets presented using VideoPlayer. It was tested on iPhone 8, iPhone 13 mini, and iPhone 15, and the border only appeared on the 13 mini. The iOS version didn't matter, we checked the 13 mini on both iOS 18 and iOS 26 and the border appeared on both. I created a minimal version of the app with just the VideoPlayer and the asset and the frame still appeared. We tried different assets and it was visible on all of them. import SwiftUI import AVKit struct ContentView: View { private let player = AVPlayer(url: Bundle.main.url(forResource: "sample", withExtension: "mp4")!) var body: some View { VideoPlayer(player: player) .frame(width: 300, height: 200) } }I found someone that had the same exact problem on Reddit and StackOverflow: https://www.reddit.com/r/swift/comments/8s87hm/weird_borders_around_avplayerviewcontroller/ https://stackoverflow.com/questions/50927561/weird-borders-around-avplayerviewcontroller and their solution included setting: playerLayer.shouldRasterize = true playerLayer.rasterizationScale = UIScreen.main.scaleThis fixed the issue but isn't suitable for our app due to offscreen rendering performance. They also found that issue on other devices, noting: "After testing this code on multiple devices (actual physical devices, not simulators), this bug appears to happen only on Plus devices (I tested it on i8 on iOS 11, i8+ on iOS 11, iX on iOS 11 and i6+ on iOS 10)." The bug doesn't appear on simulator, isn't visible on a screenshot, the frame disappears when using accessibility zoom. When we encoded the video file to Apple ProRes the border disappeared, but the size of the video bumped from 342 KB to 6.3 MB so we couldn't do that. I'm attaching photo from this person's post since our issue looked exactly the same. Has anyone had a similar issue and maybe found another workaround?
1
1
274
2d
macOS 27.2 makes AUv3 plug-ins completely useless as soon as the user accesses a button with a native submenu.
https://youtu.be/HnNGgYZQBvYJust submitted a bug report FB25497228, and posting it here in hopes to get Apple engineers' attention because it's such a bad bug that macOS 27.2 introduced, and don't think it has a workaround unless Apple fixes it. This wasn't an issue in 27.0. Summary: Opening a native submenu in an out-of-process AUv3 plug-in and dismissing it without selecting anything will make the plug-in UI completely unresponsive to mouse input, and any animation will stop also. Only restart solves it. I can reproduce this with Mela in both Logic Pro and Ableton Live 12. I've attached a demo project to the bug report. It's Xcode Audio Unti extension template with a small modification, just added a button with a submenu. Mela can be found here if needed: https://apps.apple.com/us/app/mela-auv3-synth-fx-midi/id1668299428 Steps to reproduce with the attached project Load Mela as an AU instrument in Logic Pro or Ableton Live Open a factory patch. Open a module’s Actions menu (ellipsis buttons) Hover over Insert or Replace until the submenu appears, then dismiss it without selecting anything. Expected result Mela's UI continues to be interactive, e.g. parameters can be easily adjusted and modulation animations continue to work. Actual result No interaction can be performed, wether adjusting a prameter or dragging a module or pressing a button. Animations also stop. This bug renders my plug-in completely useless on macOS as it makes heavy use of submenus. Please fix it! Here's a link to the video demo of the issue: https://youtu.be/HnNGgYZQBvY
0
0
65
2d
Technical question about iPhone Voice Memos microphone processing for music recording
Hey, I’m an independent musician and producer experimenting with recording acoustic instruments using the iPhone’s built-in microphones and Voice Memos. I’ve found that the recordings have a particularly pleasing tonal balance and dynamic character, sometimes more so than recordings made with my conventional studio microphones. I’m interested in understanding what processing, if any, contributes to this sound, so I can experiment with recreating it in my recording workflow. Specifically, I’d love to know: Does Voice Memos apply automatic gain control, dynamic range compression, limiting or other dynamics processing? If so what is the ratio, attack, threshold, and release. Is any frequency-dependent EQ, noise reduction or microphone correction applied? How does stereo recording combine signals from the different built-in microphones? Is the processing fixed, or does it adapt to the incoming signal? Is there a way to capture a minimally processed recording from the same microphones for comparison? I’m not expecting proprietary algorithms or exact settings, but even a general technical description of the signal path would be incredibly helpful. Thanks very much for your time! Jethro Karis
0
0
254
2d
Feature Request: Enable Multiple Simultaneous iPhone Cameras Through Continuity Camera
I use continuity camera. I use a clone iPhone 17 pro to have a multi-camera podcast setup. CamoCam gets A&V out of sync which creates WAY MORE work. Dear Apple Engineering and Product Development Team, I am requesting an important enhancement to Apple’s Continuity Camera technology. Currently, Continuity Camera limits users to a single iPhone camera connected to a Mac at a time. Apple should expand this functionality to allow two, three, four, or more iPhones to operate simultaneously as independent camera sources. Connect multiple iPhones simultaneously to a single Mac using USB or Wi-Fi. Recognize each iPhone & toggle between cameras. Thank you, Brandon Johnson
0
0
277
3d
iOS 27.2: iPhone 13 Pro / 14 Pro heat up sooner during 4K camera capture than on iOS 27.0
We make a camera app (AVCaptureSession at 4K, live preview, recording with AVAssetWriter). Since updating to iOS 27.2, a user with an iPhone 13 Pro reports that the phone gets hot while using our app. Our own iPhone 14 Pro also runs warmer on 27.2 than it did on 27.0. To check, we reran on the 14 Pro the same automated test we ran there on iOS 27.0 in September. Each run lasts 300 seconds with the phone on power and fully charged, Low Power Mode off, and starts at ProcessInfo.thermalState == .nominal. We log thermalState every 5 seconds. Capture is 3840x2160 at 60 fps in all three runs: Idle preview, no processing: iOS 27.0: stayed Nominal for all 300 s iOS 27.2 (24B115): Fair at 278 s Idle preview with a Metal overlay: iOS 27.0: stayed Nominal for all 300 s iOS 27.2: Fair at 123 s Recording, HEVC 10-bit: iOS 27.0: Fair at 38 s, Serious at 108 s iOS 27.2: Fair at 33 s, Serious at 83 s Frame delivery held up. The 5-minute recording lost no frames, even at Serious. Questions: Are there known changes in iOS 27.2 to power use or thermal management during camera capture (AVCaptureSession at 4K) on A15 / A16 devices? Have the thresholds behind ProcessInfo.thermalState or AVCaptureDevice.SystemPressureState changed in 27.2? What data would be most useful in a Feedback report for this: a sysdiagnose taken right after a run, or a specific Instruments template?
0
0
253
4d
Can a third-party app capture microphone audio while a cellular call is active?
We're building a companion app that people use during a regular cellular call (VoIP isn't an option for this call). The user wants to briefly mute the call, speak a short question into our app, then unmute. Is there any supported way for a third-party app to record from the microphone during an active cellular call, even if the call is muted or on hold? Does Siri with App Intents accept voice input during an active call? If so, is Siri's spoken response heard by the other person on the call? Can a watchOS app record audio while the paired iPhone is on a call? If none of these work, what approach do you recommend?
1
0
110
4d
MusicKit: Multichannel Dolby Atmos Limited to Stereo Output - Is This Intended Behavior?
I'm experiencing a significant limitation with MusicKit's Dolby Atmos implementation on macOS and would appreciate clarification on whether this is intended behavior or if there are solutions available. When streaming Dolby Atmos content through MusicKit's ApplicationMusicPlayer, the output is limited to 2-channel stereo, even when: Audio MIDI Setup is configured for 7.1.4 (12-channel) output The same tracks play in full multichannel through the native Apple Music app Dolby Atmos is set to "Automatic" in Apple Music preferences Please let me know if there is anyway to enable this. If not, is this documented anywhere? Thanks!
2
3
413
5d
Musickit SDK for Android broken after Apple Music app update
Hi, The Musickit SDK for Android seems to be broken after the Apple Music app update from last week. We are launching the intent like this: AuthIntentBuilder aib = authManager.createIntentBuilder(appleTokenProvider.getDeveloperToken()); Intent intent = aib.build(); authLauncher.launch(intent); A new Apple Music UI is shown. The user is asked to login with email and password. However, after succesfull login the intent returns the error USER_CANCELLED for authManager.handleTokenResult(data); This was not the case before the latest Apple Music app update. The only workaround is to logout in the Apple Music app, then retry to launch the intent in our app. This has to be done every time the music user token expires. Any ETA on fixing this issue?
20
5
4.4k
5d
Swift 6: Supported AVCaptureSession actor isolation and MainActor preview attachment
I’m developing a SwiftUI camera preview for iPhone and iPad using Xcode 27.2 and Swift 6.4.2. I’m looking for clarification about the supported concurrency boundary between an actor-owned AVCaptureSession and a MainActor-owned AVCaptureVideoPreviewLayer. Environment Xcode 27.2 (27B52) Apple Swift 6.4.2 iPhoneOS SDK 27.2 Deployment target: iOS 26.0 Swift 6 language mode Complete concurrency checking Default actor isolation: MainActor Approachable Concurrency enabled The isolated compiler reproductions also explicitly enable NonisolatedNonsendingByDefault, InferIsolatedConformances, and MemberImportVisibility. Architecture The intended architecture follows the general pattern demonstrated in Apple’s AVCam sample: A capture actor uses a dedicated DispatchSerialQueue executor. The capture actor creates, configures, starts, and stops AVCaptureSession. A MainActor adapter owns AVCaptureVideoPreviewLayer. The preview layer retains the same session after attachment. The capture actor retains its session reference because it must perform subsequent capture operations. Compiler behavior In a minimal reproduction, transferring the retained session directly to the MainActor adapter: await preview.attach(session)produces: Sources/CaptureActor.swift:19:23: error: sending 'session' risks causing data races [#RegionIsolation::SendingRisksDataRace]The compiler identifies a potential race between actor-isolated and MainActor-isolated uses. This reproduction produces one error and zero warnings. A second reproduction uses a small PreviewSource: Sendable value containing a private AVCaptureSession reference, with @preconcurrency import AVFoundation confined to that source file. Its MainActor method attaches the session to the preview layer. Under otherwise identical compiler settings, this second reproduction compiles with zero diagnostics. We understand that compiler acceptance does not establish runtime safety and that the compatibility mechanism does not itself synchronize access to the retained session. Apple AVCam reference Apple’s official AVCam sample demonstrates a similar interoperability pattern: CaptureService.swift: dedicated capture executor and retained preview source. PreviewSource.swift: compatibility import and MainActor attachment. CameraPreview.swift: preview-layer association. Reference: Apple’s AVCam: Building a Camera App sample. Pinned sample SHA-256: 5a1981f90bb30827121324d4b33198d58de9b9d68e3508b64f0aabc18bbc0e53The sample revision date is not established; we are not assuming this archive is identical to the latest downloadable revision. Questions 1. Supported Swift 6 interoperability pattern Is the narrow PreviewSource compatibility approach demonstrated by AVCam the recommended way to associate an actor-retained AVCaptureSession with a MainActor-owned AVCaptureVideoPreviewLayer under complete Swift 6 concurrency checking? Is there a newer recommended API, annotation, or ownership pattern? 2. Capture and preview synchronization Is the following operation sequence supported? Configure and commit the capture session on the dedicated capture executor. Attach the session to the preview layer on MainActor. Call startRunning() on the capture executor. Perform ordinary preview layout on MainActor while capture runs. Call stopRunning() on the capture executor. Detach the session from the preview layer on MainActor. Which preview-layer or preview-connection mutations, if any, must be excluded while startRunning() or stopRunning() is executing? 3. Supported detachment and release sequence After stopRunning() returns and MainActor executes: previewLayer.session = nilis it supported to release the remaining application-held session references once application-owned observers and asynchronous consumers have terminated? Does AVFoundation require or recommend any additional step before those references are released? We are asking about the supported framework lifecycle contract, not assuming that application-level cancellation drains internal AVFoundation work. Sources AVCam: Building a camera app Overview Apple’s official AVCam sample
0
1
258
5d
AVCaptureSession multitasking camera access on iPhone without VoIP background mode
I'm developing an iPhone screen-recording application that simultaneously records the front-facing camera and displays the live camera feed using Picture in Picture while the user navigates other apps. The implementation uses AVFoundation (AVCaptureSession) for camera capture and a system Picture in Picture controller for the floating window. I've encountered the following behavior on a physical iPhone: With voip declared in UIBackgroundModes, isMultitaskingCameraAccessSupported returns true, and the front camera continues capturing while another app is foregrounded. Without voip, isMultitaskingCameraAccessSupported returns false. When the application enters the background, the capture session is interrupted and camera frames stop. Screen recording and the Picture in Picture window continue, but the camera feed freezes or becomes blank. Apple App Review has confirmed that declaring voip without actual VoIP functionality is not permitted under Guideline 2.5.4. I understand and respect that restriction and do not want to misuse background modes. My question: Is there a supported public API, entitlement, or configuration that allows a non-VoIP iPhone application to continue capturing front-camera video while another application is in the foreground? Does Picture in Picture provide any supported mechanism for this use case, or is multitasking camera capture unavailable to non-VoIP applications on iPhone? I'm looking for a supported implementation rather than a workaround that violates App Review guidelines. Any guidance from Apple's AVFoundation engineers would be greatly appreciated.
2
0
403
6d
Logic Pro: third-party effect AU not processed on an empty audio track — request for the opt-in some vendors have (aumf/Acnt/EINX)
We have a product where Logic Pro's "process effects only when needed" optimisation blocks the core use case, and we would like to ask for the opt-in that some third-party plug-ins already have. Filed as FB25426476. The plug-in ACENTAUR (Audio Unit v2, type aumf, subtype Acnt, manufacturer EINX; EINAUX, Germany) is an AI music generator that lives in the Audio FX slot of an audio track. It renders its own material from the host's tempo, time signature and transport, so the natural workflow is: empty audio track, insert ACENTAUR, press Play, generate. There is no region and no input signal. The plug-in is the source. What happens On an empty audio track Logic never calls the render callback, so the plug-in never receives the host clock through the HostCallbacks: tempo and transport stay unknown and our UI stays locked. Everything else works: the same build renders in the instrument slot, in other hosts, and on a Logic audio track as soon as a region or live input is present. Inserting Logic's Test Oscillator (bypassed) in the same strip also makes it work, which shows the strip is simply not scheduled. Logic engineering described this optimisation on coreaudio-api in February 2024 (https://www.mail-archive.com/coreaudio-api@lists.apple.com/msg01859.html). What we observed A number of third-party effects (Celemony Melodyne, Antares, Synchro Arts, Waves and others) are processed on an empty track. We verified on Logic Pro 12.4 (6707) / macOS 26.6.2 that this is tied to the plug-in's identity plus a private global property Logic queries when the plug-in is loaded: with a listed manufacturer code and that property answered, our plug-in is rendered immediately on an empty track and the host clock arrives. We are of course not going to ship under another vendor's identity; this was a one-off local test to make sure we understand the mechanism before asking. Log excerpt from that test (plug-in log, out-of-process hosting, empty audio track, 48 kHz): 09:19:38 host asked property 101000 → 0 09:19:38 host asked property 101001 → 1 09:19:38 Initialize → 0 · in 2 ch @ 48000 Hz · out 2 ch 09:19:39 First render after 0s · input callback · tempo 120.00 Same build under our own manufacturer code EINX: "No render after 30s · host clock tempo+transport · flags 0". The request Could ACENTAUR (aumf / Acnt / EINX) be added to the set of plug-ins Logic keeps processing without input? The plug-in already answers the property in question; the only missing piece is on Logic's side. If there is a different or public mechanism you would prefer third parties to adopt (a component tag, an AU property, an AUv3 property), we will implement it right away. Happy to provide a build, a demo project and whatever else helps. Christoph Kahse, EINAUX
0
0
64
6d
tvOS 27.2 started presenting playing item in top right corner for every video
Hi guys, after upgrade to tvOS 27.2 I noticed that every time our video streaming app sets up video stream, OS presents playing item popup. We are using MPNowPlayingInfoCenter. We do not set it only when app gets minimized, but always, that is when app is maximized, player is in full screen and one episode ends and another starts, etc. The reason is that we want playing metadata to be visible on iOS for users who use iPhone as remote controller. Our app is playing 24/7 and never stops even backing out of the player does not stop playback, user can keep switching channels rapidly, that is user can hold arrows and can see channel numbers going up rapidly (like 10 channels per second) and at the same time we set MPNowPlayingInfoCenter. We could use debounce for MPNowPlayingInfoCenter and set it only if user stops at a channel say for 0.5s, but after that OS still presents annoying popup. Is that a new tvOS 27.2 feature or a bug? Right now this is very bad user experience. Do we need to stop using MPNowPlayingInfoCenter completely to avoid this behavior? We are planning refactoring and using the new Now Playing framework and MediaSession, but I'm not sure if that can prevent this annoying popup. Not sure if we should completely remove support for Now Playing on iOS to avoid this popup on tvOS.
0
0
298
1w
Public API for torch beam width (Adaptive True Tone flash)?
On iPhone 14 Pro and later, the system flashlight in Control Center can adjust beam width (narrow ↔ wide). As far as I can tell, AVCaptureDevice only exposes torchMode, torchLevel and setTorchModeOn(level:) I found nothing related to beam width Is there any supported way for a third-party app to control the torch beam width? If not, is this on the roadmap?
0
0
296
1w
Camera app best practices
As a reminder, the recommended approach to monitor camera rotations, including on upcoming hardware, is to use the AVCaptureDevice.RotationCoordinator / AVCaptureDeviceRotationCoordinator API. In many common scenarios on iPhone Duo, proper use of the rotation coordinator is the only way to ensure that your camera previews and captures use the orientation expected by the user. AVCaptureVideoOrientation has been deprecated as of iOS 17.0 and iPadOS 17.0. When switching cameras in your app, make sure to create a rotation coordinator for that device. To ensure that your app has implemented the rotation coordinator API correctly, you should test different orientations and sizes of your app on an iPad with Stage Manager enabled. Additional information: Sample Code: Supporting device rotation in your camera app Tech Talk: Build a great camera experience for iPhone Duo WWDC23 session: Support external cameras in your iPadOS app
Replies
0
Boosts
0
Views
473
Activity
4w
iOS 27 Public Beta 6: CallKit UI remains after ending two outgoing calls in modified Apple Speakerbox sample
Summary On an iPhone 17 running iOS 27 Public Beta 6, the system CallKit UI remains visible after ending two outgoing calls individually. This is reproducible using Apple's “Making and Receiving VoIP Calls with CallKit” sample (Speakerbox), with only two minimal changes to support multiple simultaneous calls. After both calls end, Speakerbox displays “No Calls”, but the system CallKit UI still shows 111, and the Dynamic Island retains a call-related status. Environment Device: iPhone 17 (physical device) OS: iOS 27 Public Beta 6 App: Apple's Speakerbox sample with the modifications below Backend: None. The sample's original simulated calls are used; no external VoIP SDK is involved. Changes to the original sample Only two files were modified. 1. ProviderDelegate.swift Added: providerConfiguration.maximumCallGroups = 3 The original setting remains unchanged: providerConfiguration.maximumCallsPerCallGroup = 1 2. SpeakerboxCallManager.swift Before starting a new outgoing call, hold existing calls that are not already on hold. The hold actions and new start action are submitted in the same transaction: let transaction = CXTransaction() for call in calls where !call.isOnHold { transaction.addAction( CXSetHeldCallAction(call: call.uuid, onHold: true) ) } transaction.addAction(startCallAction) requestTransaction(transaction) No changes were made to the simulated connection timing, startedConnectingAt/connectedAt reporting, CXEndCallAction handling, call removal, or audio handling. The original end-call handler finds the call by UUID, calls endSpeakerboxCall(), fulfills the end action, and removes the call from the app's list. Steps to reproduce Launch the modified Speakerbox sample. Create an outgoing call to 111. Create a second outgoing call to 222. The first call is placed on hold. Wait until Speakerbox shows 111 — On Hold and 222 — Active, with call durations displayed. In Speakerbox, select 222 - End Call. Select 111 - End Call. Confirm that Speakerbox displays “No Calls”. Open the app switcher and inspect the system CallKit UI. Also inspect the Dynamic Island. Open the remaining system call UI and tap End. Expected result After both calls end, the system should no longer display an ongoing call in the CallKit UI or Dynamic Island. Actual result Speakerbox displays “No Calls”. The system CallKit UI continues to display the first call, 111. The Dynamic Island continues to show a call-related “Hold” status. Tapping End in the remaining system call UI does not clear the residual state during the recording. The issue occurs even after waiting for both simulated calls to connect before ending them. This is the system-provided CallKit UI, not an active-call view implemented by the sample app. Reproduction video Recording: 4b03d30e507b874d9c19c0523632e9d6.mp4 00:24–00:26 (approximately): Both calls are present; 111 is on hold and 222 is active. 00:26–00:31 (approximately): End 222, then end 111. Speakerbox displays “No Calls”. 00:31–01:03 (approximately): The system CallKit UI and Dynamic Island retain the call state despite further attempts to end it. Questions Is this an iOS 27 regression, or is additional lifecycle handling required when extending Speakerbox to support multiple calls? Please advise what additional diagnostics would help investigate why the system UI retains an ongoing-call state after both calls have been ended using the sample's original end-call handling. Source and video downloads https://github.com/willbin/callkit-ios27-repro/releases/tag/repro-v1
Replies
6
Boosts
0
Views
1.2k
Activity
19h
AVAudioIONode presentationLatency discrepancy
The documentation for -[AVAudioIONode presentationLatency] states that it accounts for both kAudioDevicePropertyLatency and kAudioStreamPropertyLatency. On my MBP the following values are reported for the speakers in the output scope: kAudioDevicePropertyLatency: 11 kAudioStreamPropertyLatency: 390 At the device's nominal sample rate of 44.1 kHz that equates to approximately 9.09 msec. However, the output node on a running AVAudioEngine reports presentationLatency as approximately 0.25 msec. This appears to be the device latency only. Is it necessary to compensate for the stream latency manually despite the documentation?
Replies
0
Boosts
0
Views
103
Activity
21h
Media Extension format reader for MKV/WebM in several apps of one developer – appropriate use and conflicts?
I'm preparing several sandboxed macOS apps (macOS 26 and later) for the Mac App Store and would like to add Matroska/WebM support through a Media Extension format reader. Before implementing it, I'd like to clarify a few points. The apps work only with local video files the user opens or adds: a player for many videos at once (video wall), a practice player with loops and markers, an app for precise trimming and export, and a catalog of the user's video library with thumbnails and duplicate detection. None of them is network-facing. Plan: one format reader for Matroska and WebM (own implementation of RFC 9559, no third-party code), embedded as an ExtensionKit bundle. Video is decoded by the system decoders (H.264, HEVC, VP9 after VTRegisterSupplementalVideoDecoderIfAvailable, AV1 where available); no own video decoder. Each app calls MTRegisterProfessionalVideoWorkflowFormatReaders() and VTRegisterProfessionalVideoWorkflowVideoDecoders() at launch and shows a notice with a link to System Settings when the extension is disabled (AVErrorMediaExtensionDisabled). Questions: MTProfessionalVideoWorkflow.h and VTProfessionalVideoWorkflow.h say the registration functions are intended for applications supporting professional video workflows. Is it acceptable to call them from apps like these, which serve video editing, review and library management, but not a broadcast or camera workflow? Users may buy only one of the apps, so I'd embed the same format reader (same ClassImplementationID and CFBundleVersion, bundle identifier prefixed by each host app) in every app. Is that supported? When are AVErrorMediaExtensionConflict and kVTExtensionConflictErr returned, and how can they be avoided? Does the enable switch in System Settings apply per ClassImplementationID or per host app? Would a user who installs a second app have to enable the extension again? Is there a supported way to open System Settings directly at General > Login Items & Extensions > Media Extensions from an app? Are there App Review requirements specific to apps that embed Media Extensions, beyond guidelines 2.4.5 and 4.4? Thanks in advance.
Replies
2
Boosts
0
Views
139
Activity
23h
Is MusicKit playback allowed on Meta Quest, and can a preview play as background music for a profile panorama?
I'm building Welink, a mixed-reality app for Meta Quest where people who opt in see each other's profile cards in person. Users connect Apple Music through MusicKit JS, and their card shows recently played songs with Apple Music links, attribution and tap-to-play 30-second previews (streamed, never saved). A few policy questions: Is MusicKit (MusicKit for Android or MusicKit JS in the headset browser) supported and permitted on Meta Quest's Android-based OS for full playback by Apple Music subscribers? Guideline 5.2.5 says previews can't be used for "entertainment value." Would playing a user-chosen song (preview, or the full song for subscribers) when a viewer steps into that person's 360° panorama be allowed, given that the viewer starts it, can stop it, and full attribution is shown? Is it fine to show a user's recently played songs (metadata and cover art) to people they meet, when the user turned that on and can turn it off at any time? Can previews and cover art be cached on-device for about 24 hours for offline demos? Can the Apple Music panel appear in a public demo video, following the Apple Music Identity Guidelines? Any pointers to the right docs or team would be appreciated. Thanks!
Replies
0
Boosts
0
Views
65
Activity
1d
MusicKit JS authorize() returns AUTHORIZATION_ERROR "Unauthorized" (no Music User Token) — catalog works
Hi all — hoping someone has hit this. Our MusicKit JS (v3) web app calls authorize() and it rejects with AUTHORIZATION_ERROR / "Unauthorized" (no Music User Token is issued), even though the same developer token returns HTTP 200 for catalog requests (/v1/catalog/us/search) — so the token itself is valid. Setup (all verified): MusicKit JS v3 from js-cdn.music.apple.com/musickit/v3/musickit.js; MusicKit.configure() succeeds, storefront resolves to "us". Developer token is ES256, valid, and includes the origin claim for our exact site origin. Our MusicKit key is enabled for Media Services and tied to a Media ID that has MusicKit enabled. Referrer-Policy: strict-origin-when-cross-origin. Repro: sign in with an active Apple Music subscriber and tap Allow -> authorize() rejects. Reproduces for two subscriber Apple IDs, in Chrome and Edge, with third-party cookies allowed. Error object: { name: "AUTHORIZATION_ERROR", message: "Unauthorized", isMKError: true }, thrown inside musickit.js during the authorize() flow. The served MusicKit build is a prerelease (3.2526.0-prerelease.x). We've ruled out the usual suspects on our side (origin claim, referrer policy, token validity, API version, cookies, and portal provisioning). Has anyone resolved this, or is there an additional server-side enablement needed for a team/Media ID to issue web user tokens? Also filed as FB23587284. Thanks!
Replies
4
Boosts
0
Views
1k
Activity
1d
macOS 27 regression: HDMI + DisplayPort Multi-Output audio fails with Core Audio error 1937010544
Hi, I believe I have found a Core Audio regression in macOS 27. This exact hardware configuration worked correctly on macOS 26, and the issue started immediately after upgrading to macOS 27. Hardware: Mac mini M2 2 × MSI MP243X monitors Monitor 1 connected via HDMI Monitor 2 connected via DisplayPort Both monitors expose a 2-channel audio output to macOS On macOS 26: I used Audio MIDI Setup to create a Multi-Output Device containing both MSI MP243X audio outputs. Audio played simultaneously through both monitors without any issues. On macOS 27: Both audio devices are still detected correctly and both work perfectly when selected individually: HDMI only: WORKS DisplayPort only: WORKS HDMI + DisplayPort simultaneously: FAILS This is reproducible even immediately after a full reboot. When I create a new Multi-Output Device containing both MSI outputs and select it as the system output, audio playback cannot start. For example: afplay /System/Library/Sounds/Glass.aiff returns: Error: AudioQueueStart failed ('stop') I captured Core Audio debug logs while reproducing the problem. Core Audio initially reports that StartIO succeeded, but the physical display audio device then fails to establish a timeline. Relevant log messages include: HALS_IOEngine2::_StartIO succeeded Device 3669B540-0000-0000-2623-0104A5351D78 is not running. could not establish a timeline after waiting 10000000 microseconds stopping with error 1937010544 StartIOThread: the IO thread failed to start, Error: 1937010544 I have already tested the following: Both devices at 44.1 kHz / 24-bit Both devices at 48 kHz / 16-bit Recreating the Multi-Output Device from scratch Using the HDMI device as clock source Using the DisplayPort device as clock source Different drift correction configurations Restarting coreaudiod Full macOS reboot Testing both outputs individually immediately after reboot Alternative multi-device audio routing software The behavior is always reproducible. Each MSI MP243X audio endpoint works correctly by itself. The failure only occurs when both HDMI and DisplayPort audio endpoints are opened simultaneously. system_profiler correctly detects both devices at 48 kHz: MSI MP243X Output Channels: 2 Current Sample Rate: 48000 Transport: HDMI MSI MP243X Output Channels: 2 Current Sample Rate: 48000 Transport: DisplayPort This does not appear to be a problem with either monitor or connection individually, because both outputs continue to work independently. The important difference is the macOS version: macOS 26: HDMI + DisplayPort Multi-Output = WORKING macOS 27: HDMI only = WORKING DisplayPort only = WORKING HDMI + DisplayPort Multi-Output = FAILS with AudioQueueStart 'stop' / Core Audio error 1937010544 No hardware, monitor, cable, or connection changes were made between the working macOS 26 configuration and the macOS 27 configuration. This therefore appears to be a regression in the Core Audio/display-audio path introduced with macOS 27 when two display audio endpoints (HDMI + DisplayPort) are opened simultaneously. Has anyone else been able to reproduce this on macOS 27, particularly on Apple Silicon? I can provide the complete coreaudiod logs and run additional Core Audio diagnostics if needed. Additional isolation tests: Both monitors can remain physically connected to the Mac at the same time. With both HDMI and DisplayPort connected: Selecting the HDMI MSI MP243X as the only output works correctly. Selecting the DisplayPort MSI MP243X as the only output works correctly. Opening both audio endpoints simultaneously causes the failure. Therefore, simply having both displays connected does not trigger the issue. The failure appears specifically when Core Audio attempts to run both display-audio endpoints at the same time. I also tested this using third-party multi-device audio routing implementations instead of relying only on Audio MIDI Setup. The same behavior occurs: either MSI MP243X can be opened and used independently, but attempting to route audio to both devices simultaneously fails. This suggests that the issue is below the Multi-Output Device configuration itself and may be related to starting/synchronizing two display-audio IO engines simultaneously. During the failure, the Core Audio log sequence is particularly interesting: The physical device is detected normally. The audio format is configured successfully. Core Audio reports that StartIO succeeded. The device subsequently reports that it is not running. Core Audio waits 10 seconds for a timeline. Timeline establishment fails. The IO thread terminates with error 1937010544 ('stop'). One captured conversion path was: 2 ch, 48000 Hz, Float32, interleaved -> 2 ch, 48000 Hz, Int16, interleaved so both sides were operating at 48 kHz during this test. Another important observation is that restarting coreaudiod does not resolve the simultaneous-output problem. A complete reboot also does not resolve it: immediately after a fresh boot, before launching any third-party audio-routing software, both physical outputs work individually but a newly created Multi-Output Device still reproduces the failure. This makes the issue highly reproducible on this machine. Minimal reproduction: Boot macOS 27 with both MSI MP243X monitors connected. Open Audio MIDI Setup. Verify both MSI MP243X devices work independently. Set both devices to 48,000 Hz. Create a new Multi-Output Device. Select both MSI MP243X devices. Select the new Multi-Output Device as the system audio output. Run: afplay /System/Library/Sounds/Glass.aiff Expected result: The sound is reproduced simultaneously through both monitors, as it was on macOS 26. Actual result: Error: AudioQueueStart failed ('stop') Switching the system output back to either individual MSI MP243X restores audio playback. The problem can then be reproduced again by selecting the Multi-Output Device.
Replies
7
Boosts
9
Views
2.1k
Activity
1d
MusicTokenRequestError.unknown for some authorized, subscribed users
A small number of our users can’t connect Apple Music because DefaultMusicTokenProvider.userToken(for:options:) always throws MusicTokenRequestError.unknown. Most users connect without problems and we can’t reproduce the failure on any of our own accounts. Flow: let status = await MusicAuthorization.request() // .authorized let subscription = try await MusicSubscription.current // canPlayCatalogContent == true let provider = DefaultMusicTokenProvider() let developerToken = try await provider.developerToken(options: []) // succeeds let userToken = try await provider.userToken(for: developerToken, options: []) // throws .unknown On failure we retry once with options: .ignoreCache for both the developer token and the user token. The retry fails in the same way. What we see on affected devices: MusicAuthorization.currentStatus == .authorized MusicSubscription.current.canPlayCatalogContent == true The developer token is returned successfully. userToken(for:) throws MusicTokenRequestError.unknown. The NSError has code 0 and the localized description “Unknown error”, and there is no NSUnderlyingError. The ignoreCache retry fails after anywhere from about 10 ms to 2.5 s, so it sometimes appears to go out to the network. For a given account it fails every time: across days, app versions, and after reinstalling both our app and the Music app. Apple Music plays normally in the Music app for these users. Ruled out so far: iOS version: seen on iOS 26.6.1 and 27.2. Device model: seen on iPhone 13 and iPhone 14 Plus. Region: seen in Hungary, Italy, Romania and Japan. Subscription type: one affected user has an individual trial. A family member with her own individual trial on a separate account connects without problems. Family Sharing in general: family plan members connect fine for us. Questions: What conditions cause userToken(for:) to return .unknown instead of a specific case such as .userNotSignedIn, .permissionDenied or .privacyAcknowledgementRequired? Is there a way to get more detail about the cause? Is there a step affected users can take to fix it?
Replies
3
Boosts
1
Views
525
Activity
1d
Thin border around VideoPlayer
A thin gray border appears around assets presented using VideoPlayer. It was tested on iPhone 8, iPhone 13 mini, and iPhone 15, and the border only appeared on the 13 mini. The iOS version didn't matter, we checked the 13 mini on both iOS 18 and iOS 26 and the border appeared on both. I created a minimal version of the app with just the VideoPlayer and the asset and the frame still appeared. We tried different assets and it was visible on all of them. import SwiftUI import AVKit struct ContentView: View { private let player = AVPlayer(url: Bundle.main.url(forResource: "sample", withExtension: "mp4")!) var body: some View { VideoPlayer(player: player) .frame(width: 300, height: 200) } }I found someone that had the same exact problem on Reddit and StackOverflow: https://www.reddit.com/r/swift/comments/8s87hm/weird_borders_around_avplayerviewcontroller/ https://stackoverflow.com/questions/50927561/weird-borders-around-avplayerviewcontroller and their solution included setting: playerLayer.shouldRasterize = true playerLayer.rasterizationScale = UIScreen.main.scaleThis fixed the issue but isn't suitable for our app due to offscreen rendering performance. They also found that issue on other devices, noting: "After testing this code on multiple devices (actual physical devices, not simulators), this bug appears to happen only on Plus devices (I tested it on i8 on iOS 11, i8+ on iOS 11, iX on iOS 11 and i6+ on iOS 10)." The bug doesn't appear on simulator, isn't visible on a screenshot, the frame disappears when using accessibility zoom. When we encoded the video file to Apple ProRes the border disappeared, but the size of the video bumped from 342 KB to 6.3 MB so we couldn't do that. I'm attaching photo from this person's post since our issue looked exactly the same. Has anyone had a similar issue and maybe found another workaround?
Replies
1
Boosts
1
Views
274
Activity
2d
macOS 27.2 makes AUv3 plug-ins completely useless as soon as the user accesses a button with a native submenu.
https://youtu.be/HnNGgYZQBvYJust submitted a bug report FB25497228, and posting it here in hopes to get Apple engineers' attention because it's such a bad bug that macOS 27.2 introduced, and don't think it has a workaround unless Apple fixes it. This wasn't an issue in 27.0. Summary: Opening a native submenu in an out-of-process AUv3 plug-in and dismissing it without selecting anything will make the plug-in UI completely unresponsive to mouse input, and any animation will stop also. Only restart solves it. I can reproduce this with Mela in both Logic Pro and Ableton Live 12. I've attached a demo project to the bug report. It's Xcode Audio Unti extension template with a small modification, just added a button with a submenu. Mela can be found here if needed: https://apps.apple.com/us/app/mela-auv3-synth-fx-midi/id1668299428 Steps to reproduce with the attached project Load Mela as an AU instrument in Logic Pro or Ableton Live Open a factory patch. Open a module’s Actions menu (ellipsis buttons) Hover over Insert or Replace until the submenu appears, then dismiss it without selecting anything. Expected result Mela's UI continues to be interactive, e.g. parameters can be easily adjusted and modulation animations continue to work. Actual result No interaction can be performed, wether adjusting a prameter or dragging a module or pressing a button. Animations also stop. This bug renders my plug-in completely useless on macOS as it makes heavy use of submenus. Please fix it! Here's a link to the video demo of the issue: https://youtu.be/HnNGgYZQBvY
Replies
0
Boosts
0
Views
65
Activity
2d
Technical question about iPhone Voice Memos microphone processing for music recording
Hey, I’m an independent musician and producer experimenting with recording acoustic instruments using the iPhone’s built-in microphones and Voice Memos. I’ve found that the recordings have a particularly pleasing tonal balance and dynamic character, sometimes more so than recordings made with my conventional studio microphones. I’m interested in understanding what processing, if any, contributes to this sound, so I can experiment with recreating it in my recording workflow. Specifically, I’d love to know: Does Voice Memos apply automatic gain control, dynamic range compression, limiting or other dynamics processing? If so what is the ratio, attack, threshold, and release. Is any frequency-dependent EQ, noise reduction or microphone correction applied? How does stereo recording combine signals from the different built-in microphones? Is the processing fixed, or does it adapt to the incoming signal? Is there a way to capture a minimally processed recording from the same microphones for comparison? I’m not expecting proprietary algorithms or exact settings, but even a general technical description of the signal path would be incredibly helpful. Thanks very much for your time! Jethro Karis
Replies
0
Boosts
0
Views
254
Activity
2d
Feature Request: Enable Multiple Simultaneous iPhone Cameras Through Continuity Camera
I use continuity camera. I use a clone iPhone 17 pro to have a multi-camera podcast setup. CamoCam gets A&V out of sync which creates WAY MORE work. Dear Apple Engineering and Product Development Team, I am requesting an important enhancement to Apple’s Continuity Camera technology. Currently, Continuity Camera limits users to a single iPhone camera connected to a Mac at a time. Apple should expand this functionality to allow two, three, four, or more iPhones to operate simultaneously as independent camera sources. Connect multiple iPhones simultaneously to a single Mac using USB or Wi-Fi. Recognize each iPhone & toggle between cameras. Thank you, Brandon Johnson
Replies
0
Boosts
0
Views
277
Activity
3d
iOS 27.2: iPhone 13 Pro / 14 Pro heat up sooner during 4K camera capture than on iOS 27.0
We make a camera app (AVCaptureSession at 4K, live preview, recording with AVAssetWriter). Since updating to iOS 27.2, a user with an iPhone 13 Pro reports that the phone gets hot while using our app. Our own iPhone 14 Pro also runs warmer on 27.2 than it did on 27.0. To check, we reran on the 14 Pro the same automated test we ran there on iOS 27.0 in September. Each run lasts 300 seconds with the phone on power and fully charged, Low Power Mode off, and starts at ProcessInfo.thermalState == .nominal. We log thermalState every 5 seconds. Capture is 3840x2160 at 60 fps in all three runs: Idle preview, no processing: iOS 27.0: stayed Nominal for all 300 s iOS 27.2 (24B115): Fair at 278 s Idle preview with a Metal overlay: iOS 27.0: stayed Nominal for all 300 s iOS 27.2: Fair at 123 s Recording, HEVC 10-bit: iOS 27.0: Fair at 38 s, Serious at 108 s iOS 27.2: Fair at 33 s, Serious at 83 s Frame delivery held up. The 5-minute recording lost no frames, even at Serious. Questions: Are there known changes in iOS 27.2 to power use or thermal management during camera capture (AVCaptureSession at 4K) on A15 / A16 devices? Have the thresholds behind ProcessInfo.thermalState or AVCaptureDevice.SystemPressureState changed in 27.2? What data would be most useful in a Feedback report for this: a sysdiagnose taken right after a run, or a specific Instruments template?
Replies
0
Boosts
0
Views
253
Activity
4d
Can a third-party app capture microphone audio while a cellular call is active?
We're building a companion app that people use during a regular cellular call (VoIP isn't an option for this call). The user wants to briefly mute the call, speak a short question into our app, then unmute. Is there any supported way for a third-party app to record from the microphone during an active cellular call, even if the call is muted or on hold? Does Siri with App Intents accept voice input during an active call? If so, is Siri's spoken response heard by the other person on the call? Can a watchOS app record audio while the paired iPhone is on a call? If none of these work, what approach do you recommend?
Replies
1
Boosts
0
Views
110
Activity
4d
MusicKit: Multichannel Dolby Atmos Limited to Stereo Output - Is This Intended Behavior?
I'm experiencing a significant limitation with MusicKit's Dolby Atmos implementation on macOS and would appreciate clarification on whether this is intended behavior or if there are solutions available. When streaming Dolby Atmos content through MusicKit's ApplicationMusicPlayer, the output is limited to 2-channel stereo, even when: Audio MIDI Setup is configured for 7.1.4 (12-channel) output The same tracks play in full multichannel through the native Apple Music app Dolby Atmos is set to "Automatic" in Apple Music preferences Please let me know if there is anyway to enable this. If not, is this documented anywhere? Thanks!
Replies
2
Boosts
3
Views
413
Activity
5d
Musickit SDK for Android broken after Apple Music app update
Hi, The Musickit SDK for Android seems to be broken after the Apple Music app update from last week. We are launching the intent like this: AuthIntentBuilder aib = authManager.createIntentBuilder(appleTokenProvider.getDeveloperToken()); Intent intent = aib.build(); authLauncher.launch(intent); A new Apple Music UI is shown. The user is asked to login with email and password. However, after succesfull login the intent returns the error USER_CANCELLED for authManager.handleTokenResult(data); This was not the case before the latest Apple Music app update. The only workaround is to logout in the Apple Music app, then retry to launch the intent in our app. This has to be done every time the music user token expires. Any ETA on fixing this issue?
Replies
20
Boosts
5
Views
4.4k
Activity
5d
Swift 6: Supported AVCaptureSession actor isolation and MainActor preview attachment
I’m developing a SwiftUI camera preview for iPhone and iPad using Xcode 27.2 and Swift 6.4.2. I’m looking for clarification about the supported concurrency boundary between an actor-owned AVCaptureSession and a MainActor-owned AVCaptureVideoPreviewLayer. Environment Xcode 27.2 (27B52) Apple Swift 6.4.2 iPhoneOS SDK 27.2 Deployment target: iOS 26.0 Swift 6 language mode Complete concurrency checking Default actor isolation: MainActor Approachable Concurrency enabled The isolated compiler reproductions also explicitly enable NonisolatedNonsendingByDefault, InferIsolatedConformances, and MemberImportVisibility. Architecture The intended architecture follows the general pattern demonstrated in Apple’s AVCam sample: A capture actor uses a dedicated DispatchSerialQueue executor. The capture actor creates, configures, starts, and stops AVCaptureSession. A MainActor adapter owns AVCaptureVideoPreviewLayer. The preview layer retains the same session after attachment. The capture actor retains its session reference because it must perform subsequent capture operations. Compiler behavior In a minimal reproduction, transferring the retained session directly to the MainActor adapter: await preview.attach(session)produces: Sources/CaptureActor.swift:19:23: error: sending 'session' risks causing data races [#RegionIsolation::SendingRisksDataRace]The compiler identifies a potential race between actor-isolated and MainActor-isolated uses. This reproduction produces one error and zero warnings. A second reproduction uses a small PreviewSource: Sendable value containing a private AVCaptureSession reference, with @preconcurrency import AVFoundation confined to that source file. Its MainActor method attaches the session to the preview layer. Under otherwise identical compiler settings, this second reproduction compiles with zero diagnostics. We understand that compiler acceptance does not establish runtime safety and that the compatibility mechanism does not itself synchronize access to the retained session. Apple AVCam reference Apple’s official AVCam sample demonstrates a similar interoperability pattern: CaptureService.swift: dedicated capture executor and retained preview source. PreviewSource.swift: compatibility import and MainActor attachment. CameraPreview.swift: preview-layer association. Reference: Apple’s AVCam: Building a Camera App sample. Pinned sample SHA-256: 5a1981f90bb30827121324d4b33198d58de9b9d68e3508b64f0aabc18bbc0e53The sample revision date is not established; we are not assuming this archive is identical to the latest downloadable revision. Questions 1. Supported Swift 6 interoperability pattern Is the narrow PreviewSource compatibility approach demonstrated by AVCam the recommended way to associate an actor-retained AVCaptureSession with a MainActor-owned AVCaptureVideoPreviewLayer under complete Swift 6 concurrency checking? Is there a newer recommended API, annotation, or ownership pattern? 2. Capture and preview synchronization Is the following operation sequence supported? Configure and commit the capture session on the dedicated capture executor. Attach the session to the preview layer on MainActor. Call startRunning() on the capture executor. Perform ordinary preview layout on MainActor while capture runs. Call stopRunning() on the capture executor. Detach the session from the preview layer on MainActor. Which preview-layer or preview-connection mutations, if any, must be excluded while startRunning() or stopRunning() is executing? 3. Supported detachment and release sequence After stopRunning() returns and MainActor executes: previewLayer.session = nilis it supported to release the remaining application-held session references once application-owned observers and asynchronous consumers have terminated? Does AVFoundation require or recommend any additional step before those references are released? We are asking about the supported framework lifecycle contract, not assuming that application-level cancellation drains internal AVFoundation work. Sources AVCam: Building a camera app Overview Apple’s official AVCam sample
Replies
0
Boosts
1
Views
258
Activity
5d
AVCaptureSession multitasking camera access on iPhone without VoIP background mode
I'm developing an iPhone screen-recording application that simultaneously records the front-facing camera and displays the live camera feed using Picture in Picture while the user navigates other apps. The implementation uses AVFoundation (AVCaptureSession) for camera capture and a system Picture in Picture controller for the floating window. I've encountered the following behavior on a physical iPhone: With voip declared in UIBackgroundModes, isMultitaskingCameraAccessSupported returns true, and the front camera continues capturing while another app is foregrounded. Without voip, isMultitaskingCameraAccessSupported returns false. When the application enters the background, the capture session is interrupted and camera frames stop. Screen recording and the Picture in Picture window continue, but the camera feed freezes or becomes blank. Apple App Review has confirmed that declaring voip without actual VoIP functionality is not permitted under Guideline 2.5.4. I understand and respect that restriction and do not want to misuse background modes. My question: Is there a supported public API, entitlement, or configuration that allows a non-VoIP iPhone application to continue capturing front-camera video while another application is in the foreground? Does Picture in Picture provide any supported mechanism for this use case, or is multitasking camera capture unavailable to non-VoIP applications on iPhone? I'm looking for a supported implementation rather than a workaround that violates App Review guidelines. Any guidance from Apple's AVFoundation engineers would be greatly appreciated.
Replies
2
Boosts
0
Views
403
Activity
6d
Logic Pro: third-party effect AU not processed on an empty audio track — request for the opt-in some vendors have (aumf/Acnt/EINX)
We have a product where Logic Pro's "process effects only when needed" optimisation blocks the core use case, and we would like to ask for the opt-in that some third-party plug-ins already have. Filed as FB25426476. The plug-in ACENTAUR (Audio Unit v2, type aumf, subtype Acnt, manufacturer EINX; EINAUX, Germany) is an AI music generator that lives in the Audio FX slot of an audio track. It renders its own material from the host's tempo, time signature and transport, so the natural workflow is: empty audio track, insert ACENTAUR, press Play, generate. There is no region and no input signal. The plug-in is the source. What happens On an empty audio track Logic never calls the render callback, so the plug-in never receives the host clock through the HostCallbacks: tempo and transport stay unknown and our UI stays locked. Everything else works: the same build renders in the instrument slot, in other hosts, and on a Logic audio track as soon as a region or live input is present. Inserting Logic's Test Oscillator (bypassed) in the same strip also makes it work, which shows the strip is simply not scheduled. Logic engineering described this optimisation on coreaudio-api in February 2024 (https://www.mail-archive.com/coreaudio-api@lists.apple.com/msg01859.html). What we observed A number of third-party effects (Celemony Melodyne, Antares, Synchro Arts, Waves and others) are processed on an empty track. We verified on Logic Pro 12.4 (6707) / macOS 26.6.2 that this is tied to the plug-in's identity plus a private global property Logic queries when the plug-in is loaded: with a listed manufacturer code and that property answered, our plug-in is rendered immediately on an empty track and the host clock arrives. We are of course not going to ship under another vendor's identity; this was a one-off local test to make sure we understand the mechanism before asking. Log excerpt from that test (plug-in log, out-of-process hosting, empty audio track, 48 kHz): 09:19:38 host asked property 101000 → 0 09:19:38 host asked property 101001 → 1 09:19:38 Initialize → 0 · in 2 ch @ 48000 Hz · out 2 ch 09:19:39 First render after 0s · input callback · tempo 120.00 Same build under our own manufacturer code EINX: "No render after 30s · host clock tempo+transport · flags 0". The request Could ACENTAUR (aumf / Acnt / EINX) be added to the set of plug-ins Logic keeps processing without input? The plug-in already answers the property in question; the only missing piece is on Logic's side. If there is a different or public mechanism you would prefer third parties to adopt (a component tag, an AU property, an AUv3 property), we will implement it right away. Happy to provide a build, a demo project and whatever else helps. Christoph Kahse, EINAUX
Replies
0
Boosts
0
Views
64
Activity
6d
tvOS 27.2 started presenting playing item in top right corner for every video
Hi guys, after upgrade to tvOS 27.2 I noticed that every time our video streaming app sets up video stream, OS presents playing item popup. We are using MPNowPlayingInfoCenter. We do not set it only when app gets minimized, but always, that is when app is maximized, player is in full screen and one episode ends and another starts, etc. The reason is that we want playing metadata to be visible on iOS for users who use iPhone as remote controller. Our app is playing 24/7 and never stops even backing out of the player does not stop playback, user can keep switching channels rapidly, that is user can hold arrows and can see channel numbers going up rapidly (like 10 channels per second) and at the same time we set MPNowPlayingInfoCenter. We could use debounce for MPNowPlayingInfoCenter and set it only if user stops at a channel say for 0.5s, but after that OS still presents annoying popup. Is that a new tvOS 27.2 feature or a bug? Right now this is very bad user experience. Do we need to stop using MPNowPlayingInfoCenter completely to avoid this behavior? We are planning refactoring and using the new Now Playing framework and MediaSession, but I'm not sure if that can prevent this annoying popup. Not sure if we should completely remove support for Now Playing on iOS to avoid this popup on tvOS.
Replies
0
Boosts
0
Views
298
Activity
1w
Public API for torch beam width (Adaptive True Tone flash)?
On iPhone 14 Pro and later, the system flashlight in Control Center can adjust beam width (narrow ↔ wide). As far as I can tell, AVCaptureDevice only exposes torchMode, torchLevel and setTorchModeOn(level:) I found nothing related to beam width Is there any supported way for a third-party app to control the torch beam width? If not, is this on the roadmap?
Replies
0
Boosts
0
Views
296
Activity
1w