Jailbreak + SIM Unlock + Tethering + MMS on iPhone 3G w/ iPhone OS 3.0

!!!WARNING!!! The following post will very likely void your warranty and, quite possibly, completely break your phone. DO NOT DO THIS UNLESS YOU KNOW WHAT YOU’RE DOING!

I recently purchased an iPhone 3G for my upcoming trip to Europe with the express purpose of SIM unlocking it. Moving forward this will be my travel phone. When I get back I plan on purchasing an iPhone 3GS to use here in the US. Specifically, I ended up doing the following:

  1. Jailbreaking the phone with redsn0w.
  2. Doing a SIM unlock with ultrasn0w.
  3. Enabling the tethering option.
  4. Entering the appropriate settings for MMS.


The very first thing you need to do is install redsn0w. This was exceptionally easy to do. If you don’t have the IPSW file you need check out this post for download links for both the iPhone and iPhone 3G. Please note that none of this works on the newly released iPhone 3GS.

Gotcha: One thing I will note here is that I had problems updating Cydia. After rooting around a bit I found out that installing both Cydia and Icy can cause problems so don’t check the Icy box when running redsn0w. Interestingly enough, when I did another jailbreak with redsn0w, without checking Icy, it left Icy installed and fixed my Cydia problems.

SIM Unlock

The SIM unlock was super easy. You can find a great overview here. all  The basic instructions are as follows:

  1. Load up Cydia
  2. Add http://repo666.ultrasn0w.com as a source.
  3. Update your sources.
  4. Search for ultrasn0w.
  5. Install ultrasn0w.
  6. Reboot.


All you have to do for tethering is go to http://help.benm.at/help.php and follow the instructions. This will enable the tethering menu under Settings > General > Network. After that pair your phone and your computer go to the Bluetooth menu on your computer go down to your iPhone 3G’s name and select “Connect to Network”. After this your iPhone should have a blue notification at the top indicating that tethering is on and working.

After I got tethering working speed tests were showing 1065 kbps downstream and about 200 kbps upstream. To me, it felt a bit snappier than my Verizon EVDO. Since I have a MiFi I don’t plan on using this often, but it’s nice to know it’s there.


Supposedly everything I need to have MMS working is enabled on my iPhone, but I can’t seem to actually send or receive an MMS. I assume there’s something I need to enable on my iPhone’s plan, but there was something curious about this that I’ll mention for others who have to edit their Cellular Data Network settings.

