Archive for technology

So I Doubt We’ll Get Flash or Java on the iPhone

…at least, not in their current forms.

There’s been some buzz about Flash coming to the iPhone. The problem is, that the problem is not technical – for both Flash and Java.

The Backstory

First some history:

  • Apple (Steve Jobs) has said that Flash is too big and slow on the iPhone, and that Flash Lite is too cut down, and thus not useful
  • Jobs also says that “Java’s not worth building in. Nobody uses Java anymore. It’s this big heavyweight ball and chain.” NY Times
  • Adobe has been pushing to get Flash on the iPhone, saying “it works”, etc.
  • Sun committed to provide Java on iPhone with the SDK, but when they saw the SDK restrictions, they had to backpedal to provide Java on the iPhone “if at all possible.”
  • Apple didn’t want to provide a native apps SDK – keeping all app development in-house.
  • Apple only provided a native apps SDK when it became clear that the jailbreak apps were wildly popular, completely outside Apple’s control, and thus threatening to take control of the iPhone platform away from Apple
  • Apple provided the SDK with very stringent restrictions – both the NDA, which has since been reluctantly lifted, and strict limitations on the applications developed with the SDK – including requirements that applications do not call any non-SDK APIs and do not download executable code or provide any interpreters. This last restriction is aimed directly at technologies like Flash and Java that execute code from third parties.

Apple the Monopolist

This pattern makes it clear that Apple is very intent on keeping control of the applications provided on the iPhone platform. They have some legitimate reasons for this (i.e., protecting their brand, protecting the user experience, protecting the cell network of their carrier partners), but I think the dominant reason is just protecting their very profitable monopoly.

Apple has a monopoly on the distribution of iPhone applications (barring the jailbreak apps), and they are determined to retain that. This monopoly is what allows them to do that other protection – of brand, experience, and network. It also is what allows them to charge every application developer 30% of revenue plus $99 per year. And what allows them to prevent applications that compete with iTunes, another big money maker. And also what allows them to limit iPhone development to being done on Apple hardware, another big money maker.

I’m quite confident that both Sun and Adobe have been working the back channels to convince Apple to allow Java and Flash on the iPhone, but that Apple will not budge.

What Will Work

I see three things that can get Apple to change their position:

  • Widespread public outcry for the other technologies. This seems to be what Adobe and Sun would be hoping for. However, Apple doesn’t really listen to customers. “Uncle Steve knows best.” The only leverage Apple customers have is their dollars, hence the next two possibilities.
  • Widespread adoption of a competing platform – namely, Google’s Android. This could be viewed as the ultimate loss for Apple – thousands, millions of potential customers going with a competing platform – but Apple has played the elite-user-friendly-minority-platform-where-we-have-a-monopoly role before, and I think they’ll be willing to do it again on the iPhone if that’s what it takes to retain control.
  • Widespread defection of users and developers to the open jailbreak technologies. This is what got the SDK and the degree of openness we have now. If Apple feels it is going to lose control of the iPhone platform, Apple releases partial control – first the SDK, then lifting the NDA, next… What? How can Apple retain control of the platform and give users and developers Flash or Java?

Apple-Friendly Flash and Java

So, how can Apple retain control of the platform but allow users and developers Flash and/or Java?

Well, they could allow Java as just another language to produce SDK applications sold through the AppStore. AlcheMo translates compiled JavaME applications to C++ code that is then compiled on the SDK. The resulting application can only run on the iPhone after going through Apple’s AppStore vetting process.

Flash? Frankly, the web’s model of flash widgets embedded in web pages isn’t going to fly on the iPhone. It just doesn’t have enough memory to support that use model. Flash Lite? Does anybody think that’s enough? Steve Jobs said there’s a “missing product in the middle.”

How about Adobe Air, letting users run Flash applications on the iPhone “desktop”? Well, if Adobe produces a version that makes these apps standalone, without the ability to download additional code to run, we have the “product in the middle” that Steve indicated could be worthwhile – and that let’s Apple preserve it’s control over the platform.

