Apple OS Support Cycles

Apple recently announced iOS 6, an awesome upgrade to their mobile operating system. But the WWDC ’12 announcement also revealed that iOS 6 would not be supported on the original iPad, which came out in 2010. The original iPad has significant technical limitations, and it is quite reasonable that Apple no longer wants to support the device. But two years is a terrible support cycle, and it was Apple’s decision to only put 256 MB of RAM in the thing, not the customer’s.

 

Since this news, I have been grumbling quite a bit about Apple’s hardware support. It didn’t help that a few weeks later, MobileMe shut down, and my mom could no longer sync her contacts and calendars between her Core Duo iMac and her iPhone 4. Her iMac still runs surprisingly well for an older computer – it’s actually quite fast and capable for all that she needs. But it can only run Mac OS X 10.6 Snow Leopard, and is therefore incompatible with iCloud. At first, I was quite frustrated. I felt like Apple’s support cycles were getting worse and worse. But I later found out that her Mac is from 2006, and decided that a six-year support cycle actually isn’t so bad, after all. Curious about the history of Apple’s support cycle, I decided to do some research.

 

I focused my investigation on the recent stuff, but I did notice that the Macintosh Plus, released in 1986, could run the latest system software until 1997 (!) when Mac OS 7.6 (the first version branded as “Mac OS”) was released. That’s 11 years of support. The original iMac G3 could run the latest OS from its release in 1998 to the debut of Tiger in 2005 (7 years), and Mac desktops/higher end laptops are currently on a pretty good run.
iMac:
Year Released
Last OS Supported
Years of Support
1998
Panther
7
1999
Panther
6
2000
Tiger
7
2001
Tiger
6
2002
Tiger
5
2003
Leopard
6
2004
Leopard
5
2005
Leopard
4
2006
Snow Leopard
5
2007
?
6+
2008
?
5+
2009
?
?

 

iBook/MacBook (low end laptops):

 

Year Released
Last OS Supported (Laptop)
Years of Support
1998
Jaguar
5
1999
Panther
6
2000
Tiger
7
2001
Tiger
6
2002
Tiger
5
2003
Tiger
4
2004
Leopard
5
2005
Leopard
4
2006
Snow Leopard
5
2007
Lion
5
2008
Lion
4
2009
?
4+

 

iPhone/iPad:
Year Released
Device
Last OS Supported
Years of Support
2007
iPhone
3.x
3
2008
iPhone 3G
4.2.1
3.5
2009
iPhone 3GS
?
3+
2010
iPhone 4
?
?
2010
iPad
5.x
2
2011
iPad 2
?
?
2011
iPhone 4S
?
?

Popularity: 1% [?]

Posted in iPhone, Mac | 14 Comments

sqlite2ical

This blog is hopelessly out of date, but maybe this is an excuse to start posting again.

Have you ever lost part of your calendar but still had a sqlitedb version from an iPhone backup? If so, sqlite2ical can help you. Grab the source from https://github.com/AriX/sqlite2ical or download the application here.

If you have the iPhone backup but not the sqlitedb file, use the iPhone Backup Extractor to find Calendar.sqlitedb, and then run it through sqlite2ical.

Enjoy!

Popularity: 1% [?]

Posted in Code | 4 Comments

Latest Project

As was mentioned in a Wall Street Journal article focusing on my work with iPods and iPhones, for the past number of months, my friend Ben Feldman and I have been working on a subscription web service currently called DeskConnect. Compatible with both Windows and Macs, it allows you to remotely access a computer’s screen and its files from anywhere you have Internet access. The service will launch with complimentary iPhone and Android apps that will also allow you to use your smartphone to access computer and its files, and will have a standard mobile web interface for those using other phones to access the service as well.

Right now the product is still in development, so we’re not at the point where more than the core features of the application can safely be divulged, but everything is coming along nicely and we’re anticipating a launch this fall.

