Bundling JUCE-based AUv3 with non-JUCE app

Is there any way to take an Audio Unit (AUv3) for iOS made with JUCE and bundle it with an app that was not made with JUCE? The reason why I’m asking is that I have an app based on the Audiobus SDK and people are requesting an update of this app with an AUv3. If the update was an app built with JUCE, it would loose the Audiobus compatibility and I’d have a lot of disgruntled users (probably even more than I already have because I didn’t update the existing app with an AUv3 plugin).

Yes, that’s easy. An AUv3 is just an appex bundle sitting inside an iOS app bundle. Both bundles are completely independent so you can simply copy the AUv3 appex bundle and put it into any parent bundle. The only thing you need to take care of is the bundle-ids: the appex needs to be a sub bundle-id of the parent app.

To see what I mean, build the JUCE AUv3 example and right-click on the resulting app bundle to show it’s bundle contents:

Inside you can see the app extension in the plug-ins folder:

1 Like

Thanks a lot for the explanation! So if I understood that right, what I need to do is the following:

  1. Update the version number of my “parent app” (to be able to submit to the App Store)
  2. Adapt my AUv3 project to match the bundle ID and version/build number
  3. Compile the AUv3 app extension
  4. Archive the parent app
  5. Copy the app extension into the parent app archive
  6. Submit the modified archive to the App Store

Is that all? No need to somehow register the app extension in the parent app? No complaint by XCode if you mess with its app archives?

You probably meant this but just to be clear: the AUv3 bundle-id needs to be a sub-bundle id of the parent app. If you are using JUCE to build the AUv3 then the .jucer file of the plug-in needs to have the exact same bundle-id as the parent app as JUCE automatically adds .$(PRODUCT_NAME)AUv3 to the end of the bundle-id of the AUv3 and therefore the AUv3 will be a sub-bundle id of the parent app.

I think you may get problems with signing if you do it like this. The following will definitely work:

  1. Open the xcode project of the parent app
  2. Drag your AUv3 bundle into your project but make sure to not add it to any target:

  3. Add a copy build phase step to your project:
  4. Ensure that the destination folder is “PlugIns” and then drag the AUv3 bundle from xcode file list into the “Add Files Here” area:
  5. Now archive your parent app.
2 Likes

Thanks a lot for your precise explanation (btw, great annotated pictures, was very easy to follow what you did)! I’ve now submitted my first “hybrid” app with both Audiobus and an AUv3: https://itunes.apple.com/us/app/virtualroom-pro/id1215321261
After the update it will have an AUv3 based on this binaural app made with JUCE: https://itunes.apple.com/us/app/virtualroom-au/id1285558162