I read that iPadOS supports driverkit, and, presumably, the same serial FTDI UARTs as macOS.
Has this been migrated to USB-C iPhones on iOS 18?
After some searching, the developer doc is not clear, and web responses are contradictory.
We are currently using it for a wired sensor option of our BlueTooth HR sensor. When it is used in wired config, the radios are turned off. This is important to some of our customers. Since Lightning MFI sensors are being discontinued with Apple killing Lightning, we would love to have an alternative for iOS.
-- Harald
Drivers
RSS for tagUnderstand the role of drivers in bridging the gap between software and hardware, ensuring smooth hardware functionality.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hello Everyone,
I have noticed an inconsistency in the KEXT status between the System Information Extensions section and the output of the kextstat command.
In System Information, the extension appears as loaded:
ACS6x:
Version: 3.8.3
Last Modified: 2025/3/10, 8:03 PM
Bundle ID: com.Accusys.driver.Acxxx
Loaded: Yes
Get Info String: ACS6x 3.8.4 Copyright (c) 2004-2020 Accusys, Ltd.
Architectures: arm64e
64-Bit (Intel): No
Location: /Library/Extensions/ACS6x.kext/
Kext Version: 3.8.3
Load Address: 0
Loadable: Yes
Dependencies: Satisfied
Signed by: Developer ID Application: Accusys, Inc (K3TDMD9Y6B)
Issuer: Developer ID Certification Authority
Signing time: 2025-03-10 12:03:20 +0000
Identifier: com.Accusys.driver.Acxxx
TeamID: K3TDMD9Y6B
However, when I check using kextstat, it does not appear as loaded:
$ kextstat | grep ACS6x
Executing: /usr/bin/kmutil showloaded
No variant specified, falling back to release
I use a script to do these jobs
echo " Change to build/Release"
echo " CodeSign ACS6x.kext"
echo " Compress to zip file"
echo " Notary & Staple"
echo " Unload the old Acxxx Driver"
echo " Copy ACS6x.kext driver to /Library/Extensions/"
echo " Change ACS6x.kext driver owner"
echo " Loaded ACS6x.kext driver"
sudo kextload ACS6x.kext
echo " Rebiuld system cache"
sudo kextcache -system-prelinked-kernel
sudo kextcache -system-caches
sudo kextcache -i /
echo " Reboot"
sudo reboot
But it seems that the KEXT is not always loaded successfully.
What did I forget to do?
Any help would be greatly appreciated.
Best regards,
Charles
I have Windows drives on my Mac but I didn't get the Wellness boot Campdrivers how can I install them
Topic:
App & System Services
SubTopic:
Drivers
I’m experiencing a persistent issue with the new USB-C lossless audio feature on AirPods Max (firmware 7E101). I’m using original Apple USB-C to USB-C cable and have tested this setup across multiple Apple devices, including:
• iPhone (running iOS 18.5 beta)
• iPad Pro with USB-C
• MacBook Pro (15.5 Beta)
❗️Problem:
Despite Apple’s announcement that AirPods Max now support wired lossless audio over USB-C, I’m unable to get any audio output via USB-C on any device.
• On iPhone: I disabled Bluetooth, connected via USB-C — no sound.
• On MacBook: The device is shown as “AirPods Max USB Audio” in System Information > USB, but it does not appear in Sound settings or Audio MIDI Setup as an available output.
• On iPad Pro: Same behavior — no audio output.
Other details:
• I performed a factory reset of the headphones, but the LED flashes red instead of the expected amber → white sequence.
(Apple’s documentation does not mention red flash behavior during reset — might indicate an error state.)
• The issue is not isolated to the iOS 18.5 beta — since the same behavior occurs on macOS and iPadOS.
What works:
• Bluetooth audio still works fine.
• The cable and USB-C ports function with other audio devices.
⸻
Summary:
It looks like:
• USB audio is being detected on a hardware level (at least on Mac),
• but software support for output (especially on macOS/iPadOS) is either not implemented, disabled, or bugged — possibly connected to iOS 18.5 beta or broader OS-level limitations.
Topic:
App & System Services
SubTopic:
Drivers
Hello everyone.
I have been developing PCIe device driver through Thunderbolt.
However, it was confirmed that up to three devices connected to the daisy chain worked normally,
but the fourth device failed to operate the _CopyDeviceMemoryWithIndex() function for connection with the BAR0 App and did not work properly.
The standard specification of Thunderbolt 3/4 is said to be supported by daisy chain connection up to 6-device,
but in reality, it is only 3 units,
so I ask the forum for technical confirmation.
Of course total 4 device by 2-port x 2-device daisy chain connecting has working well.
The PCI entry in System information indicates that all devices have normal load of the PCIe device driver.
Thank you.
We’re looking for a reliable way to determine whether an iPad device supports DriverKit. Since there doesn't appear to be a direct public API for this, our current approach is as follows:
Retrieve the device’s model identifier (e.g., "iPad14,8") and the iOS/iPadOS version.
Map the model identifier to a known iPad model and its associated chip. If the device has an M-series chip, we assume it supports DriverKit.
For future-proofing, we plan to assume that any future iPad with a model identifier of iPad15,* or higher will contain an M-series chip and therefore support DriverKit.
We have a couple of questions:
Is there a more reliable or official API to determine the chip version or DriverKit support?
Is it reasonable to rely on the assumptions outlined in steps 2 and 3 for determining DriverKit compatibility?
Topic:
App & System Services
SubTopic:
Drivers
I have reference some related post for this issue:
https://developer.apple.com/documentation/xcode-release-notes/xcode-16-release-notes#Foundation
https://developer.apple.com/forums/thread/762711
Unfortunately, I'm facing the similar issues even though using Xcode Version 16.2 (16C5032a).
we have the following build environment:
Xcode version: Xcode 16.2 (16C5032a)
macOS Version: macOS 14.7.4 (23H420)
Everything builds and install fine. But when attempting to plug on Device on macOS 14.7.4 it crashes immediately with what appears to be a missing Foundation symbol.
Crashed Thread: 0
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: Namespace DYLD, Code 4 Symbol missing
Symbol not found: __ZThn48_N21IOUserNetworkEthernet25registerEthernetInterfaceE10ether_addrPP24IOUserNetworkPacketQueuejP29IOUserNetworkPacketBufferPoolS5_
Referenced from: <ECE57ABF-0633-3C3B-8427-FB25CC706343> /Library/SystemExtensions/*/com.asix.dext.pciedevice
Expected in: <CDEB3490-B1E0-3D60-80CE-59C0682A4B03> /System/DriverKit/System/Library/Frameworks/NetworkingDriverKit.framework/NetworkingDriverKit
(terminated at launch; ignore backtrace)
Thread 0 Crashed:
0 dyld 0x1041da4c8 __abort_with_payload + 8
1 dyld 0x1041e50cc abort_with_payload_wrapper_internal + 104
2 dyld 0x1041e5100 abort_with_payload + 16
3 dyld 0x1041767f0 dyld4::halt(char const*, dyld4::StructuredError const*) + 304
4 dyld 0x1041732ec dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*) + 3888
5 dyld 0x104171ef4 start + 1868
Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000000000006 x1: 0x0000000000000004 x2: 0x000000016bdd2810 x3: 0x0000000000000172
x4: 0x000000016bdd2410 x5: 0x0000000000000000 x6: 0x000000016bdd1400 x7: 0x000000016bdd1460
x8: 0x0000000000000020 x9: 0x000000016bdd237c x10: 0x000000000000000a x11: 0x0000000000000000
x12: 0x0000000000000038 x13: 0x0000000000000000 x14: 0x0000000188e77f9d x15: 0x0000000000008000
x16: 0x0000000000000209 x17: 0x000000010416f37c x18: 0x0000000000000000 x19: 0x0000000000000000
x20: 0x000000016bdd2410 x21: 0x0000000000000172 x22: 0x000000016bdd2810 x23: 0x0000000000000004
x24: 0x0000000000000006 x25: 0x00000000000000a8 x26: 0x000000016bdd32d8 x27: 0x000000010405e090
x28: 0x0000000000000001 fp: 0x000000016bdd23e0 lr: 0x00000001041e50cc
sp: 0x000000016bdd23a0 pc: 0x00000001041da4c8 cpsr: 0x80001000
far: 0x0000000000000000 esr: 0x56000080 Address size fault
Binary Images:
0x10416c000 - 0x1041f7fff dyld (*) <4fe051cf-29dc-3f02-890b-33144fa09253> /usr/lib/dyld
0x10402c000 - 0x10403ffff com.asix.dext.pciedevice (0.1.6) <ece57abf-0633-3c3b-8427-fb25cc706343> /Library/SystemExtensions/*/com.asix.dext.pciedevice
0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ???
External Modification Summary:
Calls made by other processes targeting this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by all processes on this machine:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
VM Region Summary:
ReadOnly portion of Libraries: Total=8612K resident=0K(0%) swapped_out_or_unallocated=8612K(100%)
Writable regions: Total=12.2M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=12.2M(100%)
Is it expected that this should work? Is this a known issue? Is there any workaround for it?
Should I file feedback or a DTS?
Hi All,
We've been working on a new CarPlay-supported App and are hoping for advice on how to achieve this.
We have completed the CarPlay Entitledment Request, but have not received any response from Apple.
Given we're close to launch on Android, we'd love to have these projects completed together.
Any advice on how to make contact with the approvals team, or suggestions on how long this will normally take?
If they're no longer taking applications or rejection is high, any guidance would be greatly appreciated too!
I have a dext that creates a periodic timer on its own dispatch queue. The callback is declared as follows:
virtual void HandleTimer( OSAction *action, uint64_t time ) TYPE(IOTimerDispatchSource::TimerOccurred);
The timer is allocated as follows:
CreateActionHandleTimer( size, &ivars->TimerHandler );
IODispatchQueue::Create( "TimerQueue", 0, 0, &ivars->TimerDispatchQueue );
IOTimerDispatchSource::Create( ivars->TimerDispatchQueue, &ivars->TimerDispatchSrc );
I can start up the timer and it works just fine. However, in my Stop() method, when trying to shut the timer down, I get an assertion in OSAction::Cancel() for TimerHandler:
Assertion failed: (queue), function Cancel, file uioserver.cpp, line 4401.
What does this assertion indicate or is the source code available? If so, where? I'm using macOS 15.5.
Note I am attempting to cancel the handler after the dispatch source and queue are canceled and the cleanup methods have been called (which is working). But, cancelling TimerHandler first also asserts.
I need to implement an app that exchanges data with peripherals through TypeC on Apple 15 phones, but I have two questions that I need to ask for help:
Which library is used to communicate with peripherals through the TypeC port of the Apple mobile phone?
Do peripherals need to pass MFi authentication before they can communicate with the App?
I am currently developing a kiosk system that incorporates an iPad along with a custom peripheral device. The two components are intended to communicate via USB serial.
I have encountered a critical issue while working with the official DriverKit sample code provided at the following link:
https://developer.apple.com/documentation/driverkit/communicating-between-a-driverkit-extension-and-a-client-app
Model info :
iPad Pro 12.9-inch (5th generation / M1 chipset)
iPadOS 18.4.1
App Stops Functioning After Repeated Builds
When I first build and run the sample code without any modifications, it works as expected. However, after making changes and running the app repeatedly on the iPad, it eventually reaches a state where the app stops functioning completely — no logs are printed, and device communication fails.
Reinstalling the app or rebooting the iPad does not resolve the issue. Even when I revert to the original, unmodified sample code, the problem persists. Surprisingly, if I generate a new Bundle Identifier, the app functions normally again.
I would like to ask:
What could be causing this behavior?
Have similar cases been reported before?
For your reference, I’ve attached a video demonstrating the issue and the source code used during the recording:
Source Code:
https://drive.google.com/file/d/14whvWwuhrmS5VoR3sSKyNT-GpTPC_c_8/view?usp=sharing
Video:
https://drive.google.com/file/d/1SfqIkEphSDrvg-CKS6KBcJ1VBP3cPqCC/view?usp=sharing
Request for USB Serial Communication Reference
Currently, due to the issue above, I am unable to obtain a device instance at all.
Even assuming this is resolved, I noticed that the sample code does not include any implementation or reference material for USB serial communication itself.
Is there any official sample code or documentation available that demonstrates USB serial communication between an iPad and an external device using DriverKit?
Difficulty Debugging Due to Missing os_log Output
Another challenge I'm facing is the inability to view os_log output while connecting the USB device to the iPad.
This significantly hinders the debugging process during DriverKit development.
Are there any recommended or supported methods for accessing logs and debugging effectively in this environment?
I want to update my iPhone 15 Pro to iOS 26 from iOS 18.5. I downloaded ipsw firmware. But iTunes and Apple Devices App requires update version of app for update to iOS 26.
But I use last version of iTunes / Apple Devices, which was realised 2 May, 2025.
That mean Apple need to update their apps for adaptation it to iOS 26 update?
Topic:
App & System Services
SubTopic:
Drivers
We're seeing a consistent issue where iPads with the A16 chip fail to connect to our BLE device, which uses a Silicon Labs chip running Gecko SDK 3.x. All other Apple devices — including older iPads and iPhones — connect without any problems.
According to Silicon Labs, the issue stems from the iPad A16 sending an LL_CHANNEL_REPORTING_IND message (opcode 0x28) during connection establishment:
Per Silicon Labs:
"Currently the iPad 16 will send a message for LL_CHANNEL_REPORTING_IND (opcode 0x28).
This is a feature that is not supported in Gecko SDK 3.x.
Shortly after, the BLE module responds with an 'Unknown Response' (opcode 0x07), indicating that it does not support opcode 0x28
After this exchange the iPad stops sending meaningful transactions to the BLE module and eventually closes the connection.
The BLE Module is responding to this unknown request as specified in the BT Core Spec Volume 6 Part B."
Unfortunately, the firmware on these BLE modules cannot be updated remotely, and we've already shipped several thousand units to customers. Given how widely Silicon Labs' BLE modules are deployed, we suspect this issue could be affecting many other developers and products as well.
We’re hoping Apple might offer a workaround or allow us access — even internally or unofficially — to suppress or bypass this feature in CoreBluetooth for this specific scenario. For example, is there a way to disable LL_CHANNEL_REPORTING_IND or instruct the stack to ignore the unknown response from the peripheral?
We’re open to any workaround via CoreBluetooth (even private APIs or entitlements, if necessary) that would allow us to preserve compatibility without a mass recall. If there's an Apple engineer monitoring this, we'd be extremely grateful for guidance or escalation.
Thank you!
We have developed the driver for the ProCapture video capture card based on PCIDriverKit. The App can communicate with the driver through the UserClient API. Currently, there is an issue where, when the App starts, there is a small probability that it causes a driver crash. However, the crash stack trace does not point to our code but appears to be within the PCIDriverKit framework. We have spent several weeks debugging but still cannot identify the root cause of the crash. Could you please review the crash log and suggest any methods to help pinpoint the issue?
com.magewell.ProCaptureDriver-2025-09-15-153522.ips
com.magewell.ProCaptureDriver-2025-09-15-082500.ips
Dear Apple engineers,
We have developed a DriverKit (DEXT) driver for an HBA RAID controller.
The RAID controller is connected to hosts through Thunderbolt (PCIe port of the Thunderbolt controller).
We do plug/unplug tests to verify the developed driver. The test always fails in about 100 cycles with a MacOS crash (panic).
The panic contains
“LLC Bus error (Unavailable) from cpu0: FAR=0xa40100008 LLC_ERR_STS/ADR/INF=0x80/0x300480a40100008/0x1400000005 addr=0xa40100008 cmd=0x18(ACC_CIFL2C_CMD_RD_LD: request for load miss in E or S state)”
At first we assumed that the issue is with hardware. But we did this test on different hosts (MacMini M3 and M4) with different units of our device.
The error points to the same physical address FAR=0xa40100008 even if the hosts are different.
The 2 full panic logs are attached (one for M4, another one for M3 host).
Could you share your understanding of the crash and give any hints on how we can fix it?
Please let us know if you need any additional data.
Thank you
M3 panic:
https://drive.google.com/file/d/1GJXd3tTW6ajdrHpFsJxO_tWWYKYIgcMc/view?usp=share_link
M4 panic:
https://drive.google.com/file/d/1SU-3aBSdhLsyhhxsLknzw9wGvBQ9TbJC/view?usp=share_link
Topic:
App & System Services
SubTopic:
Drivers
We want to allocate a block of contiguous memory (≤1M) for audio ring DMA usage, but we haven't found any explicit method in the DriverKit documentation for allocating contiguous memory.
I'm aware that IOBufferMemoryDescriptor::Create can be used in DriverKit to allocate memory and share it with user space. However, is the allocated memory physically contiguous? Can it guarantee that when I subsequently call PrepareForDMA in IODMACommand, there will be only one segment?
Could you please help review this? Thank you!
Dear Apple CS,
I’m working with NFC ISO15693 tags using NFCTagReaderSession / NFCISO15693Tag, and I’d like to read these tags in the background if possible.
Is there any way to read this tag type without triggering the system NFC popup that iOS normally shows?
Please note it will not be a public app, the app is meant for internal use for our employees only.
is there an option to submit a special request for this use case?
Thank you in advance!
Hello Everyone,
I encountered an issue with PCI memory access in DriverKit. In my case, BAR0 is not available, but BAR1 is ready for use. Here’s the log output:
!!! ERROR : Failed to get BAR0 info (error: 0xe00002f0). !!!
BAR1 - MemoryIndex: 0x00000000, Size: 0x00040000, Type: 0
Issue Description
When I initially wrote to BAR0 using memoryIndex = 0, it worked successfully:
AME_Address_Write_32(pAMEData, pAMEData->memoryIndex, AME_HOST_INT_MASK_REGISTER, 0x0F);
However, I mistakenly forgot to update memoryIndex to 1 for BAR1. Surprisingly, the write operation still succeeded.
When I fixed memoryIndex = 1 for BAR1, the write operation no longer had any effect. There was no error, but the expected behavior did not occur.
Relevant API (From IOPCIDevice.iig)
/*!
/*!
* @brief Writes a 32-bit value to the PCI device's aperture at a given memory index.
* @discussion This method writes a 32-bit register on the device and returns its value.
* @param memoryIndex An index into the array of ranges assigned to the device.
* @param offset An offset into the device's memory specified by the index.
* @param data A 32-bit value to be written in host byte order.
*/
void
MemoryWrite32(uint8_t memoryIndex,
uint64_t offset,
uint32_t data) LOCALONLY;
Log Output:
Writes to BAR0 (memoryIndex = 0)
AME_Address_Write_32() called
memoryIndex: 0, offset: 0x34, data: 0xf
Wrote data 0xF to offset 52
AME_Address_Write_32() called
memoryIndex: 0, offset: 0xa0, data: 0x1
Wrote data 0x1 to offset 160
AME_Address_Write_32() called
memoryIndex: 0, offset: 0x20, data: 0xffffffff
Wrote data 0xFFFFFFFF to offset 32
Writes to BAR1 (memoryIndex = 1) – No Response
AME_Address_Write_32() called
memoryIndex: 1, offset: 0x34, data: 0xf
No confirmation log, no visible effect.
Questions
What should memoryIndex be set to for BAR1?
The log shows "BAR1 - MemoryIndex: 0x00000000", but should I be using 1 instead?
How can I verify if a write operation to BAR1 is successful?
Is there a way to check if the memory region is actually writable?
Should I use MemoryRead32() to confirm the written value?
Any guidance would be greatly appreciated!
Best Regards,
Charles
Hello everyone,
I’m working on implementing hardware interrupt handling in DriverKit and came across the InterruptOccurred method in IOInterruptDispatchSource. I noticed that its declaration ends with a TYPE macro:
virtual void InterruptOccurred(OSAction* action, uint64_t count, uint64_t time)
TYPE(IOInterruptDispatchSource::InterruptOccurred);
This structure seems similar to how Timer Events are set up, where an event is linked to a callback and triggered by a timer. I’m attempting to use a similar approach, but for hardware-triggered interrupts rather than timer events.
I’m currently in the trial-and-error phase of the implementation, but if anyone has a working example or reference on how to properly implement and register InterruptOccurred, it would be greatly appreciated!
Best regards,
Charles
I'm developing a CarPlay Fueling app with CarPlay entitlement properly configured. While testing, I ran into two issues and would appreciate any guidance:
UserDefaults access while iPhone is locked:
In my CarPlay implementation, I read values from UserDefaults that were previously saved in the iOS app. However, when the iPhone is locked and the CarPlay session is active, it seems that the CarPlay extension cannot read the stored values. Is this the expected behavior? If so, how can I persist and access data across the app and CarPlay reliably?
API calls while iPhone is locked:
The CarPlay interface in my app communicates with a server to display lists and detail views. When the iPhone is locked, are network calls still allowed from the CarPlay extension?
Currently, I do not have any background modes enabled in the app capabilities.
If I enable background modes and implement background network logic to ensure API calls complete properly, would this be considered acceptable usage for CarPlay in App Store review? Or could it raise any rejection concerns during the approval process?
Thanks in advance for your help.