4

有什么方法可以知道 iOS 应用程序在更新后启动了吗?

我想我每次启动应用程序时都可以保存应用程序的当前版本,例如NSUserDefaults每次打开应用程序时检查这个版本。

那么这个案子呢:

1) 用户安装应用程序版本 1.0 ,但没有启动它。

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

例如,如何处理这种情况?

提前致谢。

4

5 回答 5

2

如果始终按照您的建议进行操作,请将应用程序版本保存在NSUserDefaults.

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

由于您的应用从一开始就没有启动,您可以将其视为全新安装。如果您这样做是为了跟踪某种分析工具中的更新,您将遇到问题。但是您可以使用苹果安装/更新报告来获取正确的安装/更新列表。

只要确保如果您从任何版本进行任何更新,您就可以让您的代码能够从任何以前的版本升级。因此,从 1 安装版本 4 也将执行版本 2 和 3 的任何和所有更改。

于 2013-08-01T08:23:53.293 回答
2

我在Apple的这个网站上找到了以下注释。

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

  • /文件
  • /图书馆

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

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

于 2013-08-01T09:03:51.237 回答
1

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

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

这是您可以检查应用程序版本的地方,可能使用类似的东西:

[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]
于 2013-08-01T08:28:24.850 回答
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 块都将运行。

于 2014-03-19T14:04:20.857 回答
0

我参加聚会有点晚了,但如果这仍然是一个问题,我使用保存的布尔值来查看这是否是应用程序的首次启动:

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

}

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

于 2014-09-17T10:33:41.063 回答