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

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?
13
4
3.3k
1w
PHAssetChangeRequest deleteAssets completionHandler for recently captured 48MP DNG sometimes never called
I want to report a issue on PHAssetChangeRequest.deleteAssets Environment iOS 18.5, iOS 26.2.5, iOS 27.0 Steps to Reproduce Capture a 48MP ProRAW (DNG) photo with the Camera app. Open my app, call the following api to delete this photo: PHPhotoLibrary.shared().performChanges({ PHAssetChangeRequest.deleteAssets(assets) }, completionHandler: completionHandler) Expected The system delete-confirmation dialog appears; after the user confirms, the asset is deleted and the completionHandler is called or report error if it failed Actual Sometime the following issue happens: The confirmation dialog never appears and the completionHandler is never called no success, no error, no timeout. The built-in Photos app can delete the affected asset but API can't. The stuck request leaks permanently. Even after the same asset is subsequently deleted via the built-in Photos app, the pending completionHandler is still never invoked. Workaround for this issue When the issue happens, restarting the iPhone or reinstall app can not help to fix it But I found if I leave the device alone for an extended period (maybe 10 min~1 hour) and restart the iPhone, finally I found PHAssetChangeRequest.deleteAssets work again. It looks like some background task for 48MP RAW image in DNG format stuck delete API. I need to wait the task finished and restart device to reset stuck status. But I can not know when the DNG is ready to delete, it looks like my app hangs I think the better behavior is completion block should return a error to tell user what happens instead of not calling completion block.
2
0
1.3k
1w
### HEVC/H.265 playback works on iPhone 13 and iPhone 15 but fails on iPhone X and iPhone 17 Pro Max
Hi Apple Developer Community, I’m investigating an HEVC/H.265 playback issue in an iOS application and would appreciate some guidance regarding device-level HEVC compatibility and AVFoundation/VideoToolbox behavior. Our application plays video content encoded in both H.264 and H.265 (HEVC). Current observations The same H.265 video content produces the following results: Device H.264 H.265 iPhone X Works Does not play iPhone 13 Works Works iPhone 15 Works Works iPhone 17 Pro Max Works Does not play H.264 playback works consistently across all tested devices. The interesting part is that H.265 works on the iPhone 13 and iPhone 15, but does not work on either the older iPhone X or the newer iPhone 17 Pro Max. This makes me unsure whether the issue is related to the device's HEVC hardware decoder, a specific HEVC profile/level/pixel format, codec/container signaling, or the playback framework. Questions Are there known differences in HEVC/H.265 decoding capabilities or supported profiles between these iPhone generations that could explain this behavior? Can a newer device such as the iPhone 17 Pro Max have compatibility limitations with a particular HEVC stream that successfully plays on an iPhone 13 or iPhone 15? Are there specific HEVC parameters that I should compare when troubleshooting this, such as: HEVC profile (Main / Main 10) Level and tier 8-bit vs 10-bit Pixel format Chroma subsampling (4:2:0 / 4:2:2) Resolution and frame rate Bitrate HDR10 / HLG / SDR Color primaries / transfer characteristics hvc1 vs hev1 MP4/fMP4 vs MPEG-TS container Audio codec Is there an Apple-recommended API or method to determine at runtime whether a particular HEVC stream is supported by the current device before attempting playback? If using AVPlayer/AVPlayerItem, what is the recommended way to diagnose whether a failure is caused by: Unsupported HEVC characteristics VideoToolbox decoding Container/codec signaling Audio decoding AVFoundation Network/streaming configuration? Are there any differences in HEVC support between local MP4 playback and HLS/fMP4 playback that I should take into account? Additional investigation I am planning to inspect the exact video characteristics using ffprobe/MediaInfo and compare a working stream against a failing stream. For example, I intend to compare: Codec Codec tag (hvc1 / hev1) Profile Level Tier Bit depth Pixel format Resolution Frame rate Bitrate Chroma subsampling Color space HDR metadata Container Audio codec I will also test the same video outside the application to determine whether this is specific to our playback implementation or to the HEVC stream/device combination. Main question The main thing I would like to understand is: How can the same H.265 content be successfully decoded on an iPhone 13 and iPhone 15, while failing on both an older iPhone X and a much newer iPhone 17 Pro Max? Is there an Apple-documented compatibility matrix or recommended diagnostic approach for identifying which HEVC characteristic is responsible for this behavior? Any guidance on the relevant Apple documentation, AVFoundation APIs, VideoToolbox APIs, or known device-specific HEVC limitations would be greatly appreciated. Thank you.
0
0
95
1w
MainCameraAccess for CameraFrameProvider Broke Between Xcode v. 26.2 and 26.6
Good Evening, I have some old code that uses the CameraFrameProvider successfully when run through Xcode versions 26.0 and 26.2, but not for 26.6. I have double checked all Custom iOS Target Properties in the project's info tab to make sure all required capabilities are added. I also updated the enterprise license by adding a new entitlements file approving main-camera-access. Somewhere between Xcode 26.2 and Xcode 26.6 what has changed that affects the ability to use CameraFrameProvider and access the Main Camera? Thank you.
2
0
659
1w
Does the PhotoKit fix in iOS 27 beta 3 also cover PHImageManager requests that never call back?
I previously reported an issue where PHImageManager.requestImageDataAndOrientation() never calls its progress or completion handler. In this thread, it was mentioned that iOS 27 beta 3 fixes a PhotoKit hang involving the deletion of recently captured 48 MP ProRAW assets. I know these involve different APIs (PHPhotoLibrary and PHImageManager). But the behavior looks the same. The request hangs without ever calling back, and later PhotoKit requests get stuck as well. Will the PHImageManager issue I reported also be fixed when iOS 27 is officially released?
0
0
500
1w
iOS 26.6.2: Live Photos Fail to Save (Only When Using the JPEG+MOV Combination)
On iOS 26.6.2, Live Photos fail to save. This issue does not occur on iOS 27.0 RC. Devices Experiencing Issues iPhone 17 (iOS 26.6.2) iPhone 17 Pro MAX(iOS 26.6.2) iPad mini 5th generation (iPadOS 26.6.2) and might be others... Description 1. For HEVC+MOV, the Livephoto is saved successfully. If you write the code exactly as shown in the official instruction the Live Photo will be saved successfully. However, the reference code uses a combination of HEVC and MOV. let photoSettings = AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.hevc]) 2. For JPEG+MOV, Livephoto saving fails. Some users prefer JPEG files, which offer high compatibility. Therefore, we'll modify the code as follows. let photoSettings = AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.jpeg]) In this case, the AVFoundation recording process itself succeeds, but when attempting to save the result to the photo library using PhotoKit, it fails with the following error. error:The operation couldn’t be completed. (PHPhotosErrorDomain error 3302.) key: __NSCFString = "_PHResourceUrlsErrorKey" Here is the code for saving Live Photos. (This is exactly the same as the code in the official reference.) PHPhotoLibrary.shared().performChanges({ let creationRequest = PHAssetCreationRequest.forAsset() creationRequest.addResource(with: .photo, data: stillImageData, options: nil) let options = PHAssetResourceCreationOptions() options.shouldMoveFile = true creationRequest.addResource(with: .pairedVideo, fileURL: livePhotoMovieURL, options: options) }) { success, error in // Handle completion. } We've posted to Apple Feedback with Sysdiagnose. FB24760461
0
1
570
1w
PHPhotoLibrary.performChanges completionHandler not called when deleting assets on iOS 26
In my app, I use api provided in Photos framework to delete specified photo. But after upgrading to iOS 26, the delete function in some iOS device no longer work. The api will never triggers the system confirmation dialog, and the completionHandler is never called. In the iOS Photos app, deletion works correctly on the same assets, but calling the API from my app does not work. Steps to Reproduce Make sure the app has Full Photo Library Access. Execute the following code: PHPhotoLibrary.shared().performChanges({ let assetsToBeDeleted = PHAsset.fetchAssets(withLocalIdentifiers: delUrls, options: nil) PHAssetChangeRequest.deleteAssets(assetsToBeDeleted) }, completionHandler: completionHandler) Expected Behavior The system should present a confirmation dialog asking the user to delete the selected photos. After the user confirms, the deletion should occur, and the completionHandler should be called with success or error. Actual Behavior The system delete confirmation dialog does not appear. The completionHandler is never called. Environment iOS Versions: 26.1 / 26.0.1 It looks like api bug. I want to check Is it a know issue and will be fixed. Thanks
5
2
1.2k
2w
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
4
0
798
2w
AirPods audio repeatedly cuts out under CPU and memory pressure on M5 Max MacBook Pro
I filed FB24725256 with a live macOS Bluetooth diagnostic, Sysdiagnose, and System Information Report. Environment: MacBook Pro (Mac17,6), Apple M5 Max, 128 GB RAM macOS 26.5 (25F71) AirPods Pro 3, firmware 8B41 AirPods selected for both input and output because microphone input is required for dictation and voice typing Problem: Bluetooth playback repeatedly stutters and cuts out during sustained local development and AI-agent workloads. The AirPods signal is strong (roughly -46 to -52 RSSI), and the Mac remains otherwise usable. Unified logs recorded repeated AudioSkywalkReadLoop overwait events in bluetoothd, commonly 50–69 ms and previously up to 795 ms. CoreAudio also reported HALS_OverloadMessage failures because a client exceeded its I/O-cycle budget and a safety violation occurred. Steps to reproduce: Connect AirPods Pro and keep them selected for input and output. Stream audio. Run sustained CPU- and memory-intensive development work, such as multiple builds, browser workloads, simulators, or local AI agents. Observe repeated playback interruptions as CPU load and memory compression increase. Expected: macOS should protect real-time CoreAudio and Bluetooth transport deadlines on this hardware without requiring productive work to be paused or throttled. The same AirPods stream reliably from much smaller Apple devices; Apple's highest-end Mac should maintain audio continuity too. This is a platform-quality failure on a high-end Mac. This appears related to longstanding reports: Simulator/Xcode causing AirPods distortion: https://developer.apple.com/forums/thread/668170 CoreAudio overloads and dropouts associated with memory pressure: https://developer.apple.com/forums/thread/677383 Bluetooth headset interruptions on newer macOS releases: https://developer.apple.com/forums/thread/763848 If you can reproduce this, please boost this thread and file your own Feedback Assistant report with fresh Bluetooth logs and a Sysdiagnose. Include the exact occurrence time and reference FB24725256 so Apple can connect the reports.I filed FB24725256 with a live macOS Bluetooth diagnostic, Sysdiagnose, and System Information Report. Environment: MacBook Pro (Mac17,6), Apple M5 Max, 128 GB RAM macOS 26.5 (25F71) AirPods Pro 3, firmware 8B41 AirPods selected for both input and output because microphone input is required for dictation and voice typing Problem: Bluetooth playback repeatedly stutters and cuts out during sustained local development and AI-agent workloads. The AirPods signal is strong (roughly -46 to -52 RSSI), and the Mac remains otherwise usable. Unified logs recorded repeated AudioSkywalkReadLoop overwait events in bluetoothd, commonly 50–69 ms and previously up to 795 ms. CoreAudio also reported HALS_OverloadMessage failures because a client exceeded its I/O-cycle budget and a safety violation occurred. Steps to reproduce: Connect AirPods Pro and keep them selected for input and output. Stream audio. Run sustained CPU- and memory-intensive development work, such as multiple builds, browser workloads, simulators, or local AI agents. Observe repeated playback interruptions as CPU load and memory compression increase. Expected: macOS should protect real-time CoreAudio and Bluetooth transport deadlines on this hardware without requiring productive work to be paused or throttled. The same AirPods stream reliably from much smaller Apple devices; Apple's highest-end Mac should maintain audio continuity too. This is a platform-quality failure on a high-end Mac. This appears related to longstanding reports: Simulator/Xcode causing AirPods distortion: https://developer.apple.com/forums/thread/668170 CoreAudio overloads and dropouts associated with memory pressure: https://developer.apple.com/forums/thread/677383 Bluetooth headset interruptions on newer macOS releases: https://developer.apple.com/forums/thread/763848 If you can reproduce this, please boost this thread and file your own Feedback Assistant report with fresh Bluetooth logs and a Sysdiagnose. Include the exact occurrence time and reference FB24725256 so Apple can connect the reports.
1
0
405
2w
AirPlay fails when Mac is connected to iPhone Personal Hotspot
AirPlay fails when Mac is connected to iPhone Personal Hotspot I’m using AVRoutePickerView to route audio from an iPhone app to a Mac with AirPlay Receiver enabled. What works When the iPhone and Mac are connected to the same Wi-Fi network, AirPlay routing works normally. Routing audio back to the iPhone speaker or to connected AirPods over Bluetooth also works correctly. What fails When the iPhone provides a Personal Hotspot and the Mac connects to that iPhone’s hotspot, the Mac still appears as an available destination in AVRoutePickerView. However, selecting the Mac fails with: Unable to connect to “[Mac Name]” Questions Is AirPlay routing from an iPhone hosting a Personal Hotspot to a Mac connected to that hotspot a supported network topology? If it is supported, are there any additional AVAudioSession, networking, entitlement, or AirPlay configuration requirements for this scenario? The fact that the Mac is successfully discovered and displayed by AVRoutePickerView, but the connection itself fails, is the part I’m particularly trying to understand. Thank you for any guidance on the expected behavior here.
0
0
399
2w
RemoteMediaSession started while the app is in the background no longer appears in Control Center (worked in earlier betas)
My app publishes a NowPlaying.RemoteMediaSession for music playing on speakers on the local network. While the app is in the background and someone taps play on my widget, that intent runs in my app process and wakes the app in the background — it can fetch the speaker state and start and update the remote session without any trouble. As of Beta 6, the session is created successfully but never shows up in Control Center or on the Lock Screen. It only appears the moment I bring my app to the foreground. In earlier betas the same code showed the session in control center, without needing to open the app. I don't call requestToBecomeSystemPrimary() and I don’t expect it to be set as primary, only when my app is in the foreground but at least the session should appear in control center or the lock screen as an option for the user to set it to system primary. FB24439526 has been submitted with Sysdiagnose attached.
1
2
167
2w
On iOS 26.6.1 and 26.6.2, Exif (XResolution / YResolution) values become 0 when an image attached in the Gmail app is saved to the Photos app
My app is built with Xcode 26.1 and uses a customized photo picker implemented with the PhotoKit Framework. After saving an image attached in the Gmail app to the Photos app on iOS 26.6.1 or iOS 26.6.2, when my app selects and loads that image, the Exif XResolution and YResolution values are both reported as 0. Is this an iOS bug? The following code retrieves the XResolution and YResolution values from the PHAsset of the selected image. private func selectAsset(_ asset: PHAsset) { let options = PHImageRequestOptions() options.isNetworkAccessAllowed = true options.deliveryMode = .highQualityFormat PHImageManager.default().requestImageDataAndOrientation(for: asset, options: options) { data, _, _, _ in DispatchQueue.main.async { if let data { let options = PHImageRequestOptions() options.isNetworkAccessAllowed = true options.deliveryMode = .highQualityFormat PHImageManager.default().requestImageDataAndOrientation(for: asset, options: options) { data, _, _, _ in guard let data, let source = CGImageSourceCreateWithData(data as CFData, nil), let properties = CGImageSourceCopyPropertiesAtIndex(source, 0, nil) as? [CFString: Any], let tiff = properties[kCGImagePropertyTIFFDictionary] as? [CFString: Any] else { print("XResolution: NaN, YResolution: NaN") return } let xResolution = tiff[kCGImagePropertyTIFFXResolution] as? Double let yResolution = tiff[kCGImagePropertyTIFFYResolution] as? Double print("XResolution: \(xResolution.map { String($0) } ?? "NaN"), YResolution: \(yResolution.map { String($0) } ?? "NaN")") } } } } } Result on iOS 26.6 XResolution: 72, YResolution: 72 Result on iOS 26.6.1 and 26.6.2 XResolution: 0, YResolution: 0
1
0
141
2w
AVAssetDownloadConfiguration does not download supplemental tracks on iOS 16
We're downloading HLS content for offline playback using AVAssetDownloadConfiguration. It's critical for our app that all subtitle tracks are downloaded together with the video, so users can watch any subtitle and audio option while offline. On iOS 16, not all tracks are downloaded, and when the user goes offline, playback fails with NSURLErrorNotConnectedToInternet (error -1009) because AVFoundation tries to fetch the missing subtitle segments over the network. On iOS 17 and later, everything works as expected — all subtitle and audio tracks are downloaded. However, on iOS 16 we observe two issues: First issue: Supplemental tracks are not downloaded on iOS 16 (device) Only the default audio track is downloaded. All non-default supplemental tracks — both subtitles and additional audio tracks — exhibit the same problem: Some supplemental tracks listed in the manifest don't even get a directory created in the .movpkg package Some supplemental tracks do get a directory created, but it contains only StreamInfoBoot.xml and StreamInfoRoot.xml — no actual segment data (.frag files) is downloaded. The StreamInfoBoot.xml for these directories shows NO, 0, and 0, with Supplemental Additionally, a Manifest.m3u8 stream directory is created with Complete=NO and no segment data. On iOS 17+ devices, all supplemental track directories are created and all contain segment data. Second issue: Downloads fail entirely on iOS 16 Simulator We receive the following error: Error Domain=NSURLErrorDomain Code=-16090 UserInfo={ NSLocalizedDescription=The operation could not be completed, _NSURLErrorFailingURLSessionTaskErrorKey=BackgroundAVAssetDownloadTask <DEC0D555-6C05-416C-91B8-F490F5A29046>.<3>, _NSURLErrorRelatedURLSessionTaskErrorKey=( "BackgroundAVAssetDownloadTask <DEC0D555-6C05-416C-91B8-F490F5A29046>.<3>" ), NSLocalizedFailureReason=An unknown error occurred (-16090) } On iOS 17+ Simulators, downloads work without issues. Our setup: let urlAsset = AVURLAsset(url: manifestURL) let preferredMediaSelection = try await urlAsset.load(.allMediaSelections) let config = AVAssetDownloadConfiguration(asset: urlAsset, title: title) config.primaryContentConfiguration.mediaSelections = preferredMediaSelection let task = assetDownloadURLSession.makeAssetDownloadTask(downloadConfiguration: config) task.resume() Example HLS manifest: #EXTM3U #EXT-X-VERSION:7 #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="French",LANGUAGE="fr",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,URI="s_25/stream.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="French (forced)",LANGUAGE="fr-x-cc",DEFAULT=NO,AUTOSELECT=YES,FORCED=YES,URI="s_31/stream.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",LANGUAGE="en",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,URI="s_37/stream.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Kazakh",LANGUAGE="kk",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,URI="s_43/stream.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Uzbek",LANGUAGE="uz",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,URI="s_49/stream.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud_ec3",NAME="French 5.1",LANGUAGE="fr",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="6",URI="a_18/stream.m3u8" #EXT-X-STREAM-INF:AUDIO="aud_ec3",SUBTITLES="subs",BANDWIDTH=1931408,VIDEO-RANGE=SDR,CODECS="hvc1.1.6.L90.90,ec-3",RESOLUTION=1024x428,FRAME-RATE=25,HDCP-LEVEL=NONE v_6/stream.m3u8 #EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,URI="skd://XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1" Questions: What is the correct way to make sure all supplemental tracks (subtitles, non-default audio) are actually downloaded on an iOS 16 real device? We pass asset.load(.allMediaSelections) to primaryContentConfiguration.mediaSelections — is there a different configuration, or should we use auxiliaryContentConfigurations, or something else entirely? Is there any way to make asset downloads work on the iOS 16 Simulator at all? We always get NSURLErrorDomain error -16090, while iOS 17+ Simulators work fine. If the supplemental tracks download bug on iOS 16 cannot be fixed or worked around from the app side, do you have any recommended approach for handling incomplete .movpkg packages at offline playback time?
1
0
380
2w
Variable aperture on the iPhone 18 Pro
Does iOS 27 provide an API which allows developers to set the iPhone 18 Pro camera's aperture? If it does, is the aperture going to be limited to just 4 discrete settings (like in the Camera app and like mentioned in the Tech Specs for the 18 Pro) or does the hypothetical iOS API allow us to set the aperture to a continuous value in the 0.0–1.0 range (similar to how a camera's focus can be set)?
2
1
628
2w
Capturing 48mp photos with .builtInTripleCamera
I am able to capture 48mp photos using .builtInWideAngleCamera, but it seems like .builtInTripleCamera is capped at 12mp? Is there a way to capture 48mp photos using .builtInTripleCamera? Because .builtInTripleCamera provides smooth transition between cameras during zooming, and I'd like to keep this behavior. New iPhone 17 Pro have all their cameras at 48mp. Is there a chance that their .builtInTripleCamera is capable of capturing 48mp? Or is this an API limitation?
4
0
950
2w
Working with kCVPixelFormatType_96VersatileBayerPacked12
Whilst AVCaptureSession is setup to capture ProRes RAW video, is it possible to get video pixel data which can read and processed, such as using CIImage(cvPixelBuffer: ) AVCaptureVideoDataOutput outputs ProRes RAW in kCVPixelFormatType_96VersatileBayerPacked12 pixel format. Is there a provided way to debayer this pixel format into something more usable?
1
1
849
2w
Supported MusicKit APIs for vinyl-style speed, pitch and reverse playback of subscription songs on iOS?
I am building a personal iPhone prototype with an on-screen record platter. Before enrolling in the Apple Developer Program or developing the Apple Music integration further, I would like to establish whether the core interaction is supported by public APIs. The intended interaction is: Tap the platter to play or pause an Apple Music subscription song. Hold the platter to stop playback at its current position. Move the platter forward or backward to control the direction and speed of audible playback continuously. Change pitch together with speed, like a physical record, rather than preserving the original pitch. Release the platter to smoothly return to normal playback. Hold a separate control to listen continuously at a faster speed. A prototype using an AVAudioEngine-based renderer works with unprotected local audio. I have NOT verified these behaviors with Apple Music subscription content. I understand that this local renderer does not establish feasibility for MusicKit, and I am not seeking to extract protected audio or bypass content protection. MusicPlayer.State.playbackRate is documented as settable, with positive values for forward playback and negative values for reverse playback: https://developer.apple.com/documentation/musickit/musicplayer/state-swift.class/playbackrate For ApplicationMusicPlayer on iOS, is this vinyl-style interaction supported for full Apple Music subscription songs, rather than previews or user-owned unprotected files? In particular: What playback-rate range is supported for subscription songs? Do negative rates produce audible reverse playback, and how should zero-speed holding be implemented? Is there a documented public API to make pitch follow playback speed, or to disable pitch preservation? Are frequent rate and direction changes supported for interactive scratching? Are there documented limitations on update frequency, buffering, seeking precision or responsiveness? If this interaction is outside public MusicKit capabilities, is there an official channel where an individual developer can ask about eligibility for an approved Apple Music DJ integration? I am asking for the supported API path and its limitations, not implementation details of another app. If only ordinary variable-speed playback or seeking is supported, a clear distinction from continuous vinyl-style scratching would be very helpful. The initial goal is personal use; possible App Store distribution is undecided. I have an active Apple Music subscription but am not currently enrolled in the paid Apple Developer Program. Thank you.
0
0
315
2w
iOS27, CIRAWFilter RAW9 broken/missing in latest dev beta
In the WWDC talk: https://developer.apple.com/videos/play/wwdc2026/305/?time=350 "Enhance RAW image processing with Core Image" there is a section on the new RAW9 processing APIs and how to enable them. First off, the sample code compiles on iOS18 but causes a runtime exception because the .version9 symbol cannot be found, looks like the header definition is missing a version check for this value, so I'm not sure how to use this code if you need to support iOS18. Also on later dev betas (I tried the latest beta7) now trying to check if version9 is available the value is no longer present in the supported list: guard filter.supportedDecoderVersions.contains(.version9) else { ... There is another value .version9DNG that resolves to true but if I try to use that decoder the colors on the RAW image are wrong and the image becomes corrupted. How to use the RAW9 decoder in the latest dev betas, what should the final code before production because the WWDC sample now seems out of date and was always wrong wrt. iOS18.
3
0
1.5k
2w
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
13
Boosts
4
Views
3.3k
Activity
1w
PHAssetChangeRequest deleteAssets completionHandler for recently captured 48MP DNG sometimes never called
I want to report a issue on PHAssetChangeRequest.deleteAssets Environment iOS 18.5, iOS 26.2.5, iOS 27.0 Steps to Reproduce Capture a 48MP ProRAW (DNG) photo with the Camera app. Open my app, call the following api to delete this photo: PHPhotoLibrary.shared().performChanges({ PHAssetChangeRequest.deleteAssets(assets) }, completionHandler: completionHandler) Expected The system delete-confirmation dialog appears; after the user confirms, the asset is deleted and the completionHandler is called or report error if it failed Actual Sometime the following issue happens: The confirmation dialog never appears and the completionHandler is never called no success, no error, no timeout. The built-in Photos app can delete the affected asset but API can't. The stuck request leaks permanently. Even after the same asset is subsequently deleted via the built-in Photos app, the pending completionHandler is still never invoked. Workaround for this issue When the issue happens, restarting the iPhone or reinstall app can not help to fix it But I found if I leave the device alone for an extended period (maybe 10 min~1 hour) and restart the iPhone, finally I found PHAssetChangeRequest.deleteAssets work again. It looks like some background task for 48MP RAW image in DNG format stuck delete API. I need to wait the task finished and restart device to reset stuck status. But I can not know when the DNG is ready to delete, it looks like my app hangs I think the better behavior is completion block should return a error to tell user what happens instead of not calling completion block.
Replies
2
Boosts
0
Views
1.3k
Activity
1w
### HEVC/H.265 playback works on iPhone 13 and iPhone 15 but fails on iPhone X and iPhone 17 Pro Max
Hi Apple Developer Community, I’m investigating an HEVC/H.265 playback issue in an iOS application and would appreciate some guidance regarding device-level HEVC compatibility and AVFoundation/VideoToolbox behavior. Our application plays video content encoded in both H.264 and H.265 (HEVC). Current observations The same H.265 video content produces the following results: Device H.264 H.265 iPhone X Works Does not play iPhone 13 Works Works iPhone 15 Works Works iPhone 17 Pro Max Works Does not play H.264 playback works consistently across all tested devices. The interesting part is that H.265 works on the iPhone 13 and iPhone 15, but does not work on either the older iPhone X or the newer iPhone 17 Pro Max. This makes me unsure whether the issue is related to the device's HEVC hardware decoder, a specific HEVC profile/level/pixel format, codec/container signaling, or the playback framework. Questions Are there known differences in HEVC/H.265 decoding capabilities or supported profiles between these iPhone generations that could explain this behavior? Can a newer device such as the iPhone 17 Pro Max have compatibility limitations with a particular HEVC stream that successfully plays on an iPhone 13 or iPhone 15? Are there specific HEVC parameters that I should compare when troubleshooting this, such as: HEVC profile (Main / Main 10) Level and tier 8-bit vs 10-bit Pixel format Chroma subsampling (4:2:0 / 4:2:2) Resolution and frame rate Bitrate HDR10 / HLG / SDR Color primaries / transfer characteristics hvc1 vs hev1 MP4/fMP4 vs MPEG-TS container Audio codec Is there an Apple-recommended API or method to determine at runtime whether a particular HEVC stream is supported by the current device before attempting playback? If using AVPlayer/AVPlayerItem, what is the recommended way to diagnose whether a failure is caused by: Unsupported HEVC characteristics VideoToolbox decoding Container/codec signaling Audio decoding AVFoundation Network/streaming configuration? Are there any differences in HEVC support between local MP4 playback and HLS/fMP4 playback that I should take into account? Additional investigation I am planning to inspect the exact video characteristics using ffprobe/MediaInfo and compare a working stream against a failing stream. For example, I intend to compare: Codec Codec tag (hvc1 / hev1) Profile Level Tier Bit depth Pixel format Resolution Frame rate Bitrate Chroma subsampling Color space HDR metadata Container Audio codec I will also test the same video outside the application to determine whether this is specific to our playback implementation or to the HEVC stream/device combination. Main question The main thing I would like to understand is: How can the same H.265 content be successfully decoded on an iPhone 13 and iPhone 15, while failing on both an older iPhone X and a much newer iPhone 17 Pro Max? Is there an Apple-documented compatibility matrix or recommended diagnostic approach for identifying which HEVC characteristic is responsible for this behavior? Any guidance on the relevant Apple documentation, AVFoundation APIs, VideoToolbox APIs, or known device-specific HEVC limitations would be greatly appreciated. Thank you.
Replies
0
Boosts
0
Views
95
Activity
1w
kVTCompressionPropertyKey_AverageBitRate seems to be broken in iOS 27 Beta
The set bitrate is not respected when kVTCompressionPropertyKey_AverageBitRate is used. constant and variable bitrates seems to work, only average that is broken. All three modes works in iOS 26.
Replies
8
Boosts
0
Views
3.6k
Activity
1w
MainCameraAccess for CameraFrameProvider Broke Between Xcode v. 26.2 and 26.6
Good Evening, I have some old code that uses the CameraFrameProvider successfully when run through Xcode versions 26.0 and 26.2, but not for 26.6. I have double checked all Custom iOS Target Properties in the project's info tab to make sure all required capabilities are added. I also updated the enterprise license by adding a new entitlements file approving main-camera-access. Somewhere between Xcode 26.2 and Xcode 26.6 what has changed that affects the ability to use CameraFrameProvider and access the Main Camera? Thank you.
Replies
2
Boosts
0
Views
659
Activity
1w
Does the PhotoKit fix in iOS 27 beta 3 also cover PHImageManager requests that never call back?
I previously reported an issue where PHImageManager.requestImageDataAndOrientation() never calls its progress or completion handler. In this thread, it was mentioned that iOS 27 beta 3 fixes a PhotoKit hang involving the deletion of recently captured 48 MP ProRAW assets. I know these involve different APIs (PHPhotoLibrary and PHImageManager). But the behavior looks the same. The request hangs without ever calling back, and later PhotoKit requests get stuck as well. Will the PHImageManager issue I reported also be fixed when iOS 27 is officially released?
Replies
0
Boosts
0
Views
500
Activity
1w
iOS 26.6.2: Live Photos Fail to Save (Only When Using the JPEG+MOV Combination)
On iOS 26.6.2, Live Photos fail to save. This issue does not occur on iOS 27.0 RC. Devices Experiencing Issues iPhone 17 (iOS 26.6.2) iPhone 17 Pro MAX(iOS 26.6.2) iPad mini 5th generation (iPadOS 26.6.2) and might be others... Description 1. For HEVC+MOV, the Livephoto is saved successfully. If you write the code exactly as shown in the official instruction the Live Photo will be saved successfully. However, the reference code uses a combination of HEVC and MOV. let photoSettings = AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.hevc]) 2. For JPEG+MOV, Livephoto saving fails. Some users prefer JPEG files, which offer high compatibility. Therefore, we'll modify the code as follows. let photoSettings = AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.jpeg]) In this case, the AVFoundation recording process itself succeeds, but when attempting to save the result to the photo library using PhotoKit, it fails with the following error. error:The operation couldn’t be completed. (PHPhotosErrorDomain error 3302.) key: __NSCFString = "_PHResourceUrlsErrorKey" Here is the code for saving Live Photos. (This is exactly the same as the code in the official reference.) PHPhotoLibrary.shared().performChanges({ let creationRequest = PHAssetCreationRequest.forAsset() creationRequest.addResource(with: .photo, data: stillImageData, options: nil) let options = PHAssetResourceCreationOptions() options.shouldMoveFile = true creationRequest.addResource(with: .pairedVideo, fileURL: livePhotoMovieURL, options: options) }) { success, error in // Handle completion. } We've posted to Apple Feedback with Sysdiagnose. FB24760461
Replies
0
Boosts
1
Views
570
Activity
1w
PHPhotoLibrary.performChanges completionHandler not called when deleting assets on iOS 26
In my app, I use api provided in Photos framework to delete specified photo. But after upgrading to iOS 26, the delete function in some iOS device no longer work. The api will never triggers the system confirmation dialog, and the completionHandler is never called. In the iOS Photos app, deletion works correctly on the same assets, but calling the API from my app does not work. Steps to Reproduce Make sure the app has Full Photo Library Access. Execute the following code: PHPhotoLibrary.shared().performChanges({ let assetsToBeDeleted = PHAsset.fetchAssets(withLocalIdentifiers: delUrls, options: nil) PHAssetChangeRequest.deleteAssets(assetsToBeDeleted) }, completionHandler: completionHandler) Expected Behavior The system should present a confirmation dialog asking the user to delete the selected photos. After the user confirms, the deletion should occur, and the completionHandler should be called with success or error. Actual Behavior The system delete confirmation dialog does not appear. The completionHandler is never called. Environment iOS Versions: 26.1 / 26.0.1 It looks like api bug. I want to check Is it a know issue and will be fixed. Thanks
Replies
5
Boosts
2
Views
1.2k
Activity
2w
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
4
Boosts
0
Views
798
Activity
2w
AirPods audio repeatedly cuts out under CPU and memory pressure on M5 Max MacBook Pro
I filed FB24725256 with a live macOS Bluetooth diagnostic, Sysdiagnose, and System Information Report. Environment: MacBook Pro (Mac17,6), Apple M5 Max, 128 GB RAM macOS 26.5 (25F71) AirPods Pro 3, firmware 8B41 AirPods selected for both input and output because microphone input is required for dictation and voice typing Problem: Bluetooth playback repeatedly stutters and cuts out during sustained local development and AI-agent workloads. The AirPods signal is strong (roughly -46 to -52 RSSI), and the Mac remains otherwise usable. Unified logs recorded repeated AudioSkywalkReadLoop overwait events in bluetoothd, commonly 50–69 ms and previously up to 795 ms. CoreAudio also reported HALS_OverloadMessage failures because a client exceeded its I/O-cycle budget and a safety violation occurred. Steps to reproduce: Connect AirPods Pro and keep them selected for input and output. Stream audio. Run sustained CPU- and memory-intensive development work, such as multiple builds, browser workloads, simulators, or local AI agents. Observe repeated playback interruptions as CPU load and memory compression increase. Expected: macOS should protect real-time CoreAudio and Bluetooth transport deadlines on this hardware without requiring productive work to be paused or throttled. The same AirPods stream reliably from much smaller Apple devices; Apple's highest-end Mac should maintain audio continuity too. This is a platform-quality failure on a high-end Mac. This appears related to longstanding reports: Simulator/Xcode causing AirPods distortion: https://developer.apple.com/forums/thread/668170 CoreAudio overloads and dropouts associated with memory pressure: https://developer.apple.com/forums/thread/677383 Bluetooth headset interruptions on newer macOS releases: https://developer.apple.com/forums/thread/763848 If you can reproduce this, please boost this thread and file your own Feedback Assistant report with fresh Bluetooth logs and a Sysdiagnose. Include the exact occurrence time and reference FB24725256 so Apple can connect the reports.I filed FB24725256 with a live macOS Bluetooth diagnostic, Sysdiagnose, and System Information Report. Environment: MacBook Pro (Mac17,6), Apple M5 Max, 128 GB RAM macOS 26.5 (25F71) AirPods Pro 3, firmware 8B41 AirPods selected for both input and output because microphone input is required for dictation and voice typing Problem: Bluetooth playback repeatedly stutters and cuts out during sustained local development and AI-agent workloads. The AirPods signal is strong (roughly -46 to -52 RSSI), and the Mac remains otherwise usable. Unified logs recorded repeated AudioSkywalkReadLoop overwait events in bluetoothd, commonly 50–69 ms and previously up to 795 ms. CoreAudio also reported HALS_OverloadMessage failures because a client exceeded its I/O-cycle budget and a safety violation occurred. Steps to reproduce: Connect AirPods Pro and keep them selected for input and output. Stream audio. Run sustained CPU- and memory-intensive development work, such as multiple builds, browser workloads, simulators, or local AI agents. Observe repeated playback interruptions as CPU load and memory compression increase. Expected: macOS should protect real-time CoreAudio and Bluetooth transport deadlines on this hardware without requiring productive work to be paused or throttled. The same AirPods stream reliably from much smaller Apple devices; Apple's highest-end Mac should maintain audio continuity too. This is a platform-quality failure on a high-end Mac. This appears related to longstanding reports: Simulator/Xcode causing AirPods distortion: https://developer.apple.com/forums/thread/668170 CoreAudio overloads and dropouts associated with memory pressure: https://developer.apple.com/forums/thread/677383 Bluetooth headset interruptions on newer macOS releases: https://developer.apple.com/forums/thread/763848 If you can reproduce this, please boost this thread and file your own Feedback Assistant report with fresh Bluetooth logs and a Sysdiagnose. Include the exact occurrence time and reference FB24725256 so Apple can connect the reports.
Replies
1
Boosts
0
Views
405
Activity
2w
AirPlay fails when Mac is connected to iPhone Personal Hotspot
AirPlay fails when Mac is connected to iPhone Personal Hotspot I’m using AVRoutePickerView to route audio from an iPhone app to a Mac with AirPlay Receiver enabled. What works When the iPhone and Mac are connected to the same Wi-Fi network, AirPlay routing works normally. Routing audio back to the iPhone speaker or to connected AirPods over Bluetooth also works correctly. What fails When the iPhone provides a Personal Hotspot and the Mac connects to that iPhone’s hotspot, the Mac still appears as an available destination in AVRoutePickerView. However, selecting the Mac fails with: Unable to connect to “[Mac Name]” Questions Is AirPlay routing from an iPhone hosting a Personal Hotspot to a Mac connected to that hotspot a supported network topology? If it is supported, are there any additional AVAudioSession, networking, entitlement, or AirPlay configuration requirements for this scenario? The fact that the Mac is successfully discovered and displayed by AVRoutePickerView, but the connection itself fails, is the part I’m particularly trying to understand. Thank you for any guidance on the expected behavior here.
Replies
0
Boosts
0
Views
399
Activity
2w
Iphone Duo
Does the iPhone Duo support spatial video recoding for playback on Apple Vision Pro?
Replies
0
Boosts
0
Views
108
Activity
2w
RemoteMediaSession started while the app is in the background no longer appears in Control Center (worked in earlier betas)
My app publishes a NowPlaying.RemoteMediaSession for music playing on speakers on the local network. While the app is in the background and someone taps play on my widget, that intent runs in my app process and wakes the app in the background — it can fetch the speaker state and start and update the remote session without any trouble. As of Beta 6, the session is created successfully but never shows up in Control Center or on the Lock Screen. It only appears the moment I bring my app to the foreground. In earlier betas the same code showed the session in control center, without needing to open the app. I don't call requestToBecomeSystemPrimary() and I don’t expect it to be set as primary, only when my app is in the foreground but at least the session should appear in control center or the lock screen as an option for the user to set it to system primary. FB24439526 has been submitted with Sysdiagnose attached.
Replies
1
Boosts
2
Views
167
Activity
2w
On iOS 26.6.1 and 26.6.2, Exif (XResolution / YResolution) values become 0 when an image attached in the Gmail app is saved to the Photos app
My app is built with Xcode 26.1 and uses a customized photo picker implemented with the PhotoKit Framework. After saving an image attached in the Gmail app to the Photos app on iOS 26.6.1 or iOS 26.6.2, when my app selects and loads that image, the Exif XResolution and YResolution values are both reported as 0. Is this an iOS bug? The following code retrieves the XResolution and YResolution values from the PHAsset of the selected image. private func selectAsset(_ asset: PHAsset) { let options = PHImageRequestOptions() options.isNetworkAccessAllowed = true options.deliveryMode = .highQualityFormat PHImageManager.default().requestImageDataAndOrientation(for: asset, options: options) { data, _, _, _ in DispatchQueue.main.async { if let data { let options = PHImageRequestOptions() options.isNetworkAccessAllowed = true options.deliveryMode = .highQualityFormat PHImageManager.default().requestImageDataAndOrientation(for: asset, options: options) { data, _, _, _ in guard let data, let source = CGImageSourceCreateWithData(data as CFData, nil), let properties = CGImageSourceCopyPropertiesAtIndex(source, 0, nil) as? [CFString: Any], let tiff = properties[kCGImagePropertyTIFFDictionary] as? [CFString: Any] else { print("XResolution: NaN, YResolution: NaN") return } let xResolution = tiff[kCGImagePropertyTIFFXResolution] as? Double let yResolution = tiff[kCGImagePropertyTIFFYResolution] as? Double print("XResolution: \(xResolution.map { String($0) } ?? "NaN"), YResolution: \(yResolution.map { String($0) } ?? "NaN")") } } } } } Result on iOS 26.6 XResolution: 72, YResolution: 72 Result on iOS 26.6.1 and 26.6.2 XResolution: 0, YResolution: 0
Replies
1
Boosts
0
Views
141
Activity
2w
AVAssetDownloadConfiguration does not download supplemental tracks on iOS 16
We're downloading HLS content for offline playback using AVAssetDownloadConfiguration. It's critical for our app that all subtitle tracks are downloaded together with the video, so users can watch any subtitle and audio option while offline. On iOS 16, not all tracks are downloaded, and when the user goes offline, playback fails with NSURLErrorNotConnectedToInternet (error -1009) because AVFoundation tries to fetch the missing subtitle segments over the network. On iOS 17 and later, everything works as expected — all subtitle and audio tracks are downloaded. However, on iOS 16 we observe two issues: First issue: Supplemental tracks are not downloaded on iOS 16 (device) Only the default audio track is downloaded. All non-default supplemental tracks — both subtitles and additional audio tracks — exhibit the same problem: Some supplemental tracks listed in the manifest don't even get a directory created in the .movpkg package Some supplemental tracks do get a directory created, but it contains only StreamInfoBoot.xml and StreamInfoRoot.xml — no actual segment data (.frag files) is downloaded. The StreamInfoBoot.xml for these directories shows NO, 0, and 0, with Supplemental Additionally, a Manifest.m3u8 stream directory is created with Complete=NO and no segment data. On iOS 17+ devices, all supplemental track directories are created and all contain segment data. Second issue: Downloads fail entirely on iOS 16 Simulator We receive the following error: Error Domain=NSURLErrorDomain Code=-16090 UserInfo={ NSLocalizedDescription=The operation could not be completed, _NSURLErrorFailingURLSessionTaskErrorKey=BackgroundAVAssetDownloadTask <DEC0D555-6C05-416C-91B8-F490F5A29046>.<3>, _NSURLErrorRelatedURLSessionTaskErrorKey=( "BackgroundAVAssetDownloadTask <DEC0D555-6C05-416C-91B8-F490F5A29046>.<3>" ), NSLocalizedFailureReason=An unknown error occurred (-16090) } On iOS 17+ Simulators, downloads work without issues. Our setup: let urlAsset = AVURLAsset(url: manifestURL) let preferredMediaSelection = try await urlAsset.load(.allMediaSelections) let config = AVAssetDownloadConfiguration(asset: urlAsset, title: title) config.primaryContentConfiguration.mediaSelections = preferredMediaSelection let task = assetDownloadURLSession.makeAssetDownloadTask(downloadConfiguration: config) task.resume() Example HLS manifest: #EXTM3U #EXT-X-VERSION:7 #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="French",LANGUAGE="fr",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,URI="s_25/stream.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="French (forced)",LANGUAGE="fr-x-cc",DEFAULT=NO,AUTOSELECT=YES,FORCED=YES,URI="s_31/stream.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",LANGUAGE="en",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,URI="s_37/stream.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Kazakh",LANGUAGE="kk",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,URI="s_43/stream.m3u8" #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Uzbek",LANGUAGE="uz",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,URI="s_49/stream.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud_ec3",NAME="French 5.1",LANGUAGE="fr",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="6",URI="a_18/stream.m3u8" #EXT-X-STREAM-INF:AUDIO="aud_ec3",SUBTITLES="subs",BANDWIDTH=1931408,VIDEO-RANGE=SDR,CODECS="hvc1.1.6.L90.90,ec-3",RESOLUTION=1024x428,FRAME-RATE=25,HDCP-LEVEL=NONE v_6/stream.m3u8 #EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,URI="skd://XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1" Questions: What is the correct way to make sure all supplemental tracks (subtitles, non-default audio) are actually downloaded on an iOS 16 real device? We pass asset.load(.allMediaSelections) to primaryContentConfiguration.mediaSelections — is there a different configuration, or should we use auxiliaryContentConfigurations, or something else entirely? Is there any way to make asset downloads work on the iOS 16 Simulator at all? We always get NSURLErrorDomain error -16090, while iOS 17+ Simulators work fine. If the supplemental tracks download bug on iOS 16 cannot be fixed or worked around from the app side, do you have any recommended approach for handling incomplete .movpkg packages at offline playback time?
Replies
1
Boosts
0
Views
380
Activity
2w
Variable aperture on the iPhone 18 Pro
Does iOS 27 provide an API which allows developers to set the iPhone 18 Pro camera's aperture? If it does, is the aperture going to be limited to just 4 discrete settings (like in the Camera app and like mentioned in the Tech Specs for the 18 Pro) or does the hypothetical iOS API allow us to set the aperture to a continuous value in the 0.0–1.0 range (similar to how a camera's focus can be set)?
Replies
2
Boosts
1
Views
628
Activity
2w
Capturing 48mp photos with .builtInTripleCamera
I am able to capture 48mp photos using .builtInWideAngleCamera, but it seems like .builtInTripleCamera is capped at 12mp? Is there a way to capture 48mp photos using .builtInTripleCamera? Because .builtInTripleCamera provides smooth transition between cameras during zooming, and I'd like to keep this behavior. New iPhone 17 Pro have all their cameras at 48mp. Is there a chance that their .builtInTripleCamera is capable of capturing 48mp? Or is this an API limitation?
Replies
4
Boosts
0
Views
950
Activity
2w
Working with kCVPixelFormatType_96VersatileBayerPacked12
Whilst AVCaptureSession is setup to capture ProRes RAW video, is it possible to get video pixel data which can read and processed, such as using CIImage(cvPixelBuffer: ) AVCaptureVideoDataOutput outputs ProRes RAW in kCVPixelFormatType_96VersatileBayerPacked12 pixel format. Is there a provided way to debayer this pixel format into something more usable?
Replies
1
Boosts
1
Views
849
Activity
2w
Supported MusicKit APIs for vinyl-style speed, pitch and reverse playback of subscription songs on iOS?
I am building a personal iPhone prototype with an on-screen record platter. Before enrolling in the Apple Developer Program or developing the Apple Music integration further, I would like to establish whether the core interaction is supported by public APIs. The intended interaction is: Tap the platter to play or pause an Apple Music subscription song. Hold the platter to stop playback at its current position. Move the platter forward or backward to control the direction and speed of audible playback continuously. Change pitch together with speed, like a physical record, rather than preserving the original pitch. Release the platter to smoothly return to normal playback. Hold a separate control to listen continuously at a faster speed. A prototype using an AVAudioEngine-based renderer works with unprotected local audio. I have NOT verified these behaviors with Apple Music subscription content. I understand that this local renderer does not establish feasibility for MusicKit, and I am not seeking to extract protected audio or bypass content protection. MusicPlayer.State.playbackRate is documented as settable, with positive values for forward playback and negative values for reverse playback: https://developer.apple.com/documentation/musickit/musicplayer/state-swift.class/playbackrate For ApplicationMusicPlayer on iOS, is this vinyl-style interaction supported for full Apple Music subscription songs, rather than previews or user-owned unprotected files? In particular: What playback-rate range is supported for subscription songs? Do negative rates produce audible reverse playback, and how should zero-speed holding be implemented? Is there a documented public API to make pitch follow playback speed, or to disable pitch preservation? Are frequent rate and direction changes supported for interactive scratching? Are there documented limitations on update frequency, buffering, seeking precision or responsiveness? If this interaction is outside public MusicKit capabilities, is there an official channel where an individual developer can ask about eligibility for an approved Apple Music DJ integration? I am asking for the supported API path and its limitations, not implementation details of another app. If only ordinary variable-speed playback or seeking is supported, a clear distinction from continuous vinyl-style scratching would be very helpful. The initial goal is personal use; possible App Store distribution is undecided. I have an active Apple Music subscription but am not currently enrolled in the paid Apple Developer Program. Thank you.
Replies
0
Boosts
0
Views
315
Activity
2w
iOS27, CIRAWFilter RAW9 broken/missing in latest dev beta
In the WWDC talk: https://developer.apple.com/videos/play/wwdc2026/305/?time=350 "Enhance RAW image processing with Core Image" there is a section on the new RAW9 processing APIs and how to enable them. First off, the sample code compiles on iOS18 but causes a runtime exception because the .version9 symbol cannot be found, looks like the header definition is missing a version check for this value, so I'm not sure how to use this code if you need to support iOS18. Also on later dev betas (I tried the latest beta7) now trying to check if version9 is available the value is no longer present in the supported list: guard filter.supportedDecoderVersions.contains(.version9) else { ... There is another value .version9DNG that resolves to true but if I try to use that decoder the colors on the RAW image are wrong and the image becomes corrupted. How to use the RAW9 decoder in the latest dev betas, what should the final code before production because the WWDC sample now seems out of date and was always wrong wrt. iOS18.
Replies
3
Boosts
0
Views
1.5k
Activity
2w