iPhone Coding: URL Launcher

Given that Springboard–that is, the iPhone home screen–offers just 4 spaces for custom apps at this time, it surprises me how often I'm asked to create a utility to launch a single URL from a SpringBoard icon. Last night, I gave in and did exactly that. I developed a URL Launcher kit that you can download and customize with your own icon and URL. I guess hope springs eternal that we hackers can crack the big SpringBoard-does-not-scroll issue.

To create your own home screen URL launcher, pop over to the Open URL page and download the latest version of the OpenURL package (currently Version 0.1). Then follow these directions:

  1. Unpack the OpenURL tar to retrieve the OpenURL.app bundle.
  2. Inside the OpenURL.app folder, edit the icon.png file to reflect your brand identity. This icon appears on the home SpringBoard screen so make it look pretty and consistent with the overall look of the other icons.
  3. Edit Info.plist with a unique string. It defaults to com.sadun.ReplaceThis. Change it to something different.
  4. Edit url.txt and replace the current URL (http://waiterrant.net, a favorite of mine) with the URL you want to launch.
  5. Rename OpenURL.app to the name you want to appear in SpringBoard, e.g. MyBrand.app.
  6. Repackage the app and distribute.

That's pretty much all it takes. What OpenURL does is look inside the url.txt file for a URL. It reads it in and launches Safari with it.

To make this happen, I use UIApplication's openURL: method, which you can see in the source code here. When called from within an application, it suspends the current program, transfers control to Safari and instructs Safari to open that URL, preferably in a new page.

Note that you cannot use openURL: to bypass the 8 page limit. When 8 pages are open, Safari launches and displays an alert saying "Could not open a new page because there are too many pages open." Tap OK to dismiss."

The biggest programming challenge for this program involves locating and opening the url.txt string without providing a hard-coded path. Fortunately, the iPhone supports the NSBundle class. With it, you can tell it to look in the top-level folder of the bundle for a file named url with a txt extension:

basepath = [[NSBundle mainBundle] pathForResource:@"url" ofType:@"txt" inDirectory:@"/"];

Once read in, use the whitespace and newline NSCharacterSet to trim any extraneous spaces and new lines from the edges of the URL:

urlstring = [[NSString stringWithContentsOfFile:basepath encoding:1 error: error] stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];

Finally, create an NSURL from that string and open it:

baseurl = [[NSURL alloc] initFileURLWithPath:urlstring];
[self openURL:baseurl];

Recommended