Media Extension format reader for MKV/WebM in several apps of one developer – appropriate use and conflicts?

I'm preparing several sandboxed macOS apps (macOS 26 and later) for the Mac App Store and would like to add Matroska/WebM support through a Media Extension format reader. Before implementing it, I'd like to clarify a few points.

The apps work only with local video files the user opens or adds: a player for many videos at once (video wall), a practice player with loops and markers, an app for precise trimming and export, and a catalog of the user's video library with thumbnails and duplicate detection. None of them is network-facing.

Plan: one format reader for Matroska and WebM (own implementation of RFC 9559, no third-party code), embedded as an ExtensionKit bundle. Video is decoded by the system decoders (H.264, HEVC, VP9 after VTRegisterSupplementalVideoDecoderIfAvailable, AV1 where available); no own video decoder. Each app calls MTRegisterProfessionalVideoWorkflowFormatReaders() and VTRegisterProfessionalVideoWorkflowVideoDecoders() at launch and shows a notice with a link to System Settings when the extension is disabled (AVErrorMediaExtensionDisabled).

Questions:

  1. MTProfessionalVideoWorkflow.h and VTProfessionalVideoWorkflow.h say the registration functions are intended for applications supporting professional video workflows. Is it acceptable to call them from apps like these, which serve video editing, review and library management, but not a broadcast or camera workflow?

  2. Users may buy only one of the apps, so I'd embed the same format reader (same ClassImplementationID and CFBundleVersion, bundle identifier prefixed by each host app) in every app. Is that supported? When are AVErrorMediaExtensionConflict and kVTExtensionConflictErr returned, and how can they be avoided?

  3. Does the enable switch in System Settings apply per ClassImplementationID or per host app? Would a user who installs a second app have to enable the extension again?

  4. Is there a supported way to open System Settings directly at General > Login Items & Extensions > Media Extensions from an app?

  5. Are there App Review requirements specific to apps that embed Media Extensions, beyond guidelines 2.4.5 and 4.4?

Thanks in advance.

I have an app in the app store that provides a MEFormatReader for .mkv files (and others) and also provides a MEVideoDecoder for hardware that doesn't support all the codecs that .mkv can contain, so I can answer some of your questions.

  1. Yes, this is documented at https://developer.apple.com/documentation/mediaextension/supporting-custom-media-formats-and-decoders#Play-extension-backed-media
  2. MEFormatReader and MEVideoDecoder extensions have to be manually enabled by the end user under Settings -> General -> Login Items and Extensions -> Extensions. In my experience if LaunchServices sees multiple copies of your app it will create multiple entries in Settings. This will likely confuse your users. I would recoemmend supplying your app separately (or pointing your users at mine!)
  3. In my experience it seems to operate per ClassImplementationID.
  4. Not documented (as far as I know). This is the best I could do:
    let url = URL(string: "x-apple.systempreferences:com.apple.ExtensionsPreferences?")! NSWorkspace.shared.open(url)
  5. I had to create a video showing enabling the extensions in Settings since, unless the reviewer does this, the app appears to do nothing.

Some other points:

  • I could not find a way to detect form app sandbox whether the user has enabled Media Extensions. Best I could do was detect whether it was possible to thumbnail a .mkv file bundled in the app's resources:
let request = QLThumbnailGenerator.Request(
                fileAt: url,
                size: CGSize(width: 128, height: 128),
                scale: NSScreen.main?.backingScaleFactor ?? 2.0,
                representationTypes: .thumbnail  // ask for thumbnail only, not icon or all
            )
            do {
                _ = try await QLThumbnailGenerator.shared.generateBestRepresentation(for: request)
            } catch {
                // Not thumbnailable -> Extension(s) not enabled -> notify user
            }
  • Following on from this - MediaExtension is documented as being supported from macOS 15. In my experience thumbnailing a file that requires a MEFormatReader doesn't work on macOS 15, but previews do.