Header image

Tyme iOS

June 26th, 2014 | Posted by lars in Talk | Tyme - (5 Comments)

It’s been a while since I’ve posted any news on this blog. Ans many of you already know, we are developing a companion iOS app for Tyme and I just wanted to give you a brief update: We’re making great progress and the app is taking shape. The reason that this is all taking longer than planned is that I’ve taken the opportunity to re-shape some of the internal database structure of Tyme and re-think the iCloud syncing mechanism. With the release of the iOS app, there will be an update for the OSX app as well and iCloud sync will be more stable, robust and future proof. The bug that was introduced with v1.1.3 a few month ago was really annoying for us and of course you, the users. To make sure that this will never happen again I had to re-build the syncing mechanism usingDrew McCormack‘s great Ensembles framework. So stay tuned, it will be awesome ;)

Tyme 1.1.3 & iCloud – solving sync issues

February 24th, 2014 | Posted by lars in Tyme - (3 Comments)

Hello Tyme users,
if you upgraded to Tyme 1.1.3 and some of your data disappeared, no data is lost, but not accessible until each of your Mac’s that use iCloud sync has 1.1.3 installed.

What’s happening is, that the database of Tyme 1.1.3 has been upgraded to use some new features that we’re requested by a lot of users. Therefor the database needs to be migrated, which is done automatically by iCloud. So each Mac converts the data that was created on it. So for example, if you have Tyme installed on two Macs with iCloud sync and created a project on each of them, the “other” project will “disappear” if you upgrade your first Mac. When you upgrade the second, everything will be back after a short while, when iCloud syncs back.

As far as we know now, this is the expected behavior when upgrading an iCloud database. If you’re a developer, this article might be of interest.

Of course this is definitively NOT an expected behavior for your (our fellow Tyme users) and we’re really sorry that this happened. Instead of temporarily “loosing” data until all Macs are up to date, you would expect that this doesn’t happen and you don’t get an heart attack after upgrading Tyme.

If you’re using just one Mac with iCloud sync or you are a new Tyme user you should not have any issues.

For the users, that are afraid to loose their data when upgrading Tyme to 1.1.3, you can back it up before you upgrade or if you have already upgraded and one Mac has still the old version installed.

- Start Tyme, open settings
- Turn off iCloud, close settings
- Click “Yes”, when asked for “Keep a copy of iCloud data”

Now your data is stored in three files on your local hard drive in:

/Users/[YOUR_USERNAME]/Library/Containers/de.nulldesign.tyme.osx/Data/Library/Application Support/Tyme.storedata
/Users/[YOUR_USERNAME]/Library/Containers/de.nulldesign.tyme.osx/Data/Library/Application Support/Tyme.storedata-shm
/Users/[YOUR_USERNAME]/Library/Containers/de.nulldesign.tyme.osx/Data/Library/Application Support/Tyme.storedata-wal

Which you can back up and copy to a secure place. If some things go wrong, you can always copy them back (with iCloud turned off in Tyme).

With the next update we will streamline this process and integrate a proper backup solution, so that things like this never happen again. So sorry again for this stress, that version 1.1.3 is causing to some of you. If you need any help, please contact us!



Update: If syncing stopped working

After upgrading to 1.1.3 it can happen in rare cases, that the syncing between your Mac’s stopped working. Maybe one of your computers has a slightly older version of your projects or it’s just missing a few time entries, after you upgraded all Mac’s to 1.1.3. Event if you add new entries on one of the computers, they won’t sync back to the other.

If you experience these issues you can do the following:

- Start Tyme, open settings
- Turn off iCloud, close settings
- Click “Yes”, when asked for “Keep a copy of iCloud data”
- Verify that this dataset is the one you want to have
- Close Tyme (If you want, make a backup of your files as described above)
- Open the iCloud settings in system prefences
- Click on manage, Tyme, Documents & Data
- Click on delete all data
- Close the panel

- Now you have deleted all iCloud data and Tyme is ready to seed the Cloud with data again
- Start Tyme, turn on iCloud, transfer data: Yes

