We have a device which is an appliance and we are developing a control interface app for macOS and iOS/iPadOS.
How can we set up our iOS application to grab information from a local network device while it is in the background in order to show notifications?
Communication between the Apple device and our device is via local networking and the device is designed to be used on networks without internet connections. On networks with internet connections we could forward events from the device, via a server and APNS push notifications, but that isn't valid here.
Events occur on our device and are forwarded to clients, who are subscribed to Server-Sent Events. On macOS this works well and the application can receive updates and show Notification Center notifications fine.
On iOS we are using a BGAppRefreshTaskRequest with time interval set to 1 minute, but it appears that we get scheduled only every few hours. This isn't very useful as notifications just arrive in batches rather than in a timely manner. All normal networking is closed when the app goes into the background, so we cannot keep the SSE request open.
Another idea which we haven't tried yet: Creating a new endpoint on the device which keeps the connection open until a notification arrives, then using background URLSession to poll on that endpoint. Would that work? It seems like a mis-use of the API perhaps?
Post
Replies
Boosts
Views
Activity
Many USB storage devices are NVMe devices accessed through a USB-NVMe bridge chip, such as those by JMicron and Asmedia. These chipsets do not forward SMART data requests to the devices, but do have the capability to forward raw NVMe commands to the devices using vendor specific requests.
How can we provide access to SMART data for NVMe devices accessed through a bridge chip like this?
Many people used the OSX SAT SMART kext driver to provide access to SMART data for devices using USB-SATA chips, but it is a kext and doesn't support NVMe. See https://binaryfruit.com/drivedx/usb-drive-support#install-instructions
Would we need to implement a kext like that to make this work? Is there a DriverKit way to do this?
When using external NVMe devices on iOS / iPadOS I cannot tell how to access the disk SMART data.
On macOS I can use NVMeSMARTLibExternal.h to access this information but the same system does not seem to work on iPadOS (even with Thunderbolt NVMe devices).
When using M series iPads with professional Thunderbolt storage this woudlbe very useful.
This list is the KPIs deprecated in macOS 10.15 https://developer.apple.com/support/kernel-extensions
Is there a list for the KPIs deprecated on macOS 11?
We build Thunderbolt hardware, but at a PCI level they are generic so we do not have a PCI VID. They do require a kext driver. Currently Apple requires a PCI VID to get a PCIDriverKit entitlement. Is there any way that this requirement could be relaxed?
What is the best way to have full access to the IORegistry (traversing fromPath etc) from within DriverKit?IOService SearchProperty isn't enough control for the matching that I need to do. I also cannot work out how to change arbitrary IOReg keys from within my driver.
How does device matching work on DriverKit?Before there were general requirements in the plist, then specific requirements encoded in a probe(...) function. Is there documentation for the matching process of the new DriverKit APIs (like this old one https://developer.apple.com/library/archive/documentation/DeviceDrivers/Conceptual/IOKitFundamentals/Matching/Matching.html#//apple_ref/doc/uid/TP0000015-TP9)H