We will, however, need additional testers as DeskConnect continues to progress. So if you are interested (both Windows and Mac users), please sign up at getdeskconnect.com and we will try to fit you into our testing program (no guarantees, since we aren’t quite sure how many new prospective testers will apply). Obviously we won’t share your email address with anyone.

Thanks for all of the kind responses to the Wall Street Journal article, by the way. I’d like to again thank Yukari for the opportunity; what an experience!

Popularity: 6% [?]

Posted in DeskConnect | 9 Comments

iPhone 3Gs Jailbreak: Purplera1n

The amazing Geohot has recently released his purplera1n iPhone 3Gs jailbreak! Check it out on his blog, or head straight to the website to grab your own copy.

Anyway, I had the privilege of working with him and westbaer (and the rest of the chronic dev team) on the Mac version of purplera1n, which we released a few hours ago. It works very well, and requires no interaction with the iPhone at all! Even better, you can use the iPhone Dev Team’s ultrasn0w for an iPhone 3Gs unlock!

So, enjoy your jailbreak, and if you appreciated my work on the Mac version, feel free to donate!

By the way, we’re working on a new interface for it… The original interface looked like this, but we wanted it to be consistent across platforms ;)

Popularity: 21% [?]

Posted in iPhone 3.0, Jailbreak | 21 Comments

Get 3.0 for the iPod touch Free

If you’d like to download 3.0 for the iPod touch without the $9.95 fee, I just wrote a quick script that generates a URL to the 3.0 IPSW for the iPod touch for your downloading pleasure. Apple, if you don’t like this, feel free to ask me to take it down.

1st Generation: http://ariweinstein.com/free3.0.php?gen=1

2nd Generation: http://ariweinstein.com/free3.0.php?gen=2

UPDATED for the new 3.1 update.

Popularity: 4% [?]

Posted in iPhone, iPhone 3.0, iPod touch | 10 Comments

iPhoneTether For Easy iPhone 3.0 Tethering! (Mac only) [UPDATE]

Hey everyone! I spent most of my night working on this iPhoneTether program that allows you to tether your iPhone (probably 3G only) to a computer in order to receive internet access through your phone’s connection! This is only for those who have installed iPhone OS 3.0, and works on most carriers (for example, not T-mobile Austria, apparently, unless you have the IPCC for it). It connects to Apple’s iTunes version server, and allows you to choose a carrier that it will automatically modify to allow tethering. Thanks to Erica Sadun et al (not sure who exactly was involved) for coming up with this method, and of course Steven Troughton Smith, who discovered this. Without further ado, here is the application.

http://ariweinstein.com/iPhoneTether.zip

If you liked this, feel free to donate to me at the iJailBreak site.

UPDATE 6/17/09: Since 3.0 is out to the public now, people are actually starting to use this. However, in the final iTunes, before using iPhoneTether, you will have to run the Terminal command “defaults write com.apple.iTunes carrier-testing -bool TRUE”. I will release a new version of iPhoneTether shortly that does this automagically for you. Also, a few days ago, I updated iPhoneTether to a new version that has an “Other IPCC…” button to allow you to specify your own carrier file. Good luck, and spread the word!

UPDATE 2: iPhoneTether has been updated to 1.1 with full compatability for iTunes 8.2 and 3.0 final, no Terminal hackery needed.

UPDATE 3: iPhoneTether does not currently work on iPhone OS 3.1.

Popularity: 100% [?]

Posted in iPhone 3.0 | Tagged , , , , | 82 Comments

iPhone UIWebView Estimated Progress

In the iPhone SDK, web views are accomplished using UIKit’s UIWebView class. Instead of allowing you direct access to WebKit’s WebView class, UIWebView handles everything for you and allows some control of the view. One thing Apple left out in UIWebView, for reasons unknown, is progress. If you want to have a progress bar in your web view so people know that something’s actually happening (in addition to the web activity indicator in the status bar), this is basically the only way to do it.

