Prerequisites
- A Mac running macOS with Xcode 16.0+ (the SDK is built with Swift 6.0.3)
- iOS 14.0+ as deployment target
- Xcodegen (
brew install xcodegen) — the starter app generates its .xcodeproj from project.yml
- An Apple ID for code signing onto a physical device. A free Apple ID works for local testing; TestFlight or App Store release (Step 6) requires the paid Apple Developer Program
- A physical iOS device — the SDK frameworks are
arm64-only, so iOS Simulator is not supported
- A Plaud hardware device for end-to-end testing
- A Plaud developer account (request access at dev.plaud.ai) to receive your Client ID, Secret Key, and API Key
- A backend service that can mint per-user access tokens for your users — see Overview for the exchange flow
- Brand assets: App name, logo (1024×1024px), primary color hex, splash image
Steps
1. Request access & get credentials
Visit dev.plaud.ai and fill out the contact form. Once your request is reviewed, you’ll receive setup instructions and access to the developer console.
Create an application to receive your Client ID and Secret Key. The Secret Key is shown once only — copy it to a password manager immediately.
2. Clone the starter app and generate the Xcode project
git clone https://github.com/Plaud-AI/plaud-template-app
cd plaud-template-app/plaud-template-app/ios
xcodegen generate
The xcodegen generate step is required — PlaudTemplateApp.xcodeproj does not exist in source control and is built from project.yml.
See Starter App for the full setup options including a Full Starter App or SDK Only path.
Open PartnerConfig.xcconfig and set three values:
# Required for SDK initialization
USER_ACCESS_TOKEN = your-per-user-jwt
# Required for the Transcription API
PLAUD_CLIENT_ID = your-client-id
PLAUD_API_KEY = your-api-key
For local development, create PartnerConfig.local.xcconfig alongside it with your real values — it’s gitignored and overrides the placeholders.
The USER_ACCESS_TOKEN is the per-user JWT your backend mints by calling POST /open/partner/users/access-token on platform-<region>.plaud.ai. See Overview for the full exchange flow. The Secret Key stays on your backend — never ship it with the app.
Then open project.yml and change bundleIdPrefix: com.plaud to your own reverse-DNS prefix (e.g., com.acme); Xcode auto-assigns your Development Team on first build.
client_id, secret_key, and api_key are issued per region (currently us and jp; eu and sg coming soon). Your backend must call the matching platform-<region>.plaud.ai host when minting the per-user access token — credentials issued for one region will not authenticate against another.
4. Apply branding
Four places control the entire visual identity:
| Asset | Location | How to change |
|---|
| App name | project.yml → name: | Renaming the target updates CFBundleName via $(PRODUCT_NAME). For a distinct Home Screen label, also add CFBundleDisplayName to Info.plist. Re-run xcodegen generate after editing. |
| App icon | PlaudTemplateApp/Resources/Assets.xcassets/AppIcon.appiconset/ | Drop in your 1024×1024 icon set. |
| Theme colors | PlaudTemplateApp/Common/PlaudTheme.swift | Edit the UIColor(hex:) constants. The template ships intentionally monochrome (#1f1f1f labels, #f9f9f9 background); add a brand-color constant here and reference it from your views. |
| Launch screen | PlaudTemplateApp/Info.plist → UILaunchScreen dict | Change UIColorName to your brand color, or replace the dict with a UILaunchStoryboardName pointing at a storyboard you add. |
5. Run & test with a real device
open PlaudTemplateApp.xcodeproj # then ⌘R in Xcode
Connect a physical iPhone over USB and select it as the run destination. Simulator is not supported — the SDK frameworks are arm64-only.
Verify: app launches, device pairs, recording syncs, transcript appears.
6. Release
iOS App Store
- Bluetooth usage description
- Privacy manifest (
PrivacyInfo.xcprivacy)
- Privacy policy placeholder