Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >现有应用程序的核心数据更新在iOS7.1上失败

现有应用程序的核心数据更新在iOS7.1上失败
EN

Stack Overflow用户
提问于 2014-06-11 06:00:12
回答 1查看 778关注 0票数 0

我在AppStore上有一个应用程序,它是在12月13日使用Xcode 4.3提交的,它有一个核心数据模型(版本2)。我现在将发布下一个版本,它更新了核心数据模型。当我在调试模式下运行代码时,迁移工作正常。但是当我通过TestFlight发布一个版本时,迁移失败了,我得到了下面的错误。出于安全考虑,每次应用程序退出时,我都会删除数据库(我保存了一个加密副本),在下一次启动时,我会解密这个DB。

用于初始化PersistentStoreCoordinator的代码。

代码语言:javascript
运行
AI代码解释
复制
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *options = @{
                          NSMigratePersistentStoresAutomaticallyOption : @YES,
                          NSInferMappingModelAutomaticallyOption : @YES
                          };


// Check if we need a migration
NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL:storeURL error:&error];
NSManagedObjectModel *destinationModel = [_persistentStoreCoordinator managedObjectModel];
BOOL isModelCompatible = (sourceMetadata == nil) || [destinationModel isConfiguration:nil compatibleWithStoreMetadata:sourceMetadata];
if (! isModelCompatible) {
    // We need a migration, so we set the journal_mode to DELETE
    options = @{NSMigratePersistentStoresAutomaticallyOption:@YES,
                NSInferMappingModelAutomaticallyOption:@YES,
                NSSQLitePragmasOption: @{@"journal_mode": @"DELETE"}
                };
}

NSPersistentStore *persistentStore = [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error];
if (! persistentStore) {


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documents = [paths objectAtIndex:0];
    NSString *databasePath = [documents stringByAppendingPathComponent:@"Store"];
    NSString *sqlite = [databasePath stringByAppendingPathComponent:@"myDatabase.sqlite"];

    [[NSFileManager defaultManager] removeItemAtPath:sqlite error:nil];

    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    //abort();
}

// Reinstate the WAL journal_mode
if (! isModelCompatible) {
    [_persistentStoreCoordinator removePersistentStore:persistentStore error:NULL];
    options = @{NSMigratePersistentStoresAutomaticallyOption:@YES,
                NSInferMappingModelAutomaticallyOption:@YES,
                NSSQLitePragmasOption: @{@"journal_mode": @"WAL"}
                };
    [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error];
}

return _persistentStoreCoordinator;

当我尝试初始化persistentStoreCoordinator时,我会得到下面的错误。

未解决的错误错误Domain=NSCocoaErrorDomain Code=259“操作无法完成。(可可错误259。)UserInfo=0x15df4dc0 {路径处的NSUnderlyingException=File似乎不是SQLite数据库:NSUnderlyingException=File{

代码语言:javascript
运行
AI代码解释
复制
NSUnderlyingException = "File at path does not appear to be a SQLite database: /var/mobile/Applications/9B623099-5591-4C55-BA83-77A057B94690/Documents/Store/myDatabase.sqlite";}

奇怪的是,在iOS7.0.6上,升级场景在Dev和发行版配置上都工作得很好,但是在iOS7.1上似乎只适用于Dev配置。我已经厌倦了删除WAL和SHM文件以及,但没有任何效果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-19 04:44:47

这里的错误信息很能说明问题。上面写着:

NSUnderlyingException = "File at path does not appear to be a SQLite database: /var/mobile/Applications/9B623099-5591-4C55-BA83-77A057B94690/Documents/Store/myDatabase.sqlite";}

我在想,这可能是由于更新的核心数据sqlite和WAL文件之间的不匹配,但结果发现,这个错误更多的是由于加解密过程中的密钥不匹配。这是我的第一次猜测,我已经让我的同事检查了这个,但是他以某种方式证实了这一点,而我们不同意这个理论。

我们的加密方法是将运行时生成的加密密钥保存到密钥链中。现在的前提是,在应用程序升级之前和升级之后,密钥链中的值仍然存在。然而,由于使用了错误的捆绑标识符,升级后的应用程序没有从密钥链中获得值,而是创建了自己的运行时值。

存储在密钥链中的值只有在完整的包标识符相同的情况下才能在应用程序和应用程序更新之间共享。

BundleIdentifierPrefix1.com.yourcompany.appname的包标识符app1应用1.1有包标识符为BundleIdentifierPrefix2.com.yourcompany.appname

由于反向域相同,应用程序是作为更新安装的,但是由于前缀不同,密钥链值没有共享。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24164906

