Using a PAYG standard SIM in an iPad 3G

May 5, 2010

I took delivery of my iPad 3G today, shipped over from the US via Bundlebox *. I love it to bits so far but as there are no UK operators offering 3G services for the iPad in the UK the experience is a little incomplete.

I was mulling this over a few days ago, while frantically refreshing my shipping status, when I came across a thread stating that there was no real difference between a Micro SIM and a standard SIM card. Much as the old style SIM cards were the same size as credit cards the SIM itself stays around the SIM size but there’s just less plastic! They advised that it should be possible to trim an existing SIM card and put it into an iPad.

I was keen to try this out but didn’t want to risk cutting up my iPhone SIM or having to sign up for an expensive PAYG service that includes a wireless broadband card. It was then that I chanced upon these Vodafone SIM cards on eBay

They’re Vodafone PAYG SIMs for Broadband Modems which contain £15 of preloaded credit. That translates to 1 gigabyte of data allowance and best of all, the data doesn’t expire! The current trend of PAYG plans is to expire credit after a month, see the AT&T iPad 250meg plan, so this is particularly useful. I’m sure the UK plans will follow suit. Also note that the AT&T plan in the US is $14.99 for 250meg/month. If the UK plans match this then that works out 4x as expensive as the eBay SIMs.

The SIM was through my letterbox when I got home today so I simply popped the AT&T SIM out of the iPad, placed it over the contacts in the Vodafone SIM, used a pair of scissors to trim around it and then placed it back in the SIM tray. It took a gentle push to get it in as the cut was slightly off but when I pushed it into the iPad it slid in smoothly.

After that, the iPad showed a connection to Vodafone on the 3G network but alas it couldn’t download anything. I needed to set up the APN. As always, Google provides and this is the information you’ll need if using one of the Vodafone SIMs:

APN: pp.internet
Username: web
Password: web

Once those were entered the data connection sprung into life and I was able to access the web as usual. No need to register with Vodafone!

So what now? The eBay supplier didn’t tell me the details of the account the SIM is tied to or the IMSI and I doubt he even has those details so once the 1gig of credit is used up I think the SIM is useless. No matter! I’ve ordered another few to last me over the coming months until I can work out the best course of action.

Will Vodafone close this loophole? Possibly. They can work out from the IMEI that it’s an iPad, not a Broadband modem. Will they? Noone knows. It’s a fair bit of administration and this may not be a particularly widespread hack so it might not be worth their time. (Trust me, I work in Telecoms, I know how long it takes telcos to get things like this sorted. I once waited 8 weeks for a customer to open Port 80 in their firewall).

So it’s maybe not a long term solution but until we see what plans the operators are offering it’s certainly the best one I can find. In the long term it may be better to go with non iPad plans and just reuse the SIM.

* (Note, Bundlebox are having problems with Apple cancelling their iPad shipments. By all means give them a try but beware your iPad order may be cancelled. For other items, they’re great as well)


MAAttachedWindow As A Non Activating Panel

February 7, 2010

I’m currently working on an application that runs in a dual headless/GUI model.

The main interaction point is a MAAttachedWindow (hattip to Matt Gemmell) attached to a NSStatusItem that lives in the Menu Bar. The user can invoke this manually or it becomes active when they use the Mac OS X Services contextual menu on some text.

They can however open the application itself for extra functionality, using the dock icon/application switcher. (I do offer the ability to disable this and use it purely through the NSStatusItem, but that’s not relevant to this post). This makes running purely headless, using LSUIElement not an option.

So, my MAAttachedWindow contains a couple of NSTextFields and NSDatePickers, used to present values to the user for copying/editing. The problem I was having was that when the application is invokved the first text field would focus but as the application itself wasn’t in the foreground it wouldn’t accept user input. The user would have to click on the item to focus and this caused the application come to the foreground.

I find this confusing, in this mode of operation I want the fact that I’m running as an application rather than a built in OSX utility to be transparent, the application title shouldn’t change, the menus shouldn’t change, everything should remain as is apart from this dropdown.

The behaviour I want is that the MAAttachedWindow becomes frontmost, accepts keyboard input, but doesn’t switch application context unless the user specifically opens it from the doc, application switcher or the menu option in the status bar.

A screenshot would be useful at this point, right? The application is totally not finished, the UI is a mess but here’s one anyway.

Epoch Helper Screenshot

Yes, it’s a small utility that allows you to easily convert unix timestamps to human readable times and vice versa. It integrates with the Services menu so that if you have a timestamp selected you can invoke it with a keypress and see the results. The whole thing should be very focused around identifying a timestamp in a document you’re working on, selecting it, seeing the translation and dismissing it. Alternatively you can use the date pickers to select a new time and get the timestamp for that. This should all be possible with key presses without leaving the current application, thus allowing you to easily paste the results back in.

So, the solution is to make MAAttachedWindow an NSPanel and tell it to act as a Non Activating Panel. Non activating panels can become key without activating the application that owns them.

Matt’s code already takes care of the utility of the two style masks I usually use when creating floating panels, (NSUtilityWindowMask
to create as a floating window and NSHUDWindowMask to creat as a transparent panel, sometimes called a “heads-up display”).

So the trick is simply to use the style mask of

No effect on appearance, but owning application is not necessarily active when this window is the key window.

We also need to ensure it always displays on top of other applications, we do this by setting its display level sufficiently high.

To make the changes;

1) In MAAttachedWindow.h change the parent type from NSWindow to NSPanel.

2) In MAAttachedWindow.m

Go to
- (MAAttachedWindow *)initWithView:(NSView *)view
inWindow:(NSWindow *)window

and in the
if ((self = [super initWithContentRect:contentRect
styleMask: NSBorderlessWindowMask
defer:NO])) {

call set NSBorderlessWindowMask to be NSNonactivatingPanelMask

3) Beneath that set [self setLevel:NSMainMenuWindowLevel+1];

4) ???

5) Profit

That’s it. You now have a NSPanel that floats above all Windows and when invoked gives focus to the first responder but doesn’t bring the applicatoin itself to the foreground. Perfect for helper services that live in the menubar.

I’ll be releasing the app itself as open source in the next couple of weeks so watch this space.


Giving Something Back

January 31, 2010

I’m currently on the train down to Reading to attend NSConference, a small, community oriented conference aimed at independent developers for the Mac, iPhone and (presumably now) the iPad.

In many ways it’s fitting that I’m writing this, my first post on this blog, on the way to the conference as the main driver for starting this blog is the same reason I’m attending NSConference:

I want to be less of a bystander in the Mac/iPhone developer community and contribute more to that which has given so much to me.