将文件写入App Bundle

时间:2013-04-22 07:09:37

标签: iphone ios xcode nsbundle

我有一个Web服务来下载一些新闻并将它们写入NSLibraryDirectory中的某个plist文件,没关系。但是,如果用户没有Internet连接或webservice离线或其他什么,我从AppBundle中加载一个Default-Newsfile。

目前我必须在每个AppStoreUpdate之前手动更换默认文件以使其保持最新。

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

我做了类似的事情:

#ifdef SIMULATOR
   //Write to AppBundle
#endif

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

3 个答案:

答案 0 :(得分:6)

AppBundle Read-only您无法以编程方式向其编写任何内容,但是如果您更新ProjectXcode中的资源,则会自动获取更新的文件。 AppBundle ..

答案 1 :(得分:1)

不,您可能会让模拟器向您写入App Bundle,但这并不意味着您的项目(在为应用程序商店构建时编译的文件)将更新。

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

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

答案 2 :(得分:1)

好的,根据你的评论,这就是你需要的东西(我想 - 在这个问题上仍然不完全清楚,但请告诉我这是否适合你)。

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

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

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

这有帮助吗?