Post

Replies

Boosts

Views

Activity

Reply to ASC rejects ReplayKit Broadcast Upload appex: RPBroadcastProcessMode “not specified” (key present in IPA & swinfo)
Resolution (fixed) App Store Connect was rejecting my build with “RPBroadcastProcessMode … key was not specified” even though the key/value appeared in the IPA and in swinfo. The root cause was the key’s location in the Upload appex Info.plist. ASC expects the key directly under NSExtension, not inside NSExtensionAttributes. Incorrect (what I had originally): NSExtension └─ NSExtensionAttributes └─ RPBroadcastProcessMode = RPBroadcastProcessModeSampleBuffer Correct (what ASC expects): NSExtension ├─ NSExtensionPointIdentifier = com.apple.broadcast-services-upload ├─ NSExtensionPrincipalClass = $(PRODUCT_MODULE_NAME).SampleHandler └─ RPBroadcastProcessMode = RPBroadcastProcessModeSampleBuffer Minimal working Info.plist for the Upload appex: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundlePackageType</key> <string>XPC!</string> <key>CFBundleExecutable</key> <string>$(EXECUTABLE_NAME)</string> <key>CFBundleIdentifier</key> <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> <key>CFBundleShortVersionString</key> <string>$(MARKETING_VERSION)</string> <key>CFBundleVersion</key> <string>$(CURRENT_PROJECT_VERSION)</string> <key>MinimumOSVersion</key> <string>26.0</string> <key>NSExtension</key> <dict> <key>NSExtensionPointIdentifier</key> <string>com.apple.broadcast-services-upload</string> <key>NSExtensionPrincipalClass</key> <string>$(PRODUCT_MODULE_NAME).SampleHandler</string> <!-- Per ASC feedback, RPBroadcastProcessMode must live directly under NSExtension --> <key>RPBroadcastProcessMode</key> <string>RPBroadcastProcessModeSampleBuffer</string> </dict> </dict> </plist> One-liner to patch an existing plist: /usr/libexec/PlistBuddy -c 'Delete :NSExtension:NSExtensionAttributes:RPBroadcastProcessMode' \ BeamRoomUpload2/Info.plist 2>/dev/null || true /usr/libexec/PlistBuddy -c 'Add :NSExtension:RPBroadcastProcessMode string RPBroadcastProcessModeSampleBuffer' \ BeamRoomUpload2/Info.plist 2>/dev/null || \ /usr/libexec/PlistBuddy -c 'Set :NSExtension:RPBroadcastProcessMode RPBroadcastProcessModeSampleBuffer' \ BeamRoomUpload2/Info.plist Quick verification before upload (from the exported IPA): TMP=$(mktemp -d) unzip -q /path/to/BeamRoomHost.ipa -d "$TMP" APPEX=$(find "$TMP/Payload/BeamRoomHost.app/PlugIns" -maxdepth 1 -type d -name '*.appex' -print -quit) PL="$APPEX/Info.plist" /usr/libexec/PlistBuddy -c 'Print :NSExtension:RPBroadcastProcessMode' "$PL" # Expect: RPBroadcastProcessModeSampleBuffer Outcome: After moving the key to :NSExtension:RPBroadcastProcessMode, I rebuilt, exported, and uploaded via Transporter. ASC validation now succeeds. Environment: Xcode 26.0.1 (17A400), macOS 15.6 (24G84), Transporter 1.3.4 (13410). Note: If you have RPBroadcastProcessMode under NSExtensionAttributes, ASC currently treats it as “not specified”. Putting it directly under NSExtension fixes the validation error.
1w