Core data iOS从远程源更新核心数据文件

Core data iOS从远程源更新核心数据文件,core-data,ios7,remote-access,auto-update,Core Data,Ios7,Remote Access,Auto Update,我有一个iOS 7应用程序,带有一个静态(用户无法编辑)coredata文件。偶尔必须更新此文件。比如更新烹饪书中的食谱或通讯簿中的电话号码 应用程序本身(二进制文件)保持不变 我从来没有做过这样的事。我在寻找学习的起点(指南或谷歌搜索词),而不是具体的解决方案 我应该为此使用哪些框架 我需要自己的Web服务器吗 如何确保应用程序收到正确的数据文件 同样,我如何确保只有我的应用程序请求数据 我应该如何处理安全问题?我怎么知道是我在发送更新 可能我必须向应用程序发送通知,告诉它从某处下载数据?我是

我有一个iOS 7应用程序,带有一个静态(用户无法编辑)coredata文件。偶尔必须更新此文件。比如更新烹饪书中的食谱或通讯簿中的电话号码

应用程序本身(二进制文件)保持不变

我从来没有做过这样的事。我在寻找学习的起点(指南或谷歌搜索词),而不是具体的解决方案

  • 我应该为此使用哪些框架
  • 我需要自己的Web服务器吗
  • 如何确保应用程序收到正确的数据文件
  • 同样,我如何确保只有我的应用程序请求数据
  • 我应该如何处理安全问题?我怎么知道是我在发送更新

  • 可能我必须向应用程序发送通知,告诉它从某处下载数据?我是否应该在应用程序中硬编码服务器地址,从何处下载数据?

    我正在使用一个简单的网站来实现这一点。我在网站上有一个带有版本号(或日期)的文本文件。我的代码只是下载文件,用数据库中的version字段检查版本或日期。如果是较新的,则会激活下载按钮

    下载按钮下载一个zip文件(不必是zip),提取它们并用新的onen替换现有的核心数据文件。到目前为止(自2012年以来),它一直在正常工作

    尽管推荐的方法是逐个删除core数据库中的所有数据,并使用远程源只更新数据,但我使用的方法只是替换core数据库的sqlite文件和相关文件。下面是代码片段:-

    //removing the core data files 
    
    NSString *finalPath = [NSHomeDirectory()  
                       stringByAppendingPathComponent:@"Documents/NTTimeTable.sqlite"];
    [[NSFileManager defaultManager] removeItemAtPath:finalPath error:nil];
    finalPath = [NSHomeDirectory()  
                    stringByAppendingPathComponent:@"Documents/NTTimeTable.momd/NTTimeTable.mom"];
    [[NSFileManager defaultManager] removeItemAtPath:finalPath error:nil];
    finalPath = [NSHomeDirectory()  
                    stringByAppendingPathComponent:@"Documents/NTTimeTable.momd/NTTimeTable.omo"];
    [[NSFileManager defaultManager] removeItemAtPath:finalPath error:nil];
    finalPath = [NSHomeDirectory()  
                    stringByAppendingPathComponent:@"Documents/NTTimeTable.momd/VersionInfo.plist"];
    [[NSFileManager defaultManager] removeItemAtPath:finalPath error:nil];
    
    
    // Unzipping downloaded file
    finalPath = [NSHomeDirectory()  
                 stringByAppendingPathComponent:@"Documents"];
    [SSZipArchive unzipFileAtPath:tempFilePath toDestination:finalPath];
    [[NSFileManager defaultManager] removeItemAtPath:tempFilePath error:nil];    
    
    如果你需要更多信息,请告诉我。请注意,我已将核心数据库文件移动到Documents目录,因为当它们位于原始位置时,我没有替换它们的权限

    问答

  • 如上所述,我只是使用一个web服务器,并在我的网站上留下一个更新文件

  • 我认为最好有自己的Web服务器。你可以在网上买到便宜的。你可以使用免费的,但你必须考虑速度、带宽、可用性等

  • 您可以使用校验和来验证文件是否完整。为了确保文件是正确的,您可以进行检查,如读取文件大小、内容等。在我的情况下,我没有做任何事情,因为我已经硬编码了文件url。这取决于数据的敏感程度。我的几乎像是一件公开的事情

  • 为了确保只有你的应用程序请求数据,你可以使用一些简单的身份验证。也许让应用程序使用用户名和/或密码/哈希进行post请求,并让web服务器检查它们就可以了。我会在服务器中使用一个小的php文件,因为大多数廉价的web托管提供商都支持php。我会在web服务器的php文件中硬编码用户名和密码/哈希。如果你是认真的,你可能想看看身份验证机制,比如非对称加密

  • 这是一个困难的部分。即使你在应用程序中硬编码下载url,人们仍然可以通过更改DNS或做各种事情来制作一个假的Web服务器来发送文件/数据。最终,你只会让事情变得更难进入,而不是100%安全

  • 你也可以看看这个: