CoreMediaIO Virtual Camera Extension stopped working in 12.3 RC

I had successfully added the new template Camera Extension to a project, and was able to use it in MacOS 12.3 Beta 3. After updating to the RC version of MacOS 12.3, the extension no longer appears in (for example) Quicktime Player.

As far as the application is concerned, the requests to "update" the extension work, and I get an OSSystemExtensionRequest.Result.completed response from OSSystemExtensionManager.shared.submitRequest.

The only clue I see is an error in the Console app:

RegisterAssistantService.m:806:-[RegisterAssistantServer launchdJobForExtension:error:] submit returned Error Domain=OSLaunchdErrorDomain Code=125 UserInfo={NSLocalizedFailureReason=<private>} for {

    EnablePressuredExit = 1;

    Label = "CMIOExtension.app.mmhmm.CameraTest.camera";

    LaunchEvents =     {

        "com.apple.cmio.registerassistantservice.system-extensions.matching" =         {

            "app.mmhmm.CameraTest.camera" =             {

                CMIOExtensionBundleIdentifier = "app.mmhmm.CameraTest.camera";

            };

        };

    };

    LimitLoadToSessionType = Background;

    MachServices =     {

        "M3KUT44L48.app.mmhmm.CameraTest.camera" = 1;

    };

    ProcessType = Interactive;

    Program = "/Library/SystemExtensions/9D731619-32C2-45C4-9B7C-2F22D184868A/app.mmhmm.CameraTest.camera.systemextension/Contents/MacOS/app.mmhmm.CameraTest.camera";

    SandboxProfile = cmioextension;

    "_ManagedBy" = "com.apple.cmio.registerassistantservice";

}

Any ideas? Submitting a deactivationRequest also apparently "works", but doesn't actually seem to remove the installed extension...

Edit: Weirdly, rebooting seems to have cleared up the issue.

When I ran systemextensionsctl list, I got a bunch of SE reported as "[terminated waiting to uninstall on reboot]":

% systemextensionsctl list

9 extension(s)

--- com.apple.system_extension.cmio

enabled	active	teamID	bundleID (version)	name	[state]

		M3KUT44L48	app.mmhmm.CameraTest.camera (1.0/1)	camera	[terminated waiting to uninstall on reboot]

		M3KUT44L48	app.mmhmm.CameraTest.camera (1.0/1)	camera	[terminated waiting to uninstall on reboot]

		M3KUT44L48	app.mmhmm.CameraTest.camera (1.0/1)	camera	[terminated waiting to uninstall on reboot]

		M3KUT44L48	app.mmhmm.CameraTest.camera (1.0/1)	camera	[terminated waiting to uninstall on reboot]

		M3KUT44L48	app.mmhmm.CameraTest.camera (1.0/1)	camera	[terminated waiting to uninstall on reboot]

		M3KUT44L48	app.mmhmm.CameraTest.camera (1.0/1)	camera	[terminated waiting to uninstall on reboot]

		M3KUT44L48	app.mmhmm.CameraTest.camera (1.0/1)	camera	[terminated waiting to uninstall on reboot]

		M3KUT44L48	app.mmhmm.CameraTest.camera (1.0/1)	camera	[terminated waiting to uninstall on reboot]

		M3KUT44L48	app.mmhmm.CameraTest.camera (1.0/1)	camera	[terminated waiting to uninstall on reboot]

I didn't see anything in the (very sparse) documentation that indicated how I'd know that a reboot was required to finish un-installing (especially given that it wasn't required for installing). Maybe that's what OSSystemExtensionProperties.isUnstalling is for?

Yeah it looks like for Core Media I/O extensions, the dynamic unload/reload is pretty broken (almost all updates require a reboot other than the initial load). If you want to ship it in production apps, try structure the extension so it behaves like a light weight shim to just pipe media data, and shift all the complicated logic to your main app with XPC to avoid having to frequently update the system extension?

CoreMediaIO Virtual Camera Extension stopped working in 12.3 RC
 
 
Q