We’re developing an AVFoundation-based video recording app (4K @ 60 fps required for biomechanical analysis). On most devices this works perfectly (iPhone 12/14/15/16 non-Pro models), but on several iPhone Pro models (12 Pro, 13 Pro, 14 Pro, 15 Pro/Pro Max), we consistently get 4K 30 fps recordings—even when the device should support 4K 60 fps on the wide-angle camera.
What we observe
We configure the session for .hd4K3840x2160.
We iterate through AVCaptureDevice.formats and select formats that:
have 3840×2160 resolution
support ≥60 fps (videoSupportedFrameRateRanges)
On some Pro devices, this format search returns no results, even though:
The Camera app records 4K60 fine.
External references list the wide camera as 4K60 capable.
The fallback becomes the device's default 4K30 format, so final files are 3840×2160 @ 30 fps.
This happens immediately on app launch (not after heating), so not thermal-related.
What we’ve tried
Force selecting .builtInWideAngleCamera instead of dual/triple cameras.
Disabling HDR (videoHDREnabled = false).
Disabling low-light boost.
Allowing 59.94 fps formats (in case exact 60.0 isn’t exposed).
Logging all videoSupportedFrameRateRanges per format.
What we’re seeing in logs
On affected Pro devices, the capture device reports only 4K formats with maxFrameRate ≈ 30 fps, despite the hardware being able to do 4K60.
Main question
Has anyone encountered cases where 4K60 formats are available in the Camera app but not exposed through AVFoundation, especially on Pro models or multi-camera devices?
Could HEVC/HDR capability or multi-camera constraints be preventing certain formats from appearing?
Are there known conditions where 4K60 formats are hidden unless specific device configuration is applied?
Any guidance on reliably locking 4K60 on iPhone Pro models via AVFoundation would be hugely appreciated.
Overview
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hi there,
I received an enterprise license file to include enhanced object tracking configuration for the Vision Pro. My account is part of the team which got the allowance from Apple to use this capability. Unfortunately, although I followed the guide, I do not find the Object Tracking capability when I try to add it to my project. There are other capabilities like Main Camera on the Vision Pro, but not for Object Tracking. I am using Xcode 26.1 and visionOS 26.1. What am I missing here?
Thanks in advance,
Matthias
I am trying the simplest use of attachment in realityKit and get Contextual closure type @MainActor, @Sendable (inout RealityViewCameraContent) async -> void expects 1 argument, but 2 were used in closure body.
Also i get cannot find Attachment in scope
I am developing a running training app that coaches can use to create interval workout plans.
I can use HKWorkout to get information about Splits similar to that in Fitness app, but I can't get information about Intervals.
My idea is to show interval details when users view their completed custom interval workout plans.
Can I use Healthkit (or another feasible method) to get the actual distance or time of exercise in intervals workout ?
(I know the workoutPlan property, but it doesn't reflect the segments of a real interval training workout.)
Any insights or suggestions would be greatly appreciated!
Thanks in advance!
Topic:
App & System Services
SubTopic:
Health & Fitness
Tags:
Health and Fitness
HealthKit
WorkoutKit
I am trying to address an issue with my app’s share sheet where, when the user sends a URL to either Apple Reminders or OmniFocus, the receiving app does not get a title. So I am updating my share sheet code to use UIActivityItemsConfiguration.
I have this code:
let title = "Golden Hill Software"
let url = URL(string: "https://www.goldenhillsoftware.com/")!
let itemProvider = NSItemProvider()
itemProvider.registerObject(ofClass: URL.self, visibility: .all) { (handler) in
handler(url, nil)
return nil
}
let config = UIActivityItemsConfiguration(itemProviders: [itemProvider])
config.metadataProvider = { (key) in
if key == .title || key == .messageBody {
return title
} else {
return nil
}
}
let viewController = UIActivityViewController(activityItemsConfiguration: config)
self.present(viewController, animated: true)
This works with some share sheet extensions. But when I choose the Ivory share extension, Ivory creates a post with a URL that starts with bplist…. When I choose the Open in Chrome action extension, Chrome says “Chrome cannot handle this link”.
Can someone help me understand what I am doing wrong here? (edited)
Topic:
UI Frameworks
SubTopic:
UIKit
I have a watch only app that display an open/close park status and the current temperature with a current condition icon. That's it. On second submission the watch app was rejected due to no WeatherKit attribution. I have a lack of clarity of what's needed. With my single view that display my content I don't want WeatherKit attribution to overwhelm what's being presented to the user. I've tried looking for watch apps in the store that provide attribution and I'm not finding any. Looking for advice on how to meet this requirement without attribution overpowering my content.
Hi,
I am working through the https://developer.apple.com/tutorials/app-dev-training/editing-reminders
The app runs as described, but in the Xcode 26.1.1 console, I get numerous warnings that say:
Warning: You are setting a new content configuration to a cell that has an existing content configuration, but the existing content view does not support the new configuration. This means the existing content view must be replaced with a new content view created from the new configuration, instead of updating the existing content view directly, which is expensive. Use separate registrations or reuse identifiers for different types of cells to avoid this. Make a symbolic breakpoint at UIContentConfigurationAlertForReplacedContentView to catch this in the debugger.
Does this app need to be updated for Xcode 26, or are there settings in Xcode 26 that I need to make to get rid of these warnings?
Thanks
Topic:
Developer Tools & Services
SubTopic:
Xcode
Hello,
I am wondering if it is possible to have audio from my AirPods be sent to my speech to text service and at the same time have the built in mic audio input be sent to recording a video?
I ask because I want my users to be able to say "CAPTURE" and I start recording a video (with audio from the built in mic) and then when the user says "STOP" I stop the recording.
Hello
I used to compile my SW in order to make it available on my iPhone 12 (IOS 18.6.2)
As I launch my app, it seems there is something witch disable the buttons . How can I enable all buttons in my app ?
Best regards
Guy Desbief
Topic:
Community
SubTopic:
Apple Developers
inline-code
How do you achieve this effect in toolbar? Where is the documentation for this?
How to make it appear top toolbar or bottom toolbar?
Thank you!
Here is what I have now...
.toolbar {
ToolbarItem(placement: .destructiveAction) {
Button {
showConfirm = true
} label: {
Image(systemName: "trash")
.foregroundColor(.red)
}
}
}
.confirmationDialog(
"Are you sure?",
isPresented: $showConfirm,
titleVisibility: .visible
) {
Button("Delete Item", role: .destructive) {
print("Deleted")
}
Button("Archive", role: .none) {
print("Archived")
}
Button("Cancel", role: .cancel) { }
}
}
Hello everyone,
I’m an iOS developer from Türkiye, and I’m currently facing a serious issue regarding my Apple Developer account termination (Appeal Ticket: APL255848).
Problem:
I have removed all references, icons, descriptions, and metadata related to my previous app name (“Nano Banana”) both inside the app and on the App Store listing. I submitted updated assets, screenshots, and a new metadata package. However, the App Review Board seems to still be seeing old cached metadata, old icons, or previous descriptions that no longer exist in my build.
Because of this, every response from App Store Connect repeats the same text, even though I have already made and proven all required changes.
Current Situation:
My account is terminated, and my appeal has been pending for over 3 weeks with identical non-actionable responses.
I am not receiving my revenue for the past 2 months.
I want to comply fully with the Apple Developer Program Agreement and provide any documents required (invoices, trademarks, API invoices, technical details, etc.).
I believe there may be a metadata caching issue or the review team seeing an older version of my app.
My question to the community:
Has anyone experienced a case where App Store Connect or the App Review Board continues to see outdated metadata even after everything is updated?
Is there a recommended way to ensure Apple sees the latest changes (e.g., waiting for metadata propagation, submitting a blank metadata update, reuploading the build, or another technical step)?
Any guidance or similar experiences would be extremely helpful.
Thank you in advance.
Kind regards,
Yunus Emre Özdiyar
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
In iOS 26.2, PermissionKit allows apps to request parental consent when a minor attempts to initiate a chat function.
I believe this feature would be extremely useful when a minor tries to access other features in an application.
For instance, in a real-time streaming service, when a minor attempts to access certain content, I would like to require parental permission. Is it acceptable to use the currently provided PermissionKit to send a request to the parent in this scenario?
I am considering providing arbitrary values or nil for the action and PersonInformation parameters in this case.
I would appreciate it if a fellow developer or an Apple staff member could confirm the intended scope of PermissionKit and if this kind of non-chat-related use case is permissible.
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
Hello.
When a user revokes Apple Login authorization, I am expecting a webhook to be delivered to our configured endpoint, but I currently not receiving any at all.
So I have some questions:
Should the revoke event webhook be delivered in real-time?
If it is not real-time, when is the webhook supposed to be sent?
If my server fails to respond to the webhook request, does Apple retry the delivery? (Actually I couldn't find how to response in this scenario, but if I can)
Thanks in advance.
Topic:
Privacy & Security
SubTopic:
Sign in with Apple
Tags:
Sign in with Apple REST API
Sign in with Apple
App Notarization got stuck, showing In-Progress from last 24 hrs.
This is really frustrating. Can anyone plz update on this?
Trying to remove an app version from review to replace it with a newer version.
Despite the docs saying it's possible, it's not.
Silent failure. Seeing 409 in the console.
Any ideas how to fix it?
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Hi all,
I've been working on some personal programming projects and have gotten into using the Apple Music API. I'm currently looking to get a list of recent songs using the /v1/me/recent/played/tracks endpoint and it's working well.
However, I know there are some songs I've listened to multiple times in a row, and those are not showing up as unique tracks when querying this endpoint. I'm only seeing a list of the different songs I've listened to lately, not a true list of the most recent plays on my account.
Is this intended behavior or am I going about something incorrectly here? My query is using that endpoint & specifying the types to be only [songs].
Thanks in advance for any ideas or insight.
I'm trying to sync authentication data from my iOS app to a Safari Web Extension using App Groups, but the extension isn't consistently receiving the data.
Setup:
App Group: group.com.airaai.AiraApp (configured in both app and extension)
iOS app writes auth data using UserDefaults(suiteName: "group.com.airaai.AiraApp")
Extension's Swift SafariWebExtensionHandler reads from App Groups in beginRequest()
Extension's JavaScript reads from browser.storage.local
Problem:
Extension popup always shows "logged out" even when:
User is logged into main iOS app
Auth data exists in App Groups (verified via native module logs)
Handler successfully writes test values to extension storage
Current Behavior:
Handler CAN read from App Groups ✅
Handler CAN write test values to extension storage ✅
But auth data doesn't appear in browser.storage.local when popup checks ❌
Popup reads empty keys even though handler logged writing them
Code:
// Handler reads from App Groups
guard let sharedDefaults = UserDefaults(suiteName: "groupName") else { return }
let authData = sharedDefaults.string(forKey: "auth_data")
// Handler writes to extension storage (tried multiple suite names)
let extensionDefaults = UserDefaults(suiteName: Bundle.main.bundleIdentifier ?? "")
extensionDefaults?.set(authData, forKey: "oauth_token")
extensionDefaults?.synchronize()
// Popup reads from storage
browser.storage.local.get(['oauth_token']).then(data => {
console.log(data); // Always empty {}
});
What I've tried:
✅ App Groups properly configured in both targets
✅ Extension has App Groups capability enabled
✅ Multiple UserDefaults suite names (bundle ID, bundle ID + suffix)
✅ Delayed sync attempts in handler
✅ Comprehensive logging
Questions:
What is the correct UserDefaults suite name for Safari extension storage on iOS?
When does beginRequest() get called? Can it be triggered manually?
Is App Groups the right approach, or should I use a different pattern?
Alternatives I've considered:
Deep link/redirect method (app opens Safari with token in URL)
Content script intercepts URL and sends to background script
Is this a supported approach for iOS Safari extensions?
Any guidance or examples would be greatly appreciated!
Frustrated developer here. I’ve been dealing with Apple developers via telephone and have been submitting a case a week for the last four weeks with the same response “The developers are reviewing your application“. How long does it take to review an application? It’s weird because I started the same process with Google at the same time and they are now reviewing my app for publishing.
Topic:
Developer Tools & Services
SubTopic:
Apple Developer Program
Hello,
I have a problem regarding my App review.
The issue:
"Guideline 3.1.2 - Business - Payments - Subscriptions
Issue Description
The submission did not include all the required information for apps offering auto-renewable subscriptions.
The app's metadata is missing the following required information:
A functional link to the Terms of Use (EULA). If you are using the standard Apple Terms of Use (EULA), include a link to the Terms of Use in the App Description. If you are using a custom EULA, add it in App Store Connect."
My explanation:
I'm using Apple's original EULA in my app. The EULA was already in the "About" section. It redirects to the EULA page on Apple's official website. However, since my app also has a payment screen, I added the same information below the payment screen and submitted it for review again. Unfortunately, it's still being rejected for the same reason. I've requested a full, detailed explanation via email, but they keep sending me the same copy-and-paste message.
I want to resolve this issue as soon as possible, so I decided to ask you here.
Please check the screenshots and let me know what's the problem.
Best regards,
DryreL
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Tags:
App Review
App Store Connect
This issue keeps cropping up on the forums and so I decided to write up a single post with all the details. If you have questions or comments:
If you were referred here from an existing thread, reply on that thread.
If not, feel free to start a new thread. Use whatever topic and subtopic is appropriate for your question, but also add the Entitlements tag so that I see it.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"
Determining if an entitlement is real
In recent months there’s been a spate of forums threads involving ‘hallucinated’ entitlements. This typically pans out as follows:
The developer, or an agent working on behalf of the developer, changes their .entitlements file to claim an entitlement that’s not real. That is, the entitlement key is a value that is not, and never has been, supported in any way.
Xcode’s code signing machinery tries to find or create a provisioning profile to authorise this claim.
That’s impossible, because the entitlement isn’t a real entitlement. Xcode reports this as a code signing error.
The developer misinterprets that error [1] in one of two ways:
As a generic Xcode code signing failure, and so they start a forums thread asking about how to fix that problem.
As an indication that the entitlement is managed — that is, requires authorisation from Apple to use — and so they start a forums thread asking how to request such authorisation.
The fundamental problem is step 1. Once you start claiming entitlements that aren’t real, you’re on a path to confusion.
Note If you’re curious about how provisioning profiles authorise entitlement claims, read TN3125 Inside Code Signing: Provisioning Profiles.
There are a couple of ways to check whether an entitlement is real. My preferred option is to create a new test project and use Xcode’s Signing & Capabilities editor to add the corresponding capability to it. Then look at what Xcode did. You might find that Xcode claimed a different entitlement, or added an Info.plist key, or did nothing at all.
IMPORTANT If you can’t find the correct capability in the Signing & Capabilities editor, it’s likely that this feature is available to all apps, that is, it’s not gated by an entitlement or anything else.
Another thing you can do is search the documentation. The vast majority of real entitlements are documented in Bundle Resources > Entitlements.
IMPORTANT When you search for documentation, focus on the Apple documentation. If, for example, you search the Apple Developer Forums, you might be mislead by other folks who are similarly confused.
If you find that you’re mistakenly trying to claim a hallucinated entitlement, the fix is trivial:
Remove it from your .entitlements file so that your app starts to build again.
Then add the capability using Xcode’s Signing & Capabilities editor. This will do the right thing.
If you continue to have problems, feel free to ask for help here on the forums. See the top of this post for advice on how to do that.
[1] Xcode 26.2, currently being seeded as Release Candidate, is much better about this (r. 155327166). Give it a whirl!
Commonly Hallucinated Entitlements
This section lists some of the more commonly hallucinated entitlements:
com.apple.developer.push-notifications — The correct entitlement is aps-environment (com.apple.developer.aps-environment on macOS), documented here. There’s also the remote-notification value in the UIBackgroundModes property.
com.apple.developer.in-app-purchase — There’s no entitlement for in-app purchase. Rather, in-app purchase is available to all apps with an explicit App ID (as opposed to a wildcard App ID).
com.apple.InAppPurchase — Likewise.
com.apple.developer.storekit — Likewise.
com.apple.developer.in-app-purchase.non-consumable — Likewise.
com.apple.developer.in-app-purchase.subscription — Likewise.
com.apple.developer.app-groups — The correct entitlement is com.apple.security.application-groups, documented here. And if you’re working on the Mac, see App Groups: macOS vs iOS: Working Towards Harmony.
com.apple.developer.background-modes — Background modes are controlled by the UIBackgroundModes key in your Info.plist, documented here.
UIBackgroundModes — See the previous point.
com.apple.developer.voip-push-notification — There’s no entitlement for this. VoIP is gated by the voip value in the UIBackgroundModes property.
com.apple.developer.family-controls.user-authorization — The correct entitlement is com.apple.developer.family-controls, documented here.
IMPORTANT As explained in the docs, this entitlement is available to all developers during development but you must request authorisation for distribution.
com.apple.developer.device-activity — The DeviceActivity framework has the same restrictions as Family Controls.
com.apple.developer.managed-settings — If you’re trying to use the ManagedSettings framework, that has the same restrictions as Family Controls. If you’re trying to use the ManagedApp framework, that’s not gated by an entitlement.
com.apple.developer.callkit.call-directory — There’s no entitlement for the Call Directory app extension feature.
com.apple.developer.nearby-interaction — There’s no entitlement for the Nearby interaction framework.
com.apple.developer.secure-enclave — On iOS and its child platforms, there’s no entitlement required to use the Secure Enclave. For macOS specifically, any program that has access to the data protection keychain also has access to the Secure Enclave [1]. See TN3137 On Mac keychain APIs and implementations for more about the data protection keychain.
com.apple.developer.networking.configuration — If you’re trying to configure the Wi-Fi network on iOS, the correct entitlement is com.apple.developer.networking.HotspotConfiguration, documented here.
com.apple.developer.musickit — There is no MusicKit capability. Rather, enable MusicKit via the App Services column in the App ID editor, accessible from Developer > Certificates, Identifiers, and Profiles > Identifiers.
com.apple.mail.extension — Creating an app extension based on the MailKit framework does not require any specific entitlement.
com.apple.security.accessibility — There’s no entitlement that gates access to the Accessibility APIs on macOS. Rather, this is controlled by the user in System Settings > Privacy & Security. Note that sandboxed apps can’t use these APIs. See the Review functionality that is incompatible with App Sandbox section of Protecting user data with App Sandbox.
com.apple.developer.adservices — Using the AdServices framework does not require any specific entitlement.
[1] While technically these are different features, they are closely associated and it turns out that, if you have access to the data protection keychain, you also have access to the SE.
Revision History
2025-12-09 Updated the Xcode footnote to mention the improvements in Xcode 26.2rc.
2025-11-03 Added com.apple.developer.adservices to the common hallucinations list.
2025-10-30 Added com.apple.security.accessibility to the common hallucinations list.
2025-10-22 Added com.apple.mail.extension to the common hallucinations list. Also added two new in-app purchase hallucinations.
2025-09-26 Added com.apple.developer.musickit to the common hallucinations list.
2025-09-22 Added com.apple.developer.storekit to the common hallucinations list.
2025-09-05 Added com.apple.developer.device-activity to the common hallucinations list.
2025-09-02 First posted.