@yosuke65 @cbcb After extensive debugging, I found a configuration that passes both App Store Connect validation AND works on device.
The Problem:
Embedding in PlugIns folder (dstSubfolderSpec = 13) → ASC rejects with "Missing NSExtensionPrincipalClass"
Adding NSExtensionPrincipalClass → Device install fails with "not allowed for this extension point"
The Solution:
Use ExtensionKit extension type embedded in the Extensions folder (not PlugIns), with explicit dstPath:
project.pbxproj - Embed Phase:
/* Embed ExtensionKit Extensions / = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "$(EXTENSIONS_FOLDER_PATH)";
dstSubfolderSpec = 16;
files = (
/ YourReportExtension.appex in Embed ExtensionKit Extensions */,
);
name = "Embed ExtensionKit Extensions";
runOnlyForDeploymentPostprocessing = 0;
};
Key settings:
dstSubfolderSpec = 16 (Extensions folder, NOT 13/PlugIns)
dstPath = "$(EXTENSIONS_FOLDER_PATH)" ← Critical!
productType = "com.apple.product-type.extensionkit-extension"
explicitFileType = "wrapper.extensionkit-extension"
Info.plist (EXAppExtensionAttributes only, no NSExtension):
The missing piece for me was the explicit dstPath = "$(EXTENSIONS_FOLDER_PATH)" - without it, the extension wouldn't render properly even when in the Extensions folder.
Hope this helps others hitting this wall!
Topic:
App & System Services
SubTopic:
General
Tags: