ASC rejects ReplayKit Broadcast Upload appex: RPBroadcastProcessMode “not specified” (key present in IPA & swinfo)

Summary App Store Connect validation (Transporter) is rejecting a build that includes a ReplayKit Broadcast Upload extension. The validator reports that RPBroadcastProcessMode is “not specified”, but the shipped IPA’s Upload appex Info.plist has the key at the documented nested path, and Apple’s own analyser (swinfo) shows the same key/value.

Error (Transporter 409) “Invalid Info.plist value. The value for the key 'RPBroadcastProcessMode' in bundle BeamRoomHost.app/PlugIns/BeamRoomUpload2.appex is invalid. RPBroadcastProcessMode value must be 'RPBroadcastProcessModeSampleBuffer' or 'RPBroadcastProcessModeMP4Clip'. The key was not specified.” Example error ID seen: 94ec8b42-ef1b-44e8-9d70-2c76458e1bb3

Environment • Xcode 26.0.1 (17A400) • macOS 15.6 (24G84) • Transporter 1.3.4 (13410) • App Apple ID: 6752822011 • Host bundle: com.conornolan.BeamRoomHost • Upload appex bundle: com.conornolan.BeamRoomHost.BeamRoomUpload2 • Version/Build: 0.9.4 (14) Most recent reproduction: 2025-10-02 ~09:00 GMT+1

Proof the key exists (from the IPA) Inside the IPA at: Payload/BeamRoomHost.app/PlugIns/BeamRoomUpload2.appex/Info.plist

NSExtension.NSExtensionPointIdentifier = com.apple.broadcast-services-upload NSExtension.NSExtensionAttributes.RPBroadcastProcessMode = RPBroadcastProcessModeSampleBuffer

Proof from Apple’s analyser (swinfo) for the same IPA asset-description.plist contains: … RPBroadcastProcessMode = RPBroadcastProcessModeSampleBuffer …

Minimal plist shape used (Upload appex Info.plist) <?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>CFBundleDevelopmentRegion</key><string>en-GB</string> <key>CFBundleExecutable</key><string>$(EXECUTABLE_NAME)</string> <key>CFBundleIdentifier</key><string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> <key>CFBundleInfoDictionaryVersion</key><string>6.0</string> <key>CFBundleName</key><string>$(PRODUCT_NAME)</string> <key>CFBundlePackageType</key><string>XPC!</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> <key>NSExtensionAttributes</key><dict> <key>RPBroadcastProcessMode</key><string>RPBroadcastProcessModeSampleBuffer</string> </dict> </dict> </dict></plist>

What we’ve tried • Fresh Upload appex target from Xcode template + NEW bundle ID.
• Minimal Info.plist (only keys above).
• Also tried a top-level duplicate of RPBroadcastProcessMode in addition to the nested key.
• Tried RPBroadcastProcessModeMP4Clip (disposable build) → still reported “key not specified”.
• Organizer vs Transporter uploads.
• Xcode 26.0 → 26.0.1.
In every case the IPA and swinfo show the key/value, yet ASC reports “not specified”.

Questions • Is there a current ingest/validator issue where RPBroadcastProcessMode is not read from the nested path in Upload appex Info.plist?
• Are there any additional expectations for ReplayKit Upload appex in ASC validation beyond the documented nested key?
• Any recommended workaround while this is investigated?

Cross-references • Feedback Assistant ID: FB20412340 (contains full IPA, asset-description.plist, screenshots, and a short Transporter screen recording).
• Developer Support case: 102707552863.
• Recent x-apple-request-uuid example: 30aa2221-3df3-10a2-b161-b59df37f080c.
• SHA-256 for the ZIP of artefacts attached in Feedback: f7397c13e85d4ef0f5722ea75821ad04d51fe5f103ed03dbac646d3902e91227.

Happy to provide a minimal repro project if helpful. Thanks in advance for any guidance or confirmation from the ASC/build-processing side.

I'm experiencing the same thing when publishing an app with ReplayKit. Is there a workaround here?

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.

ASC rejects ReplayKit Broadcast Upload appex: RPBroadcastProcessMode “not specified” (key present in IPA & swinfo)
 
 
Q