To me your logic is a little backwards.
- (BOOL)chkAppRunningFirstTime
{
return [defaults boolForKey:@"firstTime"];
}
This method returns the logically opposite value to the method name. When it is the first time it returns NO
...
- (void)setFirstTime:(BOOL)val
{
[defaults setBool:val forKey:@"firstTime"];
[defaults synchronize];
}
This method shouldn't take a parameter. It can only be the first time once so setting the flag always has the same value.
As the logic is backwards, you would be better to change the name of the key used, for example to initialisationHasExecuted
.
The only other thing to consider is version number. Will you need to run other update code in future versions? How should that be handled in relation to this?