1

我有一个 Web 服务来下载一些新闻并将它们写入某个位置的 plist 文件中NSLibraryDirectory,这很好。但是,如果用户没有 Internet 连接或 web 服务处于脱机状态或其他情况,我会从 AppBundle 中加载一个 Default-Newsfile。

目前,我必须在每次 AppStoreUpdate 之前手动替换 Default-File 以使其保持最新。

我的问题:有没有一种简单的方法可以在通过模拟器调试时写入 App Bundle,所以默认文件每次都是最新的。

我对类似的事情进行了讨论:

#ifdef SIMULATOR
   //Write to AppBundle
#endif

注意: 这都是关于我使用 Mac 和模拟器的时间,我不想在已发布的应用程序中这样做!是的,我已经在我的 Bundle 中替换了 Ressource,但是是手动替换的,我希望它能够自动实现。在为任何设备或 AppStore 编译它之前,我想保持我的 Projectfolder 是最新的。

4

3 回答 3

7

AppBundle您是否Read-only无法以编程方式向其中写入任何内容,但是如果您更新Projectthrough中的资源Xcode,您会自动在AppBundle..

于 2013-04-22T07:16:23.370 回答
1

不,您也许可以让模拟器向您的 App Bundle 写入数据,但这并不意味着您的项目文件(为应用商店构建时编译的文件)将被更新。

为什么不直接将新文件保存到文档目录中,然后始终加载此文件。应用启动后,启动后台线程并尝试更新 plist 文件。你成功地通过在文档目录中写入 plist 文件来检索新闻。这样,用户将拥有上次设备能够获取文件时检索到的文件。

您可以在应用程序包中添加一个文件,在应用程序首次启动时将其复制到文档目录中,以确保用户在应用程序中有数据。

于 2013-04-22T07:14:35.677 回答
1

好的,根据您的评论,这就是您所需要的(我认为 - 仍然不完全清楚这个问题,但让我知道这是否适合您)。

  • 在您的项目文件夹 (SRCROOT) 中创建一个空文件(例如 news.plist)。将此添加到您的存储库中。
  • 将此文件添加到项目的资源中,并在Copy Bundle Resources步骤中添加Build Phases
  • 当您从 Internet 下载内容时,将其保存到项目的临时文件夹,然后将其复制到 SRCROOT/news.plist 覆盖现有文件(可选地添加对文件校验和的检查以避免不必要的更改)。仅在模拟器上运行时才需要此步骤。
  • 每当开发人员签入时,应将更新后的 news.plist 签入到 repo。

要使 SRCROOT 在代码中可用,请添加SRCROOT=\"${SRCROOT}\"到 GCC_PREPROCESSOR_DEFINITIONS。

除了最后一步之外,其他开发人员不需要做任何事情 - 每次更改时都检查更新的文件。

这有帮助吗?

于 2013-04-26T09:42:05.933 回答