Roll your own Ringtones from 1.1.1 Jail

This is the process for adding ringtones to your iPhone running 1.1.1 without jailbreaking the phone. It is no longer necessary as you can create ringtones in GarageBand.

THE INFORMATION IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE INFORMATION ON THIS PAGE OR THE USE OR OTHER RELATED PAGES AND LINKS.

If you really want to do this is a safe and semi-supported way, go buy iToner. Its an excellent, well-written application by the fine developers at Ambrosia.

Things you’ll need:

  1. Ringtonator – turns your m4a files into m4r files. (You’ll need both)
  2. iPhuc – you’ll need this to add files to your phone, but you will not need to jailbreak.
  3. A text editor or plist editor

Step 1:

Prepare your ringtones. I’ve only tried this with m4a files. Your mileage may vary.

First, run your ringtone trough Ringtonator. You should now have both an m4a version, and an m4r version of your ringtone.

Step 2

Load up iPhuc and add BOTH files (m4a and m4r) files to the /iTunes_Control/Ringtones directory. (using the putfile command).

Step 3

You need to get the Ringtones.plist file from /iTunes_Control/iTunes using iPhuc and the getfile command.

Save a copy of the file in case your make a mistake!

Then you’ll need to edit the plist in the plist editor or your favorite text editor. You need to add two entries to the”Ringtones” dictionary, one for the m4a file and one for the m4r file. I make up the GUID myself, but I’m sure there’s a better way to do this. However, note that the GUID is the same for both the m4a and m4r files. You can also edit the name key.

Here’s an example Ringtones.plist:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Ringtones</key>
<dict>
<key>CTU Ringer.m4r</key>
<dict>
<key>GUID</key>
<string>DEADBEEFFEEDFACE</string>
<key>Name</key>
<string>CTU Ringer</string>
</dict>
<key>CTU Ringer.m4a</key>
<dict>
<key>GUID</key>
<string>DEADBEEFFEEDFACE</string>
<key>Name</key>
<string>CTU Ringer</string>
</dict>
</dict>
</dict>
</plist>


Put your modified version of your Ringtones.plist file back on your iPhone in the /iTunes_Control/iTunes directory.

That’s it. Your ringtone should appear in your ringtones list.

Things to do

  • Does this really work, or is there something anomalous I did to make it work that isn’t documented here?
  • Find out why both m4a and m4r versions are needed.
  • Find out how the GUIDs are generated in reality.
  • How iTunes behaves when syncing (so far I have ringtone syncing off and it presists)