复制
相关文章
OLAINDEX – 获取OneDrive应用 ID 和密钥
在近日,微软调整了 OneDrive 应用机密的方法。在调整过后,需要自行在Azure页面注册应用程序。这相比之前的「一键操作」来说似乎变得有些麻烦,因此我们准备了这篇文章。
怪兽
2022/10/04
2.8K0
OLAINDEX –  获取OneDrive应用 ID 和密钥
安全保护策略:iOS应用程序代码保护的关键步骤和技巧
在当今移动应用市场竞争激烈的环境中,代码保护功能对于iOS应用程序的成功非常关键。代码保护可以帮助开发者防范盗用、逆向工程和未授权访问等风险。通过保护你的iOS IPA文件代码,你可以确保你的知识产权得到充分尊重,避免财产损失和商业竞争。 保护iOS IPA文件代码以下是几个常见的方法:
iOS Magician
2023/10/11
2600
安全保护策略:iOS应用程序代码保护的关键步骤和技巧
试用Xcode构建iOS PDF阅读器
在当今以移动为先的世界中,为企业和开发人员创建一个iOS应用程序是必不可少的。随着对PDF文档处理需求的增加,使用强大的PDF软件开发工具包(SDK)来构建iOS PDF阅读器和编辑器可以让最终用户轻松查看和编辑PDF文档。
ComPDFKit
2023/07/27
5020
试用Xcode构建iOS PDF阅读器
减小iOS应用程序的大小
A: 本文收集了一些减小程序安装包大小的相关技巧(当第一次下载和安装程序时)。如果是针对升级程序的话,可以看这篇文章(减小iOS应用程序升级时所需下载的大小)(这与第一次安装使用的工作原理有所不同)。
HelloWorld杰少
2022/08/03
7130
超3200个应用程序泄露了 Twitter API 密钥
近日,网络安全研究人员发现一组异常的移动应用程序,这些应用程序向民众公开了 Twitter API 密钥,据统计,此类应用程序多达 3200 个。 网络安全公司 CloudSEK 首次发现了这一问题,该公司在检查大型应用程序集合是否存在数据泄漏时,发现了大量应用程序泄露了 Twitter  API 密钥。 据悉,造成这一现象的主要原因是开发者在整合移动应用与 Twitter 时,会得到一个特殊的认证密钥(或称),允许其移动应用与 Twitter  API 交互。当用户使其 Twitter账户与移动应用联系
FB客服
2023/03/30
7400
超3200个应用程序泄露了 Twitter API 密钥
LabVIEW实现应用程序停止或退出
我们在做应用程序开发时,最后必然会用到应用程序停止或退出功能,本篇博文将分享实用LabVIEW如何实现应用程序停止或退出。
不脱发的程序猿
2022/04/13
6.8K0
LabVIEW实现应用程序停止或退出
关于开源许可证
虽然知道开源有个许可证 LICENSE,但一直没给自己写的一些开源项目选择开源许可证。于是准备系统了解一下开源许可证,以及如何为 Github 项目添加 LICENSE。
愧怍
2022/12/27
1.1K0
关于开源许可证
Microsoft PlayReady DRM及其工作原理
 点击上方“LiveVideoStack”关注我们 翻译、编辑:Alex 技术审校:刘姗 本文来自OTTVerse,作者为Krishna Rao Vijayanagar。 ▲扫描图中二维码或点击阅读原文▲ 了解音视频技术大会更多信息 DRM Easy-Tech #022# Microsoft的PlayReady是用于内容保护和发行的DRM解决方案和平台。它和Apple的FairPlay以及谷歌的Widevine一样,都可以提供安全的客户端SDK(用于内容加密和安全的解码和渲染)、许可证服务器、以及
LiveVideoStack
2022/04/27
2.6K0
Microsoft PlayReady DRM及其工作原理
如何使用Python的Flask和谷歌app Engine来构建一个web app
如果您想在很短的时间内使用Python构建web应用程序,那么Flask是一个非常好的选择。Flask是一个小而强大的web框架。它也很容易学习和简单的代码。
HuangWeiAI
2020/07/27
1.9K0
如何使用Python的Flask和谷歌app Engine来构建一个web app
如何使用开源的Umbrella学习和管理Android、iOS和Web应用安全
Umbrella是一款由Security First开发的Andoird移动端应用程序,Umbrella完全开源,可以用来学习和管理Android、iOS和Web应用安全。Umbrella提供了多种语言的最佳实践指南。很多在高网络安全风险地区工作的人们每天都会使用它,包括记者、外交官、商务旅行者和其他高管等等。
FB客服
2021/03/09
8330
如何使用开源的Umbrella学习和管理Android、iOS和Web应用安全
关于移动游戏SDK,你想了解的都在这里
当然,以上解释对于非技术的我们来说,还是稍微显得有点抽象。那么通俗来讲,SDK就是手游渠道(如应用宝、小米应用商店、华为应用商店等)提供的集成了账号注册登录、充值、防沉迷、游戏公告、分享、社区入口、push消息、数据上报、礼包或折扣券等功能的一个集合。
可以叫我才哥
2021/08/05
1.9K0
LabVIEW设置应用程序显示标签透明
在美化应用程序时,有时候需要将某些标签设置为透明状态,之前在LabVIEW设计自定义滚动条博文中制作的滚动条是一种方式,但是这种方式明显过于复杂。
不脱发的程序猿
2022/04/13
9930
LabVIEW设置应用程序显示标签透明
Apple FairPlay DRM及其工作原理
 点击上方“LiveVideoStack”关注我们 翻译、编辑:Alex 技术审校:刘姗 本文来自OTTVerse,作者为Krishna Rao Vijayanagar。 ▲扫描图中二维码或点击阅读原文▲ 了解音视频技术大会更多信息 Apple FairPlay Easy-Tech #020# 在本篇文章中,我们将了解Apple推出的FairPlay DRM解决方案(主要用于在iOS、tvOS和macOS设备上安全分发内容)。让我们一起来看下FairPlay DRM的重要构成、基本工作流和一些有趣
