SOLVED but this needs to be addressed by engineers - both the actual issue and the incorrect auto-generated App Review response that led us on a wild chase.
I reproduced the install failure on a physical iOS device through TestFlight, and the real blocking error is not UIRequiredDeviceCapabilities.
The device installation log shows MIInstallerErrorDomain Code 152 with AppexBundleContainsClassOrStoryboard, because the [APPNAME]DeviceActivityReport.appex for com.apple.deviceactivityui.report-extension contains NSExtensionMainStoryboard or NSExtensionPrincipalClass, which iOS says is not allowed for that extension point. This seems to be a known issue reproducible on iOS 18 and 26.
This creates a validation conflict: removing NSExtensionPrincipalClass makes App Store Connect reject the upload with “Missing Info.plist values. No values for NSExtensionMainStoryboard or NSExtensionPrincipalClass found,” but including it causes the install to fail on device. In other words, there is no plist configuration that satisfies both validators for this extension type.
So the rejection appears to be misclassified. The app is actually blocked by an extension plist validation issue in the Device Activity report extension, not by UIRequiredDeviceCapabilities.
I found my solution here: https://origin-devforums.apple.com/forums/thread/809227
The key fix was using an ExtensionKit extension embedded in the Extensions folder with an explicit dstPath = "$(EXTENSIONS_FOLDER_PATH)", rather than the default PlugIns setup. Once I switched to that configuration and removed NSExtension* from the extension plist, the app both passed App Store Connect validation and installed successfully on device.
Resubmitting to App Review and hopefully they accept this go around.🤞🏽
Topic:
App & System Services
SubTopic:
General
Tags: