Saturday, September 7, 2013

New Blog

I have blogged at since 2009. This has come to an end. From now on I will publish new posts at my new blog at . The topics will more or less stay the same.

Go to my new blog

Saturday, August 3, 2013

Introducing OCFWebServer

I am glad to be able to announce OCFWebServer to you.

OCFWebServer is a lightweight, modern and asynchronous HTTP (version 1.1) server written in Objective-C. It was forked from GCDWebServer and modified to fit the needs of and hopefully other people's needs as well.

OCFWebServer is also the foundation for another framework that will be open source as well shortly.

Happy coding.

Tuesday, July 30, 2013

The dirty tricks of "Free to Play" / "Pay to Win" games

A couple of weeks ago my brother showed me a game he was playing on his Android device. He said it was kind of addicting. A few days later I found the same game on the iOS App Store in the top grossing category on rank 1. The game is free. So I wondered how this game makes this shit load of money.

I downloaded the app and played it for a few days during breaks just to see how the developers of this app made it so profitable.

So the app I am talking about is called Candy Crush Saga.

The basic idea behind this game is pretty simple: On a 2 dimensional plane there are a couple of candies of different color and by dragging one candy at a time to a neighbouring location you can bring candies of the same color together. If you combine three or more candies of the same color together they disappear and you get points.

Here is a screenshot of an early level of Candy Crush Saga:

So the game is nothing special or new. There are thousands of games similar in gameplay to Candy Crush Saga on the App Store. But how are they making so much money? I tried to find out by playing the game. Here is what I found out. Those things might seem trivial to you but I was really shocked after playing this game for a few days. By the way: Not all of the things I mention about this game are bad.

1. The game is very polished

This is certainly a very important "feature" of Candy Crush Saga: The game is very polished. It does not crash. It looks kinda cool. The animations are fluid and good looking. It feels just right. I think that this is also reflected in the ratings this game got: 4.5 of 5 stars for a free game is insanely good.

2. Easy start + early rewards

The first few levels of Candy Crush Saga are very easy. You have to try very hard to make anything bad happening to you in the first 5 levels or so. Each of the early levels begins with a very short tipp showing you the first move you should make. If you follow the instructions you are rewarded by more than average points and really nice animations. An early start is important to keep you playing and to keep you invest your time in this game.

3. Switch between hard and easy levels

After the first few levels the difficulty of the game increases. It increases to a level where you will lose quite a couple of times. I don't think that a 'normal' player will notice the switch between hard and easy. This is perceived unconsciously in my opinion. After a couple of hard and easy levels the player will be less frustrated by the hard levels because he knows unconsciously that it will become easier again.

4. Offer in App purchases at the right time

When you have lost a level of Candy Crush Saga you are presented with the following UI:

If you click on "Play On" you will get the option to pay 5 additional moves for just $0.99. That being said: In a typical Candy Crush Saga level a player makes about 40 moves in total. So 5 moves gives you only the chance the finish the level with the next 5 moves. Making 5 moves takes about 1 minute or so.

5. Be a pain in the ass

So offering questionable in app purchases is nothing really new but Candy Crush Saga is really a pain in the ass. The screenshot mentioned above has two buttons: "Play On" and "End Game". There is no option "Try Again". This is confusing and inconvenient. Do I lose my progress when I end the game now? When you click on "End Game" you can indeed continue where you left off but you have to make a couple of extra taps to do so. Every time you lose (which happens a lot in higher levels) you have to tap - tap then tap and then tap again. This will drive you crazy!

There was a point in the game when I decided to end the experiment because I was so frustrated by the game:

6. Be a pain in the ass: Always

At some point in time the game decided that I had lost all my lives. The game never told me that I have a limited amount of lives. It taught me things like how to move a candy from one position to another position and how to use those costly "Lollypop Hammers" (which I have not yet mentioned) but it did not mention that I only had a limited amount of lives. The number of lives left is not shown in the UI itself. So when the game decided that I had no more lives left I saw this:

 A timer counting down from 7 minutes. Until then the game was locked. Of course I could buy more lives. At this point I stopped playing. I think that the number of lives left is not shown in the UI to not give you a bad feeling about your current state. Many people don't like to look at their bank account balance for similar reasons.


So the game was very relaxing, rewarding and fun up to a certain point. Then it suddenly wanted to have all my money. I don't like that. The fact that games like this make so much money makes me to identify less with the App Store and the fact that I am a software developer.

Thursday, July 4, 2013

Why I am not validating Mac App Store Receipts

When someone buys one of your apps in the Mac App Store you can check a receipt using cryptography to make sure it has been paid for. I am not doing this. I never have. I never will. Why? Because I am still traumatized and excited from childhood experiences. Here is what happened:

As kids, my brother and myself enjoyed playing a video game called "The Settlers". It was a game where you slowly built your own settlement. You could build farms, mine gold, coal and ore and combine your goods to make new stuff.

Source: Wikipedia

