iOS 钥匙串中存储的长字符串随机损坏

iOS Long String Stored in Keychain Gets Randomly Corrupted

我正在与我的应用程序中的一个相当讨厌和虚幻的错误作斗争。我使用钥匙串包装器 UYLPasswordManager 在 iOS 钥匙串中存储了一个长的随机字符串(> 3200 个字符)。在看似完全随机的一段时间后,该值作为日期字符串存储在钥匙串 returns 中,而不是最初存储的长字符串。

现在,我说它 returns 是一个日期字符串而不是长字符串,但是它很可能会返回任意数量的不正确字符串 - 我只能重现它一次调试以查看从钥匙串返回的错误值。

我尝试过的事情:

  1. 大量钥匙串包装器,每个包装器最终都会出现问题。
  2. 梳理写入钥匙串的代码的每个字符,以确保值不会被覆盖。

除此之外,由于该错误的虚幻性质,我无法从不同的角度对其进行攻击,因为我不知道还有什么地方可以看。我将其他字符串存储在钥匙串中,这些字符串更短,似乎从来没有问题。在钥匙串中存储长字符串是否存在已知问题或有类似经验的其他人?

我正在使用 Swift 1.2(问题早于 v1.2)和最新的 Xcode(稳定)。

编辑: 我试图将字符串拆分成更小的块,并将每个块保存在钥匙串中,以查看随着时间的推移是否存在数据损坏或丢失。我会 post 返回这里并返回结果。

编辑: 自从我将字符串分成许多小部分后,我就没有发现问题。我将再等一周,然后再确认使用此方法已解决问题。另外,我计划向 Apple 提交错误报告。

对于存储超长字符串时遇到问题的其他任何人,将字符串分成许多部分并存储较小的块似乎已经解决了这个问题。希望对其他人有帮助!