Using customization (via NSUserDefaults ) is how this is usually done. For added value, set the value to "latest version"; Thus, you will be able to run the code not only once for each application, but once to update the version.
However, your startup code has persistent side effects, right? These plates go somewhere. Therefore, you can check if they exist before they are created. Use the result of the startup code as a trigger to start it again.
EDIT:
NSUserDefaults *Def = [NSUserDefaults standardUserDefaults]; NSString *Ver = [Def stringForKey:@"Version"]; NSString *CurVer = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey]; if(Ver == nil || [Ver compare:CurVer] != 0) { if(Ver == nil) {
source share