iOS Share Extension export fails after successful archive

What platform are you building for?

iOS

What framework are you building with?

Cordova

What is your build ID?

f22dd9be-2858-4ced-8eab-f7f9ac37d971

What is your error message?

Hello VoltBuilder Support,

We are building a Cordova iOS app that includes an iOS Share Extension target. The archive step succeeds, and Xcode correctly compiles, links, and signs the Share Extension using its dedicated provisioning profile. However, the VoltBuilder export step fails with:

error: exportArchive “LiveShareExtension.appex” requires a provisioning profile with the App Groups feature.
** EXPORT FAILED **
The final VoltBuilder error shown in the API response is:

UserError: Conflict found, edit-config changes from config.xml will overwrite plugin.xml changes.
But the relevant failure in the build log appears to be the xcodebuild -exportArchive provisioning issue, not the edit-config warning.

App / Build Details
Platform: iOS debug/development build
Cordova iOS: cordova-ios@8.1.0
App bundle id: com.netcontroll.live
Share Extension bundle id: com.netcontroll.live.LiveShareExtension
Main app provisioning profile: Live Dev 2025-2026
Main app profile UUID: 8b5c022f-e5f3-407b-b1bd-ebd146a69fb4
Share Extension provisioning profile: Live ShareExt Dev
Share Extension profile UUID: f1e94567-e48e-4373-928c-9207d86745cf
App Group: group.com.netcontroll.live
Plugin version used: cordova-plugin-netcontroll-sharefile@1.2.12
The Share Extension provisioning profile does include the App Group entitlement:

com.apple.security.application-groups

group.com.netcontroll.live

Evidence From Build Log
In the VoltBuilder log, the archive phase looks correct:

CompileC … ShareViewController.o /platforms/ios/LiveShareExtension/ShareViewController.m … (in target ‘LiveShareExtension’ from project ‘App’)
Ld …/LiveShareExtension.appex/LiveShareExtension normal (in target ‘LiveShareExtension’ from project ‘App’)
Signing Identity: “Apple Development: …”
Provisioning Profile: “Live ShareExt Dev”
(f1e94567-e48e-4373-928c-9207d86745cf)
** ARCHIVE SUCCEEDED **
Then export fails:

xcodebuild -exportArchive -archivePath App.xcarchive -ex

Please describe the issue:

HI Guys

Our Cordova iOS app uses a custom Share Extension plugin so the app appears in the iOS Share Sheet and can receive shared PDFs/images from apps like Files, Photos, Mail, and WhatsApp.

Main app bundle ID: com.netcontroll.live
Share Extension bundle ID: com.netcontroll.live.LiveShareExtension
Latest failed build ID: f22dd9be-2858-4ced-8eab-f7f9ac37d971

The archive succeeds: the log shows ShareViewController.m compiling in target LiveShareExtension, the .appex binary being linked, and the extension signed with provisioning profile Live ShareExt Dev.

The failure happens during xcodebuild -exportArchive:

error: exportArchive “LiveShareExtension.appex” requires a provisioning profile with the App Groups feature.
The extension profile includes App Group group.com.netcontroll.live.

Could you check whether VoltBuilder is generating /platforms/ios/exportOptions.plist with provisioning profile mappings for both bundle IDs?

Expected mappings:

com.netcontroll.live → Live Dev 2025-2026
com.netcontroll.live.LiveShareExtension → Live ShareExt Dev

What is the supported VoltBuilder way to provide a separate provisioning profile for an iOS app extension?

Thanks for reporting this issue - we’re looking into it and I’ll get back to you soon.

nothing guys?

You are the first person to request this feature, and I’m working to add configuration to support .appex provisioning profiles. I’m hoping to have those changes in beta later today. Do you have access to our beta testing servers?

i think no.
i am appstudio user too, but i think i am not beta….

If you could please submit another build and provide the build ID, that will help a great deal.

Hi — here is a new build for the Share Extension (.appex) case:

Build ID: 2298e95f-6f2a-4dff-9b72-3397945dbc66
Log: https://apps.volt.build/2298e95f-6f2a-4dff-9b72-3397945dbc66/voltbuilder.log

Archive succeeded; export failed with: exportArchive "LiveShareExtension.appex" requires a provisioning profile with the App Groups feature.

App bundle ID: com.netcontroll.live
Extension bundle ID: com.netcontroll.live.LiveShareExtension
App Group: group.com.netcontroll.live
Extension provisioning profile: Live ShareExt Dev (UUID f1e94567-e48e-4373-928c-9207d86745cf)

I do not currently have access to your beta testing servers — please let me know how to enable that so I can re-test once .appex profile support is available.

Thanks for providing the build ID. We’re having to dig into this to determine a good fix that will work within the Cordova ecosystem. I will response back soon with an update.

I’ve also contacted the AppStudio maintainer about providing access to the beta servers. I’ll let you know what he says.

i can test outside appstudio, i have the same project into external js in Cursor.ia