Done. Now your data is freshly synced with iCloud. If you open Tyme on your other Mac’s they will sync again, maybe iCloud need a few minutes to do so, but the sync issues are gone. Apples iCloud is a lot better meanwhile, but as we experience now: Not perfect and has still issues. I can only say sorry again and file another bug report to Apple :(

Update 2: App Crashes after Upgrading 10.9.2

A few users where reporting crashes after upgrading Tyme to 1.1.3 and upgrading OSX to 10.9.2. Just be patient, iCloud seems to have a few hiccups. It will work after a while. The crash is an iCloud bug…

Tyme Upgrade 1.1.3

February 23rd, 2014 | Posted by lars in Tyme - (0 Comments)

Attention Upgrading Users: 

Tyme 1.1.3 has some issues, when you’re using iCloud and upgrading from a previous version. Projects disappear and only reappear after all Macs you’re running Tyme on have the upgrade 1.1.3 installed. Data ist not lost. We’re looking into the issue with Apple. We’re very sorry for this inconvenience and will do everything to solve this issue fast!

If you are a new Tyme user, you won’t have any issues. It’s just the upgrade from 1.1.2 to 1.1.3.

Tyme & iCloud – finally

January 16th, 2014 | Posted by lars in Tyme - (0 Comments)


We just submitted Tyme 1.1.0 to the App Store! Finally you’ll be able to sync your projects and tracked times with your macs. The iCloud integration was a tough one, but it works like a charm now. We decided to use the latest and improved version of iCloud syncing from Apple that got introduced with Mavericks (10.9). So Mavericks is a requirement to use iCloud with Tyme. Tyme will of course continue to run on Lion and Mountain Lion, but you won’t be able to use the iCloud feature. We made this decision, after looking into the Tyme OS usage statistics. Since already 90% of the users are running Tyme under Mavericks. Mountain Lion has about 7% and is getting less and less each week, since users upgrade to Mavericks.

So keep your fingers crossed that Apple will release it fast ;)

Tyme – Mavericks motion detection

November 11th, 2013 | Posted by lars in Tyme - (0 Comments)

The new Mavericks (OSX 10.9) introduced a new “feature” if you can call it that way. It detects motion via the light sensor and prevents system sleep this way. So if you move in front of your laptop, it won’t sleep. Read more about it here. This “feature” prevents Tyme from correctly detecting the idle timeout in some cases.

So you can either:

- Freeze. Don’t move at all.
- Use Duct tape to fix that.
- Wait for the Tyme update, which will be in the store very soon.

Tyme Updates

October 13th, 2013 | Posted by lars in Tyme - (0 Comments)

Tyme just got featured on ifun.de and I received a lot of positive feedback about our little time tracking companion. The two most asked question were:

Q: Is there an iOS app planned?
A: Yes! It’s planned and I’m starting to develop it at the moment.

Q: Is there a sync option planned to make it possible to sync all data between different macs?
A: Yes, definitively! An iCloud sync is planned and I’m working on it right now! Sync between any combination of Mac and iOS will be possible.

From a development perspective, this is a very stunning task. There has been a lot of talk about iCloud and Core Data sync in the past:

- Why doesn’t iCloud just work
- The gathering storm: Our travails with iCloud sync
- Does Core Data sync quack?

To make it short, there are a lot of issues with iCloud Core Data sync. Most issues have been resolved with the latest OSX Mavericks (10.9) and iOS 7, but I want the users of Lion and Mountain Lion be able to use syncing in Tyme as well. So going that route is not an option for me. I could start implementing the syncing by myself like the Clear guys or use another cloud solution like the new Dropbox DataStorage API. But I wanted to stick with iCloud, since everyone on a Mac and on an iOS device has iCloud, but not everyone (at least here in germany) uses dropbox. So while investigating for the best possible solution, I found this:

Drew McCormack just released an open source framework called Ensembles which does the heavy synchronization work with Core Data using diff files over iCloud. He has been dealing with iCloud and Core Data from the very beginning and if there is one iCloud sync expert out there, he is the one. I’m currently investigating the framework and I’m really confident, that this is the solution to syncing for Tyme, even if it’s still an early version of the framework. So I have to do a lot of testing and this can be very time consuming with iCloud :).

So long, stay tuned…

Tyme – Timetracking app released

September 10th, 2013 | Posted by lars in Portfolio | Talk | Tyme - (2 Comments)

Besides my day job, I worked on a remake of my old time tracking app SimpleTimer 2. SimpleTimer was done in Adobe AIR back in the days and is quite outdated meanwhile, so it was time for a fresh restart. The new app is a native Mac OS app, comes with a new name: “Tyme” and is available on the App Store. The design of Tyme and the beautiful logo was made by Margit Schroeder (hello gitti). Thank you for all the nice colors :)


It has a lot of new cool features:

  • Starts automatically with system startup
  • Accessible from the menubar
  • Quick start & stop for tasks in the menubar
  • Turn back the time, if you started the timer too late
  • Displays the running time and the daily total in the menubar
  • Simple project and task management with deadlines and planned budgets
  • Option to round time entries automatically
  • Works offline, no internet connection required
  • Daily, weekly, and monthly statistics about your workload and budget
  • Exports time entries as CSV or HTML documents
  • Supports the Macbook Pro Retina Display

And more are planned. iCloud integration is possibly the next feature. If you’re missing a feature that you’d like to be integrated, don’t hesitate to drop me an email.

So long…

Cocos2Dx – faster fonts