At some point the next major version of "The Settlers" came out. It cost a lot. My brother and myself had to save up weeks of our weekly allowance to get enough money. After a couple of weeks saving every penny we finally were able to buy The Settlers 3. The gameplay was great. The story was great. But there was a problem…

In order to expand you sometimes have to fight AI enemies with your own warriors. You create new warriors by combining coal, ore and gold. You use the coal and ore to build new weapons. Your settlers are then equipped with those weapons and turn into warriors. At least in theory. That is what the manual said. That is what common sense dictates. The problem was that our forges produced meat instead of swords. Meat was the last thing we needed in order to build an army.


We spent weeks if not months and tried to work around this problem. There must be another way to get weapons. We must have done something wrong. Maybe we needed more gold? Maybe we had to produce a certain amount of meat before the forge finally realized that it was time for war. Maybe we had to burn the forge down a couple of times to make the blacksmith angry so that he produces weapons instead of meat.

We had no luck. All of our attempts to fix the meat issue failed. We gave up because we were not able to really play this game. Without expanding to new territory you ran out of resources quite quickly. And without weapons there was no efficient was to fight your enemies. My brother and myself thought that the meat issue was just a bug. At that time there was no internet for us: No updates. So we went back to do other things.

Years later we found out that the meat issue was indeed a bug but not a bug in the actual game. It was a bug in the copy protection. The Settlers 3 was one of the first games that had a copy protection. It was a special kind of copy protection: If the game thought you had not bought it then nothing special would happen at first. It would still be playable but in a special mode. In this mode coal and ore turned into meat and trees never grew back which made the game unplayable in the mid and end game.

This happened to a lot of people. The copy protection was pretty buggy in that it hit the wrong people: People who bought the game for money. People like my brother and myself.

Now you know why I am still traumatized by copy protection. You never want this to happen to anybody.

But wait: There is more to it.

At some point my brother and myself got a new computer. A friend gave us a copy of a game called StarCraft I but he forgot to give us the serial number for the game.

I have to mention that at it is legal to do that in Germany. Even if he had given us the serial number it would still have been legal to do so - at least to my knowledge.

When you start StarCraft I it plays a nice sound effect and shows a nice intro. This made us very excited. But then the game asked us for a serial key. We had none! Out of frustration I entered a number in the serial number text field:


Something like that. AND IT WORKED!

We played StarCraft I for months! It was the best game we have ever played. We fought against each other.


Years later, StarCraft II came out. Because of that great experience (and because I like to pay for software/games) I bought many copies of StarCraft II: For myself, for my brother and for friends. Today I am a huge StarCraft II fanboy. I am watching tournaments and I pay casters to get access to good commentary. The experience would be even better if Blizzard had decided to relax the copy protection for StarCraft II. The fact that they have a strong copy protection in place may weaken my point but the fact is: I bought StarCraft II not because it has strong copy protection but because I had a good experience with it in the past.

Copy protection can really be bad for your business and make children unhappy and avoid your company for the next 60 years.

Monday, June 10, 2013

Xcode productivity tip: Jump to the next issue

A couple of weeks ago I began to use a feature of Xcode that improved my productivity quite a lot. For some of you this feature may be old news. To be honest: It was old news for me as well. I knew about this feature but I never used it because I could not believe that it was that useful.

Quickly jumping to the next issue

There is a keyboard shortcut in Xcode which let's you jump to the next issue (warning or error). The default shortcut for this is ⌘'. This is extremely handy - especially if you have a "zero-warning policy" because then every issue is worth fixing immediately: You won't jump to an issue which you can fix later or which is not really an issue.

I decided to assign the "Jump to Next Issue" command a simple shortcut just to make things easier for me. Because I have a German keyboard i am using ⌘Ä to jump to the next issue and ⌘Ö to jump to the previous issue.

You may have to restart Xcode for the new key bindings to take effect.

Thursday, May 23, 2013

Core Data Editor and RestKit

Lasse Moos, a user of Core Data Editor, contacted me because when he tried to use Core Data Editor all he got was this:

(The managed object model version used to open the persistent store is incompatible with the one that was used to create the persistent store.)

We wrote back and forth but with no success. Luckily Lasse agreed to share his screen with me. In that session I had access to his Xcode project and was able to look at the issue first hand. At some point he mentioned that he is using RestKit in this project. When I first had a look at RestKit when it came out I knew that this framework was not made for me. But this is a totally different story. What I did not know about RestKit is that RestKit seems to modify the managed object model at runtime to do it's magic. This is a problem for Core Data Editor because the managed object model of your store file has to match the version of your model which is inside your app bundle.

I know that many people around the globe are using RestKit and I will try to offer some kind of workaround although I don't want to support RestKit in any way. :)

I am glad to finally know why a relatively large user base has problems with Core Data Editor. Thank you Lasse.

Saturday, January 5, 2013

iCloud causes major depressions

iCloud makes me feel dumb. That's it. Good night.