2013-02-11 70 views
1

我一直在为iPad开发企业分布式应用程序约一年。当时我们已经发布了5个生产版本,从未遇到过任何问题。每当我们的用户在旧版本上安装新版本时,我们的核心数据迁移一直运行良好。直到我们将视频录制添加到应用程序。将应用程序更新到最新版本后文件不再可读

我们一直在核心数据外部管理数据类型中存储'媒体'。直到我们开始允许用户创建大型视频时,这一切都运行良好。于是我们发现核心数据迁移垃圾超过〜5mb的任何文件。此时我们推出了自己的文件管理方案。这个结果非常好,我们自己写了我们自己的文件从Core Data手动迁移到我们自己的方案中。这是发布没有问题。

那么,当推出我们的下一组功能时,突然出现一个问题。从Xcode构建时从来没有任何问题......但是,在使用企业部署重新部署之后,写入到以前版本中的文件系统的任何文件都突然无法读取。如果设备插入XCode,则文件在管理器中清晰可见。但NSFileManager/NSFileHandle/NSData找不到这些文件。他们总是报告说,他们经历:

error: { 
    NSFilePath = "/var/mobile/Applications/3CFB07B3-D17F-45D7-A233-4E56930D794C/Documents/ep_binary_data/9465C282-7ED2-428E-B7D3-545BCFE4DFC5"; 
    NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=2 \"The operation couldn\U2019t be completed. No such file or directory\""; 
} 

就像我说的,我可以验证该文件并不实际存在于使用Xcode组织者路径。任何帮助将不胜感激。整天试图弄清楚这件事,我一直把头从桌子上拨开。

用于读取看起来像代码:

NSError *err = nil; 
NSData *data = [[NSData alloc] initWithContentsOfFile:self.thumbnail_url 
               options:NSDataReadingMappedIfSafe 
               error:&err]; 
if (err != nil) logger(@"error: %@",[err userInfo]); 

而写:

NSError *error = nil; 
[thumbnail_ep_managed writeToFile:filePath options:NSDataWritingAtomic error:&error]; 
if(error != nil) 
{ 
    NSLog(@"error writing file to path: %@\nerror: %@",filePath,[[error userInfo]description]); 
} 

我很为难

+0

如何验证企业部署设备上的文件是否存在? – Mundi 2013-02-11 22:47:29

+0

我已经在Xcode Organizer中的应用程序菜单下说过,您可以检查您拥有代码签名的应用程序包。 – 2013-02-18 21:15:48

回答

0

,我发现了一些打手的帮助下,解决方案在SomethingAwful。问题在于我存储了完整路径,如包含文档目录。这是iOS设备上的错误。您无法保证在升级后,捆绑包路径仍然相同。

在升级应用程序时,有时会更改捆绑标识符(即安装该应用程序的目录的名称)(这是散列)。因此,如果存储完整路径,并且升级可能会使存储路径煞车。解决方案是只保留一个相对路径,从文档目录开始。

然后,当您启动应用程序时,缓存文档目录,并附加您的持久相对路径。

所以从我原来的路径:

/var/mobile/Applications/3CFB07B3-D17F-45D7-A233-4E56930D794C/Documents/ep_binary_data/9465C282-7ED2-428E-B7D3-545BCFE4DFC5 

这部分可以改变:

3CFB07B3-D17F-45D7-A233-4E56930D794C 

所以我只能存储:

ep_binary_data/9465C282-7ED2-428E-B7D3-545BCFE4DFC5 

,抓住:

/var/mobile/Applications/3CFB07B3-D17F-45D7-A233-4E56930D794C/Documents/ 

部分应用程序启动。

瞧,文件继续工作。 :)

相关问题