NOTE: This method DOES use what Apple considers to be a private framework. That said, there are a few applications in the App Store using this, and this method is slightly unlikely to change, because WebView is not an iPhone-specific thing, and if Apple changed it, tons of Mac applications would no longer work as well.

NOTE 2: In this post, I will talk about two classes. UIWebView, and WebView. These are NOT the same class. UIWebView is the public, official web view, and WebView is the private, internal WebKit web view. WebView has the estimated progress, but we want to use UIWebView as the main view so we don’t have to reinvent the wheel in a lot of ways.

So, say you have a UIWebView called officialSDKWebView. We want to extract the main WebView from that to get the progress. To do so, we have to use another internal class called UIWebDocumentView. From there, we can get the WebView easily. Here’s the code:


UIWebDocumentView *documentView = [officialSDKWebView _documentView];
WebView *coreWebView = [documentView webView];

Well, that was pretty easy, huh? But let’s make it easier, and do it in one line:

WebView *coreWebView = [[officialSDKWebView _documentView] webView];

Of course, the compiler won’t like this, as we don’t have header files… I uploaded the necessary header files to reduce the error count to zero (as well as some useless stuff), and you can download it here. Add these with

#import "WebView.h"
#import "UIWebDocumentView.h"
in your header file.
But wait, the compiler still isn’t happy… So we need to add two frameworks to the project. You can do this by right-clicking Frameworks in the left pane of Xcode, and choosing Add -> Existing Frameworks. Navigate to /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/System/
Library/PrivateFrameworks/
and then add WebKit.framework and WebCore.framework.
Of course, this is completely useless if we can’t figure out when the progress has changed, but we can fix that as well.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(progressEstimateChanged:) name:WebViewProgressEstimateChangedNotification object:coreWebView];

We’re now subscribed to progress change events, and it will run the method progressEstimateChanged: as soon as there is an update. So, let’s write a progressEstimateChanged method.


- (void)progressEstimateChanged:(NSNotification*)theNotification {
	// You can get the progress as a float with
	// [[theNotification object] estimatedProgress], and then you
	// can set that to a UIProgressView if you'd like.
	// theProgressView is just an example of what you could do.

	[theProgressView setProgress:[[theNotification object] estimatedProgress]];
	if ((int)[[theNotification object] estimatedProgress] == 1) {
		theProgressView.hidden = TRUE;
		// Hide the progress view. This is optional, but depending on where
		// you put it, this may be a good idea.
		// If you wanted to do this, you'd
		// have to set theProgressView to visible in your
		// webViewDidStartLoad delegate method,
		// see Apple's UIWebView documentation.
	}
}

And, there we are! That should do it. If you have any questions, or if I made a mistake in my code, feel free to make a comment. If you need an example, I’ll be posting an Xcode project probably at some point.

Popularity: 27% [?]

Posted in iPhone SDK | Tagged , , , , , , | 35 Comments

iPhoneLinux on the Mac

INFO: This post is now slightly irrelevant and does not work very well, so I wouldn’t recommend using it.

DISCLAIMER: This is recommended for advanced users only. It is probably a bad idea to follow this tutorial if you’ve never opened Terminal before. That being said, this should be relatively easy for most power users.

DISCLAIMER²: Neither I nor the iPhoneLinux team are responsible for any damage to your iPhone through the use of this tutorial. The tutorial does, however, contain a guide on how to back up your NOR just in case something does go horribly wrong (which is extremely unlikely).

The iPhoneLinux team has recently come up with an impressive demo of Linux on the iPhone. Unfortunately, the binaries and instructions included are Linux only. When it came out, I was able to modify the client slightly to allow OpeniBoot to be installed and used from a Mac, and as a bonus I removed the root requirement. Anyway, I just compiled the most recent client build and I’d like to share it with you! I have not yet been able to build OpeniBoot myself, which means we’re stuck with a slightly old build (no file system writing) UPDATE: I was just able to build OpeniBoot myself, but the client cannot seem to connect to it… we’ll have to stick to this for now.

