在 xcode for iOS 应用程序中存储数千个文件(在包内)

Posted

技术标签:

【中文标题】在 xcode for iOS 应用程序中存储数千个文件(在包内)【英文标题】:Store thousands of files in xcode for iOS app (inside the bundle) 【发布时间】:2012-12-02 13:43:38 【问题描述】:

我有一个包含大约 20,000 个图像文件(动画帧)的应用程序。由于种种原因,手动打包这些文件是不可行的(尽管……如果我有更多时间,我会这样做)。

只有几千个文件,Xcode 会慢到爬行,当你达到数万个文件时,它会完全停止工作(各种按钮会使 Xcode 崩溃)。我什至听说过,当您查看超过 65,535 个文件时,某些内置功能会停止工作,因为 Apple 有人使用 16 位 int 来存储索引,叹息。

对此有什么选择?似乎应该有某种方式告诉 Xcode “所有这些文件都是静态二进制文件,你永远不会触摸它们,将它们放在一个包中并忽略它们”。但是谷歌搜索和阅读文档,我找不到任何:(

【问题讨论】:

有人否决了这个问题。不加评论。那是......完全没有帮助:(。 只是一个简单的问题,我假设您使用文件夹引用来包含文件?即它们没有直接列在项目中。我怀疑(仅)它可能会有很大帮助,但我可能完全错了:) @theLastNightTrain 文件夹引用有很多错误——Apple 似乎不愿意支持它们——我从不将它们用于任何事情。他们破坏了 Apple 的构建链,他们破坏了 Apple 的部署,他们破坏了……一切:(似乎。 我一直在使用它们,没有注意到这样的问题。唯一的烦恼是有时必须完全清理和删除模拟器应用程序以确保复制最新文件。 【参考方案1】:

您可以将压缩版本保存在包中,然后在运行时将其解压到应用程序的用户目录中。这只需要做一次。

【讨论】:

哇,那么你最终会使用压缩和未压缩文件的存储空间,这对于 20k 图像肯定是相当重要的..... 我想到了这个,但考虑到文件的数量......这在低端硬件(例如 iPod Touch)上会很慢。此外,如前所述,这将大大增加应用程序的磁盘大小。【参考方案2】:

最后,我用半自动方式打包了它们。我会在这里解释,以防它帮助其他有同样问题的人 - 直到/除非有人想出更好的答案:(

    发明了我自己的文件格式,可以将 100 个 PNG 文件打包成一个文件,而且解码速度很快 实现的编码/解码方法 在我的应用程序中编写了一对很小的 Obj-C 方法(仅通过调试开关启用),它们在运行时获取所有 PNG 文件,并将它们打包成 N 个文件。 将前 1000 个文件移动到项目中 在模拟器上运行应用程序,在硬盘上找到模拟器文件夹(在 OS X Mountain Lion 和 Xcode4.5 下的 Library/ApplicationSupport/iPhoneSimulator 中) 将“打包”文件移动到主项目中 重复这三个步骤,直到完成。

恕我直言,这是一个 hacky 解决方案 - 令人沮丧的是,Xcode 无法处理这个在大约 15 年前由所有其他 IDE 解决的简单问题 - 但它确实有效。

我不为我的包格式感到自豪,而且 - 给定时间! - 我会使用标准格式和/或为此编写适当的工具。

【讨论】:

为什么不使用标准的tar 来满足您的要求?它非常容易创建并且非常快速和容易提取(也可以部分提取)。 据谷歌所知,没有适用于 ios 的 TAR 库。而且我只能找到一个体面的、有文档的 C 库 - libarchive - 但那是非常 C 的。为 obj-c 编写一个包装器最终会使其使用时间与滚动你自己的一样长:(。如果你能找到一个 TAR lib ...那会很棒:) 我也查看了 TAR 协议,它比大多数项目需要的要冗长得多。我上面的 hacky 方法大大减少了程序员的时间来实现。

以上是关于在 xcode for iOS 应用程序中存储数千个文件(在包内)的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 7 for iOS 9 中 XPC 连接中断

如何在 Xcode 5 for iOS 中保存和加载图像?

向 Xcode Cocoa 项目添加一个空的 .c 文件会导致数千个错误

在 Xcode for iOS 中导入 Points of Interest 仪器的路标代码名称

本地存储数据的最佳方式是啥(IOS-xcode)

有啥方法可以使用 xcode for ios 应用程序远程访问 postgresql?