Hello,
I am experiencing the same severe delays as many other developers on the forum recently. I have multiple apps ( 6759218500 and 6758253704)that have been completely stuck in the "Waiting for Review" status, with one sitting there since mid-February.
I have already tried reaching out via the "Contact Us" form multiple times, but my open support case (Case ID: 102828235824) has received no follow-up or resolution.
Could someone from the app review team please look into this, any assistance would be greatly appreciated, as the standard support channels seem to be unresponsive.
Thank you.
Overview
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I'm trying to enroll a UK-registered limited company in the Apple Developer Program. I am the sole director and authorized signatory of the company, but I am not a UK national and do not hold a UK-issued passport or driving licence.
Apple support keeps asking for a "government-issued ID from the United Kingdom" and won't accept my valid passport from another country, even though UK company law fully permits non-UK nationals to be sole directors of UK-registered companies.
My enrollment ID was withdrawn and I was told to "designate a UK team member" — but I have no UK employees. I am a solo founder.
I have offered to provide my passport, Certificate of Incorporation from Companies House, proof of directorship, and notarized copies of anything needed. Support keeps repeating the same response without offering any alternative path.
Case: 102823892910
Has anyone solved this situation? Is there an official alternative verification path for non-UK directors of UK-registered organizations? Any help or escalation pointer appreciated.
Topic:
Developer Tools & Services
SubTopic:
Apple Developer Program
Note: This document is specifically focused on what happens after a DEXT has passed its initial code-signing checks. Code-signing issues are dealt with in other posts.
Preliminary Guidance:
Using and understanding DriverKit basically requires understanding IOKit, something which isn't entirely clear in our documentation. The good news here is that IOKit actually does have fairly good "foundational" documentation in the documentation archive. Here are a few of the documents I'd take a look at:
IOKit Fundamentals
IOKit Device Driver Design Guidelines
Accessing Hardware From Applications
Special mention to QA1075: "Making sense of IOKit error codes",, which I happened to notice today and which documents the IOReturn error format (which is a bit weird on first review).
Those documents do not cover the full DEXT loading process, but they are the foundation of how all of this actually works.
Understanding the IOKitPersonalities Dictionary
The first thing to understand here is that the "IOKitPersonalities" is called that because it is in fact a fully valid "IOKitPersonalities" dictionary. That is, what the system actually uses that dictionary "for" is:
Perform a standard IOKit match and load cycle in the kernel.
The final driver in the kernel then uses the DEXT-specific data to launch and run your DEXT process outside the kernel.
So, working through the critical keys in that dictionary:
"IOProviderClass"-> This is the in-kernel class that your in-kernel driver loads "on top" of. The IOKit documentation and naming convention uses the term "Nub", but the naming convention is not consistent enough that it applies to all cases.
"IOClass"-> This is the in-kernel class that your driver loads on top of. This is where things can become a bit confused, as some families work by:
Routing all activity through the provider reference so that the DEXT-specific class does not matter (PCIDriverKit).
Having the DEXT subclass a specific subclass which corresponds to a specific kernel driver (SCSIPeripheralsDriverKit).
This distinction is described in the documentation, but it's easy to overlook if you don't understand what's going on. However, compare PCIDriverKit:
"When the system loads your custom PCI driver, it passes an IOPCIDevice object as the provider to your driver. Use that object to read and write the configuration and memory of your PCI hardware."
Versus SCSIPeripheralsDriverKit:
Develop your driver by subclassing IOUserSCSIPeripheralDeviceType00 or IOUserSCSIPeripheralDeviceType05, depending on whether your device works with SCSI Block Commands (SBC) or SCSI Multimedia Commands (SMC), respectively. In your subclass, override all methods the framework declares as pure virtual.
The reason these differences exist actually comes from the relationship and interactions between the DEXT families. Case in point, PCIDriverKit doesn't require a specific subclass because it wants SCSIControllerDriverKit DEXTs to be able to directly load "above" it.
Note that the common mistake many developers make is leaving "IOUserService" in place when they should have specified a family-specific subclass (case 2 above). This is an undocumented implementation detail, but if there is a mismatch between your DEXT driver ("IOUserSCSIPeripheralDeviceType00") and your kernel driver ("IOUserService"), you end up trying to call unimplemented kernel methods. When a method is "missing" like that, the codegen system ends up handling that by returning kIOReturnUnsupported.
One special case here is the "IOUserResources" provider. This class is the DEXT equivalent of "IOResources" in the kernel. In both cases, these classes exist as an attachment point for objects which don't otherwise have a provider. It's specifically used by the sample "Communicating between a DriverKit extension and a client app" to allow that sample to load on all hardware but is not something the vast majority of DEXT will use.
Following on from that point, most DEXT should NOT include "IOMatchCategory". Quoting IOKit fundamentals:
"Important: Any driver that declares IOResources as the value of its IOProviderClass key must also include in its personality the IOMatchCategory key and a private match category value. This prevents the driver from matching exclusively on the IOResources nub and thereby preventing other drivers from matching on it. It also prevents the driver from having to compete with all other drivers that need to match on IOResources. The value of the IOMatchCategory property should be identical to the value of the driver's IOClass property, which is the driver’s class name in reverse-DNS notation with underbars instead of dots, such as com_MyCompany_driver_MyDriver."
The critical point here is that including IOMatchCategory does this:
"This prevents the driver from matching exclusively on the IOResources nub and thereby preventing other drivers from matching on it."
The problem here is that this is actually the exceptional case. For a typical DEXT, including IOMatchCategory means that a system driver will load "beside" their DEXT, then open the provider blocking DEXT access and breaking the DEXT.
DEXT Launching
The key point here is that the entire process above is the standard IOKit loading process used by all KEXT. Once that process finishes, what actually happens next is the DEXT-specific part of this process:
IOUserServerName-> This key is the bundle ID of your DEXT, which the system uses to find your DEXT target.
IOUserClass-> This is the name of the class the system instantiates after launching your DEXT. Note that this directly mimics how IOKit loading works.
Keep in mind that the second, DEXT-specific, half of this process is the first point your actual code becomes relevant. Any issue before that point will ONLY be visible through kernel logging or possibly the IORegistry.
__
Kevin Elliott
DTS Engineer, CoreOS/Hardware
I’m seeing a visual glitch in SwiftUI List on iOS 26 when row order changes after a swipeActions action.
Setup:
List + ForEach of items
Items are sorted dynamically by isSelected (unselected first, selected last)
Swipe action toggles isSelected
Row should animate to new position
Problem:
On swipe select/unselect, the row sometimes appears to disappear briefly, then reappear in the new position
Most visible when unselecting an item from the bottom selected group (it should move to top)
Sometimes there is a temporary “empty gap” near the top during the move
In some row styling setups, row corner masking also looks wrong during animation
What I tried:
Different animations (default, easeInOut, spring)
Adding/removing small dispatch delay before state change
Moving section header content outside List
Using custom row backgrounds/corners vs system row styling
Keeping stable IDs in ForEach
Behavior still appears with native List + swipeActions on iOS 26.
So my question is:
Is this a known issue/regression with List row move animations on iOS 26?
Recommended pattern to keep native swipe actions but avoid this visual artifact?
This worked smoothly on iOS 18 with the same approach, and the visual glitch appears only after moving to iOS 26.
Topic:
UI Frameworks
SubTopic:
SwiftUI
In Instruments, I'm seeing "Zero Time Stamp" events in the "Audio Server" lane.
What does that mean?
Hello,
Our Apple Developer Program membership is active and renewed until 2027, and the updated terms and conditions were accepted a few days ago by the account holder. However, in App Store Connect we are still seeing the following messages:
"Your Apple Developer Program subscription has expired. Your apps won't be available on the App Store until you renew it. To renew the subscription, the account holder must go to the Membership section of their account on the Apple Developer website."
"The Apple Developer Program license agreement has been updated and needs to be reviewed. To update your apps and submit new apps, the account holder must log in to their account, review the updated agreement, and accept it."
Both actions appear to have already been completed, but the warnings are still displayed in App Store Connect.
Has anyone experienced a similar issue? Is there any known delay for the system to reflect the updated membership status, or any additional step that we might be missing?
Thank you.
Topic:
Developer Tools & Services
SubTopic:
Apple Developer Program
Hey team,
I am reaching out about an app I submitted for review (app id: 6748933312). I started the review process Feb 4th, 26 days ago.
The process started off positively - I got my first response within 3 days and had to go back and forth a couple times to bake in some review feedback, which was expected since this was the first submission. I even jumped on a call with Bill who gave some super helpful clarifying guidance! Thanks Bill :)
But it then went downhill from there... I submitted my 3rd version on Feb 12th and was hoping that would get me the approval. But then I didn't hear anything for 10 days despite calls to support and a request for expedited review. At which point I wasn't sure what to do and I wanted to iron out some bugs, so i pulled and resubmitted on Feb 22nd, and I still haven't heard back from the team. Stuck in "Waiting for review" for another 10 days.
I really don't know what to do now, I can't tell if Apple has just stopped accepting new apps altogether? My friends are able to submit updates to existing apps and get approvals within hours.
Pls help, I'm losing hope as a new app developer.
-James
Hi App Review Team. I understand that there are many apps from developers to review, I understand april required changes, but please, my apps are stucked in Waiting for review status too long (App ID: 6758546705, App ID: 6756194410, App ID: 6758354010), We have deadlines that we are already not met, we need to have apps in store asap. So please help. I've already posted such kind of post here and you answered that team is investigating the issue, but there is no any contact and any info. Please help, we are breaching our deadlines. Thank you
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
Hello everyone,
I am an iOS developer and both my apps are experiencing an unusual App Store review delay that I have not been able to resolve through the normal support channels.
These are existing apps on app store with simple updates.
It has not moved to “In Review”, and I have not received any rejection message or request for additional information from the App Review team.
AppleID: 6756242440 and 6746870245
Please help us resolve the issue. Thanks in advance
I'm building an app which runs around the Foundation model framework. My expected output is generated when testing on a real device or in preview in Xcode but it throws Foundation Model error when I try running it on the simulator. I'm using a Macbook M1 air and have apple intelligence turned on and my simulator run destination is also an iPad Pro M5 (26.0).
Any solution for this as this is my submission for the SSC so I need to make it work on the simulator iPad.
Thank you👾
Topic:
Developer Tools & Services
SubTopic:
Swift Playground
Tags:
Swift Student Challenge
Xcode
Simulator
Apple Intelligence
Hello, I'm desperately seeking your help here. I submitted an app for review, on Feb 16th, it's still sitting at Waiting for review status. I raised a follow-up ticket on Feb 20th, inquiring about the status of the review. Auto response was a feedback will be given by email in 2 business days. It's been now more than 10 business days, no feedback on the ticket. I raised a new one today. I really cannot understand why this is taking so long, while I'm told by other friends around me that this usually doesn't take more than a week max. Please help!! I'm losing all credibility with my potential customers and users at the moment because of this delay.
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
The same code built in a regular Mac app (with UI) does get paired.
The characteristic properties are [.read, .write, .notify, .notifyEncryptionRequired]
The characteristic permissions are [.readEncryptionRequired, .writeEncryptionRequired]
My service is primary.
In the iOS app (central) I try to read the characteristic, but an error is reported: Error code: 5, Description: Authentication is insufficient.
Topic:
App & System Services
SubTopic:
Processes & Concurrency
Tags:
Service Management
Core Bluetooth
I've understood that SwiftData is not abled to share the whole content of a cloudkit database.
So I'm trying to rewrite everything. Does someone knows id Sharing is coming on SwiftData at WWDC 26?
Anyway, can someone can point me an example a a configured coredata stack that share all its content with other icloud users (with sharing pane and accept invitation code).
At this step, on the owner side, I see some data in the default zone of my private container but nothing is visible on the shared zone. Maybe I don't understand where and when I should check shared data in cloudkit console. Need Help also here.
See below by configuration stack:
// Core Data container
public lazy var container: NSPersistentContainer = {
switch delegate.usage() {
case .preview : return previewContainer()
case .local : return localContainer()
case .cloudKit : return cloudKitContainer()
}
}()
private func cloudKitContainer() -> NSPersistentContainer {
let modelURL = delegate.modelURL()
let modelName = modelURL.deletingPathExtension().lastPathComponent
guard let model = NSManagedObjectModel(contentsOf: modelURL) else {
fatalError("Could not load Core Data model from \(modelURL)")
}
let container = NSPersistentCloudKitContainer(
name: modelName,
managedObjectModel: model
)
let groupIdentifier = AppManager.shared.groupIdentifier
guard let appGroupURL = FileManager.default.containerURL (
forSecurityApplicationGroupIdentifier: groupIdentifier
) else {
fatalError("App Group not found: \(groupIdentifier)")
}
// MARK: - Private Store Configuration
let privateStoreURL = appGroupURL.appendingPathComponent("\(modelName).sqlite")
let privateStoreDescription = NSPersistentStoreDescription(url: privateStoreURL)
// Persistent history tracking (MANDATORY)
privateStoreDescription.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
privateStoreDescription.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
// CloudKit options for private database
// Core Data automatically uses the default zone: com.apple.coredata.cloudkit.zone
let privateCloudKitOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: delegate.cloudKitIdentifier())
privateCloudKitOptions.databaseScope = .private
privateStoreDescription.cloudKitContainerOptions = privateCloudKitOptions
// MARK: - Shared Store Configuration
guard let sharedStoreDescription = privateStoreDescription.copy() as? NSPersistentStoreDescription else {
fatalError("Create shareDesc error")
}
// The shared store receives zones that others share with us via CloudKit's shared database
sharedStoreDescription.url = appGroupURL.appendingPathComponent("\(modelName)-shared.sqlite")
// Persistent history tracking (MANDATORY)
sharedStoreDescription.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
sharedStoreDescription.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
// CloudKit options for shared database
// This syncs data from CloudKit shared zones when we accept share invitations
let sharedCloudKitOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: delegate.cloudKitIdentifier())
sharedCloudKitOptions.databaseScope = .shared
sharedStoreDescription.cloudKitContainerOptions = sharedCloudKitOptions
// Configure both stores
// Private store: com.apple.coredata.cloudkit.zone in private database
// Shared store: Receives shared zones we're invited to
container.persistentStoreDescriptions = [privateStoreDescription, sharedStoreDescription]
container.loadPersistentStores { storeDescription, error in
if let error = error as NSError? {
fatalError("DB init error:\(error.localizedDescription)")
} else if let cloudKitContiainerOptions = storeDescription.cloudKitContainerOptions {
switch cloudKitContiainerOptions.databaseScope {
case .private:
self._privatePersistentStore = container.persistentStoreCoordinator.persistentStore(for: privateStoreDescription.url!)
case .shared:
self._sharedPersistentStore = container.persistentStoreCoordinator.persistentStore(for: sharedStoreDescription.url!)
default:
break
}
}
let scope = storeDescription.cloudKitContainerOptions?.databaseScope == .shared ? "shared" : "private"
print("✅ \(scope) store loaded at: \(storeDescription.url?.path ?? "unknown")")
}
// Auto-merge
container.viewContext.automaticallyMergesChangesFromParent = true
container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
do {
try container.viewContext.setQueryGenerationFrom(.current)
} catch {
fatalError("Fail to pin viewContext to the current generation:\(error)")
}
return container
}
Topic:
App & System Services
SubTopic:
iCloud & Data
Tags:
CloudKit
Core Data
CloudKit Console
SwiftData
I'm working on UI automation tests using XCUITest for an iOS application (iPhone). My goal is to programmatically scroll a view by a very precise number of pixels (e.g., exactly 500 points down). I understand the scroll(byDeltaX:deltaY:) method is not supported on iPhone, so I'm using the coordinate-based drag method as an alternative.
Specifically, I am using XCUICoordinate.press(forDuration:thenDragTo:withVelocity:thenHoldForDuration:) to simulate a drag gesture. I calculate a start and end coordinate with a specific vertical offset in points, expecting the view to scroll by that exact amount.
However, I'm observing that the resulting scroll offset is not perfectly accurate. There's a consistent error of several pixels, making the scroll amount unpredictable for precise test assertions.
Is there a known limitation to the accuracy of coordinate-based dragging for simulating programmatic scrolling? Are there any alternative methods or best practices within XCUITest to achieve a more reliable and pixel-accurate scroll on iPhone, or is this level of precision simply not achievable with the current framework?
Hi all
I have a problem with core data, where when a new user login that is different from the previous user i delete all of core data by using "destroyPersistentStore".
Then i recreate the persistent store, this works when i am testing. When it does not work for one of my users when she test.
I am not sure why this should not work, i have added the code i use to destroy the persistent store below.
This code is run after login but before the view changes away from my login view.
// Retrieves the shared `AppDelegate` instance
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
appDelegate.destroyDataSyncBackground()
// Get a reference to a NSPersistentStoreCoordinator
let storeContainer =
appDelegate.persistentContainer.persistentStoreCoordinator
// Delete each existing persistent store
for store in storeContainer.persistentStores {
if let url = store.url {
do {
try storeContainer.destroyPersistentStore(
at: url,
ofType: store.type,
options: nil
)
} catch {
print("Failed to deleted all")
}
} else {
print("Failed to deleted all")
}
}
// Re-create the persistent container
appDelegate.persistentContainer = NSPersistentContainer(
name: "CueToCue" // the name of
// a .xcdatamodeld file
)
// Calling loadPersistentStores will re-create the
// persistent stores
appDelegate.persistentContainer.loadPersistentStores {
(store, error) in
// Handle errors
let description = NSPersistentStoreDescription()
description.shouldMigrateStoreAutomatically = true
description.shouldInferMappingModelAutomatically = true
appDelegate.persistentContainer.persistentStoreDescriptions = [description]
}
// Reapply context configuration
let viewContext = appDelegate.persistentContainer.viewContext
viewContext.automaticallyMergesChangesFromParent = true
viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
do {
try viewContext.save()
appDelegate.recreateDataSyncBackground()
} catch {
print("Debug: saving delete all failed.")
}
}
The function "destroyDataSyncBackground" just set the my sync class to nil so stop any changes to core data while the code is running.
The function "recreateDataSyncBackground" recreate the sync class so fetch, post and patch requests is made again.
When I tap on one of the buttons in the ShieldAction extension I want to close the shield and open the parent app instead of the shielded app. Is there any way of doing this using the Screen Time API?
class ShieldActionExtension: ShieldActionDelegate {
override func handle(action: ShieldAction, for application: ApplicationToken, completionHandler: @escaping (ShieldActionResponse) -> Void) {
// Handle the action as needed.
let store = ManagedSettingsStore()
switch action {
case .primaryButtonPressed:
//TODO - open parent app
completionHandler(.defer)
case .secondaryButtonPressed:
//remove shield
store.shield.applications?.remove(application)
completionHandler(.defer)
@unknown default:
fatalError()
}
}
}
Topic:
App & System Services
SubTopic:
General
Tags:
Managed Settings
Family Controls
Device Activity
Screen Time
My app has now been back and forth stuck in review for a couple weeks. This is a crucial update which we promised users weeks ago.
We tried expedited review a week ago and was quickly reviewed and rejected and apple mention not to use it again. However, my next reviews have been stuck for 5 days. I have tried to expedite again but no luck.
Is there something wrong with my review or is this a worldwide problem?
Environment:
iOS 26.4 beta
Xcode 26.4 beta
Framework: AccessoryNotifications, AccessorySetupKit, AccessoryTransportExtension
Description:
I'm implementing notification forwarding to a custom BLE accessory using the new AccessoryNotifications framework in iOS 26.4. I've set up an AccessoryDataProvider
extension following the documentation, but I'm unclear about how the data is actually transmitted to the BLE accessory.
Current Implementation:
Main App - Uses AccessorySetupKit to discover and pair accessories:
let descriptor = ASDiscoveryDescriptor()
descriptor.bluetoothServiceUUID = CBUUID(string: "FEE0")
let displayItem = ASPickerDisplayItem(
name: "Notification Accessory",
productImage: UIImage(systemName: "applewatch")!,
descriptor: descriptor
)
accessorySession.showPicker(for: [displayItem]) { error in
// Handle error
}
AccessoryDataProvider Extension - Implements NotificationsForwarding.AccessoryNotificationsHandler:
@main
struct AccessoryDataProvider: AccessoryTransportExtension.AccessoryDataProvider {
@AppExtensionPoint.Bind
static var boundExtensionPoint: AppExtensionPoint {
Identifier("com.apple.accessory-data-provider")
Implementing {
AccessoryNotifications.NotificationsForwarding {
NotificationHandler()
}
}
}
}
// NotificationHandler sends messages via:
let message = AccessoryMessage {
AccessoryMessage.Payload(transport: .bluetooth, data: data)
}
try await session?.sendMessage(message)
Info.plist Configuration:
EXExtensionPointIdentifier
com.apple.accessory-data-provider
NSAccessorySetupBluetoothServices
FEE0
Questions:
What BLE Service and Characteristic should the accessory advertise?
- The documentation mentions specifying transport: .bluetooth, but doesn't explain what Service/Characteristic the accessory needs to implement to receive the
notification data.
2. How does AccessoryMessage with transport: .bluetooth actually transmit data?
- Is there a specific Apple-defined BLE protocol?
- Does the accessory need to run specific firmware or support a particular protocol stack?
3. Is there any documentation about the accessory-side implementation?
- The iOS-side documentation is clear, but I couldn't find information about what the BLE peripheral needs to implement.
4. Is MFi certification required for the accessory?
- The documentation doesn't explicitly mention MFi, but it's unclear if custom third-party accessories can use this framework.
Any guidance on how the BLE communication works under the hood would be greatly appreciated.
I requested the Family Controls (distribution) capability but am not sure if I did it correct. I applied, answered the questions why i needed it and submitted. Its been about 2 weeks since applying. In the app configurations, it on apple dev site, it shows in the request history that I submitted it on March 17, but I can click the request (+) button and request it again. Just want to make sure I didn't mess anything up--it seems like they would prevent me from sendin another request if I had already requested it. It hasn't taken them this long to get back to me in the past which is why I am confused. If anyone knows how to speed up the process, please let me know! Thanks.
Is it somehow possible to get the transport layer (UDP and TCP) payload amounts for TLS or QUIC connections established via the Network framework? (From within the app itself that establishes the connections.)
I am currently using the ntstat.h kernel socket calls, but I hope there is a simpler solution.
With ntstat, I have not yet been able to observe a specific connection. I have to search for the connection I am looking in all (userspace) connections.