Soon-To-Be Frequently Asked Questions:

- What will this work on?

The original 2G (1G) iPhone, the new iPhone 3G, and the original iPod touch first generation. This will NOT work on the second generation iPod touch (with speakers and volume control) If you need help finding out which iPod touch you have, visit Apple’s support site.

- I hate using a boot menu on startup and Linux sucks. How can I get rid of this?

Launch the OpeniBoot client in Terminal and on the iPhone and run the ‘uninstall’ command. Once it reports that is is done, run ‘reboot’, and you should boot right to the Apple OS.

- Who made this awesomeness??

The awesome iPhoneLinux dev team, lead by planetbeing and other dev team members (but not directly affiliated with the iPhone dev team).

- What is this going to change about my phone/iPod?

It will add a boot menu whenever you turn on, and add the capability to boot Linux kernels on your iPhone via the console.

- What can I do in Linux? Does it support Wi-Fi? How many games can I play?

Linux is currently at a demo-only stage, once it’s booted, all you can really do is use a terminal from your computer. You can’t yet use the multitouch screen to interact in any way, and you can’t yet use WiFi. However, it’s pretty cool to any geek, and the team is working hard on new and exciting features in the form of drivers.

- Help! My iPhone won’t boot!

If your iPhone won’t boot after installing OpeniBoot, it’s likely you need to launch the console again and run “setenv auto-boot true” and then “saveenv”. If it still boots to recovery, you may need to uninstall OpeniBoot as above and then restore your phone.

- What else can I do in the OpeniBoot console?

Not much, but there’s some cool stuff. Type ‘help’ for all of the commands. You can mess around with most of it, just avoid things that seem like they’d change something like anything having to do with “write”, especially the NOR. I don’t know what a lot of the stuff does, but basically anything UNDER nor_erase is fair game (and pretty self explanatory), plus the stuff at the top. If you need to know the syntax of a command, just type the command with no arguments. Examples: Change the display color with “bgcolor 0 200 0″, list the files in your root with “fs_ls 0 /”, or find your battery voltage with “pmu_voltage”.

- Does my iPhone need to be jailbroken to use this?

No, this is much lower level than a jailbreak and you can try out OpeniBoot with no jailbreak.

EDIT: As Will (ChronicProductions) points out in the comments below, you do need to have used PwnageTool or QuickPwn to be able to do this. No wonder I was having so much trouble on my virgin iPod touch ;) You can find PwnageTool and QuickPwn from the iPhone Dev Team’s blog.

- Will this break my phone?

Probably not, it is highly unlikely something bad will happen. However, to stay on the safe side, don’t touch any OpeniBoot commands if you don’t know what they’ll do (especially ones that have to do with the nor), and back up your NOR as described below in the installation process.

- ?????????

If you have another question, feel free to ask in the comments!

Without further ado, you can download the necessary files here.

OpeniBoot set-up:

1. Open Terminal and navigate to the iphonelinux-mac directory by typing “cd ” (note the space after cd) and then dragging the iphonelinux-mac folder to the Terminal window and pressing return.

PLEASE NOTE: While you no longer have to be root to use these utilities, you DO need to be in an Administrator account. If you know the password of an administrative password but do not want to switch users, type “su THENAME” where THENAME is replaced with the administrative user account. You will be prompted for your password. Although you do not see dots or asterisks appearing as you type, it IS recognizing your password. Do not be alarmed if nothing happens while you are typing.

2. Put your iPhone/iPod into recovery mode. If you need help with this, visit http://www.iclarified.com/entry/index.php?enid=367

3. In your terminal window, enter “killall iTunes; killall iTunesHelper” and press return. This will avoid iTunes messing with your phone. If you want iTunes’ autosync feature back, simply restart your computer (or log out and back in) You will need to have the USB libraries before you can use loadibec, so copy them by running “sudo cp libusb.dylib /usr/local/lib/libusb-0.1.4.dylib”. Once again, you will be prompted for your password. Nothing will appear while you are typing it, but it IS registering. Press return when it is complete.