May 30th, 2013 | Posted by lars in Cocos2D | OpenGL | Source | Talk - (4 Comments)

For my current client, I’m working on a game that needs to display a lot of text in many cases. As a rendering engine we’re using Cocos2D. If you are familar with Cocos2D and you have worked with bitmap fonts (CCLabelBMFont) in your game you’ll notice that, they really can slow down everything, because every single text is rendered as a separate batch and you quickly end up with a lot of draw calls. After a quick research, I couldn’t find an extension or sample code which adresses this problem by batching all fonts into one single batch. So I quickly wrote my own font batch and hooray, the game runs a lot faster now. It’s more or less a “quick” hack and it could be extended by a few missing font features (text alignment, etc.), but for my case it does the job. Have fun with it:


#import "cocos2d.h"
using namespace cocos2d;
class LabelBMFontBatch : public cocos2d::CCSpriteBatchNode
    const char *_fntFile;
    int _lastChildTag;
    LabelBMFontBatch(const char *fntFile);
    static LabelBMFontBatch *create(const char *fileImage, const char *fntFile, unsigned int capacity);
    /* returns a text id. used to identify the text in the batch. use the id with removeTextByID  */
    int addTextAt(const char *text, CCPoint position, float scale);
    void removeTextByID(int textID);
    void removeAllTexts();


#include "LabelBMFontBatch.h"
LabelBMFontBatch::LabelBMFontBatch(const char *fntFile) : CCSpriteBatchNode() {
    _fntFile = fntFile;
    _lastChildTag = 0;
LabelBMFontBatch::~LabelBMFontBatch() {
    _fntFile = NULL;
LabelBMFontBatch *LabelBMFontBatch::create(const char *fileImage, const char *fntFile, unsigned int capacity) {
    LabelBMFontBatch *batchNode = new LabelBMFontBatch(fntFile);
    batchNode->initWithFile(fileImage, capacity);
    return batchNode;
int LabelBMFontBatch::addTextAt(const char *text, CCPoint position, float scale) {
    _lastChildTag += 100;
    CCLabelBMFont *bmpFont = CCLabelBMFont::create(text, _fntFile);
    CCSize textWidth = bmpFont->getContentSize();
    // center text ...
    position.x -= textWidth.width * 0.5f * scale;
    for(int i = 0; i < bmpFont->getChildrenCount(); i++)
        CCObject *child = bmpFont->getChildren()->objectAtIndex(i);
        CCSprite *pNode = (CCSprite*)child;
        CCPoint pNodePosition = pNode->getPosition();
        bmpFont->removeChild(pNode, false);
        pNode->setPosition(ccp(position.x + pNodePosition.x * scale, position.y + pNodePosition.y * scale));
    return _lastChildTag;
void LabelBMFontBatch::removeTextByID(int textID)
    CCNode *child = this->getChildByTag(textID);
    while(child != NULL)
        this->removeChild(child, true);
        child = this->getChildByTag(textID);
void LabelBMFontBatch::removeAllTexts() {

Cocos2D Particle System Sources

March 21st, 2011 | Posted by lars in Cocos2D | iPhone | Particles | Source - (2 Comments)

Since I’m receiving questions about the particle system I used in my FluidToy 2 quite often lately, I thought I just release the sources here.

The particle system is based on a CCNode and works similar to the existing Cocos2D particle systems. The main difference is, that you can control the position and velocity of each particle. Please note that this system is not very optimized and lacks in flexibility since I just built it for FluidToy 2 and it was never meant to be more general. In other words: The code is a bit dirty! But feel free to play around with it, modify it and make use of it (and let me know what you’re making out of it).

There are two different systems: The SimpleParticleSystem, which draws points of any size or a point sprite using a texture. The second one is a LineParticleSystem, which will draw line particles. If you initialize the system with a size of 1000, you’ll have 500 lines, because a line consists out of 2 points (Wow, you never imagined that, did you? ;)). So if you loop through the particles, be sure to move only every second particle, the other one will follow with a small delay.

Download: Cocos2DSimpleParticleSystem

It works like every other CCNode:

particles = [SimpleParticleSystem node];
[particles initialize: 1000 width: size.width height: size.height];
[particles setTextureByString: @"particle_small.png"];
[self addChild: particles];
Loop through particles:
while(count < particles.particleCount)
   p = &particleAr[count];
   p->dir.x += CCRANDOM_MINUS1_1();
   p->dir.y += CCRANDOM_MINUS1_1();

Have fun!

Fluid Toy 2 (iPhone / iPad)

December 6th, 2010 | Posted by lars in Talk - (7 Comments)

Finally I found some time to finish the sequel to my little FluidToy. It’s still an interactive fluid simulation, but with a lot more options and visual effects. Check it out:

Get it on the Appstore