hi guys, no news?

We’ve just about got beta submissions working in AppStudio. While our AppStudio team has been doing that, I’ve been working on a solution for you. I will keep you updated.

We’ve been trying to sort this out, but I’m getting hung up on what you would expect to be in exportOptions.plist in this case. Do you have an example of a working file? I haven’t been able to actually make this work on our test systems.

Hi,

Thanks for looking into this. Our iOS Share Extension is added at Cordova prepare time by the plugin cordova-plugin-netcontroll-sharefile (not a separate Xcode project checked into the repo). The extension target is LiveShareExtension (.appex), embedded under:

Live.app/PlugIns/LiveShareExtension.appex

We do not commit a standalone exportOptions.plist in the ZIP. On our side, signing is driven by Cordova’s build.json (same information as exportOptions.plistprovisioningProfiles). VoltBuilder/Cordova generates the plist during export.

What we expect in exportOptions.plist

Critical: the archive contains two signed targets with different bundle IDs. Both must appear under provisioningProfiles with manual signing:

Target Bundle ID Dev profile name Release profile name
Main app com.netcontroll.live Live Dev 2025-2026 Live Apple 2025-2026
Share Extension com.netcontroll.live.LiveShareExtension Live ShareExt Dev (distribution profile for extension — see note below)

Team ID: D82EQRU55X
App Group (both targets): group.com.netcontroll.live


Example — development export (this worked on VoltBuilder)

We have a successful debug build with the extension embedded:

  • Build log: 2026-06-10ARCHIVE SUCCEEDED + EXPORT SUCCEEDED

  • Log shows: ValidateEmbeddedBinary ... LiveShareExtension.appex

  • Extension signed with profile UUID f1e94567-e48e-4373-928c-9207d86745cf (Live ShareExt Dev)

<?xml version="1.0" encoding="UTF-8"?>

method

development

teamID

D82EQRU55X

signingStyle

manual

provisioningProfiles

com.netcontroll.live

Live Dev 2025-2026

com.netcontroll.live.LiveShareExtension

Live ShareExt Dev

compileBitcode

uploadSymbols

Equivalent build.json we generate in the ZIP when the plugin is enabled:

{

“ios”: {

“debug”: {

“codeSignIdentity”: “Apple Development”,

“developmentTeam”: “D82EQRU55X”,

“packageType”: “development”,

“provisioningProfile”: {

“com.netcontroll.live”: “Live Dev 2025-2026”,

“com.netcontroll.live.LiveShareExtension”: “Live ShareExt Dev”

}

},

“release”: {

“codeSignIdentity”: “iPhone Distribution”,

“developmentTeam”: “D82EQRU55X”,

“packageType”: “app-store”,

“provisioningProfile”: {

“com.netcontroll.live”: “Live Apple 2025-2026”,

“com.netcontroll.live.LiveShareExtension”: “Live ShareExt Dev”

}

}

}

}


Example — app-store export (expected shape)

<?xml version="1.0" encoding="UTF-8"?>

method

app-store

teamID

D82EQRU55X

signingStyle

manual

provisioningProfiles

com.netcontroll.live

Live Apple 2025-2026

com.netcontroll.live.LiveShareExtension

Live ShareExt Dev

compileBitcode

uploadSymbols

Note: we have only verified development export with the extension so far. For App Store release, the extension likely needs its own App Store / Distribution provisioning profile (not the dev profile). We can add Live ShareExt Apple (or similar) to certificates/ once you confirm the expected profile name for the extension target.


What the plugin does before archive

  1. after_prepare: adds Xcode target LiveShareExtension, copies ShareViewController.m, entitlements with App Group.

  2. before_build / before_compile: patches project.pbxproj for manual signing on the extension:

    • CODE_SIGN_STYLE = Manual

    • CODE_SIGN_ENTITLEMENTS = LiveShareExtension/LiveShareExtension.entitlements

    • PROVISIONING_PROFILE / PROVISIONING_PROFILE_SPECIFIER for extension only (must not leak to App target)

  3. Hook installs all .mobileprovision files from certificates/ into ~/Library/MobileDevice/Provisioning Profiles/ by UUID before build.

Certificates in the ZIP (when share is enabled)

  • ios_development.p12 + development.mobileprovision (app)

  • ios_distribution.p12 + distribution.mobileprovision (app release)

  • Live_ShareExt_Dev.mobileprovision (extension dev — UUID f1e94567-e48e-4373-928c-9207d86745cf)

Common failure we saw

When exportOptions.plist / build.json lists only com.netcontroll.live, archive may succeed but export fails, or extension build fails with:

"LiveShareExtension" requires a provisioning profile

When both bundle IDs are mapped, our debug pipeline completed export with .appex embedded.


We can send a test ZIP with the plugin enabled (debug) if that helps reproduce on your side. Let us know if you prefer the plist generated from build.json or a committed exportOptions.plist at the project root.

Best regards,

hey guys, any news?