Prerequisites
Install Xcode 13+
Download from the Mac App StoreFor visionOS: Xcode 15+ with visionOS SDK
Set up Apple Developer account
Required for device testing and distribution:
- Enroll at developer.apple.com
- Add your Apple ID in Xcode > Settings > Accounts
Project Structure
AUv3 Architecture
On iOS, AUv3 plugins are embedded inside a standalone app:You must run the standalone app at least once to register the AUv3 with iOS. After that, the plugin appears in GarageBand, Cubasis, and other AUv3 hosts.
Building with Xcode
Device vs Simulator
iOS Device
Destination: Any iOS DeviceRequires code signing and provisioning profile
iOS Simulator
Destination: iPhone/iPad SimulatorNo code signing required, faster builds
Building in Xcode
Select scheme and destination
- Scheme: iOS-APP (builds both app and AUv3)
- Destination: Choose device or simulator
Configure signing
Project Settings > Signing & Capabilities
- Team: Select your Apple Developer team
- Bundle Identifier: Set unique ID (e.g.,
com.yourcompany.myplugin) - Automatically manage signing: Enable for automatic provisioning
Building from Command Line
Platform Variants
iOS
Standard iPhone and iPad support.- Minimum deployment: iOS 14 (configurable)
- SDK:
iphoneos(device),iphonesimulator(simulator) - Architecture:
arm64(device),arm64 x86_64(simulator)
visionOS
Apple Vision Pro support.- Minimum deployment: visionOS 1.0
- SDK:
xros(device),xrsimulator(simulator) - Requires: Xcode 15+
visionOS builds use the same project as iOS. Xcode automatically adapts the UI for spatial computing.
Build Settings
Deployment Target (from common-ios.xcconfig)
Architecture Settings
Preprocessor Defines
Code Signing
Automatic Signing (Recommended)
Enable automatic signing
Project Settings > Signing & Capabilities
- Enable Automatically manage signing
- Select your Team
Manual Signing
For advanced control:Create App ID
- Go to developer.apple.com
- Identifiers > App IDs > +
- Register
com.yourcompany.myplugin
Create provisioning profile
- Profiles > +
- Choose iOS App Development or App Store
- Select your App ID and certificates
- Download and install profile
App Capabilities (Entitlements)
EditMyPlugin-iOS.entitlements:
App Groups allow the app and AUv3 extension to share data (presets, user settings, etc.).
Testing AUv3 Plugins
Testing in GarageBand
Add plugin
- Create an instrument/audio track
- Tap the track controls
- Plug-ins & EQ > Audio Unit Extensions
- Find your plugin in the list
Testing in AUv3 Host App
Use a dedicated test host like:Debugging
Debugging the Standalone App
Debugging the AUv3 Extension
AUv3 runs in a separate process from the host app.Attach debugger to extension
In Xcode:
- Debug > Attach to Process by PID or Name
- Enter:
MyPlugin(your extension name) - Click Attach
Console Logging
UseNSLog for debugging output visible in Xcode console:
Build Output
Built apps are placed in Xcode’s derived data folder:Distribution
TestFlight (Beta Testing)
Upload to App Store Connect
- Window > Organizer
- Select your archive
- Distribute App > App Store Connect
- Follow the wizard to upload
Configure in App Store Connect
- Go to appstoreconnect.apple.com
- My Apps > Your App > TestFlight
- Add internal/external testers
- Distribute build
App Store Release
Prepare app metadata
In App Store Connect:
- App name and description
- Screenshots (required for each device size)
- App icon (1024x1024)
- Privacy policy URL
Troubleshooting
AUv3 not appearing in GarageBand
AUv3 not appearing in GarageBand
Cause: Extension not registered or signing issueSolution:
- Run standalone app at least once
- Ensure both app and extension are code-signed
- Check app is installed on same device you’re testing
- Restart GarageBand
- Check Console.app for errors
Code signing error: No profiles found
Code signing error: No profiles found
Cause: Provisioning profile missing or expiredSolution:
- Enable Automatically manage signing
- Or create/download provisioning profile manually
- Ensure Bundle ID matches App ID
- Check team membership is active
App crashes on launch
App crashes on launch
Cause: Missing frameworks or entitlementsSolution:
- Check Console.app for crash logs
- Verify all frameworks are embedded
- Ensure entitlements are correct (App Groups, etc.)
- Test in simulator first for easier debugging
Audio glitches or dropouts
Audio glitches or dropouts
Cause: ProcessBlock too heavy for real-time audioSolution:
- Profile with Instruments (Time Profiler)
- Reduce DSP complexity
- Avoid allocations in ProcessBlock
- Check buffer size in host settings
- Test on actual device (not simulator)
UI not appearing in AUv3 host
UI not appearing in AUv3 host
Cause: IGraphics initialization or size issueSolution:
- Verify UI initializes correctly in standalone app
- Check constraints are set properly
- Ensure
IGraphicsis created in plugin constructor - Test with different AUv3 hosts (AUM, GarageBand, etc.)
CMake Build (Alternative)
iOS projects can also be built with CMake:Next Steps
macOS Build
Build desktop plugins for macOS
Code Signing
Advanced signing and provisioning
App Store
Publishing to the App Store
IGraphics
Building custom UIs