UPDATE:  Man, forget my meager tips.  I just came across this site here which aggregates all the useful tools for iPhone developers:  iPhone Dev Tools

I had to update AppSalesMobile today to be able to continue downloading my sales info from iTunes Connect on my iPhone when I realized I should do a post about the various tools, websites and what not I’ve found that have been helpful to me in developing iPhone apps.  So here’s a list of things in no particular order:

AppSalesMobile

You download the XCode project from Github for this one and then set it up to install on your phone.  You have to update it every once in awhile, for some reason I haven’t bothered to spend time figuring out it will tell you that the “download failed from iTunes Connect”, when that happens you know it’s time to update heh.  It’s really handy, it shows you daily/weekly trends for all your apps, where people are buying your app in the world with nice charts and it’s just a nifty thing to be able to obsess about your sales on the go.  Here’s a tip:  if you’re paranoid about giving any app or website your iTunes Connect login to download information, go to iTunes connect and create a new user.  Then assign that user only permission to download financial information, nothing else.  Then you can be safe in your paranoid blankie.

AppFigures.com

These guys take the reporting and tracking of your sales stats to a whole other level.  Automatic syncing with iTunes OR manual upload of the files you download from iTunes Connect (if you still can’t shed your paranoia blankie).  The thing I think is the coolest about this site is the “Profit By Region” tab which calculates how much Apple should be paying you for that particular month, and how much carries over to future months.  This is an extremely difficult thing to figure out on your own.  If you’ve seen the data coming from Apple you know what I’m talking about.  This site costs money, which I can’t afford right now, and my trial has expired.  But as soon as I release this game I’m working on and it makes some money I will be signing up with them.

Google reader + App Review site feeds

I am trying with all my might to keep track of the apps released on the store so I can get a handle on what kind of apps are being put out, who my competitors are, and whether any direct competitors for the apps I’m developing get released.  If someone else puts out a game just like my app, I need to make sure I crush them on quality when I release mine, otherwise what is the point right?  Well the best way I’ve found to do this is to use Google Reader, and subscribe to the feeds for a couple of sites.  It’s much more efficient than browsing the App Store.  Here are two feeds that should do you well:

  • Apptism – This one is just a straight dump of every app that gets released or updated.  Extremely high traffic.  This is the good one for just quickly scrolling looking for apps that could be competitors or seem interesting.
  • Whatsoniphone.com – This one is more selective.  I am using this one as a quasi-filter for the massive deluge of apps that hit the store.  I figure if these guys take the time to review it, it’s probably not just another junk app which I don’t care about.

Mobclix iPhone stats

This site is useful when I’m trying to make decisions about potential apps I might develop.  With this I can see how similar apps are ranked, and scrape all of their reviews.

iPhone GUI element Photoshop template

If you’re developing an app, or preparing an estimate or design for an app to give to a potential client, this template for Photoshop is just what you need to do high quality mockups.  I used this when I prepared my estimate a little while back and the result were some seriously professional looking mockups.  In fact I almost worried that they might make the process seem trivial they looked so good.

The other tools I use I think I’ve already blogged about and you can find them in earlier posts on this site (clang analyzer, etc…).  If you’ve got any tools or websites/resources you find useful add a comment here so I can get in on the fun.

 

Accounting today… Yuck!

On August 26, 2009, in Entrepreneurship, by admin

I’ve got to figure out my Quickbooks today and enter all my bills.  I don’t like going in there since there’s no income coming in yet so it’s depressing, but I must solve an imbalance I left the last time I was in there.  My wife found a cool article to help with finding accounting errors.  The divisible by 9 trick is cool.

Then it’s back to working on the rubber band logic.

 

I’ve finished porting over to Cocos2d/Objective-C one of the main components of the Unity version of the game.  The level object manager looks after all the platforms, collectibles, and enemies in the level.  It takes care of dropping them with the current level drop rate, manages their allocation/deletion and manages the physics space.

Now that that’s done I’m able to populate the level with platforms and collectibles.  So today I’ll finish up porting collectibles quick, and get the score finished off so I can start the big task:  porting the rubber band logic.

Porting the functionality of the character jumping via the rubber band is going to be tough because the Unity version relied on a few Unity-specific things.  For example I locked rotations on the physics object.  Another example is I used the spring joint from the Ageia PhysX engine to do the arm’s latching/anchoring onto platforms.  Chipmunk looks like it has some joint features, but from reading the docs they look not well flushed out and still early in development.  I know the next version is going to have a lot of work in the joint area.  I hope I don’t have to write my own spring logic, that would be time I can’t afford right now if I’m to get back on track.

 

I “fixed” my timestep

On August 20, 2009, in iPhone Development, by admin

There’s a great explanation of why you need to fix the timestep of your physics simulation in games at this fellow’s blog.

Thinking back at all the main loops and physics calls I’ve seen on all the games I’ve worked on I don’t think I’ve ever seen anyone do this.  The argument for why to do it makes sense to me.  Maybe I’ve just missed it by not looking deeper into the physics update calls.  Maybe most people internalize this fixed timestep process to the physics engine.  Or maybe this guy’s wrong and I’m just believing him because his blog is so professional / smart guy looking hehe.

I’ve integrated Chipmunk (a 2D physics system included with Cocos2d) into the game, and the character is now dropping like a rock onto my level boundaries.  Today I’ve got to set up an inheritance model that will make adding and removing platforms, collectibles and pinballs from the simulation space safe and easy.

 

Rebuilding with cocos2d

