I will probably never use Xcode again (unless Apple forces me to — and at that point I’ll probably just quit developing for iOS). And this is from someone who has been using Objective-C and Interface Builder since 1993… yes you heard me… 20 years ago I started using Steve Jobs’ vision of how development should be on the NeXT computer. It was awesome… then… it was awesome in 2008… but that awesomeness has worn off for me.
With the development of my last game I decided I didn’t want to use Objective-C or Xcode anymore. I wanted something fast, that I could rapidly prototype and test ideas. Corona SDK has turned out (for me) to be that answer. I recently gave a presentation at our local iPhone User Group spouting my enthusiasm for Corona. We wrote a Space Invaders type game in less than an hour. You can download the project and check it out.
Corona promises 10x faster development time. That’s been my experience. Is it right for everyone? Probably not. It’s really not geared for Enterprise type development (although the new Widgets 2.0 bring it close). It’s really for games games games, and that it does REALLY well. The big news is that Corona SDK is now FREE to use and publish your app to both the Android and iOS App Stores (you still have to pay Apple your $99 and Google your $25). If you need In-App Purchases then you’ll have to fork over some money. I happened to get in before the May 1st deadline and so I’m locked into a price guarantee for the next 2 years.
I’m looking forward once again to reviving some of the projects I had bouncing around in my head, but pushed to the back-burner because I dreaded starting yet another Xcode project. Apple does some things really well… IDEs, back-end servers, and cloud stuff aren’t things they do too well at however. I’d love to hear from other Corona users. Drop me a line.
It’s been a really busy week for Buttermilk. I was home sick for a few days, so I spent the time getting the new iOS update ready and navigating the Google Play Developer Console to get the Android version submitted. I’m happy to announce that the iOS update has been submitted for approval. It contains the new Buttermilk Store with 3 in-app purchases (well… 4 if you count the everything bundle). Here’s a quick video demonstrating the new items.
This same release has already made it to the Android marketplace. Here the link on Google Play.
It was pretty easy to get the Android deployment done. This was my first time doing it and it was considerably easier than navigating the pain in the butt that iTunes Connect is. I’m thinking Android will be where I release all future products first and then determine what I need to tweak for iOS.
So, as far as numbers… I’m not totally thrilled. I don’t have the Android numbers yet… since it’s only been out a day, but the iOS version got around 7,000 downloads in it’s first week. It spent a week bouncing around on the WHAT’S NEW list and then quickly fell into oblivion. I’m hoping the update generates some more buzz. Aah… the life of an Indie.
Will I make back the $350 I spent on the Corona SDK (plus the $25 to get into the Google market)? Probably not. But I’m still enjoying it, so I’ll keep doing it. Interestingly… the Corona SDK Indie version was retired the day after I upgraded to Pro. So everyone got upgraded for FREE. Just my luck. Oh well… and now the Pro version is $599/yr or something like that. So not sure I’ll keep it beyond the year I have it unless something changes. I still think it was the right decision for getting into the Android market for my first time.
Maybe next post I’ll be able to do a comparison of my iOS downloads to Android. And maybe even 1 person will buy something and I can compare conversion rates.
Buttermilk – The Bouncing Baby Goat is now available in the App Store. I’m pretty pleased with the reception thus far from the Buttermilk followers on Facebook. The fans seem to like it and appreciate the simple game play. It’s what I was shooting for. I released the game without in-app purchases because it had been a while since I’d released an app and I wanted to see how well “discovery” in the new paradigm is working. I think I lucked out because of the 10,000 followers over on Facebook (thanks Kathryn), so the game quickly made the jump to the NEW list in each of it’s categories (Games/Arcade, Games/Kids). I’m hoping next week it makes the jump to the WHAT’S HOT list. That seems to be the pattern (who really has this all figure out?).
If you haven’t downloaded it yet, please check it out and let me know what you think. As I said… no in-app yet, but it’s on my radar and I have some ideas how to do it without MILKING (pun intended) the customer. I also am considering releasing it to the Android Marketplace. Since I wrote it in Corona SDK, it’s ready to go (except for no Game Center equivalent). Corona SDK turned out to be the best decision. I will be giving a presentation on it next month at my local iPhone User Group in Columbus, Ohio. At that time I’ll post my slide deck to this blog. It introduces Corona and Lua and then steps through the creation of a simple Space Invaders game from the ground up — introducing different concepts each step of the way.
I also have some thoughts I want to write about concerning marketing. It’s funny how all the game review requests and prmac press releases caused all the marketing leeches to all the sudden have an interest in my app… for a fee. I do believe some form of marketing is needed in the current landscape, I’m just not sure that there are many out there that work or are worth the money. So hopefully a blog post coming up on that.
Until next time… Bounce On!
Well… it’s been 6 months since I last posted. Most of my time has been taken up by selling my old house, building a condo, and moving in. Now that I’m settled I’ve ramped up Funky Visions projects again. I’m proud to announce Buttermilk – The Bouncing Baby Goat. Buttermilk is a goat that took the YouTube crowd by storm last Summer/Fall with over 8 million views of her video.
I happen to work with the woman who owns Buttermilk and she asked if I would do a game. I told her I would, but that I was REALLY busy with my move. So finally over Christmas break I got to work.
I decided to use Corona SDK because I wanted to do rapid development and prototyping and I wanted to be cross-platform with iOS and Android. It turned out to be absolutely the right decision. When they talk about developing 10x faster they aren’t kidding. Things that literally use to take me days of work took hours instead. I bought the iOS license and waiting to see how the app does before tacking on the Android subscription.
Buttermilk turned out pretty much how I envisioned it from the first design meeting. I wanted a simple game for kids to play but challenging enough that adults might give it a try too. Therefore the scoring mechanism is really simple and the game mechanic is just one tap. I also wanted the artwork to be more polished than my last endeavors. So I spent a lot of time hand drawing buttons, etc. Here’s the game trailer (something else I had to learn to do as well — thanks iMovie).
I’ve set a target date of March 21st for release. This is the first time I’ve set a release date and not just let the app go live once approved. So I’m a little nervous with the whole release date and getting buried thing. Hoping it works out ok. Apple has this worked out by now, right?
Coming up I’ll probably start writing some blog entries about my experiences with Corona SDK. I have a game that I put on the back-burner 2 years ago that is a prime candidate for converting over to Corona. I also think getting Jiggle Balls out for Android would be pretty cool.
Until next time… bounce on!
A few months ago Justine Pratt wrote her observations of the CHOMP app ranking algorithm and user interface that Apple has deployed recently. I wanted to follow-up on that because of my observations of the revamped App Store. I think it’s going to have a BIG impact on the Indie Developer.
My biggest gripe with the new App Store interface is the removal of sort by release date. I think “smart” customers used it to find new stuff (I know I did). I don’t care what anyone says, the New Release list was the Indie Developer’s best friend. For those of us with small budgets, it WAS our only exposure. Can you imagine Tiny Wings being released nowadays with the same marketing Andreas used? (which was none as I understand it — other than it being seen and word-of-mouth spreading it like wildfire) One of the best games of all time would have been buried. You have to have that initial exposure to make the jump to the top 100. If you miss that — you are gone. After that you’re going to have to do some mighty fine marketing to get noticed again. I don’t even know how I’m going to find new stuff anymore, except for what Apple wants to show me.
I also don’t like the new card-style UI. In my opinion it looks really really crappy. The layout looks poorly thought out. I almost feel like something is missing or has been clipped when I’m looking at it. And I doubt anyone is going to traverse very deep with it. It’s slow and clunky. It appears that Apple is trying to synch up across iTunes and devices using HTML 5. That’s great, but I just hope they improve things pretty quickly. I brought up my “Purchased” list and it spun and spun and then crashed several times. Finally I got it to come up. I probably have a much smaller list than a lot of people (5-10 apps a week) so it concerned me that it took so long (assuming size matters).
I like Apple. I like that they’ve given me a place to market my wares. I just think this recent move is hurtful to the indie developer. Without the indie developer the App Store would not be what it is today. Somewhere I heard that 60% of the apps in the App Store have virtually no downloads at all. I believe it. I’ve progressively seen my downloads going down since the chomp algorithm. I used to make $300-$400 a month on my 4 pay apps. Now I’m making around $120-$150. I have several projects I’m working on but I wonder if I should even spend the time finishing them. I’m not out to make tons of money. I really want people to find my stuff and have fun. But if I’m gonna spend 6 months developing something and get less than a dozen downloads, I’m just not gonna do it. It’s a fun hobby, but without that motivating factor it’s really hard to complete something.
I don’t have a solution that’s fair to everyone. I still think the release date mechanism was a good one. I’d love to see an Indie Developer App Store (but what would be the qualifications for entry?). I’d also love to be able to buy visibility in the App Store or at least a lottery I could enter for the chance to be seen. The App Store is becoming the playground for the big boys. Every once in a while we get to root for an indie making it big and climbing to the top of the monkey bars. But even those days might be coming to an end. I’m discouraged. I’m gonna go over here and play in the sandbox.
P.S. I’ve seen a few posts in the Apple Dev Forums that comment that Apple is still playing with the UI and that maybe sort by release date will make a come back. I’m not sure of that, but crossing my fingers.
Jiggle Balls Studio for the iPad has a new store front and I added 1 new theme to the store. I’ve been super busy with our house move, so instead of tackling any new projects I thought I could at least make some progress by spending a few weekends updating an existing one. And to tell ya the truth it feels good. Plus it’s also good to stay in the submittal phase, since every time I go to do this something has changed with the process or tools.
My store front use to be a UIPopoverController. But this really limited what I could show. So I decided to make it a Modal View Controller much like my More and About screens. I now show a preview of the themes and gadgets.
In addition to the Default and the Space themes, I’ve added the Groovy theme. It borrows from a lot of 70s memorabilia and ideas. There’s even a bouncing disco ball. And of course I still support the bomb, black hole, and magnet gadgets. I have a couple more gadgets in mind.
I’ve submitted the update to Apple. It’s amazing to me how much easier the process is than when I started 3 years ago. But I guess it’s still a challenge for new people coming onboard based on the Apple Developer Forums. Jiggle Balls Studio is FREE. So I’d appreciate you checking it out and providing any feedback.
I’ve also been asked to work on a game based on a current YouTube sensation with over 5 million views. I’m trying to find the time to work on it, since it’s 15 minutes of fame will be over soon. Plus I still am working on my never ending game I previewed for you well over a year ago. I think I got overly ambitious with it and I need to scale it back. I’m looking forward to getting moved and having the Winter to hibernate and work on these projects.
Last entry (Memorial Day) I was complaining about the lack of posts on the idevblogaday blogs and then I went on to miss my next 3 entries. Argh! I’ve been thinking about this weeks topic for a few weeks now after listening to this Hypercritical podcast and watching all the D8 Steve Jobs conference interviews on iTunes. It concerns the Technorati view of software and hardware. Let’s call us the one percent (it’s probably even lower than that).
Steve Jobs understood the difference between the techies and the consumer, and thus Apple builds consumer motivated devices. Microsoft (and more recently Google) on the other hand have never quite gotten this right and always builds with the techie in mind, not quite understanding the consumer. Most recently Apple proved this with the removal of the optical drive in their Retina Display MacBook Pro. They’ve done it in the past with the removal of the floppy drive and the reversal of the mouse scrolling in Lion.
I heard Joe Nuxoll (of Java Posse fame) recently tell a story about his mother. He had upgraded her to Lion and a few weeks later asked her about the reverse scrolling and if it was bothering her. She didn’t know what he was talking about. Apparently she had intuitively switched over after a few failed attempts of it going the wrong way. The rest of us with it ingrained in our brains have since turned off the setting and gone back to the way it use to be. A good example of how Apple understands the consumer and builds their products around THEM.
It’s one of the reasons the iPad has been so successful and past tablets haven’t done well. Sandboxing the apps and having no access to a filesystem seems ludicrous to us techies. But to the consumer it just feels natural. In fact they don’t even know they are missing it. In the Hypercritical podcast referred to earlier it was mentioned that if laptop batteries had NEVER been removable we’d probably not be complaining about Apple’s laptops that need to be sent in to have the battery replaced. He gave the analogy of adding a super charger to a car. Sure, there are experts that can order one and install it themselves, but for the rest of us it’s acceptable to take our cars in and have the work done on them. This is how the average consumer feels about electronics. Steve Jobs got it right.
I think this is important to remember when designing software. The Keep It Simple Stupid (KISS) principal applies. Too many settings make the average customer uncomfortable (just look at Facebook). Sometimes this can be taken too far in the other direction though. For example the recent Podcast app from Apple. The speed controls, etc. are hidden underneath the podcast splash page (you have to push up to reveal it). It’s snazzy once you find it, but maybe too much shielding from the average consumer. It’s probably one of the reasons the one touch game is so popular in the App Store (Tiny Wings, Angry Birds, etc.). I was expecting the recently released Outwitters to climb right up the charts. While I’m sure it’s done well, it doesn’t have that casual gamer appeal to it like their previous title Tilt To Live.
Sometimes I forget that not everyone views a product the same way I do. It’s important to listen to your customers. Forget about the one percent and think about the ninety nine percent.
Wow. It’s been a busy couple of months. Not on the iOS front, but I’m moving and put my house up for sale and building a condo across town. Unfortunately that’s meant I missed 2 of my blog entries. So I decided I was going to sit down and write one today no matter what. Actually, I’m kind of disappointed that the idevblogaday blog has seen little activity lately. Even if you don’t have any development going on (as has been the case for me lately) I think there are always topics worth talking about. For example, a recent post on Touch Arcade about the “flop” of Whale Trail got me thinking… just because there is a big budget and lots of talented people behind an app, does that ensure or entitle them to be successful? A quick look through the Apple Dev Forum also confirms that many developers “think” they should be entitled to more success in the App Store (I would include myself in that list). There’s whining about Apple not featuring them (I’ve been there… done that), about customers leaving terrible feedback (I’ve learned to take that with a grain of salt), and just overall lack of exposure.
Was Whale Trail a bad game? Absolutely not! I loved the art style and the soundtrack. What was lacking for me was the replay value that something like Jetpack Joyride has. It sounds like ustwo has realized this and is rebooting the product. Will it revive it? I hope so… because it would give me hope that reworking my apps could mean more success as well. I’ve thought about going back and reworking Tramp Stamp from endless play to level based with more achievements, but I’ve questioned whether it was worth my time. So I will be watching the Whale Trail reboot with interest.
The App Store is also proof that big budgets don’t guarantee success. Tiny Wings was a huge success and I’d imagine the budget was very very low. I’ve seen other games that I thought deserved to be more successful get buried. Games like Hot Donut that was clearly a Tiny Wings knock-off, but I thought took it to another level and was fun. I wouldn’t say ustwo was whining about their failure, but I certainly think they thought they’d do better just because of the experience and money they put into the product. The App Store is a lot like Hollywood. Huge money doesn’t mean success (the lackluster performance of John Carter is proof of that).
Much like Hollywood, you also need to be successful immediately (although there are exception like Train Yard that found success later on). Once you are buried it’s really hard to regain exposure. I still contend that if you don’t make the jump from the “release date” list to the “top 50″ list within the first few days you are toast. Most app release graphs are proof of that with a huge spike that QUICKLY drops off (as ustwo demonstrated). All my graphs look similar, with the exception that mine are much smaller by a factor of a couple of zeroes.
It also would appear that being featured by Apple isn’t the Holy Grail that many of us believe either. If I’m not mistaken Whale Trail was featured by Apple many times. While I’d kill for their numbers, the features didn’t propel it into Angry Birds or Tiny Wings status. I would imagine that the spikes you experience during an Apple feature are similar to what you get from sites like freeappaday (which I think are a complete waste of money). You get tons of exposure but unless you are truly a stand-out product you’ll quickly resume back to your normal download count after the promotion. And why does Apple feature apps that clearly need no help anyway? Ok… jealousy aside.
So I guess the bottom line is, don’t feel entitled to anything when it comes to the App Store. Do it cuz you love it. Make that show in your work. If you build something great you might… yes might… get some recognition… or you might get buried. Be prepared for that. And if the Whale Trail reboot is a success (hey, J. J. Abrams did it with Star Trek) then you also have the option of going back and rebooting your product as well.
For those in the U.S. — Happy Memorial Day — enjoy your BBQs and parties. Crazy crazy heat here in Ohio right now.
In a previous blog entry I had mentioned that I combined my Full and Lite versions of each of my apps into one XCode project using targets. This was something that pre-XCode 4 was pretty hard to do, thus my decision to keep them as separate projects until recently.
Another reason to create multiple targets would be to keep your iPhone and iPad versions in the same project. This probably becomes even more important nowadays if you don’t wish to go the Universal App route and prevent retina assets app bloat. Plus it gives you the option of pricing your iPad app differently than your iPhone app if you choose to do so.
I didn’t go into much detail the previous time around other than to give a few quick pointers. This time I’ve created a sample project and will guide you through step-by-step with screen captures where appropriate. The project can be found here (you’ll need it because I’m not going to go through every single step in this tutorial).
The first thing I did was create a new “Single View” project.
This created a target with the same name as the project.
I really wanted to create 2 targets with different names than the project. So I created 2 new “Single View Application” targets (File->New->Target). The first one I called MultiTargetIphone and the second MultiTargetIpad, making sure to select the right “Device Family” for both.
I then removed the original MultiTarget target, scheme, and directory. You do this by selecting Product->Manage Schemes. Click the minus sign to remove MultiTarget. Then select the target in the TARGET view, right click, and delete. Also remove it from the files view and the physical directory in the project (show in finder). If anyone has a better way to remove a target and all it’s files, let me know. It seems like a lot of areas to remove.
Here’s what my project looked like after this step
And in Finder
To prove that these are indeed 2 different targets and binaries I’m going to add some shared code and assets as well as specific target code and assets. When we’re done we’ll examine the resulting bundles and make sure only the necessary assets are included. When adding files and assets make sure you specify what target they should be included in.
or you can do this after the fact in the File Inspector panel
In this example I’m using a separate XIB file per target. I’m going to put 2 buttons in each. One button will call a target specific IBAction and the other will call an IBAction that will use a shared class to perform it’s behavior. Both targets include SharedStuff.m and shared.png, however they each have their own ViewController that handles the specific behaviors for that target as well as their own button images (ipad.png and iphone.png).
The one thing I did notice is that Interface Builder doesn’t seem to honor the “Target Membership” settings. That is, when I’m editing the XIB for the iPad it allows me to select iphone.png as the background button image even though I only added that file to the iPhone target. The button DOES end up empty as expected when you run the executable (because the png file is not included in the bundle), but just be aware interface builder may be showing you things it shouldn’t (let me know if you have a different understanding of this).
I’m not going to go into the details of wiring up the IBActions, building the UI, or writing the code in the action. You have the source and can play around with that. Here’s what my project structure now looks like.
My directory structure in Finder looks like this
You’ll notice I also added icon.png and icon-72.png for both the iPhone and iPad. You can select the icon to use in the target’s summary panel
Ok, now let’s run the 2 targets. First select the iPad one and run it on the iPad simulator.
You’ll see the following
The top button is using ipad.png to display it’s contents. The bottom button is using shared.png. Clicking on each will call the appropriate IBAction in the ViewController and display an alert dialog. The shared one will use SharedStuff which is common code (and asset) shared by both targets.
Now let’s run the iPhone one in the iPad simulator to prove that they are indeed 2 different binaries. You’ll know this because the iPhone version will run in 1x mode and not take up the full screen.
You’ll also notice two different icons on the SpringBoard.
Ok, but how do you know the bundles only include what is necessary for each platform? One way is to look at the “Build Phases”.
Notice that the iPad target includes it’s version of main.m, AppDelegate.m, and ViewController.m, and includes the shared SharedStuff.m. But it doesn’t reference any of the code files for the iPhone target. In the resources it has it’s own InfoPlist.strings, ViewController.xib, and ipad.png, and shares shared.png, but doesn’t reference iphone.png or it’s interface builder files.
Another option is to build for the device and use PhoneView to inspect the package contents.
You don’t see any of the iPhone assets in the iPad bundle.
Whew… I hope that helps understanding how to build an iOS app that can target multiple devices separately and yet share common assets. Or you might use it to provide full and lite versions of your app. You’d just add a LITE_VERSION compiler flag to the build settings for your lite version and ifdef your code accordingly.
There really is no reason not to try and combine different versions of your app into one project now that Apple has made it easy. While this use to be hard before XCode 4 it’s obvious Apple has given this considerable thought since then.
UPDATE: Last weekend I submitted Jiggle Balls Studio to Apple. It’s the update to Jiggle Balls HD that is now FREE and supports In-App Purchases. I’m still waiting for it to be approved, but in the meantime you can go get the previous version for FREE and get yourself ready for the update. Enjoy!
Today is a status update along with some helpful Box2D hints. I’ve spent the last week working on finishing the new themes and gadgets that will be available via In-App purchases in Jiggle Balls Studio (formerly known as Jiggle Balls HD). One of the things I was most challenged with was how I was going to do the magnets. I wanted them to attract all the balls within the magnetic field. Initially I put out a call to my Facebook buddies asking the following:
Ok math gurus. Need your help. I need to know when a ball gets in the magnetic field (blue) of the magnet. I know the middle coordinates of the magnet (it’s really just a circle underneath) and the angle it is rotated. The magnetic field is drawn relative to the magnet. I know the balls coordinates and diameter. I just need to know if the center coordinates of the ball fall within the coordinates I need calculated for the magnetic field. I don’t really care about the small angles in the beam, just treat it like a rectangle. Got it?
As I started thinking about it I realized that Box2D could do this for me. BTW… I humbly believe that Box2D is one of the most useful opensource projects out there. Without it I don’t think many of the iPhone games that exist (including Angry Birds) would have been created by the indie developer. So anyway… ya… I remember something I did in Tramp Stamp to detect when the ball fell within a region. The only difference here is that I needed to have that region attached to the magnet and rotate with it. Well… it turns out this was REALLY easy. I just added another shape to my body and marked it as a sensor. Sensors don’t act as normal fixtures. That is they don’t collide with other fixtures or affect the overall behavior of the body. Wallah! I now easily had a way to detect when the magnetic beam intersected a ball.
You can see this in effect in the follow demo video I’ve posted.
Hope that helps someone out there. It’s amazing the things Box2D can do for you when you model things appropriately. I’m just about done with Jiggle Balls Studio. I’m hoping that it will be released before the end of April. Then I’ll get back to my game I abandoned a year ago.