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

HLS Tools - hlsreport critical error cause
Hi, I'm currently experiencing issues with HLS streams created by FFmpeg running on Safari. When I pass the stream to the mediastreamvalidator tool and then run hlsreport on the output, I get a critical error reported: Media Entry discontinuity value does not match previous playlist for MEDIA-SEQUENCE 1 If I let the stream finish (it's a live stream from an IoT device) and then perform the stream validation again I no longer receive the critical error. My assumption is that this critical error is contributing to the HLS stall on iOS. I have also noticed that if I let the stream continue and then re-load the video control in Safari the stream starts Is there a resource with explanations or remediation paths relevant to the possible output of the hlsreport? My m3u8 output looks like this (I have redacted the server host) #EXTM3U #EXT-X-VERSION:6 #EXT-X-TARGETDURATION:2 #EXT-X-MEDIA-SEQUENCE:1 #EXT-X-PLAYLIST-TYPE:EVENT #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-DISCONTINUITY #EXTINF:2.000000, https://redacted.com/segment-00001.ts #EXTINF:2.000011, https://redacted.com/segment-00002.ts #EXTINF:2.000011, https://redacted.com/segment-00003.ts #EXTINF:2.000011, https://redacted.com/segment-00004.ts #EXTINF:2.000011, #EXT-X-ENDLIST Thanks for any advice or guidance possible - if I can provide isolated code snippets I will do. Andy
2
0
1.7k
Aug ’26
ReplayKit captures AVPictureInPictureVideoCallViewController recursively — supported exclusion mechanism?
We are building an accessibility-focused iOS app that uses a user-initiated ReplayKit broadcast to recognize visible text and provide an on-device translation. To keep the translated result visible while the user is in another app, the current prototype presents the translation UI with AVPictureInPictureVideoCallViewController. The problem is that ReplayKit includes this PiP window in the captured frames. Once the captured frame is rendered back into the PiP content, the PiP captures itself recursively, obscures the source text, and can significantly degrade performance. Reproduction: Start a system broadcast using RPSystemBroadcastPickerView. Present AVPictureInPictureVideoCallViewController with the app's translation UI. Leave the host app and place the PiP window over another app. Inspect the CMSampleBuffer frames received by the broadcast upload extension. The frames contain the PiP window itself, producing a repeated "window inside window" image. We need a public, App Store-safe architecture that: keeps a small user-controlled translation surface visible across apps; allows the user to move or collapse it; prevents that app-owned floating surface from appearing in ReplayKit capture; uses only explicit user activation and documented APIs. Questions: Is there a supported public API or entitlement that excludes an app-owned PiP window, UIWindow, view, or layer from ReplayKit capture? If not, is there a supported alternative to PiP for a compact cross-app accessibility controller that the system excludes from capture? Is the broadcast upload extension expected to receive any metadata identifying the PiP region so it can be masked without relying on visual heuristics? We are not requesting private API access. A focused Xcode reproduction project has already been provided to Apple Developer Technical Support under an active TSI, and the related enhancement request is FB24319994. Environment: Xcode 26.6 (17F113) iPhone / iOS 18 and later ReplayKit broadcast upload extension AVPictureInPictureVideoCallViewController Any documented approach or confirmation that this is currently unsupported would be very helpful.
1
0
242
Aug ’26
Unable to Generate New FairPlay Streaming Certificate – Maximum Certificate Limit Reached with No Revocation Option
Keywords: FairPlay, FairPlay Streaming, FPS Certificate, DRM, Certificate Limit, License Server Hello Apple Developer Forums Team, We are seeking guidance regarding a FairPlay Streaming (FPS) certificate issue that is currently blocking our production DRM infrastructure. We previously generated FairPlay Streaming deployment credentials and have been using FairPlay Streaming for our protected video content. Unfortunately, our old server infrastructure crashed, and the private keys/credentials associated with the previously generated FairPlay Streaming certificate were permanently lost. As a result, we need to generate replacement FairPlay Streaming deployment credentials. However, when attempting to create a new FairPlay Streaming certificate, our Apple Developer account now displays the following error: “Maximum number of certificates generated.” The main issue is that the existing FairPlay Streaming certificates do not provide any option in the Apple Developer portal to revoke or delete them. Therefore, we are unable to remove obsolete or inaccessible certificate records and cannot generate replacement credentials. Our current situation is: We have reached the maximum number of FairPlay Streaming certificates allowed for our Developer Team. The Apple Developer portal does not provide a revoke or delete option for the existing FPS certificates. The private keys associated with our old FairPlay Streaming credentials were permanently lost after our previous server infrastructure crashed. We cannot recover or reuse those old credentials. We are unable to generate replacement FairPlay Streaming deployment credentials because the certificate generation limit has been reached. This is currently blocking our ability to restore and maintain our FairPlay-protected production streaming service. We have already contacted Apple Developer Support and submitted multiple follow-ups regarding this issue, but we have not yet received a solution that allows us to generate replacement credentials. We would like to understand the official Apple-supported process for the following situation: What is the supported procedure when a Developer Team reaches the maximum number of FairPlay Streaming certificates? If existing FPS certificates cannot be revoked or deleted through the Developer portal, is there an Apple-supported process to remove obsolete or inaccessible FPS certificate records? Can Apple reset or restore the FairPlay Streaming certificate generation capacity for a Developer Team when the old credentials and private keys are permanently unavailable? Is there another supported method for generating replacement FairPlay Streaming deployment credentials in this situation? We are not requesting general instructions on how to generate a FairPlay Streaming certificate. We understand the standard certificate generation process. Our issue is specifically related to an exhausted FPS certificate generation limit combined with the absence of a self-service revoke/delete option for the existing certificates. We would greatly appreciate guidance from Apple or the FairPlay Streaming team on how to resolve this issue and restore our ability to generate replacement FPS deployment credentials. Thank you for your assistance.
2
0
158
Aug ’26
Logic Pro: Supported API or control-surface method for direct playhead navigation to project marker positions beyond marker 20
I am developing DOWNBEAT, a paid macOS Audio Unit plugin for Logic Pro live playback control. The plugin reads marker, tempo, and time signature data from a user-selected Logic Pro project and lets performers build a stage setlist. During live use, the performer needs to click a song in DOWNBEAT and have Logic Pro move the playhead directly to that song’s marker position. The current reliable method uses Logic Pro controller assignments mapped to “Go to Marker Number 1” through “Go to Marker Number 20.” This works for markers 1-20, but Logic Pro does not appear to expose direct “Go to Marker Number 21” or higher commands. I need to know whether Apple provides any supported public API, control-surface API, MIDI Device Script capability, Audio Unit host interaction, Apple Event, or other documented mechanism that allows a third-party macOS app/plugin to move Logic Pro’s playhead directly to a bar/beat position or marker position without opening a modal window. This is for live performance, so reliability is critical. Methods that open the “Go to Marker” or “Go to Position” window and type values are not acceptable, because they create visible UI interruptions during a show. What I have already tested: Logic Pro controller assignments: “Go to Marker Number 1” through “Go to Marker Number 20” work. “Go to Marker Number 21” does not appear to exist as a direct assignable command. Logic Pro MIDI Device Script / Lua control-surface script: I created a temporary MIDI Device Script that mapped a test control to “Go to Marker Number 1.” That worked. I then mapped another test control to “Go to Marker Number 21.” That did not work. I also tested “Go to Marker Number...” and it did not provide a usable direct non-modal workflow. MIDI Machine Control / SMPTE Locate: Logic received incoming MIDI, but location behavior was not reliable enough for live use. In multi-tempo projects, locate results could land incorrectly or cause visible playhead jumps. Logic Environment meta events: Tested incoming MIDI through the Logic Environment. MIDI was visible, but it did not provide reliable direct marker navigation. Mackie Control / MCU direction: Research suggests MCU marker commands do not provide direct absolute marker selection beyond the limited marker/function range. Specific questions: Is there a supported public way for a third-party macOS app, Audio Unit plugin, MIDI Device Script, or Logic Pro control-surface integration to set Logic Pro’s playhead directly to a specific bar/beat position? Is there a supported public way to trigger direct marker navigation beyond “Go to Marker Number 20” without opening a modal window? If the answer is no, is the recommended Apple-supported approach for this use case to limit direct marker navigation to the first 20 markers? Is there any supported Logic Pro control-surface API or developer program path that would allow this kind of direct live-performance marker navigation?
0
0
312
Aug ’26
PHAssetResource deprecated originalFilename replaced with filename, but PHAssetExtendedMetadata only has originalFilename in iOS 27
PHAssetExtendedMetadata has the following API: /// The original file name of this asset. open var originalFilename: String? { get } And PHAssetResource has the following API: @available(iOS, introduced: 9, deprecated: 27, message: "Use filename instead") open var originalFilename: String { get } /// The filename associated with this asset resource (if any) @available(iOS 27, *) open var filename: String? { get } I'm confused why PHAssetExtendedMetadata (iOS 27+) has originalFilename while PHAssetResource originalFilename was deprecated and replaced with filename. I would have expected PHAssetExtendedMetadata's property be named filename to match. Are all 3 of these all the exact same name or can there be differences?
1
0
385
Aug ’26
The capture date displayed in the album is incorrect.
Here is a natural, professional English translation suitable for a bug report (such as filing via Apple's Feedback Assistant): Title / Summary Photos app defaults to creation time instead of EXIF date when region and time format are mismatched Bug Description Photos saved or received in the system Photos app (via downloads, AirDrop, etc.) use the saving timestamp as their capture date instead of preserving the photo's original metadata/EXIF timestamp. Steps to Reproduce Go to Settings > General > Language & Region. Set a Region whose default time format differs from your custom toggle (e.g., set Region to Japan, which defaults to a 24-hour clock, but manually switch the time format toggle to 12-Hour Time). Save or receive an image via AirDrop/download. Observe that the photo's original date metadata is ignored and replaced by the current timestamp. Root Cause Analysis The bug occurs when the device's custom time format (12/24-hour) mismatches the default time format of the selected Region, causing date metadata parsing to fail in the Photos app. Workaround Resetting the time format back to match the Region's default setting resolves the issue. Expected Result The system should correctly parse and preserve original image creation dates regardless of custom region or time format overrides. This issue should be resolved in a future software update. Affected OS Versions iOS 17+ iPadOS 17+ macOS 14 (Sonoma)+
1
0
790
Aug ’26
How should live latency be measured and maintained with AVPlayer (HLS / LL-HLS)?
We keep live playback at a consistent distance from the live edge using small playback rate adjustments, with a target range based on recommendedTimeOffsetFromLive. Since the live edge is not exposed by AVPlayer, we currently fall back to seekableTimeRanges.end as our best approximation. What should be treated as the live edge, and how should the current live latency be measured? Is rate adjustment the appropriate way to hold a target latency? While playing above 1.0x, the playhead can reach the seekable end, at which point AVPlayerItemDidPlayToEndTime fires and halts the live stream. How can we guard against ? Does any of this differ between regular HLS and LL-HLS? A clear statement of the intended contract here would resolve a lot of uncertainty. Thanks in advance.
3
0
808
Aug ’26
Video recording goes fine but adding audio fails mysteriously
I'm trying to update an old unity app for a client. The app has been crashing on iOS in a plugin they use called NatCorder. They use it to record video only separately and then re-record it with effects and audio gathered separately. Instead of trying to update the plugin to something else which would be quite the hassle, I noticed the API for the native part of the plugin, where the crash occurs, is very simple, especially if you don't try to support everything the plugin does and the app does not use. So I tried to re-implement that native library using AVFoundation. I got the video recording right, it captures the camera from the iPhone and writes it to a file properly. However, when the app does the second part, where it sends video and audio frames to the plugin, it fails. The app sends all the video frames and then sends all the audio frames. The video frames are eaten fine by AVFoundation but the audio fails at random points with unknown errors. I wonder if I'm trying to use incompatible audio-video formats or if I'm using timestamps wrong or something. Here's my init code. Anything suspicious to you? void* NCCreateMP4Recorder(int width, int height, float framerate, int bitrate, int keyframeInterval, int sampleRate, int channelCount, const char* recordingPath, void (*callback)(void*, void*), void* context) { Recorder* recorder = calloc(1, sizeof(Recorder)); recorder->context = context; recorder->callback = callback; recorder->path = strdup(recordingPath); recorder->width = width; recorder->channelCount = channelCount; recorder->sampleRate = sampleRate; recorder->height = height; NSError *error = nil; NSURL* url = createURLFromArgumentCString(recordingPath); recorder->writer = [AVAssetWriter assetWriterWithURL:url fileType:AVFileTypeMPEG4 error:&error]; if (recorder->writer == nil) NSLog(@"Failed creating media writer: %@", error); NSDictionary *videoSettings = @{ AVVideoCodecKey: AVVideoCodecTypeH264, AVVideoWidthKey: @(width), AVVideoHeightKey: @(height), AVVideoCompressionPropertiesKey: @{ AVVideoAverageBitRateKey: @(bitrate), AVVideoMaxKeyFrameIntervalKey: @(keyframeInterval), } }; recorder->video = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:videoSettings]; if (recorder->video == nil) NSLog(@"Failed creating video writer input"); recorder->video.expectsMediaDataInRealTime = true; NSDictionary* videoSource = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:kCVPixelFormatType_32ARGB], kCVPixelBufferPixelFormatTypeKey, [NSNumber numberWithInt:width], kCVPixelBufferWidthKey, [NSNumber numberWithInt:height], kCVPixelBufferHeightKey, nil]; recorder->videoAdaptor = [AVAssetWriterInputPixelBufferAdaptor assetWriterInputPixelBufferAdaptorWithAssetWriterInput:recorder->video sourcePixelBufferAttributes:videoSource]; if (recorder->videoAdaptor == nil) NSLog(@"Failed creating video adaptor"); if ([recorder->writer canAddInput:recorder->video]) [recorder->writer addInput:recorder->video]; else NSLog(@"Could not add video input to writer"); if (sampleRate > 0 && channelCount > 0) { AudioChannelLayout layout = { .mChannelLayoutTag = channelCount == 1 ? kAudioChannelLayoutTag_Mono : kAudioChannelLayoutTag_Stereo, .mChannelBitmap = 0, .mNumberChannelDescriptions = 0 }; NSDictionary* audioOutputSettings = @{ AVFormatIDKey: @(kAudioFormatMPEG4AAC), AVNumberOfChannelsKey: @(channelCount), AVSampleRateKey: @(sampleRate), AVEncoderBitRateKey: @128000, AVChannelLayoutKey: [NSData dataWithBytes:&layout length:sizeof(layout)] }; recorder->audio = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeAudio outputSettings:audioOutputSettings]; if (!recorder->audio) NSLog(@"Failed creating audio adaptor"); recorder->audio.expectsMediaDataInRealTime = true; AudioStreamBasicDescription audioStreamDesc = { .mSampleRate = sampleRate, .mFormatID = kAudioFormatLinearPCM, .mFormatFlags = kAudioFormatFlagIsPacked | kAudioFormatFlagIsFloat, .mBytesPerPacket = channelCount * sizeof(float), .mFramesPerPacket = 1, .mBytesPerFrame = channelCount * sizeof(float), .mChannelsPerFrame = channelCount, .mBitsPerChannel = sizeof(float) * 8, }; OSStatus status = CMAudioFormatDescriptionCreate(kCFAllocatorDefault, &audioStreamDesc, sizeof(layout), &layout, 0, nil, nil, &recorder->audioDesc); if (status) NSLog(@"Failed creating audio format description: %d", (int)status); if ([recorder->writer canAddInput:recorder->audio]) [recorder->writer addInput:recorder->audio]; else NSLog(@"Could not add audio input to writer"); } if (![recorder->writer startWriting]) NSLog(@"Could not start writing: %@", recorder->writer.error); [recorder->writer startSessionAtSourceTime:kCMTimeZero]; NSLog(@"Recording started to %s", recordingPath); return recorder; }
2
0
219
Aug ’26
iOS 27: ScreenCaptureKit requires UIBackgroundModes 'screen-capture', but App StoiOS 27: ScreenCaptureKit requires UIBackgroundModes 'screen-capture', but App Store Connect rejects that valuere Connect rejects that value
On iOS, ScreenCaptureKit terminates an SCStream when the app is backgrounded unless the app declares UIBackgroundModes: screen-capture. The delegate reports SCStreamError code -3824 (SCStreamError.Code.missingBackgroundMode). Adding screen-capture to UIBackgroundModes - the value Apple's own iOS 27 ScreenCaptureKit sample code declares - makes App Store Connect reject the upload: error: exportArchive Invalid Info.plist value. The Info.plist key UIBackgroundModes contains an invalid value: 'screen-capture'. So the app cannot be distributed at all, not even to TestFlight internal testers. We have ruled out simply keeping the process alive: running a continuous silent AVAudioEngine under the audio background mode keeps the app running but does not prevent -3824, which is consistent with the framework performing an explicit background-mode check rather than the stream dying from process suspension. One observation that may explain why this has gone unnoticed: Apple's sample is installed directly from Xcode and therefore never passes through App Store Connect's upload validation, so a mismatch between the sample's Info.plist and App Store Connect's allowlist would not be visible when testing the sample internally. My question is which of these three describes the actual status of screen-capture for third-party iOS apps: (1) App Store Connect's allowlist has not yet been updated for iOS 27, and this will resolve on its own. (2) screen-capture requires an entitlement or a specially provisioned profile we have not requested. If so, which one, and how is it requested? (3) screen-capture is restricted to Apple's own or system applications and is not available to third-party App Store apps by design. I could not find screen-capture documented on the general UIBackgroundModes page, which is why I cannot tell these apart. Filed as FB24169650. Device: iPhone 16 Pro, iOS 27.0 Built against the iOS 27 SDK, deployment target 17.0.
4
0
584
Aug ’26
Processing / tapping an HLS audio stream (or global app output)
I'm trying to do some realtime audio processing on audio served from an HLS stream (i.e. an AVPlayer created using an M3U HTTP URL). It doesn't seem like attaching an AVAudioMix configured with with an `audioTapProcessor` has any effect; none of the callbacks except `init` are being invoked. Is this a known limitation? If so, is this documented somewhere?If the above is a limitation, what are my options using some of the other audio APIs? I looked into `AVAudioEngine` as well but it doesn't seem like there's any way I can configure any of the input node types to use an HLS stream. Am I wrong? Are there lower level APIs available to play HLS streams that provide the necessary hooks?Alternatively, is there some generic way to tap into all audio being output by my app regardless of its source?Thanks a lot!
12
0
5.4k
Aug ’26
Facing issues with response from Fairplay SDK based service
Currently we are building a service based on Fairplay SDK version 26.0. Currently our solution is using version 4.5.4. When we run the below request to get version we get proper response curl http://xx.xx.xx.xx:8080/fps/v Response - V26.0 Our client applications call below two APIs https://GW_HOST:8080/fairplay_cert https://GW_HOST:8080/fairplay_license Within the cert API call, we are returning the fairplay public certificate. Currently we are trying to use the test certificate provided along with Fairplay SDK (test_fps_certificate_v26.bin) Then within the fairplay_license API call, we are trying to reach fairplay service based on Fairplay SDK v26 We are seeing some issues with below request(attaching the request json payload) curl -v -X POST -H "Content-Type: application/json" -d @SDKValidation_NewCert.json http://xx.xx.xx.xx:8080/fps SDKValidation_NewCert.json We are getting below response from SDK {"fairplay-streaming-response":{"create-ckc":[{"id":1,"status":-42605}]}} When we checked the apache error logs in the file "/etc/httpd/logs/error_log" we see below error [DEBUG] ❌ Assertion failure: invalidCertificateErr (-42605) [src/extension.swift:249] This is looks to be some error related to certificate. As mentioned earlier, client application is making a certificate call where we are returning the certificate set up . These certificates are already configured in the credentials path. Also note that the test samples provided with the SDK return valid license response. We had earlier raised a similar ticket mentioned below and we were asked not to use test certs. So we have raise CSR and used new certs for testing. https://developer.apple.com/forums/thread/836652?page=1
4
0
1.2k
Aug ’26
Preserve AirPods Transparency while capturing one AirPod microphone for low latency cross ear audio
I am prototyping an iOS accessibility audio application for people with unilateral hearing loss. The goal is simple. Capture environmental audio using the AirPod on the poor hearing side and route that audio with very low latency into the AirPod on the working hearing side. The core concept is already working on physical AirPods and an iPhone. Our desired signal path is Right AirPod microphone → iPhone audio processing → Left AirPod output The user sets the AirPods microphone in Settings to Always Right AirPod. The app then captures that Bluetooth microphone and routes the signal into the left output channel. Using AVAudioSession and AVAudioEngine we have successfully achieved low latency cross ear audio. The main issue is native AirPods Transparency. When the app activates the AirPods Bluetooth microphone using HFP, the transferred audio continues working correctly, but native Transparency audio on the receiving AirPod effectively disappears. Interestingly, iOS still reports Transparency as enabled in Control Center and AirPods settings. This means the user can hear audio transferred from the poor hearing side, but their working ear loses much of the normal environmental sound that Transparency previously provided. We have tested several configurations. Normal Bluetooth HFP with playAndRecord This provides the best result so far. The AirPods microphone signal is strong. The output route exposes two channels. We can route the microphone signal only to the opposite AirPod. Latency can be reduced enough that conversation feels nearly real time. However, native Transparency on the receiving AirPod effectively stops providing environmental audio. bluetoothHighQualityRecording Microphone quality is noticeably better. However, latency is significantly higher and produces an audible delayed or echo effect during conversation. Transparency has the same general issue. multiRoute with dualRoute This allows the iPhone audio hardware and AirPods to operate simultaneously. It appears to preserve more ambient awareness on the working side. However, the AirPods microphone becomes substantially weaker when used as the secondary Bluetooth HFP input. We measured the incoming AirPods microphone signal at roughly minus 40 dB during normal speech testing. Adding 12 to 18 dB of software gain increases distortion without materially improving intelligibility. farFieldInput with dualRoute We tested the raw AirPods microphone with and without farFieldInput. The microphone levels and practical pickup were very similar. Far field speech processing improved intelligibility somewhat, but did not solve the weak secondary Bluetooth input signal. Our main technical question is Is there a supported AVAudioSession configuration, Core Audio API, AirPods API, or entitlement that allows a third party application to capture an AirPods microphone while preserving the AirPods native Transparency processing on the output AirPod? Ideally we want Right AirPod microphone capture plus native Transparency on the left AirPod plus application generated right to left audio mixed into the left AirPod all operating simultaneously. We do not need access to Apple's Transparency microphone signal itself if native Transparency can simply remain active while our application audio is mixed into the receiving AirPod. If this is not currently possible using public APIs, is this an intentional platform limitation of the AirPods Bluetooth microphone route? We would also appreciate guidance on whether there is another recommended architecture for this accessibility use case. The low latency cross ear routing itself works surprisingly well. Preserving natural environmental audio in the user's working ear while the Bluetooth microphone is active is currently the main technical blocker. Testing has been performed on a physical iPhone running iOS 26.x using Xcode 26.6 and current AirPods hardware, not the Simulator. Thank you for any guidance.
0
0
188
Aug ’26
[iOS 27 DB3] Photos taken with third party apps have photographic styles applied
It's unclear if this is a bug or a new feature but I have noticed that my photos starting coming out looking more stylised than expected and worked out that it was because photographic styles were being applied even tho I was taking photos through a third party app. Is there a way to disable this behaviour if it is intended? I've raised a feedback report #FB23632714 Photographic Styles [OFF] Photographic Styles [ON] My settings:
2
0
818
Aug ’26
Apple Music / MusicKit Commercial Integration Enquiry – Multiplayer Music Game
Hello, Could this please be forwarded to the team responsible for Apple Music / MusicKit commercial integrations, developer partnerships and licensing? I am currently assessing the feasibility of developing a commercial browser-based multiplayer music game and would like to understand whether Apple Music and MusicKit could support the proposed use case. At a high level, players would privately select tracks from the Apple Music catalogue within the game. Once selections are complete, the application would arrange the selected tracks for sequential playback through a shared host account/device. Players would then interact with those tracks through the game. The application would provide the game functionality and would not download, store or independently redistribute full music recordings. Before progressing with development, I would appreciate clarification on the following: Commercial game use: Is integration of the Apple Music catalogue and MusicKit playback functionality into a commercial multiplayer game permitted? If specific approval, licensing or a commercial agreement with Apple is required, what is the appropriate process? Monetisation: Can the game itself be monetised through subscriptions, one-off purchases/party passes or advertising, provided users are paying for the game functionality rather than access to Apple Music or its catalogue? Apple Music subscription requirements: Would the account providing full-track playback need an active Apple Music subscription? If so, would only the host/playback account require a subscription, while other participants could join the game, search/select tracks and vote without having an Apple Music subscription themselves? Commercial playback alternative: If an Apple Music subscription is required for full-track playback, does Apple offer any commercial, licensing or partnership arrangement whereby the game operator could fund the necessary playback rights directly, rather than requiring the host to hold an individual Apple Music subscription? Catalogue access: Can players search the Apple Music catalogue and select tracks from within the application without every participant individually authenticating with Apple Music or holding an Apple Music subscription? Track availability: Can MusicKit/API functionality confirm whether a selected track is available for playback in the host's storefront/territory before accepting the selection? Playback control: Can the application create and manage a temporary playback queue containing the selected tracks and initiate sequential playback through an authorised host account/device without requiring the host to manually locate and play each track in the Apple Music application? Audio previews: Are short audio previews available through Apple Music/MusicKit, and may these be used within a commercial multiplayer game to help users identify a track before selecting it? If so, are there restrictions on preview duration or monetised use? Multi-provider support: Would Apple's terms permit Apple Music to be offered as one of several supported music playback providers within the same application, allowing a host to choose Apple Music or another supported streaming service? Additional licensing: If full recordings continue to be delivered and played through Apple Music/MusicKit, would the game developer require any additional master recording, publishing, public-performance or other music licences directly from rights-holders or collecting societies? Web/browser implementation: As the initial product is intended to be browser-based rather than a native iOS application, can the above catalogue, authentication and playback functionality be implemented through MusicKit on the Web? Are there any material differences in commercial permissions or capabilities compared with a native MusicKit implementation? Scaling: Are there different MusicKit/API access, approval, rate-limit or commercial requirements if the application progresses from development/testing to a publicly available commercial product with a significant user base? At this stage I am primarily trying to establish whether a compliant technical and commercial model exists before investing in development. If this enquiry would be better directed to an Apple Music partnership, MusicKit, licensing or business-development team, I would appreciate being pointed towards the appropriate contact. I would be happy to provide further technical details about the proposed integration if required. Kind regards, Errol Brinkman
0
0
407
Aug ’26
watchOS: Network framework WebSocket loses its path ~35 s in, while URLSession keeps working
Following up on TN3135 and the resolution in https://developer.apple.com/forums/thread/773362 — that thread solved establishing a low-level connection on watchOS (the asynchronous AVAudioSession.activate(options:completionHandler:) instead of the synchronous setActive()). This question is about a connection staying established, which I could not find discussed anywhere. Environment: Apple Watch, watchOS 26.6 (23U67). Audio app, WKBackgroundModes = ["self-care"]. Real device, TestFlight build, not the simulator. What works Opening an NWConnection WebSocket to my own server is reliable — 8 attempts out of 8 reached .ready in 0.28–0.98 s, and an echo frame round-tripped in 27–89 ms. Interestingly, in my measurements it opens under BOTH activation variants: the asynchronous activate(options:completionHandler:) AND the synchronous setActive(true). The two are within ~0.2 s of each other. I mention it only because the thread above concluded the synchronous one is insufficient; on 26.6 I cannot reproduce that difference for establishment. What fails The connection goes quiet after roughly half a minute, and an NWPathMonitor running alongside it shows why: the path transitions to .unsatisfied. Four runs: +34.0 s (cellular) +34.6 s (cellular) +36.0 s (Wi-Fi) +34.3 s (companion link only — availableInterfaces ["other", "other"]) The server sends a heartbeat frame every 5 s and closes the socket on a schedule, so I can tell "the peer closed" from "we stopped receiving". The client receives beats 1–6 (5 s … 30 s) and then nothing; the scheduled close never arrives. What I ruled out Server side. The same client construction run on macOS against the same endpoint receives all 8 heartbeats and the scheduled close at 45.1 s. Both audio-session activation variants — no difference, as above. Network type — cellular, Wi-Fi and companion-link-only all drop at ~35 s. The app being suspended. The app keeps logging densely throughout, and in the last run it held a WKExtendedRuntimeSession (delegate reported extendedRuntimeSessionDidStart) and was actively playing audio through AVAudioEngine from the first second — i.e. the audio-streaming condition TN3135 describes — for the entire window. The path dropped anyway, at +34.3 s. An idle socket. Server traffic arrives every 5 s until the drop. The comparison that puzzles me The same app, on the same watch, the same afternoon, relays the same realtime audio session over plain HTTPS (URLSession) instead — and that runs for 64 s continuously without a stall, including straight through a WatchConnectivity "reachability settled: unreachable" transition. So a high-level URLSession request stream survives a period in which a low-level NWConnection's path is reported unsatisfied. That is consistent with the note in thread 773362 that "on watchOS every session is kinda like a background session, where the actual work is done out of process" — but it leaves me unsure what the intended behaviour is. Questions Is a ~35 s path lifetime the expected behaviour for low-level networking on watchOS, or does it indicate something wrong on my side? Does the TN3135 audio-streaming exception cover only the establishment of a low-level connection, or is it also supposed to keep the path available for the duration of the audio streaming? If it is supposed to persist: is there something beyond an active audio session, flowing audio and a WKExtendedRuntimeSession that an app must do to keep the path alive? If ~35 s is the expected ceiling, is a WebSocket a supported transport for a multi-minute conversational audio session on watchOS at all — or is relaying over URLSession the intended approach despite the guidance to prefer Network framework? Happy to file a bug with a sysdiagnose and a reduced sample project if that is more useful — please say the word and I will attach the numbers above.
4
0
1.4k
Aug ’26
API vs Accessibility
I’m developing a small macOS workflow utility for Final Cut Pro and I’d like to confirm whether there is a supported API for a particular project-management workflow before relying on macOS Accessibility automation. The utility is intended to take an existing Final Cut Pro project and create multiple native duplicates at different custom frame sizes — for example: 1920 × 1080 1080 × 1920 1080 × 1350 1080 × 1080 custom banner dimensions The desired operation is essentially the equivalent of Final Cut Pro’s Duplicate Project As… command: duplicate the selected project, assign a new name, set a custom video resolution, and optionally enable or disable Smart Conform. It is important that Final Cut Pro itself performs a native project duplication so that all existing project data is retained, including effects, grades, plug-ins, keyframes, compound clips, retiming and Magnetic Masks. I initially prototyped the workflow using FCPXML, which works very well for creating the differently sized projects. However, Apple’s documentation notes that Magnetic Masks are not included in XML exports, so an FCPXML round-trip is not suitable for this use case. I’ve reviewed the documentation for FCPXML, Workflow Extensions / ProExtensionHost, and programmatic communication with Final Cut Pro using Apple Events, but I haven’t found a documented API that allows an application to: Duplicate the currently selected Final Cut Pro project natively. Rename the duplicated project. Change its video format to an arbitrary custom width and height. Optionally control Smart Conform. I currently have a working proof of concept using the macOS Accessibility API to invoke and operate Final Cut Pro’s native Duplicate Project As… interface. Before developing that approach further, I’d like to confirm that I’m not overlooking a supported Final Cut Pro API or Workflow Extension capability that would accomplish the same thing more directly and robustly. Is there a supported public API for this workflow, either through the Workflow Extension SDK, ProExtensionHost, Apple Events, scripting support, or another Professional Video Applications framework? If not, is using macOS Accessibility to automate Final Cut Pro’s native project-duplication interface an appropriate approach for a third-party macOS workflow utility? Many thanks, James
0
0
299
Aug ’26
AVCustomRoutingController and background audio
Hi, I have implemented a custom audio streaming protocol in my iOS app using AVCustomRoutingController to select my custom device. Playback and streaming works. However when the app is the background, it gets killed in a couple of seconds, like if it was not playing audio. My app has the Audio/AirPlay/PIP background mode and can play audio from the background when the route is a normal AVRoute from the system (Speaker/AirPlay/Bluetooth, etc). I tried starting an AVAudioSession (playback category, activated, with and without MPRemoteCommandCenter bindings and with and without populating NowPlayingInfoCenter) was hoping that if that is active, my app won't be killed. But it seems like it does get killed if the app is not producing audio using AudioOutputUnit/AVAudioEngine/AVPlayer. How does one supposed to stream audio from an app in the background using a custom protocol? The infamous "let's play silence to not get killed" solution works, but obviously that can't be the answer.
0
0
302
Aug ’26
HLS Tools - hlsreport critical error cause
Hi, I'm currently experiencing issues with HLS streams created by FFmpeg running on Safari. When I pass the stream to the mediastreamvalidator tool and then run hlsreport on the output, I get a critical error reported: Media Entry discontinuity value does not match previous playlist for MEDIA-SEQUENCE 1 If I let the stream finish (it's a live stream from an IoT device) and then perform the stream validation again I no longer receive the critical error. My assumption is that this critical error is contributing to the HLS stall on iOS. I have also noticed that if I let the stream continue and then re-load the video control in Safari the stream starts Is there a resource with explanations or remediation paths relevant to the possible output of the hlsreport? My m3u8 output looks like this (I have redacted the server host) #EXTM3U #EXT-X-VERSION:6 #EXT-X-TARGETDURATION:2 #EXT-X-MEDIA-SEQUENCE:1 #EXT-X-PLAYLIST-TYPE:EVENT #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-DISCONTINUITY #EXTINF:2.000000, https://redacted.com/segment-00001.ts #EXTINF:2.000011, https://redacted.com/segment-00002.ts #EXTINF:2.000011, https://redacted.com/segment-00003.ts #EXTINF:2.000011, https://redacted.com/segment-00004.ts #EXTINF:2.000011, #EXT-X-ENDLIST Thanks for any advice or guidance possible - if I can provide isolated code snippets I will do. Andy
Replies
2
Boosts
0
Views
1.7k
Activity
Aug ’26
ReplayKit captures AVPictureInPictureVideoCallViewController recursively — supported exclusion mechanism?
We are building an accessibility-focused iOS app that uses a user-initiated ReplayKit broadcast to recognize visible text and provide an on-device translation. To keep the translated result visible while the user is in another app, the current prototype presents the translation UI with AVPictureInPictureVideoCallViewController. The problem is that ReplayKit includes this PiP window in the captured frames. Once the captured frame is rendered back into the PiP content, the PiP captures itself recursively, obscures the source text, and can significantly degrade performance. Reproduction: Start a system broadcast using RPSystemBroadcastPickerView. Present AVPictureInPictureVideoCallViewController with the app's translation UI. Leave the host app and place the PiP window over another app. Inspect the CMSampleBuffer frames received by the broadcast upload extension. The frames contain the PiP window itself, producing a repeated "window inside window" image. We need a public, App Store-safe architecture that: keeps a small user-controlled translation surface visible across apps; allows the user to move or collapse it; prevents that app-owned floating surface from appearing in ReplayKit capture; uses only explicit user activation and documented APIs. Questions: Is there a supported public API or entitlement that excludes an app-owned PiP window, UIWindow, view, or layer from ReplayKit capture? If not, is there a supported alternative to PiP for a compact cross-app accessibility controller that the system excludes from capture? Is the broadcast upload extension expected to receive any metadata identifying the PiP region so it can be masked without relying on visual heuristics? We are not requesting private API access. A focused Xcode reproduction project has already been provided to Apple Developer Technical Support under an active TSI, and the related enhancement request is FB24319994. Environment: Xcode 26.6 (17F113) iPhone / iOS 18 and later ReplayKit broadcast upload extension AVPictureInPictureVideoCallViewController Any documented approach or confirmation that this is currently unsupported would be very helpful.
Replies
1
Boosts
0
Views
242
Activity
Aug ’26
Unable to Generate New FairPlay Streaming Certificate – Maximum Certificate Limit Reached with No Revocation Option
Keywords: FairPlay, FairPlay Streaming, FPS Certificate, DRM, Certificate Limit, License Server Hello Apple Developer Forums Team, We are seeking guidance regarding a FairPlay Streaming (FPS) certificate issue that is currently blocking our production DRM infrastructure. We previously generated FairPlay Streaming deployment credentials and have been using FairPlay Streaming for our protected video content. Unfortunately, our old server infrastructure crashed, and the private keys/credentials associated with the previously generated FairPlay Streaming certificate were permanently lost. As a result, we need to generate replacement FairPlay Streaming deployment credentials. However, when attempting to create a new FairPlay Streaming certificate, our Apple Developer account now displays the following error: “Maximum number of certificates generated.” The main issue is that the existing FairPlay Streaming certificates do not provide any option in the Apple Developer portal to revoke or delete them. Therefore, we are unable to remove obsolete or inaccessible certificate records and cannot generate replacement credentials. Our current situation is: We have reached the maximum number of FairPlay Streaming certificates allowed for our Developer Team. The Apple Developer portal does not provide a revoke or delete option for the existing FPS certificates. The private keys associated with our old FairPlay Streaming credentials were permanently lost after our previous server infrastructure crashed. We cannot recover or reuse those old credentials. We are unable to generate replacement FairPlay Streaming deployment credentials because the certificate generation limit has been reached. This is currently blocking our ability to restore and maintain our FairPlay-protected production streaming service. We have already contacted Apple Developer Support and submitted multiple follow-ups regarding this issue, but we have not yet received a solution that allows us to generate replacement credentials. We would like to understand the official Apple-supported process for the following situation: What is the supported procedure when a Developer Team reaches the maximum number of FairPlay Streaming certificates? If existing FPS certificates cannot be revoked or deleted through the Developer portal, is there an Apple-supported process to remove obsolete or inaccessible FPS certificate records? Can Apple reset or restore the FairPlay Streaming certificate generation capacity for a Developer Team when the old credentials and private keys are permanently unavailable? Is there another supported method for generating replacement FairPlay Streaming deployment credentials in this situation? We are not requesting general instructions on how to generate a FairPlay Streaming certificate. We understand the standard certificate generation process. Our issue is specifically related to an exhausted FPS certificate generation limit combined with the absence of a self-service revoke/delete option for the existing certificates. We would greatly appreciate guidance from Apple or the FairPlay Streaming team on how to resolve this issue and restore our ability to generate replacement FPS deployment credentials. Thank you for your assistance.
Replies
2
Boosts
0
Views
158
Activity
Aug ’26
Logic Pro: Supported API or control-surface method for direct playhead navigation to project marker positions beyond marker 20
I am developing DOWNBEAT, a paid macOS Audio Unit plugin for Logic Pro live playback control. The plugin reads marker, tempo, and time signature data from a user-selected Logic Pro project and lets performers build a stage setlist. During live use, the performer needs to click a song in DOWNBEAT and have Logic Pro move the playhead directly to that song’s marker position. The current reliable method uses Logic Pro controller assignments mapped to “Go to Marker Number 1” through “Go to Marker Number 20.” This works for markers 1-20, but Logic Pro does not appear to expose direct “Go to Marker Number 21” or higher commands. I need to know whether Apple provides any supported public API, control-surface API, MIDI Device Script capability, Audio Unit host interaction, Apple Event, or other documented mechanism that allows a third-party macOS app/plugin to move Logic Pro’s playhead directly to a bar/beat position or marker position without opening a modal window. This is for live performance, so reliability is critical. Methods that open the “Go to Marker” or “Go to Position” window and type values are not acceptable, because they create visible UI interruptions during a show. What I have already tested: Logic Pro controller assignments: “Go to Marker Number 1” through “Go to Marker Number 20” work. “Go to Marker Number 21” does not appear to exist as a direct assignable command. Logic Pro MIDI Device Script / Lua control-surface script: I created a temporary MIDI Device Script that mapped a test control to “Go to Marker Number 1.” That worked. I then mapped another test control to “Go to Marker Number 21.” That did not work. I also tested “Go to Marker Number...” and it did not provide a usable direct non-modal workflow. MIDI Machine Control / SMPTE Locate: Logic received incoming MIDI, but location behavior was not reliable enough for live use. In multi-tempo projects, locate results could land incorrectly or cause visible playhead jumps. Logic Environment meta events: Tested incoming MIDI through the Logic Environment. MIDI was visible, but it did not provide reliable direct marker navigation. Mackie Control / MCU direction: Research suggests MCU marker commands do not provide direct absolute marker selection beyond the limited marker/function range. Specific questions: Is there a supported public way for a third-party macOS app, Audio Unit plugin, MIDI Device Script, or Logic Pro control-surface integration to set Logic Pro’s playhead directly to a specific bar/beat position? Is there a supported public way to trigger direct marker navigation beyond “Go to Marker Number 20” without opening a modal window? If the answer is no, is the recommended Apple-supported approach for this use case to limit direct marker navigation to the first 20 markers? Is there any supported Logic Pro control-surface API or developer program path that would allow this kind of direct live-performance marker navigation?
Replies
0
Boosts
0
Views
312
Activity
Aug ’26
PHAssetResource deprecated originalFilename replaced with filename, but PHAssetExtendedMetadata only has originalFilename in iOS 27
PHAssetExtendedMetadata has the following API: /// The original file name of this asset. open var originalFilename: String? { get } And PHAssetResource has the following API: @available(iOS, introduced: 9, deprecated: 27, message: "Use filename instead") open var originalFilename: String { get } /// The filename associated with this asset resource (if any) @available(iOS 27, *) open var filename: String? { get } I'm confused why PHAssetExtendedMetadata (iOS 27+) has originalFilename while PHAssetResource originalFilename was deprecated and replaced with filename. I would have expected PHAssetExtendedMetadata's property be named filename to match. Are all 3 of these all the exact same name or can there be differences?
Replies
1
Boosts
0
Views
385
Activity
Aug ’26
The capture date displayed in the album is incorrect.
Here is a natural, professional English translation suitable for a bug report (such as filing via Apple's Feedback Assistant): Title / Summary Photos app defaults to creation time instead of EXIF date when region and time format are mismatched Bug Description Photos saved or received in the system Photos app (via downloads, AirDrop, etc.) use the saving timestamp as their capture date instead of preserving the photo's original metadata/EXIF timestamp. Steps to Reproduce Go to Settings > General > Language & Region. Set a Region whose default time format differs from your custom toggle (e.g., set Region to Japan, which defaults to a 24-hour clock, but manually switch the time format toggle to 12-Hour Time). Save or receive an image via AirDrop/download. Observe that the photo's original date metadata is ignored and replaced by the current timestamp. Root Cause Analysis The bug occurs when the device's custom time format (12/24-hour) mismatches the default time format of the selected Region, causing date metadata parsing to fail in the Photos app. Workaround Resetting the time format back to match the Region's default setting resolves the issue. Expected Result The system should correctly parse and preserve original image creation dates regardless of custom region or time format overrides. This issue should be resolved in a future software update. Affected OS Versions iOS 17+ iPadOS 17+ macOS 14 (Sonoma)+
Replies
1
Boosts
0
Views
790
Activity
Aug ’26
Canon R5 Mark II Support in Raw 9
Is there an expected date for Canon R5 Mark II raw 9 support?
Replies
0
Boosts
0
Views
83
Activity
Aug ’26
How should live latency be measured and maintained with AVPlayer (HLS / LL-HLS)?
We keep live playback at a consistent distance from the live edge using small playback rate adjustments, with a target range based on recommendedTimeOffsetFromLive. Since the live edge is not exposed by AVPlayer, we currently fall back to seekableTimeRanges.end as our best approximation. What should be treated as the live edge, and how should the current live latency be measured? Is rate adjustment the appropriate way to hold a target latency? While playing above 1.0x, the playhead can reach the seekable end, at which point AVPlayerItemDidPlayToEndTime fires and halts the live stream. How can we guard against ? Does any of this differ between regular HLS and LL-HLS? A clear statement of the intended contract here would resolve a lot of uncertainty. Thanks in advance.
Replies
3
Boosts
0
Views
808
Activity
Aug ’26
Apple Music for DJ App
Hi there, I recently launched a dj app to the mac app store, and was wondering how I could access songs for mixing purposes via Apple Music just like how serato, rekordbox, djay, and other DJ apps do? Thanks, Gunek
Replies
1
Boosts
0
Views
1.7k
Activity
Aug ’26
Video recording goes fine but adding audio fails mysteriously
I'm trying to update an old unity app for a client. The app has been crashing on iOS in a plugin they use called NatCorder. They use it to record video only separately and then re-record it with effects and audio gathered separately. Instead of trying to update the plugin to something else which would be quite the hassle, I noticed the API for the native part of the plugin, where the crash occurs, is very simple, especially if you don't try to support everything the plugin does and the app does not use. So I tried to re-implement that native library using AVFoundation. I got the video recording right, it captures the camera from the iPhone and writes it to a file properly. However, when the app does the second part, where it sends video and audio frames to the plugin, it fails. The app sends all the video frames and then sends all the audio frames. The video frames are eaten fine by AVFoundation but the audio fails at random points with unknown errors. I wonder if I'm trying to use incompatible audio-video formats or if I'm using timestamps wrong or something. Here's my init code. Anything suspicious to you? void* NCCreateMP4Recorder(int width, int height, float framerate, int bitrate, int keyframeInterval, int sampleRate, int channelCount, const char* recordingPath, void (*callback)(void*, void*), void* context) { Recorder* recorder = calloc(1, sizeof(Recorder)); recorder->context = context; recorder->callback = callback; recorder->path = strdup(recordingPath); recorder->width = width; recorder->channelCount = channelCount; recorder->sampleRate = sampleRate; recorder->height = height; NSError *error = nil; NSURL* url = createURLFromArgumentCString(recordingPath); recorder->writer = [AVAssetWriter assetWriterWithURL:url fileType:AVFileTypeMPEG4 error:&error]; if (recorder->writer == nil) NSLog(@"Failed creating media writer: %@", error); NSDictionary *videoSettings = @{ AVVideoCodecKey: AVVideoCodecTypeH264, AVVideoWidthKey: @(width), AVVideoHeightKey: @(height), AVVideoCompressionPropertiesKey: @{ AVVideoAverageBitRateKey: @(bitrate), AVVideoMaxKeyFrameIntervalKey: @(keyframeInterval), } }; recorder->video = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:videoSettings]; if (recorder->video == nil) NSLog(@"Failed creating video writer input"); recorder->video.expectsMediaDataInRealTime = true; NSDictionary* videoSource = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:kCVPixelFormatType_32ARGB], kCVPixelBufferPixelFormatTypeKey, [NSNumber numberWithInt:width], kCVPixelBufferWidthKey, [NSNumber numberWithInt:height], kCVPixelBufferHeightKey, nil]; recorder->videoAdaptor = [AVAssetWriterInputPixelBufferAdaptor assetWriterInputPixelBufferAdaptorWithAssetWriterInput:recorder->video sourcePixelBufferAttributes:videoSource]; if (recorder->videoAdaptor == nil) NSLog(@"Failed creating video adaptor"); if ([recorder->writer canAddInput:recorder->video]) [recorder->writer addInput:recorder->video]; else NSLog(@"Could not add video input to writer"); if (sampleRate > 0 && channelCount > 0) { AudioChannelLayout layout = { .mChannelLayoutTag = channelCount == 1 ? kAudioChannelLayoutTag_Mono : kAudioChannelLayoutTag_Stereo, .mChannelBitmap = 0, .mNumberChannelDescriptions = 0 }; NSDictionary* audioOutputSettings = @{ AVFormatIDKey: @(kAudioFormatMPEG4AAC), AVNumberOfChannelsKey: @(channelCount), AVSampleRateKey: @(sampleRate), AVEncoderBitRateKey: @128000, AVChannelLayoutKey: [NSData dataWithBytes:&layout length:sizeof(layout)] }; recorder->audio = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeAudio outputSettings:audioOutputSettings]; if (!recorder->audio) NSLog(@"Failed creating audio adaptor"); recorder->audio.expectsMediaDataInRealTime = true; AudioStreamBasicDescription audioStreamDesc = { .mSampleRate = sampleRate, .mFormatID = kAudioFormatLinearPCM, .mFormatFlags = kAudioFormatFlagIsPacked | kAudioFormatFlagIsFloat, .mBytesPerPacket = channelCount * sizeof(float), .mFramesPerPacket = 1, .mBytesPerFrame = channelCount * sizeof(float), .mChannelsPerFrame = channelCount, .mBitsPerChannel = sizeof(float) * 8, }; OSStatus status = CMAudioFormatDescriptionCreate(kCFAllocatorDefault, &audioStreamDesc, sizeof(layout), &layout, 0, nil, nil, &recorder->audioDesc); if (status) NSLog(@"Failed creating audio format description: %d", (int)status); if ([recorder->writer canAddInput:recorder->audio]) [recorder->writer addInput:recorder->audio]; else NSLog(@"Could not add audio input to writer"); } if (![recorder->writer startWriting]) NSLog(@"Could not start writing: %@", recorder->writer.error); [recorder->writer startSessionAtSourceTime:kCMTimeZero]; NSLog(@"Recording started to %s", recordingPath); return recorder; }
Replies
2
Boosts
0
Views
219
Activity
Aug ’26
can I listen to music from the spotify app on the apple watch?
I don't use itune for my music usually. Instead I use an app called spotify. Can I add this to the apple watch and listen to my music while running?
Replies
2
Boosts
0
Views
564
Activity
Aug ’26
iOS 27: ScreenCaptureKit requires UIBackgroundModes 'screen-capture', but App StoiOS 27: ScreenCaptureKit requires UIBackgroundModes 'screen-capture', but App Store Connect rejects that valuere Connect rejects that value
On iOS, ScreenCaptureKit terminates an SCStream when the app is backgrounded unless the app declares UIBackgroundModes: screen-capture. The delegate reports SCStreamError code -3824 (SCStreamError.Code.missingBackgroundMode). Adding screen-capture to UIBackgroundModes - the value Apple's own iOS 27 ScreenCaptureKit sample code declares - makes App Store Connect reject the upload: error: exportArchive Invalid Info.plist value. The Info.plist key UIBackgroundModes contains an invalid value: 'screen-capture'. So the app cannot be distributed at all, not even to TestFlight internal testers. We have ruled out simply keeping the process alive: running a continuous silent AVAudioEngine under the audio background mode keeps the app running but does not prevent -3824, which is consistent with the framework performing an explicit background-mode check rather than the stream dying from process suspension. One observation that may explain why this has gone unnoticed: Apple's sample is installed directly from Xcode and therefore never passes through App Store Connect's upload validation, so a mismatch between the sample's Info.plist and App Store Connect's allowlist would not be visible when testing the sample internally. My question is which of these three describes the actual status of screen-capture for third-party iOS apps: (1) App Store Connect's allowlist has not yet been updated for iOS 27, and this will resolve on its own. (2) screen-capture requires an entitlement or a specially provisioned profile we have not requested. If so, which one, and how is it requested? (3) screen-capture is restricted to Apple's own or system applications and is not available to third-party App Store apps by design. I could not find screen-capture documented on the general UIBackgroundModes page, which is why I cannot tell these apart. Filed as FB24169650. Device: iPhone 16 Pro, iOS 27.0 Built against the iOS 27 SDK, deployment target 17.0.
Replies
4
Boosts
0
Views
584
Activity
Aug ’26
Processing / tapping an HLS audio stream (or global app output)
I'm trying to do some realtime audio processing on audio served from an HLS stream (i.e. an AVPlayer created using an M3U HTTP URL). It doesn't seem like attaching an AVAudioMix configured with with an `audioTapProcessor` has any effect; none of the callbacks except `init` are being invoked. Is this a known limitation? If so, is this documented somewhere?If the above is a limitation, what are my options using some of the other audio APIs? I looked into `AVAudioEngine` as well but it doesn't seem like there's any way I can configure any of the input node types to use an HLS stream. Am I wrong? Are there lower level APIs available to play HLS streams that provide the necessary hooks?Alternatively, is there some generic way to tap into all audio being output by my app regardless of its source?Thanks a lot!
Replies
12
Boosts
0
Views
5.4k
Activity
Aug ’26
Facing issues with response from Fairplay SDK based service
Currently we are building a service based on Fairplay SDK version 26.0. Currently our solution is using version 4.5.4. When we run the below request to get version we get proper response curl http://xx.xx.xx.xx:8080/fps/v Response - V26.0 Our client applications call below two APIs https://GW_HOST:8080/fairplay_cert https://GW_HOST:8080/fairplay_license Within the cert API call, we are returning the fairplay public certificate. Currently we are trying to use the test certificate provided along with Fairplay SDK (test_fps_certificate_v26.bin) Then within the fairplay_license API call, we are trying to reach fairplay service based on Fairplay SDK v26 We are seeing some issues with below request(attaching the request json payload) curl -v -X POST -H "Content-Type: application/json" -d @SDKValidation_NewCert.json http://xx.xx.xx.xx:8080/fps SDKValidation_NewCert.json We are getting below response from SDK {"fairplay-streaming-response":{"create-ckc":[{"id":1,"status":-42605}]}} When we checked the apache error logs in the file "/etc/httpd/logs/error_log" we see below error [DEBUG] ❌ Assertion failure: invalidCertificateErr (-42605) [src/extension.swift:249] This is looks to be some error related to certificate. As mentioned earlier, client application is making a certificate call where we are returning the certificate set up . These certificates are already configured in the credentials path. Also note that the test samples provided with the SDK return valid license response. We had earlier raised a similar ticket mentioned below and we were asked not to use test certs. So we have raise CSR and used new certs for testing. https://developer.apple.com/forums/thread/836652?page=1
Replies
4
Boosts
0
Views
1.2k
Activity
Aug ’26
Preserve AirPods Transparency while capturing one AirPod microphone for low latency cross ear audio
I am prototyping an iOS accessibility audio application for people with unilateral hearing loss. The goal is simple. Capture environmental audio using the AirPod on the poor hearing side and route that audio with very low latency into the AirPod on the working hearing side. The core concept is already working on physical AirPods and an iPhone. Our desired signal path is Right AirPod microphone → iPhone audio processing → Left AirPod output The user sets the AirPods microphone in Settings to Always Right AirPod. The app then captures that Bluetooth microphone and routes the signal into the left output channel. Using AVAudioSession and AVAudioEngine we have successfully achieved low latency cross ear audio. The main issue is native AirPods Transparency. When the app activates the AirPods Bluetooth microphone using HFP, the transferred audio continues working correctly, but native Transparency audio on the receiving AirPod effectively disappears. Interestingly, iOS still reports Transparency as enabled in Control Center and AirPods settings. This means the user can hear audio transferred from the poor hearing side, but their working ear loses much of the normal environmental sound that Transparency previously provided. We have tested several configurations. Normal Bluetooth HFP with playAndRecord This provides the best result so far. The AirPods microphone signal is strong. The output route exposes two channels. We can route the microphone signal only to the opposite AirPod. Latency can be reduced enough that conversation feels nearly real time. However, native Transparency on the receiving AirPod effectively stops providing environmental audio. bluetoothHighQualityRecording Microphone quality is noticeably better. However, latency is significantly higher and produces an audible delayed or echo effect during conversation. Transparency has the same general issue. multiRoute with dualRoute This allows the iPhone audio hardware and AirPods to operate simultaneously. It appears to preserve more ambient awareness on the working side. However, the AirPods microphone becomes substantially weaker when used as the secondary Bluetooth HFP input. We measured the incoming AirPods microphone signal at roughly minus 40 dB during normal speech testing. Adding 12 to 18 dB of software gain increases distortion without materially improving intelligibility. farFieldInput with dualRoute We tested the raw AirPods microphone with and without farFieldInput. The microphone levels and practical pickup were very similar. Far field speech processing improved intelligibility somewhat, but did not solve the weak secondary Bluetooth input signal. Our main technical question is Is there a supported AVAudioSession configuration, Core Audio API, AirPods API, or entitlement that allows a third party application to capture an AirPods microphone while preserving the AirPods native Transparency processing on the output AirPod? Ideally we want Right AirPod microphone capture plus native Transparency on the left AirPod plus application generated right to left audio mixed into the left AirPod all operating simultaneously. We do not need access to Apple's Transparency microphone signal itself if native Transparency can simply remain active while our application audio is mixed into the receiving AirPod. If this is not currently possible using public APIs, is this an intentional platform limitation of the AirPods Bluetooth microphone route? We would also appreciate guidance on whether there is another recommended architecture for this accessibility use case. The low latency cross ear routing itself works surprisingly well. Preserving natural environmental audio in the user's working ear while the Bluetooth microphone is active is currently the main technical blocker. Testing has been performed on a physical iPhone running iOS 26.x using Xcode 26.6 and current AirPods hardware, not the Simulator. Thank you for any guidance.
Replies
0
Boosts
0
Views
188
Activity
Aug ’26
[iOS 27 DB3] Photos taken with third party apps have photographic styles applied
It's unclear if this is a bug or a new feature but I have noticed that my photos starting coming out looking more stylised than expected and worked out that it was because photographic styles were being applied even tho I was taking photos through a third party app. Is there a way to disable this behaviour if it is intended? I've raised a feedback report #FB23632714 Photographic Styles [OFF] Photographic Styles [ON] My settings:
Replies
2
Boosts
0
Views
818
Activity
Aug ’26
Apple Music / MusicKit Commercial Integration Enquiry – Multiplayer Music Game
Hello, Could this please be forwarded to the team responsible for Apple Music / MusicKit commercial integrations, developer partnerships and licensing? I am currently assessing the feasibility of developing a commercial browser-based multiplayer music game and would like to understand whether Apple Music and MusicKit could support the proposed use case. At a high level, players would privately select tracks from the Apple Music catalogue within the game. Once selections are complete, the application would arrange the selected tracks for sequential playback through a shared host account/device. Players would then interact with those tracks through the game. The application would provide the game functionality and would not download, store or independently redistribute full music recordings. Before progressing with development, I would appreciate clarification on the following: Commercial game use: Is integration of the Apple Music catalogue and MusicKit playback functionality into a commercial multiplayer game permitted? If specific approval, licensing or a commercial agreement with Apple is required, what is the appropriate process? Monetisation: Can the game itself be monetised through subscriptions, one-off purchases/party passes or advertising, provided users are paying for the game functionality rather than access to Apple Music or its catalogue? Apple Music subscription requirements: Would the account providing full-track playback need an active Apple Music subscription? If so, would only the host/playback account require a subscription, while other participants could join the game, search/select tracks and vote without having an Apple Music subscription themselves? Commercial playback alternative: If an Apple Music subscription is required for full-track playback, does Apple offer any commercial, licensing or partnership arrangement whereby the game operator could fund the necessary playback rights directly, rather than requiring the host to hold an individual Apple Music subscription? Catalogue access: Can players search the Apple Music catalogue and select tracks from within the application without every participant individually authenticating with Apple Music or holding an Apple Music subscription? Track availability: Can MusicKit/API functionality confirm whether a selected track is available for playback in the host's storefront/territory before accepting the selection? Playback control: Can the application create and manage a temporary playback queue containing the selected tracks and initiate sequential playback through an authorised host account/device without requiring the host to manually locate and play each track in the Apple Music application? Audio previews: Are short audio previews available through Apple Music/MusicKit, and may these be used within a commercial multiplayer game to help users identify a track before selecting it? If so, are there restrictions on preview duration or monetised use? Multi-provider support: Would Apple's terms permit Apple Music to be offered as one of several supported music playback providers within the same application, allowing a host to choose Apple Music or another supported streaming service? Additional licensing: If full recordings continue to be delivered and played through Apple Music/MusicKit, would the game developer require any additional master recording, publishing, public-performance or other music licences directly from rights-holders or collecting societies? Web/browser implementation: As the initial product is intended to be browser-based rather than a native iOS application, can the above catalogue, authentication and playback functionality be implemented through MusicKit on the Web? Are there any material differences in commercial permissions or capabilities compared with a native MusicKit implementation? Scaling: Are there different MusicKit/API access, approval, rate-limit or commercial requirements if the application progresses from development/testing to a publicly available commercial product with a significant user base? At this stage I am primarily trying to establish whether a compliant technical and commercial model exists before investing in development. If this enquiry would be better directed to an Apple Music partnership, MusicKit, licensing or business-development team, I would appreciate being pointed towards the appropriate contact. I would be happy to provide further technical details about the proposed integration if required. Kind regards, Errol Brinkman
Replies
0
Boosts
0
Views
407
Activity
Aug ’26
watchOS: Network framework WebSocket loses its path ~35 s in, while URLSession keeps working
Following up on TN3135 and the resolution in https://developer.apple.com/forums/thread/773362 — that thread solved establishing a low-level connection on watchOS (the asynchronous AVAudioSession.activate(options:completionHandler:) instead of the synchronous setActive()). This question is about a connection staying established, which I could not find discussed anywhere. Environment: Apple Watch, watchOS 26.6 (23U67). Audio app, WKBackgroundModes = ["self-care"]. Real device, TestFlight build, not the simulator. What works Opening an NWConnection WebSocket to my own server is reliable — 8 attempts out of 8 reached .ready in 0.28–0.98 s, and an echo frame round-tripped in 27–89 ms. Interestingly, in my measurements it opens under BOTH activation variants: the asynchronous activate(options:completionHandler:) AND the synchronous setActive(true). The two are within ~0.2 s of each other. I mention it only because the thread above concluded the synchronous one is insufficient; on 26.6 I cannot reproduce that difference for establishment. What fails The connection goes quiet after roughly half a minute, and an NWPathMonitor running alongside it shows why: the path transitions to .unsatisfied. Four runs: +34.0 s (cellular) +34.6 s (cellular) +36.0 s (Wi-Fi) +34.3 s (companion link only — availableInterfaces ["other", "other"]) The server sends a heartbeat frame every 5 s and closes the socket on a schedule, so I can tell "the peer closed" from "we stopped receiving". The client receives beats 1–6 (5 s … 30 s) and then nothing; the scheduled close never arrives. What I ruled out Server side. The same client construction run on macOS against the same endpoint receives all 8 heartbeats and the scheduled close at 45.1 s. Both audio-session activation variants — no difference, as above. Network type — cellular, Wi-Fi and companion-link-only all drop at ~35 s. The app being suspended. The app keeps logging densely throughout, and in the last run it held a WKExtendedRuntimeSession (delegate reported extendedRuntimeSessionDidStart) and was actively playing audio through AVAudioEngine from the first second — i.e. the audio-streaming condition TN3135 describes — for the entire window. The path dropped anyway, at +34.3 s. An idle socket. Server traffic arrives every 5 s until the drop. The comparison that puzzles me The same app, on the same watch, the same afternoon, relays the same realtime audio session over plain HTTPS (URLSession) instead — and that runs for 64 s continuously without a stall, including straight through a WatchConnectivity "reachability settled: unreachable" transition. So a high-level URLSession request stream survives a period in which a low-level NWConnection's path is reported unsatisfied. That is consistent with the note in thread 773362 that "on watchOS every session is kinda like a background session, where the actual work is done out of process" — but it leaves me unsure what the intended behaviour is. Questions Is a ~35 s path lifetime the expected behaviour for low-level networking on watchOS, or does it indicate something wrong on my side? Does the TN3135 audio-streaming exception cover only the establishment of a low-level connection, or is it also supposed to keep the path available for the duration of the audio streaming? If it is supposed to persist: is there something beyond an active audio session, flowing audio and a WKExtendedRuntimeSession that an app must do to keep the path alive? If ~35 s is the expected ceiling, is a WebSocket a supported transport for a multi-minute conversational audio session on watchOS at all — or is relaying over URLSession the intended approach despite the guidance to prefer Network framework? Happy to file a bug with a sysdiagnose and a reduced sample project if that is more useful — please say the word and I will attach the numbers above.
Replies
4
Boosts
0
Views
1.4k
Activity
Aug ’26
API vs Accessibility
I’m developing a small macOS workflow utility for Final Cut Pro and I’d like to confirm whether there is a supported API for a particular project-management workflow before relying on macOS Accessibility automation. The utility is intended to take an existing Final Cut Pro project and create multiple native duplicates at different custom frame sizes — for example: 1920 × 1080 1080 × 1920 1080 × 1350 1080 × 1080 custom banner dimensions The desired operation is essentially the equivalent of Final Cut Pro’s Duplicate Project As… command: duplicate the selected project, assign a new name, set a custom video resolution, and optionally enable or disable Smart Conform. It is important that Final Cut Pro itself performs a native project duplication so that all existing project data is retained, including effects, grades, plug-ins, keyframes, compound clips, retiming and Magnetic Masks. I initially prototyped the workflow using FCPXML, which works very well for creating the differently sized projects. However, Apple’s documentation notes that Magnetic Masks are not included in XML exports, so an FCPXML round-trip is not suitable for this use case. I’ve reviewed the documentation for FCPXML, Workflow Extensions / ProExtensionHost, and programmatic communication with Final Cut Pro using Apple Events, but I haven’t found a documented API that allows an application to: Duplicate the currently selected Final Cut Pro project natively. Rename the duplicated project. Change its video format to an arbitrary custom width and height. Optionally control Smart Conform. I currently have a working proof of concept using the macOS Accessibility API to invoke and operate Final Cut Pro’s native Duplicate Project As… interface. Before developing that approach further, I’d like to confirm that I’m not overlooking a supported Final Cut Pro API or Workflow Extension capability that would accomplish the same thing more directly and robustly. Is there a supported public API for this workflow, either through the Workflow Extension SDK, ProExtensionHost, Apple Events, scripting support, or another Professional Video Applications framework? If not, is using macOS Accessibility to automate Final Cut Pro’s native project-duplication interface an appropriate approach for a third-party macOS workflow utility? Many thanks, James
Replies
0
Boosts
0
Views
299
Activity
Aug ’26
AVCustomRoutingController and background audio
Hi, I have implemented a custom audio streaming protocol in my iOS app using AVCustomRoutingController to select my custom device. Playback and streaming works. However when the app is the background, it gets killed in a couple of seconds, like if it was not playing audio. My app has the Audio/AirPlay/PIP background mode and can play audio from the background when the route is a normal AVRoute from the system (Speaker/AirPlay/Bluetooth, etc). I tried starting an AVAudioSession (playback category, activated, with and without MPRemoteCommandCenter bindings and with and without populating NowPlayingInfoCenter) was hoping that if that is active, my app won't be killed. But it seems like it does get killed if the app is not producing audio using AudioOutputUnit/AVAudioEngine/AVPlayer. How does one supposed to stream audio from an app in the background using a custom protocol? The infamous "let's play silence to not get killed" solution works, but obviously that can't be the answer.
Replies
0
Boosts
0
Views
302
Activity
Aug ’26