iOS-在更新期间调试NSUserDefault崩溃的任何建议

iOS-在更新期间调试NSUserDefault崩溃的任何建议,ios,objective-c,crash,nsuserdefaults,updates,Ios,Objective C,Crash,Nsuserdefaults,Updates,为了修复一些bug,我们发布了AppleStore的更新 我们有很多用户在更新应用程序后启动应用程序时崩溃 如果他们卸载应用程序并再次下载,一切正常 在分析了一些崩溃报告和Crashlytics仪表板后,我们得出结论,我们应用程序中的一个特定库正在检查/设置NSUserDefault中的“首次启动日期” 这一点,加上卸载/安装一切正常后,我推断问题来自NSUserDefault 我脑子里有几个问题,我很着急,不知道该怎么办 我能做些什么来修复它 在两次更新之间的开发过程中,我没有操纵NSUse

为了修复一些bug,我们发布了AppleStore的更新

我们有很多用户在更新应用程序后启动应用程序时崩溃

如果他们卸载应用程序并再次下载,一切正常

在分析了一些崩溃报告和Crashlytics仪表板后,我们得出结论,我们应用程序中的一个特定库正在检查/设置NSUserDefault中的“首次启动日期”

这一点,加上卸载/安装一切正常后,我推断问题来自NSUserDefault

我脑子里有几个问题,我很着急,不知道该怎么办

我能做些什么来修复它

  • 在两次更新之间的开发过程中,我没有操纵NSUserDefault

  • 我是否可以对数据库进行“区分”,以便比较这些更新之间的状态和可能发生的任何修改

  • 我应该重置数据库吗

  • 我们无法重现崩溃(尽管我们的大多数用户在第一次安装后都尝试过崩溃),Testflight也不能代表真实的更新情况,因为我们所有的测试人员都验证了更新,没有任何问题

  • 我想到的解决方案是从商店中发布以前版本的新更新,但我如何确保NSUserDefault不会在“回滚”过程中使应用程序崩溃。 我的意思是,如果问题来自数据库的状态,或者是零 价值图书馆已经2年了,不再更新,但我们 从未经历过此库中的任何崩溃


我会接受任何建议/信息来完成事情并清理干净。

一个想法是使用
NSUserDefaults
方法来尝试捕获或至少记录问题。您可以swizzle
-[NSUserDefaults setObject:forKey://code>检查输入是否安全/正常,如果不安全,则丢弃它。

您有Git或其他东西来管理代码,不是吗?从设备中删除应用程序,签出分支/提交,返回发布的版本,在设备上安装,返回上次更新的应用程序,使用调试器再次启动。我建议必须进行克隆,以便更快地复制它(上一个版本中有一个,上一个版本中有一个)。我曾经遇到过同样的问题,问题是代码中使用了一个名为
RMMapper
的库来将自定义对象存储在
NSUserDefaults
中。崩溃是因为在bool中得到了nil值。我可以用ipa文件吗?我们使用Jenkins和GitS。库被包装并集成为一个.a文件,我只有标题,我无法访问它们设置对象的代码。您的解决方案将允许我swizzle synchronize,并深入了解设置/均衡的内容。我的代码是什么?我建议改为swizzle
setObject:forKey:
。是的,这将让您深入了解用户默认值中存储的内容和时间,无论是谁调用它。