Team-scoped keys introduce the ability to restrict your token authentication keys to either development or production environments. Topic-specific keys in addition to environment isolation allow you to associate each key with a specific Bundle ID streamlining key management.
For detailed instructions on accessing these features, read our updated documentation on establishing a token-based connection to APNs.
Delve into the world of built-in app and system services available to developers. Discuss leveraging these services to enhance your app's functionality and user experience.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Created
I’m running into a CloudKit sync issue that I can’t reconcile after multiple rebuilds, TestFlight uploads, and entitlement verification, and I’m hoping for guidance on what I’m missing or whether this is expected behavior.
Context
App: RankSpinnah
Platforms: iOS + macOS
Distribution: TestFlight
Xcode: 26.x
Both apps use the same bundle identifier, same container, and same Apple Developer team
Automatic signing enabled; Xcode-managed profiles
CloudKit capability enabled for both targets
Both builds install and run correctly from TestFlight on:
iPhone 17 Pro
Apple-silicon Mac (M5 MacBook Pro)
The Problem
CloudKit data does not sync at all between devices.
On both iOS and macOS, CloudKit queries return no records, and I consistently see this error:
Field 'recordName' is not marked queryable
This occurs even when querying for records that should exist and after fresh installs on both devices.
What I’ve Verified
Same iCloud account signed in on both devices
CloudKit container exists and is enabled
App Sandbox enabled with network access
CloudKit entitlements present in the signed app (verified from the archived .app)
TestFlight builds are using the correct container
Rebuilt and re-uploaded after version bump (1.2.0 / build 2026.02.03)
Both iOS and macOS apps successfully uploaded and installed via TestFlight
Despite this, no data syncs, and the queryable error persists.
What I’m Unsure About
Whether recordName is expected to be non-queryable in production schemas
Whether TestFlight + CloudKit requires an explicit production schema deploy beyond what Xcode manages
Whether this indicates a schema mismatch between development and production environments
Or whether something subtle changed in recent Xcode / CloudKit behavior
Ask
Can someone clarify:
Whether querying by recordName should work in production CloudKit
What specifically causes the “Field recordName is not marked queryable” error in TestFlight builds
What steps are required to ensure CloudKit schemas are correctly deployed for cross-platform sync
At this point I feel like I’m missing one critical step, but I can’t identify what it is.
Thanks in advance for any guidance.
Topic:
App & System Services
SubTopic:
iCloud & Data
Hi,
I'm on a MacBook M1. Numbers and Pages notified me that 15.1 version is out and I have to download them anew from the App Store.
However, in the App Store it says with both that they're 'Bought' in a greyed out button. So, I can't download them. Please help!
Thanks,
Ying
Topic:
App & System Services
SubTopic:
General
Unable to find intelgpu_kbl_gt2r0 slice or a compatible one in binary archive 'file:///System/Library/PrivateFrameworks/IconRendering.framework/Resources/binary.metallib'
available slices: applegpu_g13g, applegpu_g13s, applegpu_g13d, applegpu_g14g, applegpu_g14s, applegpu_g14d, applegpu_g15g, applegpu_g15s, applegpu_g15d, applegpu_g16g, applegpu_g16s, applegpu_g17g, applegpu_g15g, applegpu_g15s, applegpu_g15d, applegpu_g16s
Is it related to performance of applications in macOS 26.2 on Intel Macs?
Description: I am developing a digital well-being application using the Screen Time API (FamilyControls, ManagedSettings, and DeviceActivity). I am encountering a critical issue where the ApplicationToken provided by the system to my app extensions suddenly changes, causing a mismatch with the tokens originally stored by the main application.
The Problem: When a user selects applications via FamilyActivityPicker, we persist the FamilyActivitySelection (and the underlying ApplicationToken objects) in a shared App Group container. However, we are seeing frequent cases where the token passed into:
ShieldConfigurationDataSource.configuration(shielding:in:)
ShieldActionDelegate.handle(action:for:completionHandler:)
...does not match (using ==) any of the tokens previously selected and stored.
IOS version: 26.2.1
Topic:
App & System Services
SubTopic:
Core OS
Tags:
Family Controls
Device Activity
Managed Settings
Screen Time
Hi, we are developing a screen time management app. The app locks the device after it was used for specified amount of time.
After updating to iOS 26.2, we noticed a huge issue: the events started to fire (reach the threshold) in the DeviceActivityMonitorExtension prematurely, almost immediately after scheduling. The only solution we've found is to delete the app and reboot the device, but the effect is not lasting long and this does not always help.
Before updating to iOS 26, events also used to sometimes fire prematurely, but rescheduling the event often helped. Now the rescheduling happens almost every second and the events keep reaching the threshold prematurely.
Can you suggest any workarounds for this issue?
Hello everyone,
I’m currently enrolling as an Organization from Albania and I’ve been stuck on the "Enrolling" status for 8 business days now.
I have my D-U-N-S number sorted and everything was submitted. I sent an email last week to the support but I haven't heard back yet. I’ve already sent another support message 2 days ago but no reply so far.
I’m curious to hear from others who have enrolled recently (especially in 2026):
How long did your organization verification take?
Did you receive a verification phone call, or was it just approved via email?
For those in the Balkans/Europe, did you have to provide extra local business registry documents (like the QKB extract) manually?
I’m trying to time my launch with my Google Play release, so I’m a bit anxious about the "black hole" of waiting. Any experiences or "nudge" tips would be greatly appreciated!
Thanks!
Topic:
App & System Services
SubTopic:
Health & Fitness
Tags:
App Store
App Store Connect
Developer Program
Hello Apple Support Team,
We are seeing a production crash on iOS 26 devices that appears to originate from Apple system frameworks rather than application code.
Crash Summary
Crash signature: _xzm_xzone_malloc_freelist_outlined
Crashed thread: com.apple.network.connections
Frameworks involved: CFNetwork, Security, libdispatch, libsystem_malloc
Affected OS: iOS 26.x
App built with: Xcode 16
Devices: Multiple models (not device-specific)
Reproducibility: Intermittent, higher frequency during app launch / background networking
Observed Stack Trace (top frames)
_xzm_xzone_malloc_freelist_outlined
dispatch_data_create_alloc
xpc_data_deserialize
SecTrustEvaluateIfNecessary
CFNetwork HTTPProtocol / HTTP3Connection
com.apple.network.connections
App Context
The app uses URLSession for networking.
Multiple third-party SDKs are integrated (Firebase Analytics, Dynatrace, Appsflyer, and similar analytics/monitoring SDKs).
These SDKs perform concurrent background network requests, especially during app launch and foreground transitions.
No unsafe memory operations (manual malloc/free, unsafe pointers, or custom networking stacks) are used in the app code.
Key Observations
The crash is predominantly observed on iOS 26 and not on earlier iOS versions.
Stack traces do not include application symbols.
Disabling or delaying analytics SDK initialization significantly reduces the crash rate.
Reducing concurrent network requests and limiting HTTP/3 usage also mitigates the issue.
This suggests a potential regression in CFNetwork / Network.framework / HTTP/3 handling combined with the new memory allocator (xzone) on iOS 26.
Impact
Random app termination during background networking.
Occurs without a clear deterministic repro path, making it difficult to fully mitigate at the app level.
Request
Could you please help investigate whether this is a known iOS 26 issue related to:
HTTP/3 / QUIC networking
XPC deserialization
Memory allocation in the new xzone allocator
High-concurrency network requests
We would appreciate guidance on:
Recommended mitigations
Whether this issue is already tracked internally
Any best practices for apps integrating multiple analytics SDKs on iOS 26
Crash logs and additional diagnostics can be provided if needed.
Thank you for your support.
Best regards,
Dhananjay
Topic:
App & System Services
SubTopic:
Networking
I'm testing app transferring, before, I have migrate user from teamA to teamB, including subA->transferSub->subB process, now I'm transfer the app from teamB to teamC, after the transfer requested, I can't get transfer_id by /usermigrationinfo api, which response 400 invalid request.
the question is I can still get transfer sub by the auth/token api(grant_type: authorization_code) with teamB parameters(teamIdB/clientIdB/appSecretB/redirectUrlB/subB),but the value is same as first time transfer_id which get during teamA to teamB.
when use parameters above with target(teamIdC) to request /usermigrationinfo, invalid request was responsed.
im sure that all parameters is correct, dose it cause by teamB still in 60-days first transferring(sure already accepted)?
Transaction can not finish in OS26.2 TestFlight
Hello,
I am currently process of migrating an app from Team A to Team B and attempting to generate transfer identifiers using the migration endpoint:
POST https://appleid.apple.com/auth/usermigrationinfo.
Content-Type: application/x-www-form-urlencoded
However, I am consistently receiving an
{
"error": "access_denied"
} response.
[Current Configuration]
Team A (Source):
Primary App ID: com.example.primary
Grouped App IDs:
com.example.service (Services ID for Web)
com.example.app (App ID for iOS - The one being transferred)
All identifiers are under the same App Group.
Team B (Destination):
New App ID and Key created.
[Steps Taken]
Created a Client Secret (JWT) using Team A's Key ID and Team ID.
The sub (subject) in the JWT is set to the Primary App ID of Team A.
Requesting with client_id (Primary App ID), client_secret (JWT), and user_token.
[Questions]
1. App Group Impact: Does the fact that the App being transferred is a Grouped App ID (not the Primary) affect the usermigrationinfo request? Should I use the Primary App ID or the specific Grouped App ID as the client_id?
2. Ungrouping Safety: If I need to ungroup the App ID from the Primary App ID to resolve this:
Will existing users still be able to sign in without issues?
Is there any risk of changing the sub (user identifier) that the app receives from Apple?
Will this cause any immediate service interruption for the live app?
Any insights on why access_denied occurs in this Primary-Grouped configuration would be greatly appreciated.
Looking for those key team players to help me complete this marathon
Problem Description
Location-based notifications added with UNLocationNotificationTrigger and CLCircularRegion do not fire consistently when the user enters the monitored region. Sometimes they work, sometimes they do not. In tests where the user physically enters the region and waits several days, the notification often never triggers.
What we’ve confirmed
Notification permission is granted
Location permission is set to “Always”
The notification request is successfully added (no error from UNUserNotificationCenter.add)
Pending notification requests are present when checked with getPendingNotificationRequests
CLLocationManager didEnterRegion / didExitRegion work when we monitor the same region via startMonitoring(for:)
UNLocationNotificationTrigger behavior is inconsistent and unreliable in our tests
Reproduction Steps
Launch the app and grant notification permission and “Always” location permission
Add a region notification (either by current GPS location or by selecting a point from MKLocalSearch)
Leave the monitored region
Later, physically return into the region
Expected: a notification is delivered when entering the region
Actual: the notification often does not appear, even after waiting days
Our Hypothesis: Coordinate System Mismatch in China
We suspect the issue may be related to coordinate systems in mainland China.
In China, Apple MapKit and MKLocalSearch use GCJ-02 (the “Mars” coordinate system required by local regulations).
Device GPS and CLCircularRegion / Core Location use WGS-84.
If an app supplies GCJ-02 coordinates to CLCircularRegion (e.g. from MapKit or search), the region center may be offset by hundreds of meters from the actual WGS-84 position. That could make the system’s “inside region” check fail, even when the user is physically inside the intended area.
Questions for Apple
Does CLCircularRegion (and therefore UNLocationNotificationTrigger) expect coordinates in WGS-84? If so, should apps in China convert GCJ-02 to WGS-84 before passing coordinates to CLCircularRegion?
Is there any official guidance or documentation for handling coordinate systems when using location-based notifications in mainland China?
Are there known limitations or special requirements for UNLocationNotificationTrigger in China (e.g. coordinate system, accuracy, or system behavior) that could explain intermittent or missing triggers?
I have been toying around with the URL filter API, and now a few installed configurations have piled up. I can't seem to remove them. I swear a few betas ago I could tap on one and then delete it. But now no tap, swipe, or long press does anything. Is this a bug?
Based on https://developer.apple.com/documentation/networkextension/nednssettings/searchdomains , we expect the values mentioned in searchDomains to be appended to a single label DNS query. However, we are not seeing this behavior.
We have a packetTunnelProvider VPN, where we set searchDomains to a dns suffix (for ex: test.com) and we set matchDomains to applications and suffix (for ex: abc.com and test.com) . When a user tries to access https://myapp , we expect to see a DNS query packet for myapp.test.com . However, this is not happening when matchDomainsNoSearch is set to true. https://developer.apple.com/documentation/networkextension/nednssettings/matchdomainsnosearch
When matchDomainsNoSearch is set to false, we see dns queries for myapp.test.com and myapp.abc.com.
What is the expected behavior of searchDomains?
Knows anyone a point in systemlog etc. To find out when and why my or other apps are terminated by os.
At the moment a lot of apps inclusive my apps seems to be terminated instead set to sleep by OS if no power coord is connected
There are no crashlogs recorded, Sentry or firebase don‘t report issues.
Topic:
App & System Services
SubTopic:
Processes & Concurrency
Hey everyone,
I was wondering if it is possible to access the raw data of the gyroscope and accelerometer of the Airpod 3 pro?
I found different answers online - some say I can only get some processed data, but in the Core Motion documentation it reads as it might be possible to get raw data.
Any clear answer for this one?
Thanks!
Some of the users of my app reported that, the widgets cannot be loaded, event after restarts and re-installs. It seems that it is not rare, I have tens of reports on this (and probably much more who didn't report).
It seems the widget is blank even on the gallery screen while you are first adding it:
struct SingleWidgetProvider: AppIntentTimelineProvider {
@Environment(\.widgetFamily) var family
private let viewModel: WidgetViewModel = WidgetViewModel()
func placeholder(in context: Context) -> SingleEntry {
SingleEntry(date: Date(), habit: .singleSample)
}
func snapshot(for configuration: SingleWidgetConfigurationIntent, in context: Context) async -> SingleEntry {
guard let habit = Array(PersistenceManager.shared.retrieveHabitList().habits).first else {
return SingleEntry(date: Date(), habit: .singleSample)
}
let displayable = viewModel.displayableFromHabit(habit, separateComponents: true, secondOffset: 0)
return SingleEntry(date: Date(), habit: displayable)
}
func timeline(for configuration: SingleWidgetConfigurationIntent, in context: Context) async -> Timeline<SingleEntry> {
var entries: [SingleEntry] = []
guard let counter = configuration.currentCounter else {
return Timeline(entries: [SingleEntry(date: Date(), habit: .singleSample)], policy: .atEnd)
}
guard let habit = PersistenceManager.shared.retrieveHabit(habitKey: counter.id) else {
return Timeline(entries: [SingleEntry(date: Date(), habit: .singleSample)], policy: .atEnd)
}
let currentDate = Date()
for secondOffset in 0 ..< 100 {
let displayable = viewModel.displayableFromHabit(
habit,
separateComponents: true,
secondOffset: secondOffset,
symbolName: habit.habitSymbol?.name ?? "",
overrideColor: configuration.currentColor.color,
overrideButtonVisibility: configuration.currentButtonVisibility,
overrideDisplayOption: configuration.currentDisplayOption
)
let entryDate = Calendar.current.date(byAdding: .second,
value: secondOffset,
to: currentDate)!
let entry = SingleEntry(date: entryDate, habit: displayable)
entries.append(entry)
}
return Timeline(entries: entries, policy: .atEnd)
}
}
struct SingleEntry: TimelineEntry {
let date: Date
let habit: HabitDisplayable
}
static var singleSample: HabitDisplayable {
return HabitDisplayable(habitKey: nil,
title: LS("sampleWidgetHabitTitle"),
dates: [Date(timeIntervalSince1970: 1507158360)],
displayOption: .dayMonthYear,
secondOffset: 0,
separateComponents: true)
}
func displayableFromHabit(
_ habit: Habit,
separateComponents: Bool,
secondOffset: Int,
symbolName: String = "",
overrideColor: Color? = nil,
overrideButtonVisibility: WidgetButtonVisibility? = nil,
overrideDisplayOption: WidgetDisplayOption? = nil
) -> HabitDisplayable {
let latestDates: [HabitDate]
let displayOption: DisplayOption
if let overrideDisplayOption {
if overrideDisplayOption == .sameAsCounter {
displayOption = habit.settings?.toValue.displayOption ?? .dayMonthYear
} else {
displayOption = DisplayOption(rawValue: overrideDisplayOption.rawValue - 1) ?? .dayMonthYear
}
} else {
displayOption = habit.settings?.toValue.displayOption ?? .dayMonthYear
}
let displayMode = displayOption.mode
switch displayMode {
case .timePassed, .date:
latestDates = PersistenceManager.shared.latestDate(habit: habit).map { [$0] } ?? []
case .activity:
latestDates = PersistenceManager.shared.retrieveHabitDates(habit: habit, limitDate: displayOption.limitDate())
}
let displayButton: Bool
if let overrideButtonVisibility {
if overrideButtonVisibility == .sameAsCounter {
displayButton = habit.settings?.toValue.buttonType == .onRow
} else {
displayButton = overrideButtonVisibility == .show
}
} else {
displayButton = false
}
return HabitDisplayable(
habitKey: habit.habitKey,
title: habit.title,
dates: latestDates.map { $0.date },
displayOption: displayOption,
secondOffset: secondOffset,
separateComponents: separateComponents,
color: overrideColor ?? habit.habitColor?.color ?? .appPrimary,
symbolName: symbolName,
displayButton: displayButton
)
}
I provided a large portion of my code, let me know if you need more. The strange thing here is, even if the DB connection is broken somehow, it should have shown the default option (singleSample).
I am not able to reproduce/fix this for months now, so any help is very appreciated.
Topic:
App & System Services
SubTopic:
Widgets & Live Activities
Our app supports UIScene. As a result, launchOptions in application(_:didFinishLaunchingWithOptions:) is always nil.
However, the documentation mentions that UIApplication.LaunchOptionsKey.location should be present when the app is launched due to a location event.
Given that our app is scene-based:
How can we reliably determine whether the app was launched due to a location update, geofence, or significant location change?
Is there a recommended pattern or API to detect this scenario in a Scene-based app lifecycle?
This information is critical for us to correctly initialize location-related logic on launch.
Relevant documentation:
https://developer.apple.com/documentation/corelocation/cllocationmanager/startmonitoringsignificantlocationchanges()
For our research study, it is essential that the app can advertise BLE packets even when the app is no longer in the foreground (for example, when it is in the app switcher / recents state).
Is it supported to advertise BLE packets while the app is in the background or recents state?
If so, what are the specific requirements or limitations we should be aware of (background modes, payload size, timing, etc.)?
Are there any constraints that would prevent consistent BLE advertising for research use cases?
Hello Apple Developer Technical Support,
I’m following up on case #102807413324 and submitting this as a code-level support request.
We are integrating iOS Live Activities (ActivityKit + WidgetKit extension written in SwiftUI) into an Expo/React Native app. We’re seeing behavior where the Live Activity UI shown on the Lock Screen appears to “stick” to an older layout and ignores updated SwiftUI code and/or bundled assets, even after rebuilding, reinstalling, and removing existing Live Activities before testing again.
Environment
Device: iPhone 13
iOS: 26.2
macOS: 15.7.3 (24G419)
Xcode: 16.4 (16F6)
Expo SDK: 52
React Native: 0.76.9
expo-live-activity: ^0.4.2
Build type: Ad-Hoc signed IPA (EAS local build)
Summary
We have a WidgetKit extension target (LiveActivity.appex, bundle id: stimul8.LiveActivity) using ActivityConfiguration(for: LiveActivityAttributes.self).
The extension contains multiple SwiftUI views selected via a “route” (derived from deepLinkUrl / title / subtitle), and uses images/backgrounds from the extension asset catalog (Assets.xcassets). We also support loading images from an App Group container with a fallback to the asset catalog.
After shipping updates, the Live Activity UI shown on the Lock Screen continues to resemble an older/default layout (example: a progress-bar-like element remains visible even after removing ProgressView usage from LiveActivityView.swift). Some custom backgrounds/images also fail to display as expected.
Routing (examples)
/streak -> StreakLiveActivityView
/streak-urgent -> StreakUrgentLiveActivityView
/lesson/create -> AILessonLiveActivityView1
/lesson/reminder -> AILessonLiveActivityView2
default -> LiveActivityView
Steps to reproduce (high-level)
Install/build and trigger a Live Activity.
Modify the SwiftUI layout in the extension (e.g., remove ProgressView and change obvious UI elements), rebuild, and reinstall.
Remove any existing Live Activities from the Lock Screen, then trigger a new Live Activity again.
Observed: Lock Screen Live Activity still renders the prior/older-looking UI and/or ignores updated assets.
Troubleshooting already done
Verified the extension (LiveActivity.appex) is included in the IPA and properly signed.
Verified Assets.car is present in the extension and PNG assets are present in the build artifacts.
Ensured SwiftUI source files used by the extension are overwritten during prebuild so the intended versions are present in ios/LiveActivity.
Cleared DerivedData related to LiveActivity builds.
Reinstalled the app and removed existing Live Activities from the Lock Screen before re-triggering new ones.
Questions
Is there any known caching behavior where Live Activities can continue to display a previous UI layout after an app/extension update, even when the activity is re-created?
Are there recommended steps to force the system to load the newest widget extension binary/UI beyond reinstalling and removing existing Live Activities?
What’s the recommended way to confirm which exact extension binary/UI version is being rendered on-device (e.g., specific Console logs, sysdiagnose signals, or other indicators)?
Are there any known constraints with Assets.xcassets usage for Live Activities that could cause bundled assets not to render even when present?
We can provide
A minimal reproduction Xcode project (preferred)
The IPA build
Build logs (Xcode/EAS)
Screenshots/video and a sysdiagnose captured after reproduction
Thank you for your guidance.
Best regards
Topic:
App & System Services
SubTopic:
Widgets & Live Activities