4. Load OpeniBoot onto your phone by typing “./loadibec openiboot-” followed by 2g.img3 if you’re on a first generation iPhone, 3g.img3 if you’re on an iPhone 3G, or ipod.img3 if you’re on an iPod touch (first generation only!). Hit return. If this returns nothing, try restarting your iPhone and trying again.

5. Sit back and admire poorlad’s pretty interface on your iPhone. This will be your new boot menu.

6. In your Terminal window, type “./oibc” but do NOT hit return yet. Press the power button so that OpeniBoot console is selected, and press the home button to enter it. While the text is still scrolling, press the return button to enter the OpeniBoot client. This may take several tries, you can’t press return too early or too late or it won’t work. I have to do it several times to get it going.

7. We will now take a backup of your iPhone’s NOR memory to avoid disaster. In the OpeniBoot client, type “help” just to make sure everything is working. You should see a long list of commands. Now type “nor_read 0×09000000 0×0 1048576″ to read it into memory, and press return. Wait for it to return “Done.”. Then type “~norbackup.dump:1048576″ to send the file to your computer. You might want to keep this file safe, just in case.

8. Install OpeniBoot! Type “install” and wait for the install complete message. Once it’s done, enter “reboot”.

9. Now we’re going to upgrade to the latest version of OpeniBoot I have. We can’t install this directly, as it appears to be some sort of upgrade-only version. Enter the OpeniBoot console just as you did before (although the timing is much easier now), and send the updated OpeniBoot with the command “!openiboot-THEDEVICE.bin” where THEDEVICE is replaced with 2g, 3g, or ipod. Run “go 0×09000000″ to launch it.

10. Once again, type ./oibc into Terminal and launch the console from the iPhone and quickly hit return in the Terminal to connect.

11. Type “install” to upgrade, and wait for the done message. To make the Apple OS boot properly, type “setenv auto-boot true” and hit return. (This is case sensitive, as I learned the hard way. My phone wouldn’t boot without a manual fsboot for a day until I realized I was typing TRUE instead of true) Then use “saveenv” and wait until you see “Environment saved”. Then “reboot” and you’re in a newer version of OpeniBoot! To boot into the iPhone OS, just press the home button.

Linux time!

It’s finally time to run Linux! Follow the steps below.

1. Once again, enter the console. I’m sure this is becoming second nature to you by now.

2. Now we’re going to send over the files required for Linux to boot, the kernel and userland. To send over the kernel, run “!zImage”. Then place it in memory with “kernel”. Send the userland with “!rootfs.arm.ext2.gz” and place it in memory with “ramdisk 3588″.

3. Time to boot! Run ‘boot “console=tty console=ttyUSB root=/dev/ram0 rw”‘ Linux is now booting!

4. Your oibc session will close. Run ./linux to communicate with Linux. You can log in with either the username ‘root’ or ‘default’.

5. If you’d like to see what you’re typing on your iPhone’s screen, run “sh 2>&1 > /dev/tty0″.

Mess with Linux! To reboot, run ‘reboot’.

FINAL NOTE: If you have any questions, read the full FAQ before asking. This tutorial was derived from planetbeing’s original tutorial from ORIGINALREADME in the archive you downloaded. The README file was distributed with the upgrade package, which added the uninstall feature.

Popularity: 11% [?]

Posted in iPhone | 78 Comments

Hello world!

Hey, and welcome to my new blog! I plan to actually write in this one, unlike my previous attempts, but we’ll see how it goes.

I’ll be posting my first post pretty soon, and the About page should be updated soon as well. Stay tuned for updates, and thanks for reading!

P.S. I’m sure there’s a way to do blogroll with this theme, I’ll add it soon so that I can link to my friends from Twitter :)

Popularity: 8% [?]

Posted in General | 5 Comments