簡體   English   中英

iOS 鑰匙串數據在應用程序重新安裝后仍然存在嗎?

[英]Does iOS keychain data survive an app reinstall?

我是 iOS 開發和鑰匙串存儲的新手。 在我的應用程序中,我想在 iOS 鑰匙串(不是共享鑰匙串)中保存一些重要信息。

我不知道鑰匙串數據是否會在應用程序卸載時消失。 我查看了一些博客/堆棧溢出帖子,但我沒有找到任何提及此特定信息的官方 Apple 文檔。 我想知道,

  1. 卸載應用程序時是否刪除了我存儲的數據?
  2. 如果用戶卸載並立即重新安裝應用程序會發生什么? 他會得到之前存儲的數據嗎?

來自Apple Developer論壇參考: https//forums.developer.apple.com/thread/36442

首先,時間表:

  • 在刪除應用程序時,10.3 beta之前的所有iOS版本都會保留鑰匙串項。 重要信息這絕對是原始iOS鑰匙串的實現細節。 我們的鑰匙串文檔從未指明在這種情況下會發生什么。

  • 10.3 beta包括刪除此類項目的更改。

  • 這導致兼容性問題(應用程序依賴於現有行為,即使沒有記錄),因此它在10.3 GM之前回滾。

  • iOS 11引入了DeviceCheck框架,該框架為此行為最常見的合法用例之一提供了前向路徑。 有關此問題的更多信息,請參閱WWDC 2017 Session 702 隱私和您的應用程序

其次,在刪除時保留鑰匙串項是一個明顯的隱私問題。 據我所知,Apple尚未就我們打算如何解決此問題做出任何具體公告2 但是,如果10.3行為在將來某個時候返回,我認為不會讓任何人感到驚訝。 我希望我們能夠更積極主動地宣布這樣一個變化 - 例如,在WWDC上談論它 - 但是,一如既往,我不能對未來做出任何承諾。

三,我的具體建議:

  • 如果您希望刪除應用程序時刪除鑰匙串項目,請將其與存儲在磁盤上的隨機密鑰糾纏在一起,如我之前的帖子(2016年2月11日)所述。 無論操作系統的行為如何,這都可以保證正常工作。

  • 如果要保留項目,請首先查看DeviceCheck框架。 如果這允許您實現高級目標,則可以在iOS 11及更高版本上采用它,然后不再擔心此問題。 注意您可以繼續在早期系統上使用現有技術,因為它們不會更改。

  • 如果DeviceCheck框架不能滿足您的需求,請提交一份增強請求,說明您的情況以及為什么DeviceCheck不適合您。 我很感激你在這里發布你的錯誤號碼,只是為了記錄。

  • 如果您繼續依賴當前行為,我強烈建議您編寫應用程序,以便在行為發生變化時合理行事。

我意識到上述情況仍然“含糊不清”。 唉,在Apple正式公布我們未來的計划之前,我無法100%清晰地回答。

1. 卸載應用程序時我存儲的數據會被刪除嗎? 不,即使卸載后它仍會保留在鑰匙串中。 如果你不想要,你可以通過一個小技巧得到這種行為, use default來知道它是否第一次安裝。

如果用戶卸載並立即重新安裝應用程序會發生什么? 他會獲得以前存儲的數據嗎? 僅保留鑰匙串數據。 不是 App Sandbox 中的數據,例如用戶默認值、文檔目錄、核心數據等

您可以使用 KeyChain 來存儲,即使用戶卸載您的應用程序,它也不會刪除。

        let id = KeyChain.createUniqueID()
        let data = id.data(using: String.Encoding.utf8)
        let status = KeyChain.save(key: "yourKey", data: data!)
        print(status)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM