Anyway, the puzzling thing here is that as Greg says, most iPhone OS apps are written in one of the whitelisted languages already. Couple that with what I think is the likely fact that Apple is being honest about its motives (namely that it doesn't want its roadmap to have to consider third-party toolkits in any way), and it's confusing. Why would they go to the trouble of pissing everyone off to bring about a result that had largely brought itself about?
Two answers. One, I think Apple feared that more third-party toolkits are on the way, and that they'll become more popular. Two (and I think this is a huge part of it), Apple seems to have simply underestimated how mad this would make developers.
I wouldn't be surprised if the company went back on 3.3.1, or at least moderated it. Apple's only willing to be a jerk when it and the public agree about the level of jerkitude at hand. If Apple gets more ire than it was expecting, there's precedent for it backing down.
I guess Apple has been surprised by apps popularity. Their original policy was that 3rd party applications ought to be web apps (initially, it was the only way to go).
Embedded applications make sense:
* for super-tightly integrated user experience: but then, you don't want any lowest common denominator middleware on the way, as they guarantee a crappy experience (typically way worse than a decent and portable web app, see below).
* for driver-like stuff that do magic (but Apple always hated the idea of 3rd parties writing such sensitive code, which is one of the reasons why OSX is way more stable than Windows)
* because in some countries, users are stuck with a not-so-reliable 3G carrier, so being able to run offline is valuable. Hopefully that's a temporary situation, and I understand that HTML5 allows to write offline-compatible web apps anyway.
* because it's culturally accepted to pay a couple of dollars for a fart simulator app, but most people won't pay a dime to access the New York Times content in a web site. That's the reason why most apps are apps rather than web sites, but that's a problem with the web, not Apple's business.
This last point is at the core of most issues with Apple's tight control on iPhone apps: most of them should have been web app. They've been written as apps not to benefit from the iPhoneOS platform, but to benefit from the AppStore's easy monetization and publicity. It's about the AppStore, not about the iPhone!
The funny thing is, the price of 'software' has often really been driven by the price of distributing it, not the value it delivers or how much it cost to create it.
(Joel Spolsky has pointed out this is why Enterprise Software costs so much: because it costs so much to sell software to Enterprises).
The App Store really takes the friction out of the business of distributing binaries, including the friction out of marketing it. So it should come as no surprise that a lot of really good software is cheap in the app store.
It won't be long before you won't be able to charge for the NYT in the app store either.
"There's no software priced between $1000 and $75,000. I'll tell you why. The minute you charge more than $1000 you need to get serious corporate signoffs. [Etc. And to get that you need a salesforce and so on.] And with all this, the cost of making one successful sale is going to average about $50,000. If you're sending salespeople out to customers and charging less than $75,000, you're losing money."
Joel was talking almost entirely about the sales effort, not so much about marketing (although you need a much more expensive marketing effort if you're playing the big sales force/big ticket sales game at the upper end, if only to establish your company and/or brand).
And I really wonder about lowering the cost of marketing. I don't know at all how this Apple App ecosystem works, but it seems to me that rising above the crowd and noise of 100,000? 1 million (if not now, soon enough) apps means you need serious marketing of some sort, or a stroke of luck where your app goes viral without much connected effort on your side.
The generally greater interconnectedness of today probably has a lot more to do with lowering the cost of marketing than anything having to do with the App store ... although that'll e.g. depend on its search function and how and if people use it. I note that Amazon gets by with what is by far the worst search engine of any site I've used in years.
And of course that's not a hard rule, there can be software priced in the middle where a less strenuous effort on the part of the corporate buyer gets the job done on his side (and many think that a major reason for corporate software piracy is not that the corporation can't afford it, but that it's so hard to get a purchase order through that borrowing a disk from someone across the hall is by far the path of least resistance).
And maybe this help explains some major failures, like Centerline's Code and ObjectCenter (interpretive environments (with interpreters, but you often just load compiled code on the fly) for C and C++ that are as close to a Lisp Machine as you could get for those languages).
Also, the $1,000 limit is undoubtedly too low, it's whatever your corporation allows you to spend without too much effort (e.g. CxO signoff). A few thousand dollars are OK, e.g. that's how PCs slipped into a lot of companies, on departmental but not corporate budgets. (Heck, that's how a few Z-80 CP/M machines slipped into LMI when we had at most 3 CADRs operational at a time and a strong bias against doing anything outside of a Lisp Machine.)
That said, I'd be surprised if Apple spends too much effort policing the rule. The fact that it exists in the first place will probably be enough FUD to prevent third party toolkits from taking off at all. They'll probably do some kind of automated signature testing for Flash, Unity etc and leave it at that. The upside of that is you'd probably be able to sneak a Clojure or whatever app in and nobody would probably care too much.
Apple wants to drive away developers who are spreading their apps thin over multiple platforms. I think you're right that it's quite unlikely they will relent on this, at least on paper.
As for policing, I think you're also right that it won't be particularly onerous. I see enforcement less to the letter and more to the intention of 3.3.1: If your submitted app feels like a rough port, they'll probably check for cross-compiler evidence and reject it on those grounds, but if it fits right into the iPhone experience, they probably aren't going to go hunting for traces of Lisp.
What is has to do is with lock in. Right now, there's a decent barrier to porting an application from iPhone to Android, and in most cases the port will cost more than the profit it makes, so it won't be done.
If people start using multi platform engines, the ports will be very cheap, and the iPhone will have far fewer exclusive apps, which is a huge threat to their platform. Each multiplatform app reduces the costs of a user switching away from the iPhone to an Android phone or similar.
Apple's been on the losing end of lock in with Mac OS for a long time. I think now they're experiencing the effect in their favour and want to keep it going for as long as they can.
If everyone is writing in Cocoa on XCode, Apple's latest & greatest will be deployed that much more quickly.
I think this interpretation is consistent with Jobs' terse emails here, particularly the line, "intermediate layers between the platform and the developer ultimately produces sub-standard apps and hinders the progress of the platform" (emphasis mine).
Suddenly it matters very much indeed that lots of games start calling new platform-native APIs, right fucking now.
Saying that they're doing it to further their platform sounds a hell of a lot better than saying that they're doing it to hurt their competition!
At best you could say that there won't be an intermediary platform delaying the process...but I'm not sure if that really is a compelling reason to justify this decision.
Without cross-compilers, the lag is as you say: developers update their apps. With cross-compilers, the lag balloons: the makers of the cross-compiler toolset need to incorporate the latest Apple features (if they choose to do so given the rest of their market), roll out their tools to developers, then developers have to use the new tools to update their apps. Slow!
I would agree with you that Apple's been doing the same lock-in with Mac OS for a long time, but I'm not so sure they've been on the losing end of anything. I remember that when Jobs came back to Apple, they had free WWDC videos online, and attendance was very much in decline. Since he came back, they removed the Java bridge stuff, Carbon and at the same time they're charging good money for a WWDC that tends to sell out really quickly. Lock-in on the Apple way seems to me to be a fairly successful strategy.
That's true today because they're the main platform. This might change if, say, Android becomes much more widespread than iPhoneOS. When this happens, they might concede on things like 3.3.1.
Then again, Apple is quite comfortable with having minority share but huge profit margins in a market: I'd guess that 90% of laptops sold over $1000 are Apple, and that their margin is something like 5 times Dell's...
If multi platform engines take off, we are a few short years away from a situation where the choice of mobile platforms is like the choice between browsers is now - no lock in, low switching costs - and I think they want to avoid that at all costs.
There is already a cross-platform, 100% uncensored dev framework, with excellent distribution channels, and it's called HTML5. I'm not sure there is a niche for a 2nd one, especially if Apple is unhelpful.
Apple isn't focused on developing a smart phone operating system. They're focused on redefining what a computer IS, and how we interact with them. That's why they've been so careful about copy+paste, and later multi-tasking. They are taking this as a chance for a clean slate approach to computing and don't want to be hampered (or their customers to be hampered) by slow-moving third party compatibility layers. How much as Window's development hampered by the fear to break legacy apps compatibility moving forward? Apple isn't afraid to make their developers jump through hoops and make changes if they think it will benefit the platform in the end (a la the Intel switch). They'll provide tools to make that as painless as possible when the time comes (e.x. iPhone app compatibility on the iPad, Rosetta) but having another layer in between only slows this process down.
Whether you view Apple's actions as that momentous and revolutionary is largely irrelevant. I think THEY do.
Not that I'm not upset by this as well, but I'm trying to make sense of it.
As I see it, there are two elements that define the modern software: end-user experience (not only GUI, but things like local storage, geolocation etc), and communication with the Internet. With low bandwidth, Web apps have all the advantage with the latter and are good enough with the former; with ubiquitous broadband, the latter advantage is meling away, and the former just being "good enough" might not be, well, good enough anymore.
Moreover, repeated installations and deinstallations degrade a computer's performances and security. It's much more obvious under Windows than under correctly designed OSes, but always remains true.
I expect a 95% web-based slate/phone to be mostly stateless, and to remain functional indefinitely without requiring administration, as opposed to a computer.
I don't think is it. I remember when Metrowerks PowerPlant was the main framework. Apple had let their own MacApp and MPW languish. Arguably Metrowerks CodeWarrior saved the Mac as a development platform.
I feel the same way about Safari on my iPhone. I quickly ditched that for a better browser.
Heresy in Mac-land. This is contrary to just about everything the Mac GUI has historically tried to support/enforce.
When Steve Jobs started with NeXT in the mid 80s he got a demo of a novel program that can be used to interactively design general user interfaces - the first program of its kind.
It was written in Lisp by Jean-Marie Hullot. It was called SOS Interface, marketed also as Action! by the company Expertelligence.
Steve Jobs hired him and Jean-Marie created the Interface Builder - which became one of the most important tool on NeXT OS. Then for Mac OS X and now for iPhone OS.
This innovation is now hindered by Apple. The innovative software may not be written in Lisp anymore, but it is not necessarily Objective-C either.
With the Mac everybody got a copy of HyperCard - everybody could write and design programs in a simple way - using the built-in HyperTalk. Xerox had such a software years before - called NoteCards and written in InterLisp-D.
With the iPad, which is much more capable than the Mac where SOS Interface and HyperCard were developed, everybody is degraded to be a consumer. The goal is no longer to be a maker, a creator, a programmer. You can't even use a shell to connect to your own iPad.
There is huge domain of visual programming and end user programming to be explored on touch screen devices. Maybe Apple is working on that and hiding this (like Jobs claimed that 'nobody reads anymore' and some time later Apple now sells iBooks) - from what we see now Apple hinders innovation and innovators in these areas.
I want a 'DynaBook' and not a media player.
Steve Jobs did not really understand what he saw at Xerox PARC when he got the demos of the Smalltalk system. He got the idea of the graphical user interface. But what he overlooked was the concept of object-oriented programming. He later with NeXT understood that. But what he never really got was the importance of interactive programming, end-user programming - the role of the user being able to program his computer in a straight-forward way. The cultural importance of being able to write, understand and change software.
With the Mac everybody got a copy of HyperCard
Existence of iPad (and iPhone) does not hinder innovation — it fosters it. Three years ago
there was no iPhone, no iPhone OS, no App Store. Now we have a new platform with not far from 200 000 (just think about it) applications written for it. iPad gives an opportunity
truly explore what's possible on multitouch device with dedicated UI.
I am a web developer, but I do not complain that I cannot easily write my code in the browser itself. Nor do I want to.
Just think about it: if there were no iPad you could not code for it even in Obj-C.
I need a Mac to program the iPad? Why?
We needed a LISA to program the Mac in 1984. The Mac had 128kbyte of RAM and couldn't do much.
The iPad has 256MB RAM, a multitasking OS based on Unix - I want to see end-user programming on the touch screen. Not a generation of link clickers.
We have 2010.
I want a better EMAIL program for my iPhone (or something like the iPad). I don't get it. Apple does not allow that. WHY? It can't even filter mails. We had that twenty years ago.
Holy moly! Are you mad because a TV isn't a video camera? Are you mad because a plate isn't a frying pan?
The iPad is a consumption device. It's a new thing. I've had it for a week now. I know that it's not going to replace a real computer. But it is absoulutely great for what it is. I wouldn't want to program on it (as things stand). It's acceptable for writing short texts, that's about it for now.
And this has nothing to do with the 3.3.1 controversy. There are a number of things that you can take Apple to task for, but this isn't one of them.
Turning the iPad in to a platform where children could explore programming with Squeak, eToys or some as-yet unreleased environment would only require that Apple not actively prevent it.
There seems to be an presupposition there that programming must involve lots of typing. If so, it is a false one.
"As someone who is passionate about mobile email, my hope is that developers interested in making email-related apps can use reMail code as a starting point. Part of the reason email apps are hard is because you have to pay the tax of figuring out how to download email via IMAP, parse MIME messages, handle attachments, and store data. reMail has already solved these problems. If you have a great mobile email idea, I hope you will find reMail's source code helpful in your quest."
'… Your application duplicates the functionality of the built-in iPhone application Mail without providing sufficient differentiation or added functionality, which will lead to user confusion. …'
You need a computer to transfer data to it, so why not to program it? Yes, the toolchain is not available for windows, but that's at least understandable. The iPad is not currently marketed as a stand-alone device.
I have nothing against consumer electronics devices, but they're about consuming. The promise of computers is in creation.
Steve Jobs took Alan Kay's work, but not his ideas. The promise of the Dynabook isn't about hardware, but a change in how we create software. That change is coming, and that's the change to get excited about.
Yes, computers promise creation. But this creation isn't always developing software. A device can simply create entertainment.
I hate to break it to you, buddy, but you've become saturated in your community. It's very hard from that point to see how very small your pool is.
And you're ad hominem attack on being saturated in your community was most likely a projection, buddy.
There is no reason not to own a laptop and a tablet for much teh same reason that many people own an iPod and an iPhone and a laptop.
In my own case, I own a laptop for development, a mini for displaying media on my 37" display at home, an iPhone for calls and portable content consumption, and an iPod Classic for music in my car.
All of these together cost less than my first development system. I think that people who want to create content and programs will do so, and the iPad does nothing to hinder them.
You can't program filters for the Email program. The Email program is neither open source nor scriptable. You can't program formulas for the calculator. The people who program for iPhone OS are doing it in a completely different stage and environment. I can't just log into MY iPhone and change a program.
My personal and work accounts are both using GMail. I don't have the source of it, I cannot just login and change id, but I do not care.
You can get a bunch of programmable calculators in App Store, or just get Numbers and use all the formulas
My car probably has a couple dozens of CPU which I have no interest to program for. My TV probably runs linux, but I am not going to hack it. Most likely I will program for iPad, but I'd hate to do it on iPad.
I love to eat soup with a spoon, but I'd hate to carve spoon with a spoon.
But there is no choice. You are at the merci of Apple.
Other people want a different entertainment system in their car.
With Apple you can't - you can't replace iTunes on your phone.
No innovation has been hindered, in fact it has been enabled. Smalltalk, SOS and others are tools that make certain kinds of experiment easier.
I remember when RAD tools were only meant for building prototypes, with the assumption that the program would be rewritten in a conventional language afterwards. They only became the delivery environment after consumer machines gained so much RAM and CPU power that the benefits of optimization became negligible.
Well, these are cell phones, batteries with CPUs. We're back in the 80s again. Section 3.3.1 does not prohibit anyone from developing iPhone software with whatever cross-compiler or funky toolkit they like, it only prevents them from deploying the output to consumers through the App Store.
The point Jobs was making was that a device used exclusively for reading would never be successful. He wasn't suggesting that it would be pointless to participate in the ebook market, just that it would need to be on a general purpose mobile platform.
“It doesn’t matter how good or bad the product is, the fact is that people don’t read anymore,” he said. “Forty percent of the people in the U.S. read one book or less last year. The whole conception is flawed at the top because people don’t read anymore.”
I'm not sure I can read your interpretation into it.
From what I read, Jobs says that 'people' don't read anymore - even books on paper. So it is useless to bring books in any new ebook form, because the market is not there. Books in general is an outdated concept according to Jobs at that time.
1. Misdirection or
2. Change of mind (being wrong).
But, for just a moment, I'm hoping that some of you can appreciate how miserable an experience Apple users have had with the couple decades of various levels of cross-platform development that Microsoft has done.
At times, those applications have been _so_ bad as to be an advertisement for windows. I'm an Apple fanboy, and own three generations of Apple MBPs, three iPhones, and, of course, an iPad - but to this day, at work, I still keep a 2003 class Windows XP system with Microsoft Excel on it to get work done - The painful experience that is Office 2008, (and don't get me started on "NeoOffice") single handedly make me appreciate the fact that Apple is dictating that people write dedicated, high quality applications, directly for the iPhoneOS, rather than trying to do some crufty translation to that platform.
When I read Jobs's response, I could only imagine that he was having bad flashbacks to some of the x-platform disasters of years past.
I appreciate and respect that developers don't want to be told how to develop, but if the end result is that the few development shops out there capable of putting out a AAA title like Microsoft Excel, have to pony up a few more developer resources and put out a world class app directly for the iPhone OS, rather than just creating some half-baked x-platform experience, I'm in favor of 3.3.1.
Well, OK, but the other possibility is that the executives at the few development shops out there capable of putting out a AAA title take one look at Apple's terms, observe that their entire investment could be arbitrarily yanked by another commercial organisation without compensation, kill the iPhone/iPad development before it starts, and target more open platforms that don't come with the same absurd levels of risk instead.
In the long run, the developers will always win, because someone will always make a platform where good developers can write good software, and then people will buy that platform to get that software. On the other hand, no-one cares about the platform, even if it's Apple, once the initial "Oh, shiny!" moment wears off and you actually have to get stuff done.
What's more likely is that they'll build a native iPhone version and use a cross-platform toolkit or HTML to build for the other mobile platforms.
Well, that's the question, isn't it? I would argue that the AAA shops will ultimately define where the money goes in the long term. Early adopters buy based on platform hype, but what really attracts users is good applications.
> There's been a LOT of controversy about Apple's terms in the last two years and I don't know of a single example of a AAA moving off the platform and onto a competing one.
I'm not sure any mobile applications have reached AAA level yet. It takes time, research and evolution to achieve that kind of status. But it also takes the right development team seizing the opportunity, and that in turn requires that team to be looking in the first place.
I'm not sure that proves your point here. Microsoft has had a Mac development team since the very first Macintosh. They write native software that is not a port of the Windows versions. In the past, IE for the Mac actually had more features (and was more standards compliant) than the Windows version. All this proves is that, yes, native apps can be crap. Which is exactly why this rule is entirely pointless. It's the not the development tool that matters, it's the developer.
> single handedly make me appreciate the fact that Apple is dictating that people write dedicated, high quality applications, directly for the iPhoneOS, rather than trying to do some crufty translation to that platform.
They're also eliminating any other tool or language which can also be written directly for the iPhone OS. Something like MonoTouch uses the iPhone API directly, it just happens to allow developers to use C# instead of Objective-C. No translation necessary.
Even Adobe Flash apps being recompiled for the iPhone isn't a big deal. A high quality Flash game like Bejeweled, for example, is going work great on the iPhone if Adobe did their job right. That is an opportunity for you to have apps you wouldn't otherwise have and it's not wasting programmer resources rewriting it to achieve the same result for nothing.
Rule 3.3.1 does not mandate high quality applications. If you want that, make Apple use their approval process for that instead of their own selfish interests. This rule does nothing to give you want you want.
Minor nit: these two statements are true separately, but misleading together. Many of MS's early Mac programs were written to a bytecoded abstraction layer. The results were distinctly non-Mac-like, which is why MS eventually switched to fully native apps.
IIRC, this was true from the very beginning, while Jobs was still in charge the first time. Here's an anecdote from Andy Hertzfeld that mentions the abstraction layer in passing:
FireFox exists in my desk only because it has FireBug and a couple of other web dev. tools.
I've actually seen the benefits of the cross-platform approach first-hand, too. I've copied my same profile from mac to linux to windows and it Just Worked every time, extensions and all.
Thanks for emailing him.
(I don’t really know whether Firefox is such a good example. It’s a great program because it first challenged IE, not because it’s anything close to a native feeling app. There must be better examples out there, right?)
The only time I remember them reaching out to developers was a while back when app rejections were getting out of hand, and Phil Schiller (SVP of Worldwide Product Marketing) started making the press rounds to say that Apple was working to improve the situation (e.g., http://daringfireball.net/2009/08/phil_schiller_app_store)
For developers, this is the person who knows nothing about programming yet insists that you use X tool and write it in Y language.
The author seems to imply that either Steve Jobs or Apple itself "knows nothing about programming". That seems wholly unfair, especially for Apple, and even for Steve. Obviously Apple employs some very talented programmers, or else we wouldn't be here talking about the iPhone. But surely Steve has a working understanding of the issue? Compared to Wozniak, he may have been the less technical of the two, but reviewing his history at Apple, Pixar, and NeXT, I think we can agree that he has a much better understanding of his products than many CEOs.
Apple knows what they're doing. As usual, they are just very conservative and arrogant, which I'm personally OK with (in general) because they make great products.
It is, however, fair to say that Jobs is overlooking some very basic computer science. There is no reason why a tool like Flash can't emit Objective C, and there is no guaranteed way for an app reviewer to tell the difference.
But this issue is mostly about control, both of developer promiscuity and usage of system resources. Blocking developers' cross-platform plans is probably just a bonus. Apple could certainly solve any technical issues if it felt it was worth the effort and in its best interests.
Apple does not feel it is in its best interests... And for now, they are probably right.
Yet the TOS are useful, as a good set of guidelines: TOS compliance is very strongly correlated with chances of having your app accepted.
This has happened before. It's called the web, and it's beautiful. Slow to adopt? Hells yes. But I love it because it runs everywhere.
And it does _not_ run everywhere. With lots of work, you can make it run a lot of places; enough to be worth the effort. It is certainly useful, but not _nearly_ as useful as it could be.
Ted Nelson, who created the term hypertext, famously said, "HTML is precisely what we were trying to PREVENT-- ever-breaking links, links going outward only, quotes you can't follow to their origins, no version management, no rights management."
While politically I myself am very much in favor of open standards, for reasons I shouldn't have to explain _here_, I'm also vastly disappointed in the quality of most of the results, if from no other viewpoint than a human factors one. Like the talking dog, proponents seem happy that it talks (works) at all, and don't seem nearly concerned enough about what it's saying...
Whereas if Adobe feels like making Flash slow as shit on OS X, it does so. If Adobe doesn't feel like fixing a bug on OS X, it doesn't fix a bug on OS X. If Adobe can't be bothered to fix a security bug on OS X, Adobe leaves a huge security hole open on OS X.
The web is a "worse is better" alternative to native iPhone apps, but at least it's open and offers opportunities as well as dangers for Apple.
I've always seen Jobs as being highly principled and opinionated about the technology he helps create, but not particularly greedy (it is perhaps fortuitous that his principles have contributed to Apple's financial success).
I get the impression that Section 3.3.1 was changed as-is because Jobs honestly believes that restricting use of cross-platform toolkits and compatibility layers will help keep the iPhone platform and AppStore true to his vision of what those platforms "should be" (whether or not this is actually the case). I also don't think Jobs is explicitly trying to lock developers into the Objective-C/Cocoa development platform (though this might be a welcome side-effect of this decision from Apple's POV).
Philosophically I don't agree with Section 3.3.1. However I can see, on the one hand, how it fits in with what I understand of Jobs' character and motivations about his technology. And on the other hand I can see how it makes good business sense for Apple in the short-term. In the long-term it may not work out as well if it induces a developer-exodus. But since Jobs is paying attention, we'll see what happens when that time comes.
"Intermediary layers" are what make modern programming productive. We don't all write in processor-specific assembler because it's not (developer-time) efficient, and because we can accomplish a given task without having to resort to such a low level. For example, it's far more efficient to write in higher-level C and compile for the platform as necessary. The entirety of the software development ecosystem is "intermediary layers". C compiled to a platform target with GCC is sure as hell an "intermediary layer".
I can't help but think that what Jobs means here is "intermediary layers that aren't ours automatically produce inferior products". What an arrogant line to feed to developers. At least he's being direct (if not honest) with Apple's intent to fully lock developers into the Apple-blessed toolchain, from the initial concept to the final product. Ugh.
Is that not true though? In most cases, apps that use an intermediary layer will not be as polished or usable as an app developed using the native tools.
As for the other build an iPhone app application frameworks, the quality of the finished product varies from lackluster to average. At the worst, the finished app looks like one of the RSS reader apps that Apple is now trying to filter out of its AppStore. At the best, it's something like Location Scout. I believe by limiting access to third-party application builders, Apple is going to continue to increase the quality of iPhone apps. Titanium, Adobe et al will never generate anything like Tweetie 2. And, I believe Apple wants more Tweetie 2-caliber applications. To increase the S/N ratio. I believe Apple wants less crap and cookie cutter applications, even though some of the top 25 Free and Paid lists may from time to time have those types of 'Fart' type apps.
Apple is a premium brand. Even for developers. There are barriers to developer entry. It is kind of a privilege to write iPhone apps as you need $99/yr and an Intel Mac. The Cocoa/UIKit framework and CoreData persistence are tools that Apple engineers have invested centuries of programmer years in developing. There aren't many private APIs in Apple land; almost all of the standard iPhone apps could be recreated by third-party developers. And now with OS 4.0, I believe only a small fraction could not be recreated. As another example, Titanium et al. are not using CoreData - CoreData is designed to make managing and persisting an object graph easier. Which is what you need for non-cookie cutter applications. I have yet to find one application built on RhoMobile, Titanium, Ascena etc that leverages CoreData.
And, I wouldn't be surprised if they start rejecting apps for quality (as in what does this app provide that is of value).
"He downloaded Titanium on a Saturday morning, and by Sunday night he had a functional prototype of his Location Scout app..."
From what I've seen of the CS5 packaging for iPhone,
there are no native UI controls. Adobe claims to have
a project to port Flex to iPhone, and I can't assume
that it will use native UI controls.
A couple of telling examples:
I'm doing both right now, and I love Titanium because it gets me in the zone, whereas with ObjC, so often I have to turn on autopilot to get through the boring stuff when I create a new model or class or something.
"When Apple’s SDK was introduced in July 2008, the company tried over a period of several months to get a basic app up and running. Notes Bart Johnston, Director of Interactive, “I thought that my web development experience would have prepared me for developing on the iPhone, but it felt like I was starting completely from scratch. The learning curve was very high."
Does Apple really want to officially allow Titanium to lower the barrier to entry? Premium brands cannot be premium if everyone has access.
Getting a functional prototype to work should be simple and fast. (There's a big difference between a functional prototype and a finished product!) The fact that it's not fast using the Apple toolchain is exactly what's wrong with them. Developer time/effort is limited. A good dev environment should make the common stuff easy; since Apple seems disinclined to provide tools that do this themselves, our big hope for improvement in that regard was that third parties would get in there and fix the problem with products like Corona or Titanium.
Could they somehow say that programs must use native CocoaTouch widgets, while still allowing for people who want to compile from Scheme into Objective C or C?
Maybe some people don't want polish, they just want a momentary diversion (hence the proliferation of silly trivia type games and gag apps). I even saw the developer of a top-50 paid iPhone app be wow'd recently by a simple iPad game. Fun is fun, no matter how it is coded.
What will the results of this be?
* Lots of Flash content gets released on Android. This expands Android's software market considerably, though with a cost in performance/platform-integration (both in terms of UI and in terms of taking advantage of low-level capabilities).
* Many of the best/most popular and money-making Flash apps will get an iPhone OS-native port. The cost to write an iPhone app is relatively low; if you're talking about a game, the vast majority of the cost is usually in the assets. The iPhone developer tools are very good, there are lots of developers: finding an iPhone developer willing to make a native port of your game engine isn't difficult or expensive relative to the number of users you open up your investment to. Thus iPhone potentially gets the best version of many originally-Flash apps.
Thus, Android continues to have more possibilities (theoretical and, in some cases, actual), but a lower overall level of quality, integration, and performance... an issue its apps are already widely accused of. And iPhone, which has a tremendous lead in number of apps, loses out on a few — again, a fairly unpopular set which would have generally not fit in on the platform as well and would have slowed Apple's ability to require adoption of new platform capabilities.
It's hard to see the downside to Apple here. And it's hard to see how this does anything but make Android less attractive and iPhone more attractive for most mainstream (the overwhelming majority) users.
Now Zyngna does as you said and hires someone to build an iPhone OS native version. It'll come out 6 months to a year later -- but it's there. Then what happens? FarmVille is always being updated. It's easy to update the Android version but iPhone version always requires more work. So inevitably it falls behind or stops working entirely. Is that really more attractive for mainstream users?
Also, I feel you are underestimating the 'theoertical possibilities'. I have a custom keyboard (swype) that allows me to "type" extremely fast. On my computer, I use Chrome; it integrates poorly with KDE's UI, but since it is so damn fast compared to firefox, I use it.
Finally, a quality loss is very debatable for cross-compiled apps. Polarbit (http://polarbit.com/) cross compiles to iphone, android and Symbian and their apps are quite good.
Performance might not be such a big deal either - high-end Android phones spec-wise are significantly better than the 3GS; this advantage should make up for slower apps.
Also, a small fraction of complaining customers might actually purchase a Mac. Cha ching!
While the rest can't use their IPods anymore? I don't think Apple would be too happy with that.
When you have those kinds of resources to slop around, then sure, you can spend them on abstractions that only serve the programmer's convenience.
The only platform producing apps for a longer period of time has been Unity3D, which now advertises itself as having over 600 appstore games.
So your argument about raising the barrier to entry is weak, as these tools have only just emerged in the last 6 months. Prior to that we've seen thousands of poorly written, leaking objective-C applications on the AppStore. I've seen 2 RSS readers and the official digg.com app crash straight to springboard in the last 2 weeks, all written in objective-C.
Just because the language is closer to C and enforces memory management doesn't make its barrier any higher or require any greater skills - it means you'll get a tonne of apps that aren't releasing or reference counting and crash. I'm sure all this was hotly debated 10 years ago and garbage collection won.
Because apple is so slow and nitpicky with their approval process, if they allow this to happen their own policies will make sure they lose out to the less moderated platforms.
I think this is a good reason why apple is doing what it is. They want to maintain the app advantage as long as possible.
Seems to me there is an easier way - make your approval process better!
Remember, Microsoft didn't do this with Windows. Where did we end up? For years, an incredibly bad user interface became the norm, with shaky programming APIs to match. Most 3rd party developers simply copied whatever Microsoft was doing (out of laziness?), causing other applications and APIs to also be horrible.
We’ve been there before, and intermediate layers between the platform and the developer ultimately produces sub-standard apps and hinders the progress of the platform.
So it seems, at least from his comment and the context it was in, the intention of the clause is to remove layers that are other people's products.
There are two sides to the "hinders progress" claim. One is that, with an intermediary layer, new features added by Apple cannot be used by anyone relying on an intermediary layer to build iPhone apps until the maintainers of the intermediary layer add support for it. From what few comments we've gotten out of Apple, it seems they are trying to avoid a situation in which there is a large ecosystem of developers who are unable to directly exploit Apple's newest innovations on the platform, and instead work with least-common-denominator that their layer provides.
I think this is a totally reasonable thing to want.
The other side to this is that there is probably not a good technical way to make people obey. Innovation directly on top of a platform can involve abstraction into layers. For example, most of the best games all involve multiple layers of abstraction, in the form of a managed runtime for the game, some sort of scripting engine (or template/meta-language for specifying behavior), dynamic compiler (for shaders, AI and other tasks), etc.
The first thing a good programmer does when faced with a complex and uncertain problem is to build a grammar to express their ideas in on top of the foundation you're given. In C, this usually involves writing sets of routines that form a second (usually ad-hoc) 'language' that can be composed together to form complex ideas without having to hand-code everything over and over.
I see tons of bad and dumb Objective-C iPhone, iPad and Mac apps. It's completely possible to write first-class stuff in something other than Objective-C or C. ML variants, such as OCaml, SML and now even Haskell are speed demons in comparison to Objective-C. (The thing that makes Objective-C 'fast' is that when you need it to be fast, you just write the routines only in C, without message dispatching. Want to know how much fun it is to write GUI glue in C? Not very.)
I hope this means Apple is not going to start rejecting apps that are polished, fast, and innovative simply because they are built or expressed with tools other than C. I realize a lot of Flash->Objective-C compiled stuff would be crap. A lot of Objective-C stuff is crap, too. But some guy with his own hand-rolled Scheme runtime with message passing mapped onto the UIKit classes implemented with closures? If you reject that, you're going to piss off the very best developers, and dig yourself into the kind of hole that no technology company in history has been able to maintain mindshare once inside.
Addendum: if it's true that Apple's primary intention of removing layers is to keep their APIs and ecosystem nimble, then I would expect them to not reject games made with intermediary software, such as Unity3D. Games usually play outside of the main OS framework kits and are not as beholden to new UI features as normal application kit programs.
Exactly. It's not about forbidding other languages, they just don't want to be beholden to things like CS5. Gruber was right.
or bought Appcelerator and made a play for it to be the environment to develop mobile apps in.
If the future says we'll be able to cross-compile our apps for the 2 or 3 most popular mobile platforms, why not do have people do it on Macs, in Apple's environment, and have the paid apps end up appearing in an Apple controlled app store?
(side note: i've mentioned Appcelerator a few times in previous comments. I have no connection to them other than thinking it's a pretty neat product and have been looking forward to diving in to it properly. I'll be annoyed if Apple removes that as an option from me. FWIW, Appcelerator is the reason i've already paid $99 to register as an iPhone developer.)
Apple wants to prevent that future, not embrace it. They'd rather sell millions of iPhones to consumers than sell hundreds of Macs to developers.
No, you are completely wrong! There will be always sh!t games and apps, because sh!t developers exist either on Mac or Pc or Linux. So the solution is either to tighten the app store approval process or make a user voting system that select the best.
I do believe that Flash will bring loads of crappy game to the iPhone, however the couple exciting games it will bring are worth it.
Steve; if you were really worried about quality, you could examine the end product and make a judgement based on the final quality of each app in question.
This is a strategic business decision and you're treating developers like pawns. Potentially this move has the ability to stifle innovation.
So much for "Here's to the crazy ones." I feel more like a sheep that's being told a priori what to do.
Not every development environment is going to be a free-for-all. If a particular environment is too restrictive for our tastes, we don't have to develop there... though if our desire to support the users on the other side of the development environment is strong enough, then we might decide to put up with what may feel like are rather perplexing, pointless rules.
But you have a choice when it comes to mobile development. Android, WebOs, Symbian,... All allow you to do mobile development. The IPhone is not the only game in town. Which is why a move like this could be considered risky by some.
Does that mean that all of these developers are either fanboys or willing to "bow down" to Apple, or is there even a smidgeon of a chance that they actually think it's a pretty decent platform to work with?
I've heard a lot of complaints about developing for the iPhone, but none about the quality of the development environment.
That doesn't suddenly make them "fanboys", or "willing to bow", it just means they like the platform.
Consider this your first, then: the iPhone development environment sucks. People are using it despite the suckage or because they don't know any better. I do have an app in the app store, but the experience of making it was so painful - the cruftiness of Objective C, the gawdawful poorly-integrated mess of the Interface Builder, and various DRM issues - that I just couldn't take it anymore. I had a long list of apps I wanted to build next and features I wanted to add to the one I had, but programming for the iPhone turned out to be so unpleasant that I couldn't stand doing it.
The same sense of aesthetics that makes me really like using the iPhone makes me dislike using Objective C or the iPhone dev environment in general.
By way of reference, I really enjoyed programming for the Newton using the Newton Toolkit and NewtonScript, and I really enjoy using Ruby. Ruby and NTK were discoverable in ways that the iPhone toolchain is not.
My chief hope, if I ever wanted to develop more iPhone or iPad apps, was that third parties would jump in and fill the gap with more mac-like development tools that I could stand to use on a regular basis. Maybe something like Corona. I could even hope that competition from third party development environments might lead Apple to improve theirs. But no, these hopes have been dashed. So I guess I'll have to continue not developing iPhone apps.
Oh, and consider the posts on this blog your second-through-tenth complaints:
From my own experiences, bigger problems occur with extra large heaps (>32gb). That's where the dreaded Java GC pauses and CMS failures come in. In these cases custom memory allocators (such as memcached's) are what people turn to.
I'd also wager the iPhone/iPad are not low-memory devices by any stretch of the imagination. The amount of memory is orders of magnitude higher than the original machines on which Smalltalk, Common Lisp and Java were developed. Erlang (with the BEAM VM) is meant to run extremely reliable on very limited telecommunications switch equipment.
That being said, well written, profiled and optimized code in C is always going to beat code written in a JIT-compiled, garbage collected language. 3d graphics and gaming is one such place and I'd hesitate using anything other than C for these domains (at least for now).
It's just that small things add up. Take class members. In C++, all non-pointer class members are allocated together (like a struct). In Java, each non-array member is basically a pointer. That small little thing spread across say a UI/widget hierarchy adds up and creates a lot less memory locality, etc. Doesn't quite fold as nicely into the caching layers of the von Neumann model.
I totally agree with you about there being orders of magnitude more memory than the original machines that these languages were developed on. Actually, just googling 'ipad ram' (and filtering by last week -- man, I love that feature):
It looks like there's only 256MB or so. No idea why they didn't include more. That makes no sense to me. It's almost like they're squeezing VMs on purpose. Not sure if Jobs is that much of an evil genius, but yeah. I mean when you're paying $600 for a device made in bulk, RAM is cheap. Odd.
I am not saying the JVM (at least HotSpot) is actually best for the iPhone/iPad, there are better VMs out there. Erlang's VM is better (and again, runs in a much more restricted space), there are also register based VMs (e.g., Dalvik and -- best example -- how Apple themselves emulated m68k on PowerPC based Macs).
I'll definitely trust you in regards to UI programming: last UI programming I did for a salary was GTK+- in C, having played a bit with OS X SDKs / IB -- even prior to iPhone -- I found that to be a much better experience. The only Java desktop apps I use extensively are the IDEs (and both Eclipse with SWT and IntelliJ IDEA with its JNA/JNI libraries make heavy use of native APIs).
Cooperation would happen a lot more if cooperation were mutually beneficial instead of just benefitting the patent holder.
The creation of web was really a fluke, but the sort of thing that would be happening all the time if patents weren't discouraging them.
// I was just being sarcastic but given Apple's behavior I wouldn't be surprised if this happens.
Ok. So let the developers go elsewhere.
The only party hurt here is Apple. If they want to shoot themselves in the foot, then let them do so. It's one thing to have an intervention for a friend that is an addict, quite another to save a company from itself.
As a friend put it, section 3.3.1 pisses off an extremely small subset of iPhone users... namely, the developers themselves. No one else cares. If they app ecosystem dies because of it, then people will jump to another smartphone. But until that actually happens (if ever), Apple can get away with whatever it wants, and trying to argue about it is not going to get you anywhere.
If that gives you any sense.
A couple thousand Russian worm authors would beg to differ.
This is a classic arms-versus-armor battle. Arms will always win.
Don't forget that Apple has full access to the Flash IDE - they can generate as many Flash iPhone apps as they want, and test out their signature analysis programs until they fit - where as Adobe has absolutely no knowledge of what Apple is doing to detect their generator.
Apple has every advantage here. Adobe could put their best guys on it and Apple could defeat them with a single (smart) intern.
As for the long tail of code generators, which I wasn't talking about, I just don't think Apple will bother. They know they can't win there, but they don't need to. As soon as one of them gains any sort of popularity (like Unity), they'll cut them down, but until then, a few apps breaking the rules means nothing to them in the big picture.
There doesn't have to be an Adobe library in the binary. To the extent Adobe would want or need to include standard library code as part of a Flash-generated iPhone app, they'd just compile it as C. Absolutely 100% of the binary code would come from Apple's compiler.
There are a dozen trivial workarounds for 3.3.1, and the fact that Jobs apparently doesn't see that is unnerving. Somebody at Apple is feeding him BS.