更新后如何处理iOS应用程序启动?

时间:2013-08-01 08:20:49

标签: ios objective-c

有没有办法知道iOS应用程序在更新后启动了?

我想我每次在NSUserDefaults启动应用程序时都可以保存应用当前版本,并在每次打开应用程序时检查此版本。

情况如何:

1)用户安装应用版本1.0,但不启动它。

2)用户安装应用版本2.0。

例如如何处理这种情况?

提前致谢。

5 个答案:

答案 0 :(得分:2)

如果始终按照您的建议完成,请将应用版本保存在NSUserDefaults

关于你的另一种情况,如果应用程序没有从版本1开始,那么它与版本2一样,你可以将其视为新安装。

由于您的应用从未在第一时间开始,因此您可以将其视为全新安装。如果您这样做是为了跟踪某种分析工具中的更新,那么您将遇到问题。但您可以使用Apple安装/更新报告来获取正确的安装/更新列表。

请确保如果您从任何版本进行任何更新,那么您就可以通过以下方式进行编码,即可以从任何以前的版本升级。因此,从1开始安装版本4将对版本2和版本3进行任何和所有更改。

答案 1 :(得分:2)

我在Apple的this website发现了以下注释。

  

当用户下载应用更新时,iTunes会将更新安装在新的应用目录中。然后,在删除旧安装之前,它会将用户的数据文件从旧安装移动到新的app目录。保证在更新过程中保留以下目录中的文件:

     
      
  • /文件
  •   
  • /库
  •   
     

虽然其他用户目录中的文件也可能被移动,但您不应该在更新后依赖它们。

在您发布的每个版本中,您可以在其中一个更新持久目录中放置一个具有唯一名称(每个版本都是唯一的)的txt文件,并在首次启动应用程序时检查以前版本的txt文件。即使在下载和初始更新之间未启动应用程序的情况下,这也应该有效。

答案 2 :(得分:1)

每次启动应用程序时,启动过程完成后都会调用appDelegate类中的以下函数:

          - (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

这一点你可以检查应用程序的版本,可能使用somoething,如:

[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]

答案 3 :(得分:0)

我认为这可能很有用:MTMigration管理需要在iOS应用中的版本更新上运行一次的代码块。这可以是数据规范化例程,“此版本中的新功能”屏幕或错误修复。

可通过CocoaPods获取:pod'MTMigration'

请查看GitHub(https://github.com/mysterioustrousers/MTMigration)的MTMigration存储库以了解用法和示例。

[MTMigration applicationUpdateBlock:^{
    /* This code run on every version change. */
}];

[MTMigration migrateToVersion:@"1.0" block:^{
    /* This code only run once in version 1.0 */
}];

[MTMigration migrateToVersion:@"2.0" block:^{
    /* This code only run once in version 2.0 */
}];

如果用户的版本为1.0,跳过2.0,并升级到3.0,那么1.0和2.0版块都会运行。

答案 4 :(得分:0)

我参加派对有点晚了,但如果这还是个问题,我会使用保存的布尔值来查看这是应用的首次发布:

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"]) {
   NSLog(@"First launch");
   NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
   [defaults setBool:YES forKey:@"HasLaunchedOnce"];
   [defaults synchronize];

}

我可以处理您在问题中已经提到的安装或更新。