DeviceActivityReportExtension: NSExtensionPrincipalClass required by App Store but rejected at runtime

I'm experiencing a contradictory validation issue with DeviceActivityReportExtension that creates an impossible situation:

The Problem:

  • Without NSExtensionPrincipalClass in Info.plist → App Store Connect rejects upload with: "Missing Info.plist values. No values for NSExtensionMainStoryboard or NSExtensionPrincipalClass found"
  • With NSExtensionPrincipalClass → Local install fails with: "defines either an NSExtensionMainStoryboard or NSExtensionPrincipalClass key, which is not allowed for the extension point com.apple.deviceactivityui.report-extension"

Setup:

  • Extension point: com.apple.deviceactivityui.report-extension
  • Using SwiftUI with @main attribute and DeviceActivityReportExtension protocol
  • Xcode 16.2, iOS 17.6 deployment target

Code structure:

@main
struct SpoolReport: DeviceActivityReportExtension {
    var body: some DeviceActivityReportScene {
        // Report scenes here
    }
}

The extension builds and runs perfectly without NSExtensionPrincipalClass, but cannot be uploaded to App Store Connect. Adding the key allows upload but breaks local installation.

Is this a known issue? Is there a workaround or correct Info.plist configuration for DeviceActivityReportExtension?

Thank you!

DeviceActivityReportExtension: NSExtensionPrincipalClass required by App Store but rejected at runtime
 
 
Q