有什么方法可以知道 iOS 应用程序在更新后启动了吗?
我想我每次启动应用程序时都可以保存应用程序的当前版本,例如NSUserDefaults
每次打开应用程序时检查这个版本。
那么这个案子呢:
1) 用户安装应用程序版本 1.0 ,但没有启动它。
2) 用户安装应用程序版本 2.0。
例如,如何处理这种情况?
提前致谢。
有什么方法可以知道 iOS 应用程序在更新后启动了吗?
我想我每次启动应用程序时都可以保存应用程序的当前版本,例如NSUserDefaults
每次打开应用程序时检查这个版本。
那么这个案子呢:
1) 用户安装应用程序版本 1.0 ,但没有启动它。
2) 用户安装应用程序版本 2.0。
例如,如何处理这种情况?
提前致谢。
如果始终按照您的建议进行操作,请将应用程序版本保存在NSUserDefaults
.
关于你的另一种情况,如果应用程序不是从版本 1 开始的,那么它会从版本 2 开始,你可以将其视为新安装。
由于您的应用从一开始就没有启动,您可以将其视为全新安装。如果您这样做是为了跟踪某种分析工具中的更新,您将遇到问题。但是您可以使用苹果安装/更新报告来获取正确的安装/更新列表。
只要确保如果您从任何版本进行任何更新,您就可以让您的代码能够从任何以前的版本升级。因此,从 1 安装版本 4 也将执行版本 2 和 3 的任何和所有更改。
我在Apple的这个网站上找到了以下注释。
当用户下载应用更新时,iTunes 会将更新安装在新的应用目录中。然后它将用户的数据文件从旧安装移动到新的应用程序目录,然后再删除旧安装。以下目录中的文件保证在更新过程中被保留:
- /文件
- /图书馆
尽管其他用户目录中的文件也可能被移动,但您不应依赖它们在更新后存在。
在您发布的每个版本中,您可以将具有唯一名称(每个版本唯一)的 txt 文件放在这些更新持久目录之一中,并在应用程序初始启动时检查以前版本的 txt 文件。即使在下载和初始更新之间没有启动您的应用程序的情况下,这也应该有效。
每次启动应用程序时,appDelegate 类中的以下函数都会在启动过程完成后调用:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
这是您可以检查应用程序版本的地方,可能使用类似的东西:
[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]
我认为这可能很有用: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 块都将运行。
我参加聚会有点晚了,但如果这仍然是一个问题,我使用保存的布尔值来查看这是否是应用程序的首次启动:
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"]) {
NSLog(@"First launch");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@"HasLaunchedOnce"];
[defaults synchronize];
}
然后,我可以处理您在问题中已经提到的安装或更新。