Transfer ringtones to iPhone over USB — no iTunes needed.
Features
- Drag & drop any audio file — mp3, wav, flac, aac, m4a, mp4, ogg, and more
- Auto-converts to proper iPhone ringtone format (44100 Hz AAC with iTunes metadata)
- Properly registered — writes a real
Ringtones.plistentry (GUID, name, duration), so iOS lists the tone under its own name rather than as a raw filename - Manage ringtones on device — browse, play, rename, download, and delete
- Custom naming — set the ringtone name before uploading
- No iTunes, no jailbreak, no developer mode — works with any iPhone over USB
Download
Grab the latest release from the Releases page.
- macOS: Download the
.dmgfile
The app is unsigned. Releases are not signed with an Apple Developer ID, so macOS will refuse to open it on a double-click ("Apple could not verify Tonedrop is free of malware"). To run it anyway: drag the app to
/Applications, then right-click it → Open → Open, which prompts once and remembers the choice. From a terminal,xattr -dr com.apple.quarantine /Applications/Tonedrop.appdoes the same thing.This is Gatekeeper telling you the truth — the build genuinely isn't signed by anyone. If you'd rather not take that on faith, build it yourself from source with
npm run dist:mac; it's the same output.
Platform support. Released builds target macOS. The device transport already speaks usbmux on both platforms (
/var/run/usbmuxdon macOS, TCP 27015 on Windows, which Apple Mobile Device Support provides). The remaining gap is audio conversion: it shells out to macOS'safconvert/afinfo, so a Windows build needs a bundled encoder. Tracked in issue #1.
Requirements
- macOS (Windows planned — see above)
- iPhone connected via USB data cable
- "Trust This Computer" accepted on the iPhone (one-time)
Usage
- Connect your iPhone via USB
- Open Tonedrop — your device should appear with a green dot
- Drop audio files onto the app (or click to browse)
- Edit the ringtone name if you want
- Click Transfer
- Click Restart iPhone when prompted — iOS requires a reboot to load new ringtones
- After restart, go to Settings > Sounds & Haptics > Ringtone on your iPhone
Managing existing ringtones
Click the On Device tab to:
- Preview ringtones with the play button
- Select and Save to Mac to download them
- Select and Delete to remove them
- Double-click a name to rename it
How it works
Tonedrop communicates directly with your iPhone over USB using the same protocols as iTunes/Finder:
- usbmux — discovers connected devices
- lockdown — authenticates using the pairing record from "Trust This Computer"
- AFC (Apple File Conduit) — reads/writes files on the device
- Ringtones.plist — registers ringtones with proper GUID, name, and duration
- Diagnostics relay — restarts the device to load new ringtones
Building from source
npm install npm start # Run tests npm test # Build a macOS app npm run dist:mac
Releasing (maintainers)
Pushing a v* tag triggers the GitHub Actions release workflow. For a
distributable build that opens without Gatekeeper warnings, the app must be
signed with an Apple Developer ID and notarized. Configure these repository
secrets:
| Secret | Description |
|---|---|
CSC_LINK |
Base64-encoded Developer ID Application .p12 certificate |
CSC_KEY_PASSWORD |
Password for the .p12 |
APPLE_ID |
Apple ID used for notarization |
APPLE_APP_SPECIFIC_PASSWORD |
App-specific password for that Apple ID |
APPLE_TEAM_ID |
Apple Developer Team ID |
When these are present the workflow signs and notarizes automatically. They are not currently configured, so published builds are unsigned — see the note in Download.
License
MIT — see LICENSE.