I’ve been interested in learning iPhone development for a long time but always had some excuse for putting it off (working on the book, deadlines at work, etc, etc). However, I’ve finally had an opportunity not only to get around to it, but to do so with two different approaches. The first was Flash Professional CS5 with ActionScript 3 and the second was Xcode with Objective-C. While I do like having the option and ability to create apps with Flash (I also plan on looking into tools like Appcelerator Titanium and Corona), I think it’s important as a developer to at least try to learn/understand what’s happening behind the scenes and how to do it the “native” way. With that said, here are the apps:
I wrote this post this morning before Apple had their little iPhone OS 4.0 event where they announced a new change to the iPhone Developer Agreement that may ban the use of the Packager for iPhone in Flash CS5 for future development. Here’s a tad more info on the subject.
Tools: Flash Professional CS5 with ActionScript 3
Launched: Jan 19, 2010
More info: Here
Memory4Kidz was my very first iPhone app to both build and get accepted to the App Store. It’s a simple memory/matching game and the great thing about building this app with Flash was that I already had the code which I had used in a couple of previous game projects. Since I had the AS3 classes for the game engine, the card deck, etc already written and tested, I really only had to create new images to accommodate for the difference in screen size and make a couple of minor tweaks to the code. Once those things were in place, I went through the fairly simple process of publishing the app via the Packager for iPhone in Flash CS5 and I can honestly say that the only real issues/problems I had were more to do with the fact that the process itself was still being developed and kinks were still being worked out. I can also say that the particular issues I faced no longer exist in the process. While I’m not excited about the extra file size that Flash added to this app, I’m very happy with the rest of process and the ease of moving something I originally built as a web-based Flash game over to the iPhone.
Tools: Xcode with Objective-C
Launched: Apr 1, 2010
More info: Here
So to follow up building an app with Flash CS5, I thought I would go ahead and do what I had been putting off for such a long time and start learning how to build with Xcode and Objective-C. After buying a book or two to read and reference, I started with my own game called “sequenced” which is a pattern matching game where you figure out what comes next in a sequence of items. Once I got into the process, I really started to discover that I had been a little more intimidated than I probably should have been. As some of you may know, the Objective-C syntax feels kind of strange when you’re so used to working with ActionScript for so many years. However, once you start to understand things like how methods are formed (kinda backwards-ish?), it’s not half bad. Oh, and the file size of this app was a great deal less.
To wrap this up, I’ve obviously only scratched the surface of native iPhone development so I don’t feel comfortable making a real comparison between it and Flash development, but I will reiterate that I think it’s important to at least try to understand what’s happening behind the scenes and if you have the time, I definitely recommend learning how to develop both ways so you can choose the right tool for the job when your project calls for an iPhone app.
ClickTagger is an ActionScript 3 class that I’ve written for my upcoming book and it was primarily built to solve for the case sensitivity issue that Flash developers may run into when using the clickTag variable in their banners. Without a current standard in place for ad serving companies, some use clickTag while others use clickTAG and still others use ClickTag or even clicktag. In ActionScript 2 this wasn’t/isn’t an issue, but as soon as a Flash developer or agency starts creating banners with AS3 they may very quickly encounter the problem by having their ads kicked back for not working correctly.
— WARNING —
This post may come across a little harsh, make me sound angry, produce some new enemies or even turn you off to the idea of ever doing work with me, but please remember to take it with a grain of salt as I am just one man with a small gripe to get off his chest.
— WARNING —
I don’t typically like to write “rant” posts, but there’s something that has really started to grate at my developer nerves lately and I need to get it out there. When I stepped into Flash back in ’98/’99, I had no idea that it would end up being the main tool at the base of my career. You see, I graduated from The Art Institute of Dallas with a degree in 3D Animation and wanted to end up working for someone like Pixar or any other similar company. Well, as we all know, most people don’t come directly out of college and go into that dream job and I was no exception. I got a job that introduced me to Flash and I started learning it… first with simple tweens and animations and then on to this thing called ActionScript. This brings me to my point: I learned to program in ActionScript as opposed to some other “real” programming language. So what should bother me about that? There’s LOTS of old school Flash guys and gals out there that learned the same way, right? And together we helped Macromedia (and Adobe) grow the Flash Platform into what it is today, right?
A lot of developers that I’ve met who come from a background with “real” programming languages (C#, Java, etc.) and who have computer science degrees have long looked down upon us lowly ActionScript developers because ActionScript was considered a joke and not a real language. However, we kept our skin thick and persevered despite their condescending attitudes and attempts at programmer insults. But now things have changed. Now we have ActionScript 3. Now we have Flex 2, 3 and soon 4. And now we have those same developers migrating over. WHICH IS GREAT except for one thing… many of them still want to tell us how we’re “doing it all wrong” and then, in the same breath, ask us how to complete a given task in ActionScript. Here’s an idea: Let’s all learn from each other and let’s keep a mutual respect for each others’ training, knowledge and backgrounds.
Something else that’s more amusing than frustrating to me is that I still hear some of them complain about Flash and/or ActionScript in such ways as to make me want to ask them why they are working with it if they hate it so much. “Jason, why does Flash work this way? It’s really wrong and really messed up…. Jason, I can’t believe ActionScript doesn’t have a ______ method! Why doesn’t it have a ______ method like the language in which I learned to program? This is all wrong and really messed up.” To those I answer: Call Adobe or check out bugs.adobe.com.
Anyway, before I finish up on this post, I feel like I should add that I DO realize that I’m generalizing a bit here. I know that not all traditional developers are this way and I also know that the teams at Adobe who actually produce these products most likely come from these backgrounds. However, I’ve seen and heard so much of it lately that I just wanted to bring it up. And now I’ll move on and get back to thickening my skin again.
I learned to program in Flash and
- I don’t have a computer science degree
- I write BOTH procedural AND object oriented code
- I use the timeline when needed (animation and/or code)
- Design patterns are not my #1 priority
Thanks for reading.
The comments are open.
The key differences between this and what Microsoft is building are that the AS 3 library will be open source
That’s right, he said open source (you gotta love the Flash/Flex/ActionScript community). He also mentions that you can get involved and learn more at nuigroup.com. Check out the post when you get a minute and be sure to check out some of the videos on nuigroup.com as well.
This is by no means a new subject of discussion, but I’ve been thinking lately about how some people use setInterval more and some people use onEnterFrame more. I personally like to use setInterval mainly because I have control over the speed at which the function is called as opposed to having to rely on the frame rate. I know that there are instances where one or the other might be specifically called for, but which do you prefer to use more often and why?