Thanks for being a part of WWDC25!

How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here

How to override the default USB video

According to the doc, I did a simple demo to verify. My env:

ProductName:		macOS
ProductVersion:		15.5
BuildVersion:		24F74
2.4 GHz 四核Intel Core i5
  1. Info.plist:
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IOKitPersonalities</key>
	<dict>
		<key>UVCamera</key>
		<dict>
			<key>CFBundleIdentifierKernel</key>
			<string>com.apple.kpi.iokit</string>
			<key>IOClass</key>
			<string>IOUserService</string>
			<key>IOMatchCategory</key>
			<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
			<key>IOProviderClass</key>
			<string>IOUserResources</string>
			<key>IOResourceMatch</key>
			<string>IOKit</string>
			<key>IOUserClass</key>
			<string>UVCamera</string>
			<key>IOUserServerName</key>
			<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
            <key>IOProbeScore</key>
            <integer>100000</integer>
            <key>idVendor</key>
            <integer>1452</integer>
            <key>idProduct</key>
            <integer>34068</integer>
		</dict>
	</dict>
	<key>OSBundleUsageDescription</key>
	<string></string>
</dict>
</plist>
  1. UVCamera.cpp
//
//  UVCamera.cpp
//  UVCamera
//
//  Created by DTEN on 2025/6/12.
//

#include <os/log.h>

#include <DriverKit/IOUserServer.h>
#include <DriverKit/IOLib.h>

#include "UVCamera.h"

kern_return_t
IMPL(UVCamera, Start)
{
    kern_return_t ret;
    ret = Start(provider, SUPERDISPATCH);
    os_log(OS_LOG_DEFAULT, "Hello World");
    return ret;
}
  1. UVCamera.iig
//
//  UVCamera.iig
//  UVCamera
//
//  Created by DTEN on 2025/6/12.
//

#ifndef UVCamera_h
#define UVCamera_h

#include <Availability.h>
#include <DriverKit/IOService.iig>

class UVCamera: public IOService
{
public:
    virtual kern_return_t
    Start(IOService * provider) override;
};

#endif /* UVCamera_h */
  1. Then I build by xcode and mv it to /Library/DriverExtensions:
sudo mv com.lqs.MyVirtualCam.UVCamera.dext /Library/DriverExtensions
sudo kmutil install -R / -r /Library/DriverExtensions
kmutil rebuild done

However,the dext can't be loaded:

 kmutil showloaded --list-only | grep UVCamera
No variant specified, falling back to release

What's the problem? anyone can help me?

How to override the default USB video
 
 
Q