软件更新后首次启动
Posted
技术标签:
【中文标题】软件更新后首次启动【英文标题】:first time launch after software update 【发布时间】:2013-11-28 23:15:10 【问题描述】:从 AppStore(1.0 到 1.1)更新版本后,我需要在首次启动时显示警报视图。如果未安装 1.0 版本,则不应显示警报。
据我了解,我不能使用 NSUserDefaults,因为如果已经安装了该应用程序,它将无法工作。 已经问过同样的问题,但我不明白答案:
您可以将当前版本与旧版本进行如下比较:
[NSString stringWithFormat:@"版本 %@",[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]]; 并使用您所知道的当前版本的 if 语句 1.1, 2.0 .... 等等,你可以处理它。
有人可以解释我该怎么做吗? 谢谢。
【问题讨论】:
为什么不是用户默认值?存储“当前”版本,然后您可以在启动时检查它是否已更改... 【参考方案1】:首先,如果您没有在现有应用商店版本 (1.0) 中包含代码来执行此操作,则该警报将不会显示在该版本中。将新版本上传到应用商店不会改变用户设备上已安装的旧版本。
您可以使用以下代码检查您在问题中提到的应用版本:
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]];
如果您进入项目设置,在常规选项卡下有一个名为“身份”的部分,其中包含包标识符、版本和构建字符串。使用上面的代码将返回您在项目设置中为“版本”设置的任何值。但这可能对您想做的事情没有帮助。
您只想在首次启动时显示警报(而不是后续启动),因此您应该使用 NSUserDefaults 设置一个标志,告诉您用户是否已经看到警报。然后,在应用程序启动时,您可以检查 NSUserDefaults 中的值以确定是否应该显示警报。
但是,如果您希望在未来的版本中显示另一个警报,您可能希望将这两者结合在一起。您可以在 NSUserDefaults 中设置一个带有“Version”字符串的值,并将其命名为“lastAlertShownForVersion”之类的名称,然后您就会知道用户上次收到警报的时间。请注意,当用户从 1.0 升级到 1.1 时,此值一开始将为 NULL,因为它不是由应用程序的 1.0 版本设置的。
【讨论】:
我已经使用 NSUserDefaults 进行了检查,并且警报仅在第一次显示,但我不清楚为什么我应该将检查与当前版本结合起来。如果我不添加此检查并且在下一个版本 1.2 中我只需更改警报消息(在本例中为“新功能”警报),会发生什么?最后澄清:如何仅在已安装先前版本的情况下显示警报(即,如果用户在未安装 1.0 的情况下下载 1.1 版,则显示“新功能”警报可能没有意义)?谢谢。 如果你不检查版本号,那么你基本上是在 NSUserDefaults 中设置一个带有 2 个可能值的标志:一个值告诉你警报已经显示,一个值告诉你警报尚未显示。如果您保存版本号,您将获得更多信息。现在您可以判断警报是否已显示,如果已显示,它显示的是哪个版本? 至于在新安装时不显示警报,您需要检查某种已保存的数据以确定它是否是全新安装。这可能是您设置的 NSUserDefaults 数据,或者您的应用程序保存的其他数据。请记住,如果您已经发布了 1.0 版而没有在 NSUserDefaults 中设置任何内容,您可能无法确定它是否是新安装的。【参考方案2】:有简单的开始顺序:
检查存储在 NSUserDefaults 中的某些版本是否低于当前版本 开始 CFBundleShortVersionString 版本 如果需要 - 显示警报 将当前启动的 CFBundleShortVersionString 版本存储到 NSUserDefaults如果没有存储版本的 NSUserDefaults - 假设它刚刚安装。如果您之前没有包含保存版本的代码,但您在应用程序中保存了一些数据或文件 - 您可以检查它以避免这种情况。
【讨论】:
以上是关于软件更新后首次启动的主要内容,如果未能解决你的问题,请参考以下文章
Facebook仅适用于安装后首次启动应用程序,而不是重新启动应用程序