Sunday, May 9, 2010

iPhone volume button broken, software fix.

If you don't want to read the whole sorry tale and are only here for the fix, skip to the last section... 


I love my iPhone.  It works, it's easy, and I don't have to dig around tech details if I don't want to.  I've spent enough time fiddling with various machines and OSs to appreciate it when I don't have to do that.

BUT THEN, my volume button broke.  Worse yet, it's the raise volume rocker that will not work. Try as I might, I couldn't raise the volume and it was extremely frustrating to see the volume drop step by step.

There's a volume slider in settings, but that only sets ringer volume.  There's also a volume slider for the built in ipod so controlling music volume was not a problem.  The problem I had is that in-call volume was getting to be very, very faint.  I couldn't hear someone when I was on the phone unless it was extremely quiet.  That's tough on a NYC street.   The lower volume button would mistakenly get depressed and over the course of a few weeks the in-call volume dropped till the phone was virtually useless.

I took the phone to the iPhone store, thinking they may have a fix, or have a headphone with a volume control I could temporarily use to raise the volume.  No dice.  I was basically told I needed to buy a new iPhone.  I found that really ridiculous since I wasn't about to replace a $600 machine because a $0.25 piece of plastic was busted.


Why hardware fixes were not for me...

I hopped on-line and looked around for fixes.  It was apparent that hardware fixes were available, but they would require opening the case, something I wanted to avoid and I knew there had to be a software solution somewhere.  There are vendors out there who will sell you a new volume rocker (for 2G and 3G phones).  Sometimes the fix does not require any new hardware since there's an air-filled plastic bubble behind the button, depressing the button puts into contact leads on either end of the bubble.  Sometimes this bubble needs to be re-inflated or allowed to regain it's shape.  There are a few services charging $50-100 to fix the volume button.  In any case, I knew I wasn't going to mess around with opening the phone, I wanted a software fix.

Trying software fixes, or why SBSettings won't do it...

I heard an app called SBSettings was available on Jailbroken iPhones and it had a volume control that bypassed the physical volume buttons.  So I jailbroke my phone (after resisting for two years) with blackrain.  This was actually interesting since I finally got around to ssh'ing into my iPhone and looking around.  I'd heard all app options on the iPhone were in Property List files with the extension .plist, and I dug around till I found them, but I couldn't edit them on an ssh terminal since they're in binary.

I installed SBSettings and tried the volume slider within it.  It didn't seem to help at all, and I couldn't bring up SBSettings within a call at first.  I figured out that there was an option within SBSettings (More --> Extras Options --> Allow Launch In Call) that let you bring it up within a call.  But, it still didn't affect the in-call volume.

I'd also read about variations of "Volume Boost" app which tried to raise volume universally, but no one definitively said they worked.

I read somewhere that installing the "Volume  Buttons Disable" app in Cydia and then uninstalling it would fix the settings.  Tried that, it didn't work to raise the volume, but it did disable the volume buttons, which could be useful for someone in my situation.

By now I was annoyed and certain that what I needed was a way to edit the .plist files and change the settings once and for all.  This is when I found iFile on Cydia, which allows you to browse the iPhone filesystem and edit files, including .plist (Property List) files.  I edited the appropriate file, and it works, my in-call volume is now set to max and I know how to reset it if I ever accidentally lower it with my one working volume button.

Rant...

PS. If apple ever creates a volume slider within the phone application on the iPhone I would be very happy to forget all about this.  But till that rather obvious, simple and elegant solution is made available, this kludgy workaround stays.  The pity is that apple design clearly understands the fragility of moving parts, especially in a portable device (this is why they have the most awesome full solid-state disk available on laptops).  So why force us through all this rubbish for something that should be simple.  Just give us software or touch-screen alternatives for all the buttons on the iPhone.  Perhaps this plays into planned obsolescence.


The fix...

These are instructions to manually change your volume properties file on the iPhone.  They're not detailed, because you should really know what you're doing if you want to mess around like this.  They worked for my first-gen iPhone running firmware 3.1.2, I believe it's the same for all other hardware versions.

  • Jailbreak your iphone (I used blackra1n)
  • Get Cydia 
  • Install iFile with Cydia  
  • Edit com.apple.celestial.plist in /var/mobile/Library/Preferences/  The file is XML, relatively easy to figure out, you can change all the volume settings to 1, which is the max.  The increments appear to be in 1/8th or 1/16, from 0-1 so I would use .8125, .75 etc. if looking for fine control over the settings.
  • respring for the settings to take effect (use SBSettings)
The settings are retained if you reboot or sync.