When users and developers defect to other platforms, and Adobe and Sun deliver versions of Flash and Java that let Apple control the applications delivered to the iPhone, Apple will let it happen.


Comments (2)

So I Want an iPhone SDK Development Book

…but thanks to Apple’s recently lifted NDA, they aren’t available yet. But without the NDA, more should be coming soon.

Here are the ones I’ve found on Amazon (these are my affiliate links):

iPhone Open Application Development: Write Native Applications Using the Open Source Tool Chain, 2nd Edition, by Jonathon Zdziarski. This is the one I pre-ordered. The author was one of the original iPhone jailbreakers. The first edition sold out quickly, so this is the updated follow-up. This is the book to get if you want to be able to exploit the full capability of the iPhone, including APIs that Apple doesn’t document – but if your primary target is the Apple AppStore, you may need to rely on the SDK documents or on another book. Note the First Edition PDF version is still available.
iPhone SDK Development, by Bill Dudney, Chris Adamson, Marcel Molina. The Pragmatic Programmers’ take on the iPhone. I’m really intrigued by this one, too. This appears to be a good comprehensive treatment of SDK development, and coming from the Pragmatic Programmers, it should be quite practically oriented. This book was delayed because of the Apple NDA, but is currently available in beta as a PDF and the source code is also available for use in your projects, but not for training material, books, articles, etc.
iPhone in Action, by Christopher Allen and Shannon Appelcline. The publisher provides Early Access chapters. This book will cover both web and SDK development. Chapter 2 in the early access provides a detailed description of the tradeoffs of web, SDK, and various hybrid development strategies. I’m more inclined to go with a focused SDK book.
iPhone SDK Application Development: Building Applications for the AppStore, by Jonathan Zdziarski. Jonathan Zdziarski comes in from the cold – here’s his book for the AppStore. I expect this book will make a great companion to his Open Application Development book, but it won’t be available until 2/15/2009. I do wonder if Jonathon will run afoul of the SDK agreement’s restriction on circumventing Apple security measures…
The iPhone Developer’s Cookbook: Building Applications with the iPhone SDK, by Erica Sadun. To be released “as soon as Apple lifts the NDA on the iPhone SDK.” We’ll see when it becomes available, as Apple announced they were lifting the NDA (but haven’t posted the new agreement) 10/2/2008. Now available! This book sounds more like a collection of snippets to me, rather than a comprehensive look at the SDK. It also talks about tools to reverse engineer non-SDK frameworks, which could be interesting. Source code for the examples is available.
Beginning iPhone Development: Exploring the iPhone SDK, by Dave Mark, Jeff LaMarche. One of the well-regarded Apress Beginning… series, this will likely be a well-edited, comprehensive book.
iPhone SDK Programming, by M.A. Ali. A 512-page book from John Wiley and Sons, in English. That’s about all we know about it at this point, especially because a search for the ISBN on Wiley and Sons returns nothing.

Comments (1)

So I Had to Laugh

…at an The Unofficial Apple Weblog (TUAW) “Terminal Easter Egg”.

One of these “eggs” is the ability to play Tetris in Terminal. Here’s how to do it. First, open a new (/Applications/Utilities) window and type “emacs,”…

I guess another Easter Egg is a full-fledged development environment – yes, also Emacs – the operating system disguised as a text editor disguised as a Terminal Easter Egg.

Comments (1)

So I Don’t Need to Agree

…to the Apple iPhone SDK NDA.

Apple has lifted the NDA. Kudos to Apple for lifting it, shame on them for writing it and taking so long.

From Apple:

To Our Developers

We have decided to drop the non-disclosure agreement (NDA) for released iPhone software.

We put the NDA in place because the iPhone OS includes many Apple inventions and innovations that we would like to protect, so that others don’t steal our work. It has happened before. While we have filed for hundreds of patents on iPhone technology, the NDA added yet another level of protection. We put it in place as one more way to help protect the iPhone from being ripped off by others.

However, the NDA has created too much of a burden on developers, authors and others interested in helping further the iPhone’s success, so we are dropping it for released software. Developers will receive a new agreement without an NDA covering released software within a week or so. Please note that unreleased software and features will remain under NDA until they are released.

