bensmiley's blog

Gym Simple Released on the App Store


The base unit in Gym Simple is an exercise. An exercise has a name, an icon and some units. Lets look at an example:

If you use the cross trainer, you could add an exercise like this:

  • Name: Cross Trainer
  • Unit 1: difficulty
  • Unit 2: time

If you wanted to do a bench press the exercise would look like this:

  • Name: Bench press
  • Unit 1: Sets
  • Unit 2: Reps
  • Unit 3: Weight

Once you've added exercises, each time you train, you can enter the details and the app will remember your history.


Exercises can then be added to workouts. Maybe you train cardio once a week so the workout would look like this:

  • Name: Cardio
  • Exercise 1: Cross Trainer
  • Exercise 2: Running
  • Exercise 3: Stepper

When you click on each exercise you can see exactly what you did last time! This helps you balance what you do this time and see how you're improving.

I also added a graphs module to the app so you can plot any exercise on a graph to see how you're doing.

Anyway Gym Simple is available on the App Store now. It's free so download it and give it a go! Gym Simple


My quest to make a messaging app for iOS

  • PHFComposeBarView - This project is a offers a text field similar to the one in what's app. When you click the text a keyboard pops up and the text field animates above the keyboard. As you type the text field increases in size to accommodate the text. I thought that this project could save me lots of time so I downloaded it and opened it in Xcode. Unfortunately, straightaway there were three obscure errors that stopped me compiling the project - it looks like you have to use Cocoa pods install it! Next I looked at the code to see if there was something that could help me. Unfortunately the code is bad. All the UI was defined programatically and they didn't use Auto-layout - just hundreds of different offsets and other obscure definitions. Maybe it works, but personally I don't like adding spaghetti frameworks to my projects. Overall a thumbs down :( PHFComposeBarView scores 3/10

  • Acani This looked promising - the open source code to the Acani messaging app. So I logged on to Github and downloaded the project. Unfortunately the first version didn't compile at all. After 45 minutes looking I found a different version which was more current and I'd downloaded all the dependencies and I was ready to open the app. I was presented with a button "Connect with Facebook". I clicked it and Facebook opened. Then the app re-appeared with the same button. Because I didn't fancy digging in and finding the issue with the app I decided to look at the code to see if there were any useful hints... The problem again here was that almost all the UI was defined programatically. Haven't the makers of these frameworks heard of Interface Builder or Autolayout. Also, this is a pretty complicated app that does much more than just chat. I dug through the code for a while but didn't get much valuable information from it. Acani scores 2/10.


Calling All Testers!


Traps Developers fall into #1 - Flexibility Bloat

The company wanted to update their software to run on Windows. The developers were very enthusiastic and clever. One of them knew Delphi they they wanted to crack on so decided to write it in Delphi. Being very intelligent they wanted to write an extremely elegant program. They abstracted EVERYTHING! The code was full of adapters and bridges and contexts. They wrote a clever piece of software to handle database mappings via XML config files. It was all very complicated and very clever. The problem? It was a nightmare to maintain. Only about two people in the company know how the whole thing worked. The second problem is that it wasn't future proof. After 5 years the Delphi interface was looking a bit tired and XPish. In the end, the company decided to scrap the framework and start again in Java. The original developers had been so excited about architecting an elegantly complex object orientated beast that they didn't see the wood for the trees and had lost sight of the most important thing. The business case. Was it worth spending 500,000 man hours to write a piece of software which was only going to be used with two clients? In retrospect, maybe they should have written a less flexible, less complex program which would have taken half the time.

So what's the moral? Generally, flexibility is good bit it's important to keep the things in perspective. There's always a tradeoff. Flexibility comes with complexity. That means more lines of code and a program which is harder to understand. It is quicker to write less flexible code. It only becomes more efficient to write flexible code if you're going to use the flexibility.

For example, to build one chair it's cheaper to do it by hand. To build 100 chairs a days it's worth investing in machinery to make the job easier. Don't fall into the trap of building the chair factory to manufacture one chair!


Shape Workshop 2.0 Coming soon!

Shape Workshop 2.0

