Core Data首次启动种子数据填充最佳实践及Bundle体积优化
解决方案
1. 用苹果按需资源(On Demand Resources)彻底解决
- 把86MB的SQL种子库标记为按需资源,设置成「初始下载组」(比如命名为
InitialSeedData) - App首次启动时,系统会自动把这些资源下载到沙盒的按需资源目录,你直接复制到用户数据目录就行
- 复制完成后,调用
NSBundleResourceRequest的evictResources(completionHandler:)方法就能删掉这些按需资源,彻底释放空间 - 好处:Bundle体积完全不会包含这86MB数据,从根源解决Bundle翻倍的问题,而且资源能在运行时删掉
2. 压缩种子文件做折中优化(备选方案)
- 如果不想折腾按需资源,把SQL数据库压缩成zip包(一般能压到原大小的30%-50%)再放进Bundle
- 首次启动时把zip包复制到沙盒,解压出数据库文件后,删掉沙盒里的zip包
- 缺点:Bundle还是会占压缩后的空间,但比原文件小不少,不过Bundle里的压缩包还是删不掉,只能删沙盒里的副本
关于你的疑问
- 你之前的操作本身没毛病,Bundle里的文件确实是只读的,运行时删不了,这是iOS的安全机制
- 不用纠结那篇失效的旧文档,苹果现在的官方方案就是按需资源,专门处理这种大体积资源的按需加载和释放
内容的提问来源于stack exchange,提问作者Danil
相关产品推荐
相关产品推荐

