区分iPhone应用程序升级和应用程序新安装?

时间:2011-04-01 05:22:41

标签: iphone ios4

我遇到的情况似乎没有解决方案。这里是: 我在App Store上有一个应用程序。我没有为这个应用程序编写任何代码来记住升级方案。对于我能想象到的一切,除了我已经拥有的应用程序商店之外,我绝不会发布更多版本。现在,情况是我需要升级我的应用程序,并且在新代码中,我要确定它是否是最新版本的新安装,或者是否是旧版本的升级。我不知道如何解决这个问题,因为我没有为升级编写适当的第一个版本?有人愿意开导我。

2 个答案:

答案 0 :(得分:1)

appDidFinishLaunching中添加了一些代码来保存用户默认值(那些与应用程序同步到iTunes并且在安装之间最后一次)如果它还没有(首次运行和全新安装)。还保存它是哪个版本。 然后,如果它不是全新安装,请检查上次保存的版本是否为应用程序当前版本号。 如果应用程序版本号较大,则是升级,您现在需要将其保存为最后一个安装程序版本。 此外,它只是应用程序开放。

像这样(代码未经测试)

    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"alreadyInstalled"]) {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"alreadyInstalled"];
        [[NSUserDefaults standardUserDefaults] setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"lastVersionInstalled"];
        //.... contact server or something to say it's a fresh install
    }
    else if ([[NSUserDefaults standardUserDefaults] floatForKey:@"lastVersionInstalled"] < [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue]){
        [[NSUserDefaults standardUserDefaults] setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"lastVersionInstalled"];
        //The user has just upgraded
    }
    else {
        //It's neither. The app has just been opened again.
    }

虽然您无法说出类似的信息,但如果用户将其删除,则重新下载或将其安装在其他设备上。 对于更高级的信息,您可能不会使用像Flurry分析这样的东西。 http://www.flurry.com/product/analytics/index.html

答案 1 :(得分:0)

我不确定,但我认为这会对你有帮助。

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];

将为您提供该应用的当前版本。我想你可以用它来检查你的升级。