Thanks to everyone who provided us constructive feedback on this matter.

Apple responds to criticism and lifts NDA: 8 months
T-Mobile responds to criticism and lifts 1GB/month cap: 1 day

But definitely good to have the NDA gone…

And I wondered “how these iPhone SDK Books pass legal muster? Special license from Apple? How does one get such a special license?”

Ars Technica explained that various books were on hold – either waiting to be printed, or waiting to be written, because of the NDA.

So, one less obstacle to iPhone development – now to just get clarification of the AppStore criteria…

Comments (4)

So I Made My iPhone Say Hello, World…

…with the open source toolchain. It was a real pain until I decided to focus on the easy way. Then it wasn’t hard at all.

For reference, the hard way is on iphone-dev. I spent most of a frustrating, unsuccessful day with that page and its thousands of comments, especially extracting the SDK from the 1GB XCode binaries – you want version 2.5, not a newer version, and use PowerISO to extract it. For what it’s worth, there looks to be an easier way for Cygwin on Windows.

The Easy Way

But the really easy way is to install the development tools on your iPhone.

This requires:

  • a “jailbroken” phone – so you can install open software on it.

    I used Windows QuickPwn and it was easy. Works with the 2.1 firmware, too…

  • a Wi-Fi connection – and get the IP address of your iPhone:
    • open the iPhone Settings application
    • tap Wi-Fi
    • tap the (>) button to the right of your active connection
    • note the IP Address – probably something like, which I use below
  • an SSH client of your choice – Linux and Mac come with ssh clients.

    Windows users can download PuTTY or use the Cygwin Unix layer on top of Windows. Developers running Windows may also want to grab WinSCP for its “Keep Remote Directory Up To Date” feature (more on that in another post).

After the Jailbreak

After your phone is jailbroken, open the Cydia application. It is like the AppStore, but for open software.

Tap “Featured Applications”, then flick to the bottom, and tap OpenSSH, then tap Install, tap Confirm.

When the installation completes, go back to Cydia, tap Search in the bottom-right, and type toolchain. Tap iPhone 2.0 Toolchain, then Install then Confirm. This is a pretty big iPhone application – over 40MB expanded! So, while your iPhone is working on that, let’s go back to the desktop machine.

You should now be able to use ssh (or PuTTY…) from your desktop computer to connect to your iphone, using root as the user, your iPhone’s IP address for the host, and alpine for the password. If you’re using a graphical SSH client like PuTTY, follow its prompts. On Mac/Linux/Cygwin, open a terminal, and type:

      ssh root@
      root@'s password:              [type alpine]

The first time you connect, it may take about 30 seconds, then you should then see a Unix command-line prompt from the iPhone, and it will end with a “#” – which means you are the “root” or administrative user. You’re the boss – congratulations!

First thing you should do as boss is make sure nobody else can be boss – change your password! (No, really, change it now – here’s how…)

    Changing password for root.
    New password:               
    Retype new password:        

Don’t forget this password. :-D If you do, you’ll probably have to jailbreak the phone again to reset it.

After the Toolchain is Installed

OK, so you can ssh into your iPhone, and you’ve installed the toolchain (that installation has completed on your phone, right?).

So, on your desktop with the ssh window into your iPhone, type:

    echo 'main() { printf("Hello, iPhone!\n"); }' > hello.c
    gcc hello.c -o hello
    ldid -S hello

And your phone should say:

    Hello, iPhone!

When I first did this, it was late at night, and I forgot the ldid -S hello, so instead of “Hello, World”, I got:

    # ./hello

The iPhone will only run “signed” code, and since ./hello was not signed, the iPhone killed it. The “ldid -S PROGRAM” signs the program for you. Turns out the iPhone doesn’t care what signature is on the file, just that it is marked with a signature…

So there you go: a usable toolchain on your iPhone, waiting for you to write the next great iPhone program. For real development, you’ll want to use your desktop development environment and something like sshfs, rsync, or WinSCP to copy the files to the iPhone as you edit them, but more on that later… Updated: More is now available for Windows/WinSCP and Linux/sshfs

Comments (55)

So I Just Saw a New iPhone Book

…coming from O’Reilly – the next version of the Open Source Application Development book. Looks like this is the one to get:

iPhone Open Application Development: Write Native Applications Using the Open Source Tool Chain

And Amazon (above) has it for $26.39 preorder – lots better than the $39 direct from O’Reilly.

Leave a Comment

So I Don’t Agree…

So, I don’t agree to be bound by the Apple iPhone Developers SDK

Edit: Apple has lifted the NDA, so I don’t need to agree.

I want to develop applications for the iPhone. I think the App Store
is a great delivery mechanism. I love the phone – it’s a great
interface, a great technology, and it’s in the hands of millions of
consumers – an emerging market and platform with great potential.

I just can not agree to the limitations imposed by Apple’s SDK.

I’m posting this so I can remember the details of why I cannot agree to the Agreement, to call on Apple to resolve the problems, and to call on other developers to help solve the problem.

The Agreement would:

  1. Require me not to share information with anyone but my contractors or employees who are also bound by the NDA (is it time to start an iPhone development company in which anyone can be a contractor?)
  2. Require me not to disable or interfere with any verification or security mechanism of anything produced by Apple, or enable anyone else to do so. Either with the SDK or through other means. Is this intended to prevent jailbreaking? Seems like this one clause could prevent Jonathan Zdziarski from accepting this NDA.

    I wonder how these iPhone SDK Books pass legal muster? Special license from Apple? How does one get such a special license?

There are other restrictions, too, but these cripple the sharing of information within the community and extend far beyond use of the SDK.

There are some restrictions that make sense, such as preserving Apple’s right to develop competing applications, avoiding the complications of media licensing within your application, etc.

Some are clearly intended to protect the cell phone network partner – like limiting bandwidth use (to levels determined by Apple as needed).

But Apple has retained the right to arbitrarily refuse entry to any application – quite the anti-competitive stance for a monopolist!

Nathan Willis has an article on analyzing additional problems with the SDK agreement, in the context of writing GPL software.

And to put the icing on the cake, SDK apps are intentionally crippled by license:

  1. You cannot develop anything with non-SDK APIs. This limits you to writing in your app directory, etc.
  2. You cannot develop anything that will execute code, including plugins or interpreting code, except through the SDK APIs and built-in interpreters.

So, what’s a conscientious objector to do?

  1. Skip the iPhone. Go to Android. (Android is probably a good option even if you do iPhone development…). You’ll be stuck developing for an emulator until actual hardware comes out, hopefully in late 2008, but then you get an open linux environment.
  2. Ignore the overbearing restrictions. Develop applications on the SDK, share information, and move forward anyway. Risk the Wrath of Steve, even though this approach is probably best for Apple and the iPhone community. Note that this in NO WAY constitutes legal advice, and you do this at your own risk. Heh.

    Of course, you could also just follow the restrictions, and not share anything with the community, too… But that’s not acceptable!

  3. Stick to Web development. There are lots of interesting libraries and APIs available, and nobody can tell you what (not to) develop. You can target non-iPhone platforms at the same time, but you don’t get access to most of the interesting iPhone features, like the touchscreen and accelerometer, to say nothing of basic functionality like local storage and offline use.
  4. Stick to open iPhone Development. This lets you get at all the good stuff on the iPhone – all the internal APIs that Apple actually uses, no restrictions on what your application can do – but you can only deploy to jailbroken phones. No AppStore for you!
  5. Or maybe, just maybe…

  6. Can you have the best of both worlds? Maybe you have a friend who is already an iPhone SDK developer. You can stay on the open side of the fence, and your friend can port it to the SDK. Note that the sharing has to be one-way – your partner can’t give you SDK information unless you accept the NDA – but this could be a way to do open development but keep the AppStore door open.
  7. Note that even with this way around the restrictions, the SDK and AppStore do
    restrict what your application can do, can be, and can look like. Not much you can do about it if you want to publish in the App Store, but at least you can still develop completely open software…
  8. And one final candidate:

  9. Can you do the “partner” method on your own? Can you develop open applications without the SDK, and bring them in from the cold on your own, without violating the NDA? Hmm. My read of it says that unless you’re writing software that interferes with security of Apple products, you’re OK. So you mooch off the jailbreakers, but if you don’t write the jailbreak software, you’re compliant. And you share with the community information that is already public (i.e., once those books come out).

