【问题标题】:How to update iOS app with exception of a file如何更新iOS应用程序,但文件除外
【发布时间】:2013-03-30 11:50:17
【问题描述】:

我正在制作我的第一个 iOS 应用。我有一个问题。在我的应用程序中,我想在 Settings.plist 中保存应用程序的当前状态:已完成的级别、达到的分数、金钱、应用内购买等。问题是,我怎样才能放置这个 plist,这样如果用户更新应用程序,他/她就不会丢失这些设置。我阅读了有关应用程序沙箱的信息,但我不明白 它是如何工作的,以及我如何从 Xcode 管理它。

【问题讨论】:

    标签: iphone ios xcode settings sandbox


    【解决方案1】:

    您应该将这些设置存储在 NSUserDefaults 中。它们会在安装新应用版本时保留,因此您不会遇到任何问题。

    【讨论】:

    • 你为什么要这样做
    • 这是最简单的方法 - 为什么这样做会有问题?
    • 因为我写了一个完整的单例类来保存当前的游戏状态,看起来像这样:[[GameState sharedGameState] saveCurrentState];而且我不想更改我的整个代码。
    • 然后使用 NSUserDefaults 将统计信息保存在该单例类的函数中 - 没问题 ...
    【解决方案2】:

    两点:

    a) 当您通过提交同一应用的新版本在应用商店更新您的应用时,旧版本创建的文件不会丢失。因此,您可以在应用程序的 Document 或 Library 目录中存储您喜欢的任何内容,并期望它在更新后仍然存在。 iTunes 不会备份或恢复 Library/Caches 目录,因此不要将任何无法重新创建的内容放在那里。如果您提交不同版本的应用程序(不是更新,而是新应用程序,因此您在应用程序商店中有两个单独的应用程序,可能是免费的和付费的),我不知道新版本无法访问第一个版本创建的文件。

    b) 用户可以轻松读取、删除或更改您在 Documents/ 或 Library/ 中创建的任何文件。这可以通过他/她的 Mac 上的应用程序来完成,例如 iExplorer(可从 macroplant.com 下载)。所以请注意,如果文件是人类可读的,即 .plist 文件,用户可以更改它以提高他/她的分数、获得更多消耗品或其他任何东西。您可以通过加密数据或以某种方式模糊其含义或通过某种校验和方案来防止这种情况发生,这样您至少可以检测到它已被更改。当然,这些措施中的任何一个都涉及并发症,可能不值得麻烦。

    顺便说一句...如果您正在开发使用数据文件的应用程序,iExplorer 是一个很棒的调试工具。我对它没有既得利益,只是我已经学会了如何使用它并希望它继续得到支持。可能还有其他应用程序可以做同样的事情,但这个应用程序效果很好,而且快速且易于使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 2019-10-06
      相关资源
      最近更新 更多