3

我们正在开发的应用程序使用包含在应用程序包中的二进制文件。

由于此文件需要处理并且在某些情况下需要重写,因此应用程序会在首次启动或应用程序支持中缺少该文件时将此文件复制到库/应用程序支持目录中。然后应用程序在每次启动时从应用程序支持加载此文件并使用其中包含的数据。

由于 Application Support 目录在每次应用安装/升级时都会保留,因此我们需要在安装或升级应用时删除该目录下的上述二进制文件,从应用程序包中重新复制它以确保二进制文件文件结构与应用程序的最新版本兼容。

在以下两种情况下,我们需要这样做: - 在开发期间,每次我们从 XCode 重建和安装应用程序 - 一旦上线,每次用户从 AppStore 升级应用程序时

有什么方法可以检测到该应用程序是否已安装或重新安装在设备上?

4

3 回答 3

5

正如 rmaddy 所说,确保更新的(可能)干净的方法是在 info.plist 文件中使用变量,但这并不能解决准确知道它是否需要或过度杀伤的问题。

老实说,我不知道苹果是否会让它通过他们的验证,但你可能可以存储并检查可执行文件的最后修改日期。如果它早于某个日期,则更新。拥有如此粗略的版本控制机制似乎有点复杂。您不能在二进制文件中包含版本号吗?

检查日期:

NSString *exePath = [[NSBundle mainBundle] executablePath];
NSDictionary *exeAttrs = [[NSFileManager defaultManager] attributesOfItemAtPath:exePath error:nil];
NSString *lastModDate = [exeAttrs objectForKey:@"NSFileModificationDate"];
于 2013-05-13T17:27:19.103 回答
1

一种通用的方法是在 Info.plist 中有一个“内部版本号”。每次构建时都需要更新这个数字(或者只是每次二进制文件更改并需要再次处理时)。

然后当应用程序启动时,它会从 Info.plist 中读取这个数字。该应用程序还获取它存储的最后一个已知值NSUserDefaults。如果 Info.plist 中的数字较新(或者 中还没有值NSUserDefaults),那么您知道您必须处理该文件。然后将最新的数字存储在NSUserDefaults. 这将确保下次运行应用程序时,您不会再次处理该文件(除非它是新的构建或更新)。

于 2013-05-13T17:23:52.830 回答
0

做应用商店案例的最简单方法是将应用版本存储在NSUserDefaults,当应用版本不等于保存在中的值时NSUserDefaults,你知道你需要重新复制文件。

对于从 Xcode 安装时的情况,您可以使用以下内容

#ifdef DEBUG
    // Force the file to be recopied
#else
    // Check if the app version changed before recopying the file
#endif
于 2013-05-13T17:25:33.410 回答