LiveVideoStack
2022/04/11
3.6K0
Apple FairPlay DRM及其工作原理
PDF Java库: 创建PDF阅读器和编辑器
在当今移动优先的世界中,创建 Android 应用程序是企业和开发人员的必备技能。而且,随着处理 PDF 文档的需求不断增加,使用功能强大的 PDF SDK ComPDFKit 构建 Android PDF 阅读器和编辑器,能使您的最终用户轻松查看和编辑 PDF。
Youna
2023/07/31
4800
PDF Java库: 创建PDF阅读器和编辑器
iOS应用程序的脱壳实现原理浅析
对于诸多逆向爱好者来说,给一个app脱壳是一项必做的事情。基于安全性的考虑,苹果对上架到appstore的应用都会进行加密处理,所以如果直接逆向一个从appstore下载的应用程序时,所能看到的“源代码”将非常的晦涩难懂。为了能看懂应用程序的“源代码”,就必须对应用程序进行解密,也就是所谓的脱壳。脱壳后的目的是可以分析应用程序的一些技术实现原理,或者利用一些漏洞进行攻击和测试。
欧阳大哥2013
2018/11/09
1.2K0
关于iOS Tabbar的一些设置
其实iOS Tabbar的可定制性非常高,我们没有必要重复造轮子,下面是笔者收集的一些tabbar的常用设置,希望对大家有所帮助。 设置tabbar选中颜色 iOS7设置如下: [self.tabBarController.tabBarsetSelectedImageTintColor:[UIColor greenColor]]; ios8中如下设置: self.tabBar.tintColor=[UIColor greenColor]; 消除tabbar边框 在appdelegate的程序启动处:
forrestlin
2018/05/23
1.3K0
在IPA中重签名iOS应用程序
当我们在对iOS应用程序执行黑盒安全测试时,我们一般只能从AppStore来访问和获取iOS应用程序。但是在大多数情况下,客户都会给我们提供一个IPA文件。在黑盒测试过程中,我们无法访问目标应用的源代码,因此通过Xcode将其部署到设备并进行测试,几乎是不可能的。但是有一种可行的解决方案,即使用我们手头上的配置文件来重新启动应用程序,并将其部署到我们的测试设备上。
FB客服
2020/03/10
2.4K0
.NET 7 SDK 开始 支持构建容器化应用程序
微软于 8 月 25 日在.NET官方博客上,.NET 7 SDK 将包括对创建容器化应用程序的支持,作为构建发布过程的一部分,从而绕过需要。显式 Docker 构建阶段。 这一决定背后的基本认知是简化样板 Docker file的编写并减少开发人员的认知负担,从而可以比以前更快地在 .NET 中构建容器化应用程序。开发人员可以在本地开发中使用生成的容器,或者利用它作为 CI/CD 管道的一部分来构建镜像。到目前为止,开发者社区的反应是谨慎积极的。
张善友
2022/09/29
5730
.NET 7 SDK 开始 支持构建容器化应用程序
Android应用程序中应用图标和名字的设置
在AndroidManifest.xml文件中设android:icon和 android:label指定名字和图标的位置,如: <application android:icon="@drawable/ic" android:label="@string/app_name" 则指定图标为项目工程下。。。app\src\main\res\drawable文件夹下名字为ic的图片 名字为。。。\app\src\main\res\values文件夹下strings中XML中描述的名字
用户1215536
2018/02/05
1.6K0
Android应用程序中应用图标和名字的设置
点击加载更多

相似问题

QueryDSL动态谓词

30

通过动态密钥名获取属性?

14

QueryDSL动态谓词链

14

获取属性-谓词

22

Python:通过属性名获取静态属性

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文