On August 17, 2009, in iPhone Development, by admin

I’ve got the project all set up, and I’ve got the background elements in place as sprites now.

Today I’m working on getting the character assembled as a composite node of sprites.  Once that’s done I’m going to re-add the platforms and hook up physics.  I want to see the limits of the cocos2d physics code and be sure that I can achieve the gameplay design now that we’re in 2D.  This should be doable, but it’s best to test it out first before I go too far in one direction or another for laying out all the sprites.

The inheritance model of cocos2d is making it quite easy and clean to build my levels.  I’ve made a base level layer that will manage the character, and objects that are in every level.  Then each specific level will inherit from this base level layer, and add their layout for platforms and collectibles.  The base level layer will handle all the input because specific levels don’t care about input at all, they’re only concerned with the layout of level objects.

I’m really enjoying being back in Xcode versus the Unity editor.  Nothing against the Unity editor and the way that system works, it’s just nice to have a full debugger and a more structured development environment.  It’s a warm safety blanket.  I always felt while doing the Unity version of the game like I could go down a long path and then find some massive error and have no real solid tools for solving the problem.  I guess I’m paranoid and need my blankie.

 

Cocos2d it is

On August 13, 2009, in iPhone Development, by admin

I’ve learned how to use cocos2d, it’s a pretty simple API actually, and for an open source project to me it is very well thought out and engineered.  Good for those guys.  I like the CocosNode / Action / everything’s a child design they went with.  It’s very intuitive and I can see building any simple game in two seconds with it.

A friend of mine wrote me to say that his team had tried using Unity for 2D, cocos2d and Torque’s 2D system and they settled on Torque.  I got into Torque for a bit 4 or 5 years ago, but haven’t looked at it since.  From what I’m seeing with cocos2d though I think it will do what I need now that I’m only doing 2D, so no sense shelling out for another engine yet.

Hopefully this game will do well so I can fund some more software purchases.  The next game idea I have floating around in my head definitely needs to be 3D, so I’ll probably want to buy Unity Advanced and iPhone Pro for it which is quite a few extra bucks.  One thing at a time!

So right now I’m working at getting the artist’s level test image chopped up and put in as placeholder sprites so I can complete the logic rewrite using all sprites.  Should take me a few days.

 

This article and many others like it that I’ve read in the last couple of months claims that games are definitely the most successful apps on the iPhone, which confirms my theory that the iPhone is just a big screwing around device and all apps/games you make for it should reflect that.  This shows in the sales numbers for the two serious / useful apps I’ve built so far. :|   But it gives hope that once I get this game done so long as it’s fun it should have a much different result.

All I need to do is amp up the effort and get it out the door!

Still waiting to hear back on the design/estimate I sent out, in the meantime working on level design for all the levels so I can set the artist on full steam production of 2D assets.  Then I’ll be investigating cocos2d and making the call today whether to continue with Unity for this project or switch to Cocos2d.  If anyone else has done this comparison and wants to share their thought process for which way to go on a 2D game I’d be happy to speak with you.

 

Estimating for some potential work

On August 6, 2009, in Entrepreneurship, by admin

Today I’m doing mockups, planning and estimating the work involved in making an app for a local company.  If they accept my price it will be a good way to put some money in the bank to pay for things like sounds for the game, and end of year fees and what not.

My days spent profiling and trying to get the framerate up bore no real fruit.  The highest I could get it to on the device was 20fps which just isn’t enough.  This, combined with the artist I’m working with having more and more concerns about the game in 3D without real lights and shadows etc… is making the appeal of 2D call to us.  So right now the plan is to go to 2D, I just need to figure out what that entails once I’m done with this proposal.  I think I’ll investigate cocos2d and see whether it would make the 2D side of things go easier than Unity.  Luckily my Unity purchase is for any game I want to make not just a specific game so I’ll still have it for future projects.

 

The framerate in my game’s bouncing around all over the place, sometimes ~28fps in the editor, sometimes ~100fps.  Through my extremely detailed and accurate analysis (aka checking it out in the editor and then on the iPhone 3g 2 times) I’ve calculated that if you multiply the editor framerate by 0.17 you get the iPhone framerate.  So I need to get the editor to a stable 176.450588 fps.  Heh.

Tactics:

  • I’ve got to work with the artist to clean up all of the art as we’ve been seriously messing around with stuff to get the pipeline sorted out.  There’s a lot of weird bad FBX exports with double sets of geometry and stuff like that.  Although according to the stats window in the Unity editor I’m pretty confident that rendering is not really the framerate suck right now.  I believe the problem lies more in script and physics objects.
  • I’m optimizing all the scripts I’ve written so far with some techniques like caching references to properties of objects (like the object’s transform) that would ordinarily trigger hidden lookups on the object to find the particular component.
  • I’m going to investigate writing a “physics manager” which will let me register objects, and automatically do some use of the Unity ability to tell one object to ignore another object in the physics system.  Hopefully I can eliminate a lot of things that don’t need to be checked against each other (e.g. the platforms in the game interacting with the collectibles in the game).
  • Finally if I don’t squeeze enough out of that I may need to look into slimming down the level some with the artist to require fewer physics objects.  I hope I don’t need to do this.

Today’s a stat holiday in Vancouver, and the weather’s beautiful.  I looked at my contact list on MSN and there’s me and one other guy I know who’s also self employed active.  Everyone else is set to away or offline.  Scumbags!  Oh well, I’ve decided if I can get a good day of work in today I’ll reward myself with the night off in honor of the stat holiday.