Thoughts? I’d love to get feedback on this…

Comments (10)

So I Got a New Phone…

I’ve had a Motorola RAZR V3t for a few years -
Motorola got it right with the small, thin half-inch (OK, 0.6″) form factor, though the phone operating system could use some work (OK, it is a piece of…work).

Then my wife’s T-Mobile MDA (Windows CE “smartphone”) broke, so we needed to get a new phone. Yeah, my wife’s phone breaks, but you notice that /I/ got a new phone. I’m still not sure how I worked that one! (But it gets better later!)

T-Mobile really didn’t have any interesting options for new phones. Maybe when their phone based on Google’s Android comes out. But I get good service from T-Mobile in my basement home office (“the dungeon”).

Meanwhile, the iPhone is definitely the most interesting phone available right now. Thin, half-inch form factor (.46″ = 11.6mm), though I worry about that touchscreen getting scratches in my pocket. For my geeky side (do I have another side?) it has a real Unix operating system for development. Remind me to tell you about my Zaurus experience sometime. Original iPhone or 2G? Go original – 3G wouldn’t be any faster on T-Mobile’s network, and it’s a lot more expensive – cheaper initial cost, but more expensive contract required. Those monthly payments add up!

So, I needed a T-Mobile iPhone – (sorry, AT&T). Mobile Unlimited is a T-Mobile reseller that will sell you a “gently used” iPhone with a T-Mobile contract. Looks like they may be selling new iPhones with T-Mobile contract now. Prices are pretty high.

So, I picked up a scratch-and-dent (or, backscratched and front corner hairlined) iPhone off eBay, and first order of business was to unlock it (enable it to use other carriers – specificaly T-Mobile) and while I was at it, to “jailbreak” it, so I could install other software (there’s that geeky side again).

I needed to do the unlock and jailbreak from within Linux or Windows. So with the help of Google, I found the QuickPwn tool (pronounced “Quick-Pone”) from the iPhone Dev Group (no affiliation with Apple).

Here’s what I did:

  • get the latest iTunes
  • Download QuickPwnGUI ( I used version 1.2.0 ( SHA1 = 8e1ed2ce9e7e473d38a9dc7824a384a9ac34d7d0)
  • Download bootloaders (I found them at “RAR” format is an archive like “ZIP” – you can extract it with a great free archive manager called 7-zip:
  • Connect your phone to the computer and make sure it is recognized by iTunes. Leave your phone connected to iTunes for the remaining steps. I upgraded to the latest firmware (2.0.2), because QuickPwnGUI said it could unlock that version. Note that there is usually some lag between Apple releasing a new firmware version and the iPhone community being able to unlock it, so if your firmware version is too new, you may need to downgrade it in order to unlock/jailbreak your phone.
  • Start QuickPwnGUI
    • Follow directions – and when prompted to hold down the Home button, don’t release it when you complete the first step – keep holding it down until told to release it.
    • Be patient – the required rebooting can take a long time.
    • Choose Jailbreak & Unlock
    • Decide whether you want to keep your Apple boot logo, or replace it with a similar pineapple (a pwnapple?). If you take the pineapple, I’m not sure how to restore the apple – you may have to restore to original firmware.
    • path to firmware: iTunes stored mine in C:\Documents and Settings\MY_PROFILE_NAME\Application Data\Apple Computer\iTunes\iPhone Software Updates – change MY_PROFILE_NAME as needed.

My phone (eventually) rebooted, and everything worked, and I had a T-Mobile iPhone.

And my wife has a RAZR V3t. Excellent!

Comments (112)