I'm now deep in the development of Shape Workshop 2.0. For this version, I'm adding all the things I didn't have time to add in the first version. Here's a brief run down:

  • Drag to scale and rotate
  • Keyboard short-cuts
  • Undo/Redo functionality
  • Snap to grid
  • SVG robustness - I've made huge improvements to the SVG parsing engine. This version will support almost everything: groups, arcs, text etc… and be much more robust
  • Point tweaking - now you will be able to adjust the position of individual points manually
  • Custom polygons - you will be able to define the collision polygon for a sprite by manually adding and moving points
  • Circle collision bounds for sprites
  • Element manager - rather than having to load a new sprite from file every time you want to use it, you will be able to drag and drop the element from a list to the canvas/li>
  • Drag and drop - drag a sprite or SVG to add it to the canvas
  • Components - group your elements into collections which can be added all at once
  • Joints - add all Box2D joint types to the scene
  • Export options - I'm adding a large number of export options to cover iPhone and Android
  • Interface improvements. I've completely re-designed the user interface to make it more attractive and intuitive

This doesn't cover all the improvements! I'm sure there are more which I've forgotten. Anyway, I'm getting on well with the development but I think I've got at least a month to go. If you want to be kept up to date with the progress of this project you can follow my Twitter feed. If you have any comments or suggestions for features, you can email me at


Marketing your iPhone game

Strategy 1: Persistence

Write a large quantity of quality games. The games must be high quality for this to work. Each game will help you build your reputation. Even if the first game only gets 10 downloads a week, over a year that's over 3000 downloads. Using that platform, you can start putting in-game adds for your next game. When your next game launches, it will already have an audience of 3000 to give it a kick start. By the time you've written 5 games, you will be generating a decent revenue. As you make a name for yourself, websites will start to review your Apps giving you more publicity. It's slow going, but you stand a very good of succeeding in the long run. Angry Birds wasn't Rovio's first game. It was something like their 15th. Imagine how much more momentum they had on launch day with 15 games in the bank!

Strategy 2: Free games

It's pretty obvious that publicity improves sales. Each person who sees your App has a certain probably of buying it. If the probably it 10%, then ten people have to view your app for each sale. With the persistence strategy we're increasing the publicity our games receive over time. Essentially we're cultivating an every growing pool of people who will view the app. Thus, each subsequent app will sell more copies.

With the free game strategy, we're doing something different. We're increasing the probably that each view will result in a sale. By making the App free we're re-balancing the value proposition. The question "Does the values presented by this app appear to be more than $0.99 of my money?" is very different to the question "Does the values presented by this app appear to be more than none my money?" Obviously, the second question will generate more positive answers.

Giving away a free App will give you market penetration. It also has another advantage. There is a chance that a person who's bought your App will recommend it to a friend. Recommendations are valuable because someone is much more likely to buy a product which as been recommended by someone they trust. If 25% of buyers recommend your app to a friend, and all the friends buy your app; if you only sell 100 copies a year you're only benefiting from about 25 of these bonus sales. If you sell 1000 copies every day you'll benefit from 250 bonus sales every day!


Paying for Source Code. Worth it? or not...

Really this question comes down to division of labor and specialization. Buying code is the same as buying expertise. The advantage, is that it's much cheaper that buying expertise by the hour because the cost is spread over a large number of people. My premium shopping cart would have taken hundreds of hours to build but I'm only paying for one of those hours.

When thinking about these issues it's really important not to under value your time. Time is valuable and time to market is really important. People who understand this have a big competitive advantage. Take a look at Trey Smith. He's a game designer but he doesn't do any programming or game art. He out-sources everything to third parties. Maybe he spends $15,000 to release a new game but as long as it's a good game, he makes it all back and more! How long would it have taken him to develop the game himself? Probably a minimum of 2 years. In those two years the mobile market could change entirely and the opportunity would have been lost. What this demonstrates is that money, spent intelligently on high quality specialist expertise can result in a significant time saving which saves money and increases the competitive advantage of the project.

Finally, I'd like to highlight a trap which it's easy to fall into. The game of poker highlights this trap extremely well. You start playing and have a pair of kings. This is a pretty good hand and at the first stage you should bet heavily. After betting heavily the first three common cards come down. They are all Spades - which you don't have. Suddenly, your hand is looking a bit shaky. Anyone with a Spade will be on for a flush which would beat your hand. One of your opponents starts betting very aggressively. What do you do? You still have a good hand and you've invested a lot of money in the round. Should you keep betting or drop out?


Add Game Centre to your app - Leaderboards and Achievements useful links

I've recently been adding Game Centre support to my iPhone app. Here are some useful links I came across:

iPhone Tutorials:

If you find any useful game centre tutorials please post them to help people in the future.



Subscribe to RSS - bensmiley's blog