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
Overview
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Our app, BeeBot (app ID 6451085742) has been in review since January 26th.
We've done the following:
Submitted a support ticket (no answer)
Requested expedited review (no response, expedited review window came and went)
Called support (no help, just told us to wait)
This is an just an update, not a new app submission. I've been doing iOS dev for over 10 years and I never have seen review times this long. There's been no communication from Apple. What's going on?
Hi,
For the past week, I’ve been receiving the following warning when performing a sales figures sync through AppFigures:
“[Apple ID] has new terms to agree to in App Store Connect. We will try to continue importing but some data may not be available. Please log in to your App Store Connect account and accept the Terms & Conditions.”
However, when I log in to App Store Connect and review the Agreements, Tax, and Banking section, there are no pending agreements or new terms requiring acceptance. All agreements appear to be active and in effect.
Because the warning persists, I’m wondering whether there may be a backend agreement or updated term that is not properly surfacing in the interface.
While inspecting the page, I also noticed the following console warnings on appstoreconnect.apple.com:
tb-alertbox--warn ng-isolate-scope is not valid
I’m not sure whether this is related, but I wanted to mention it in case it could be preventing a required agreement notice from displaying.
Thank you for your assistance.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
I have made an app using Xcode 26.3 Release Candidate 2 for my Apple Watch that runs successfully on the simulator. Xcode comes with the IoS 26.2 and WatchOS SDK 26.2. However, when I do try to connect to my device that have IoS 26.3 and watchOS 26.3, I see a succesful connection to my iPhone but I see the the world symbol and wheel keeps trying to connect on my Apple Watch. I also tried Xcode 26.4 beta 2 with no luck.
I reviewed the WatchOS Release Notes:
The watchOS 26.2 SDK provides support to develop watchOS apps for Apple Watch devices running watchOS 26.3. The SDK comes bundled with Xcode 26.2, available from the Mac App Store. I also tried Xcode 26.2 but no luck. Any suggestions?
Topic:
Developer Tools & Services
SubTopic:
Xcode
I’m embedding an NSTextView (TextKit 2) inside a SwiftUI app using NSViewRepresentable. I’m trying to highlight dynamic subranges (changing as the user types) by providing per-range rendering attributes via NSTextLayoutManager’s rendering-attributes mechanism.
The issue: the highlight is unreliable.
Often, the highlight doesn’t appear at all even though the delegate/data source is returning attributes for the expected range.
Sometimes it appears once, but then it stops updating even when the underlying “highlight range” changes.
This feels related to SwiftUI - AppKit layout issue when using NSViewRepresentable (as said in https://developer.apple.com/documentation/swiftui/nsviewrepresentable).
What I’ve tried
Updating the state that drives the highlight range and invalidating layout fragments / asking for relayout
Ensuring all updates happen on the main thread.
Calling setNeedsDisplay(_:) on the NSViewRepresentable’s underlying view.
Toggling the SwiftUI view identity (e.g. .id(...)) to force reconstruction (works, but too expensive / loses state).
Question
In a SwiftUI + NSViewRepresentable setup with TextKit 2, what is the correct way to make NSTextLayoutManager re-query and redraw rendering attributes when my highlight ranges change?
Is there a recommended invalidation call for TextKit 2 to trigger re-rendering of rendering attributes?
Or is this a known limitation when hosting NSTextView inside SwiftUI, where rendering attributes aren’t reliably invalidated?
If this approach is fragile, is there a better pattern for dynamic highlights that avoids mutating the attributed string (to prevent layout/scroll jitter)?
I have migrated my code to use SMAppService but am running into trouble deleting the old SMJobBless launchd registration using launchd remove. I am invoking this from a root shell when I detect the daemon and associated plist still exist, then also deleting those files.
The remove seems to work (i.e. no errors returned) but launchd list shows the service is registered, with a status code of 28
I am using the same label for SMAppService as previously and suspect this is the reason for the problem. However, I am reluctant to change the label as there will a lot of code changes to do this.
If I quit my application, disable the background job in System Settings and run sudo launchd remove in the Terminal then it is removed and my application runs as expected once the background job is re-enabled. Alternatively, a reboot seems to get things going.
Any suggestions on to how I could do this more effectively welcome.
Recursive and Self-Referential Data Structures
Combining recursive and self-referential data structures with frameworks like Accelerate, SwiftMacros, and utilizing SwiftUI hooks can offer significant benefits in terms of performance, maintainability, and expressiveness. Here is how Apple Intelligence breaks it down.
Benefits:
Natural Representation of Complex Data:
Recursive structures, such as trees and graphs, are ideal for representing hierarchical or interconnected data, like file systems, social networks, and DOM trees.
Simplified Algorithms:
Many algorithms, such as traversals, sorting, and searching, are more straightforward and elegant when implemented using recursion.
Dynamic Memory Management:
Self-referential structures can dynamically grow and shrink, making them suitable for applications with unpredictable data sizes.
Challenges:
Performance Overhead:
Recursive algorithms can lead to stack overflow if not properly optimized (e.g., using tail recursion).
Self-referential structures can introduce memory management challenges, such as retain cycles.
Accelerate Framework
Benefits:
High-Performance Computation:
Accelerate provides optimized libraries for numerical and scientific computing, including linear algebra, FFT, and image processing.
It can significantly speed up computations, especially for large datasets, by leveraging multi-core processors and GPU acceleration.
Parallel Processing:
Accelerate automatically parallelizes operations, making it easier to take advantage of modern hardware capabilities.
Integration with Recursive Data:
Matrix and Vector Operations:
Use Accelerate for operations on matrices and vectors, which are common in recursive algorithms like those used in machine learning and physics simulations.
FFT and Convolutions:
Accelerate's FFT functions can be used in recursive algorithms for signal processing and image analysis.
SwiftMacros
Benefits:
Code Generation and Transformation:
SwiftMacros allow you to generate and transform code at compile time, enabling the creation of DSLs, boilerplate reduction, and optimization.
Improved Compile-Time Checks:
Macros can perform complex compile-time checks, ensuring code correctness and reducing runtime errors.
Integration with Recursive Data:
DSL for Data Structures:
Create a DSL using SwiftMacros to define recursive data structures concisely and safely.
Optimization:
Use macros to generate optimized code for recursive algorithms, such as memoization or iterative transformations.
SwiftUI Hooks
Benefits:
State Management:
Hooks like @State, @Binding, and @Effect simplify state management in SwiftUI, making it easier to handle dynamic data.
Side Effects:
@Effect allows you to perform side effects in a declarative manner, integrating seamlessly with asynchronous operations.
Reusable Logic:
Custom hooks enable the reuse of stateful logic across multiple views, promoting code maintainability.
Integration with Recursive Data:
Dynamic Data Binding:
Use SwiftUI's data binding to manage the state of recursive data structures, ensuring that UI updates reflect changes in the underlying data.
Efficient Rendering:
SwiftUI's diffing algorithm efficiently updates the UI only for the parts of the recursive structure that have changed, improving performance.
Asynchronous Data Loading:
Combine @Effect with recursive data structures to fetch and process data asynchronously, such as loading a tree structure from a remote server.
Example: Combining All Components
Imagine you're building an app that visualizes a hierarchical file system using a recursive tree structure. Here's how you might combine these components:
Define the Recursive Data Structure:
Use SwiftMacros to create a DSL for defining tree nodes.
@macro
struct TreeNode {
var value: T
var children: [TreeNode]
}
Optimize with Accelerate:
Use Accelerate for operations like computing the size of the tree or performing transformations on node values.
func computeTreeSize(_ node: TreeNode) -> Int {
return node.children.reduce(1) { $0 + computeTreeSize($1) }
}
Manage State with SwiftUI Hooks:
Use SwiftUI hooks to load and display the tree structure dynamically.
struct FileSystemView: View {
@State private var rootNode: TreeNode = loadTree()
var body: some View {
TreeView(node: rootNode)
}
private func loadTree() -> TreeNode<String> {
// Load or generate the tree structure
}
}
struct TreeView: View {
let node: TreeNode
var body: some View {
List(node.children, id: \.value) {
Text($0.value)
TreeView(node: $0)
}
}
}
Perform Side Effects with @Effect:
Use @Effect to fetch data asynchronously and update the tree structure.
struct FileSystemView: View {
@State private var rootNode: TreeNode = TreeNode(value: "/")
@Effect private var loadTreeEffect: () -> Void = {
// Fetch data from a server or database
}
var body: some View {
TreeView(node: rootNode)
.onAppear { loadTreeEffect() }
}
}
By combining recursive data structures with Accelerate, SwiftMacros, and SwiftUI hooks, you can create powerful, efficient, and maintainable applications that handle complex data with ease.
Topic:
Machine Learning & AI
SubTopic:
Foundation Models
Reading all the docs(1) I was under the impression that handling this error is well managed... Until I hit it and found out that the recommended handling options hide a crucial fact: in the catch block you can not do anything?! It's too late - everything is lost, no way to recover... All the docs mislead me that I can apply the Transcript trick in the catch block until I realised, that there is nothing there !!!
This article here(2) enlightened me on the handling of this problem, but I must say (and the author as well) - this is a hack!
So my questions:
is there really no way to handle this exception properly?
if not, can we have the most important information - the count of the context exposed through the official API (at least the known ones)?
https://developer.apple.com/documentation/Technotes/tn3193-managing-the-on-device-foundation-model-s-context-window#Handle-the-exceeding-context-window-size-error-elegantly
https://zats.io/blog/making-the-most-of-apple-foundation-models-context-window/
Topic:
Machine Learning & AI
SubTopic:
Foundation Models
Hello everyone,
I’m currently experiencing a very long review time and wanted to ask for your advice or hear about your experiences.
I submitted my two apps for their initial release 23 days ago. Ever since then, they have been stuck in the "Waiting for Review" status.
Yesterday, I realized that my "Paid Apps Agreement" and Tax Forms (W-8BEN, etc.) were incomplete in App Store Connect. I immediately filled them out, and now all my banking, tax, and agreement statuses are successfully marked as "Active".
My questions to the community are:
Since the agreements are now active, will my apps automatically fall into the review queue, or do I need to trigger something?
I submitted an "App Review Status" contact form to Apple Support today. Should I just wait for their response, or is it better to "Remove from Review" and resubmit them? (I am afraid of losing my place in the queue).
Any insights or similar experiences would be greatly appreciated. Thank you!
Best,
Berkay
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
Tags:
App Store
App Review
App Submission
Hi friends, I need a design and coding team to publish a fintech app. Can anyone help me with this?
Hello,
I am seeing sever delay in app review completion of my app. The version I submitted for review is pending since Feb 15th. This is the first time it happened like this as earlier it was quicker.
I tried to contact apple through support email but have not received any update.
Any suggestions on what I can do?
Thank you.
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
Hi everyone,
I’m facing an issue with CloudKit sync getting stuck during initial device migration in my SwiftData-based app.
The app follows a local-first architecture using SwiftData + CloudKit sync, and works correctly for:
✔ Incremental sync
✔ Bi-directional updates
✔ Small datasets
However, when onboarding a new device with large historical data, sync becomes extremely slow or appears stuck. Even after two hours data is not fully synced. ~6900 Transactions
🚨 Problem
When installing the app on a new iPhone and enabling iCloud sync:
• Initial hydration starts
• A small amount of data syncs
• Then sync stalls indefinitely
Observed behaviour:
• iPhone → Mac sync works (new changes sync back)
• Mac → iPhone large historical migration gets stuck
• Reinstalling app / clearing container does not resolve issue
• Sync never completes full migration
This gives the impression that:
CloudKit is trickling data but not progressing after a certain threshold.
The architecture is:
• SwiftData local store
• Manual CloudKit sync layer
• Local-first persistence
• Background push/pull sync
So I understand:
✔ Conflict resolution is custom
✔ Initial import may not be optimized by default
But I expected CloudKit to eventually deliver all records.
Instead, the new device remains permanently in a “partial state”.
⸻
🔍 Observations
• No fatal CloudKit errors
• No rate-limit errors
• No quota issues
• iCloud is available
• Sync state remains “Ready”
• Hydration remains “mostlyReady”
Meaning:
CloudKit does not report failure — but data transfer halts.
⸻
🤔 Questions
Would appreciate guidance on:
Is CloudKit designed to support large initial dataset migration via manual sync layers?
Or is this a known limitation vs NSPersistentCloudKitContainer?
⸻
Does CloudKit internally throttle historical record fetches?
Could it silently stall without error when record volume is high?
⸻
Is there any recommended strategy for:
• Bulk initial migration
• Progressive hydration
• Forcing forward sync progress
⸻
Should initial migration be handled outside CloudKit (e.g. via file transfer / backup restore) before enabling sync?
⸻
🎯 Goal
I want to support:
• Large historical onboarding
• Multi-device sync
• User-visible progress
Without forcing migration to Core Data.
⸻
🙏 Any advice on:
• Best practices
• Debugging approach
• CloudKit behavior in such scenarios
would be greatly appreciated.
Thank you!
Topic:
App & System Services
SubTopic:
iCloud & Data
Tags:
Swift Packages
CloudKit
Swift
Cloud and Local Storage
I'm using MusicKit for DRM track playback in my iOS app and a third party library to play local user-owned music on the file system and from the music library.
This app is also supporting accessory devices that offer Bluetooth remote media control.
The wish is to achieve parity between how the remote interacts with user owned music and the DRM / cloud / Apple Music tracks in my application music player.
Track navigation, app volume (rather than system volume), and scrubbing need to work consistently on a mix of tracks which could alternate DRM and cloud status within one album or playlist.
Apple Music queue and track pickers are not useful tools in my app.
How can I support playing DRM and Apple Music tracks while not surrendering the remote control features to the system?
Hi,
posting here since I cannot get in touch with anyone through Support. I've sent few requests in a week but never heard back.
I am trying to get the app 6745905294 approved from the Review team. The last blocker is that
This app duplicates the content and functionality of other apps on the App Store
This turns out to be because I used to have this app under a different team 3 years ago (app number 1592985083). The app was already out of the store in a long time since I didn't renew that team membership but apparently that's not enough.
The Review team suggested me to Remove the old app. But...I can't.
Please see the screenshot attached
Any idea what can I do?
I am completely blocked. I want to submit the app in the store with the new team I am in.
The Review team says it can't help me. The Appstore Connect Support team doesn't reply
Thanks,
Alessandro
Our team is in the process of updating our apps to comply with Texas's new state law.
In order to minimize user confusion and provide the most ideal flow to access the app as possible, we have a few questions we would like answered.
Summary of questions:
Is isEligibleForAgeFeatures intended to be accurate and accessible before the user has accepted the Age Range permissions prompt?
As other US states and/or other countries adopt a similar law going forward, will this instance variable cover those locations?
Will the runtime crashes on isEligibleForAgeFeatures and other symbols in the DeclaredAgeRange framework be addressed in a future RC or in the official release?
Details and Investigations:
With regards to isEligibleForAgeFeatures, our team has noticed that this value is always false before the age range prompt has been accepted. This has been tested on the XCode RC 26.2 (17C48).
Assuming the request needs to be accepted first,
isEligibleForAgeFeatures does not get updated immediately when the user chooses to share their age range (updated to true, when our sandbox test account is a Texas resident). Only upon subsequent relaunches of the app does this return a value that reflects the sandbox user's location. Is isEligibleForAgeFeatures intended to be accurate and accessible before the user has accepted the Age Range permissions prompt?
This leads to our follow-up question to clarify whether isEligibleForAgeFeatures explicitly correlates to a user in an affected legal jurisdiction–if future US states and/or other countries adopt a similar law going forward, will this instance variable cover those locations?
Can we also get confirmation about whether the runtime crash on isEligibleForAgeFeatures and other symbols in the DeclaredAgeRange framework will be addressed in a future RC or in the official release?
Thank you.
The documentation for isEligibleForAgeFeatures states:
Use this property to determine whether a person using your app is in an applicable region that requires additional age-related obligations for when you distribute apps on the App Store.
But what does "region" mean?
Is this going to return true if the user has downloaded the app from the US App Store? Or will it go further and geolocate the user and identify them as being within a particular relevant state within the US?
Does our app need to check the location or can we fully reply on this API to decide whether we wanna comply for the law of places that requires age range information? Looks like it's only covering Texas now..? would it add other places by apple..? And also this API is really hard to test a user in other places, Iike I don't know a user in Brazil gonna return true for false now, but the law in Brazil also requires the age information.
'Guideline 2.1 - Performance - App Completeness' - "...could not be found in the submitted binary."
I have checked with internal and external testers and my devices and simulators, everyone sees the in app purchases but I just had my submitted rejected for the second time with the comment that these in-app none-consumable purchases cannot be found with the submitted binary.
I even attached a slow step by step screen recording for the review reply after the first rejection showing how to reach the purchasable packs by navigating through only 3 buttons:
"How to access the purchase flow:
Launch the app
Tap the bottom-center Settings button (icon: switch.2)
Tap “Customisation gallery”
Scroll to find any pack listed above
Tap the pack price chip
Tap “Buy pack – [price]” to start the StoreKit purchase flow"
I also attached a clear image along with detailed instruction (same as above) for the Review Information. and the second rejection was received today for the same reason.
I'm being guided to the localization 'Developer Action Needed'. I'm not sure what more can be done? I feel like my review replies aren't even looked at.
Hello iOS developer community,
I submitted an app on App Store Connect on February 4, 2026, but I don't understand why, as of today (March 2, 2026), its status is still "Waiting for Review."
I have emailed Developer Support but only received the following automated reply: "Thanks for submitting your support request. We’ve received your support request and will get back to you as soon as possible. Your case ID is 102824763035."
It has been over ten days, and I still haven’t received any official follow-up or updates from Apple regarding this issue.
What should I do now?
The email address I use for my Apple Developer account is
Hello iOS developer community,
I submitted an app on App Store Connect on February 4, 2026, but I don't understand why, as of today (March 2, 2026), its status is still "Waiting for Review."
I have emailed Developer Support but only received the following automated reply: "Thanks for submitting your support request. We’ve received your support request and will get back to you as soon as possible. Your case ID is 102824763035."
It has been over ten days, and I still haven’t received any official follow-up or updates from Apple regarding this issue.
What should I do now?