Gotcha: Mine was missing! I had no option under Settings > General > Network for Cellular Data Network. Getting this enabled was, without a doubt, a major pain in the ass. I’ll try and outline how I got it all working. PLEASE NOTE THIS IS FOR ADVANCED NERDS ONLY!

  1. Go into Cydia and enable OpenSSH.
  2. Find your IP address in your WiFi settings.
  3. $ ssh root@ (Where is the IP address found in Step #2. Use alpine as the password)
  4. $ scp root@"/System/Library/Carrier\ Bundles/ATT_US.bundle/carrier.plist" ~/Documents/
  5. You should now have a carrier.plist file in your Documents folder. Create a backup of this in case you break anything.
  6. Open it with Property List Editor (Which apparently only comes with XCode as it’s in Developer > Applications > Utilities).
  7. Under Root add a new sibling called AllowEDGEEditing with a Class of Boolean and set it to True.
  8. Under Root add a new sibling called IsMMSUserEditable with a Class of Boolean and set it to True. (You can check out a screenshot of what mine looked like here).
  9. Save your changes with File > Save.
  10. $ scp ~/Documents/carrier.plist root@"/System/Library/Carrier\ Bundles/ATT_US.bundle/carrier.plist"
  11. Go to Settings > General > Network > Cellular Data Network and edit your MMS settings according to http://help.benm.at/help.php.

Despite all of this I can’t seem to receive any MMS from friends nor do I see any MMS features exposed in the iPhone OS 3.0 UI at all. If anyone has any insights into this please let me know. I included this portion, mainly, to help anyone else with a missing Cellular Data Network panel.

UPDATE: Evidently, there’s an application in Cydia named APN Editing that will enable this for you without having to do crazy hacking.


That’s about it. My phone now works on any carrier, has VIM and a terminal application, supports OpenSSH, allows me to tether my MacBook Pro to it and, theoretically, allows MMS. This should make my Europe trip a lot more palatable. The following is a list of links I used to piece together this post and my iPhone hacks:

What would a Social Platform Bill of Rights look like?

Now that I’m getting out of the business of creating and engineering social platforms and into the business of using and building upon social platforms, I’ve been thinking a lot about best practices for all those involved in the development, use and consumption of social platforms.

For the last few years some of my most respected friends and colleagues have been busy building the social web. Blaine Cook, Eran Hammer-Lahav, Kevin Marks, Chris Messina, David Recordon, Dave Morin, Luke Shephard and many, many others have been working tirelessly on the nuts and bolts of what we’re calling Social Platforms (or the Social Web). The nuts and bolts are things like OAuth, OpenID, Activity Streams, LRDD, XRD, etc. and various providers (Twitter, Facebook, MySpace, Google, Six Apart, etc.) are enthusiastically implementing these common technologies.

The problem is that the tools for users to adequately manage their data on these social platforms are, at best, in their infant stages. The engineers that have been building these nuts and bolts, as we engineers often do, have focused mostly on security and technology rather than on best practices, social norms, or how these technologies will change or disrupt human communication.

I think it’s about time we thought about those best practices and social norms. So, here goes, an initial SWAG at what a Social Platform Bill of Rights might look like to the three parties involved (to use the OAuth adjectives, we have Users, Providers and Consumers).


As a provider you’re #1 job is to protect the user. Nobody knows your users better than you and those users have placed a lot of faith and trust in your hands. As a social platform provider you agree to the following terms.

  1. You will provide users with the ability to completely block an application. This means more than simply not allowing them to use that user’s data. It means that application will cease to exist as far as that user is concerned.
  2. Provide users with the ability to group their connections and alter settings based on which group a connection is in (e.g. Nobody from my “Work” group can see tweets that include the #bingedrinking hash tag).
  3. You will allow users to mute another user’s activity while still maintaining the connection.
  4. You will actively police consumers of your users’ data. Set precedence with your consumers and enforce them in your APIs and the tools you give to users.
  5. You will provide fine grain control over exactly what a consumer may or may not do with a user’s data. Furthermore, you will present the user with said options when they grant a consumer access to the user’s data.
  6. You will provider a clear and simple way for both consumers and users to privately contact you.
  7. Don’t be a douchebag.

Consumers (Application Developers)

As a consumer or application developers, you are in the precarious position of having to enhance a user’s experience without upsetting the user, their friends, and the provider. The majority of the burden for being an upstanding citizen on the Social Web falls on your shoulders. As a social platform consumer you agree to the following terms.

  1. Never create relationships between two users without explicit permission from the user initiating the relationship.
  2. All automatic communications sent from your application must be opt-in or confirmed by the user after each action (e.g. Facebook Connect requires a user click “Publish” to confirm publishing to the feed).
  3. Do not build applications that encourage and/or trick users into spamming their friends and followers.
  4. Allow non-users of your application to opt-out of communications originating from your application without having to install said application.
  5. Invitations from one user to another user to use or join your application must not be sent automatically nor should mass invitations be the default option. Make the user choose, carefully, which friends to invite to the service.
  6. Use the messaging frameworks provided by the providers. Do not require or use a user’s email address. Furthermore, do not ever send unsolicited messages.
  7. Do not enable automatic communications after a user has signed up.
  8. If your application spans multiple social platforms, users must be able to manage and control their data and settings from a single location (e.g. A user’s settings work the same on both Facebook and MySpace).
  9. Be up front about what data you plan on using, how you plan on using it and to whom you plan on sharing that data with. This text must be stated in clear, non-legalese, concise written form.
  10. You will provide a clear and simple way for users and providers to privately contact you.
  11. Don’t be a douchebag.


Without you this entire thing would fall into itself in a gigantic implosion. Despite what any provider or consumer says, the data you publish on the web is yours, which means it’s also, at the end of the day, up to you to protect it. As a social web user you agree to the following terms.

  1. Never give write permissions to an unknown consumer.
  2. Be cognizant of how an application will affect your friends and followers.
  3. Never send a mass invite to your friends to use a consumer’s applications.
  4. Do not use one service solely for the purpose of broadcasting posts/activities from another service. Cross posting is bad for the internets (An exception being aggregation sites, such as FriendFeed).
  5. Don’t be a douchebag.


At the end of the day, we’ve really messed up lots of things by bringing real life social norms to the web. The web had its own social norms, which often clash with real life social norms, before we did this. The result is going to include growing pains like sheep tossing, #spymaster, and Foursquare’s horrible decision to turn on automatic tweets after 2.5 months without even so much as notifying their users.

We’ll get it right, eventually. Until then we all need to start thinking about how we affect other people with our actions online, just like real life.

Also, interesting to note how, as is so often in real life, it comes down to not being a douchebag for all this to work just fine.