簡體   English   中英

手動編輯時不會保存共享應用程序組容器中的 UserDefaults

[英]UserDefaults in shared app group container won't save when editing manually

我正在開發我的 macOS 應用程序的新版本,該應用程序將version屬性存儲在UserDefaults.standard中。 現在我想測試從版本1到版本2的更新過程。只有版本2寫入version屬性。 所以版本 1 不應該有它。

期待

UserDefaults:應用程序版本 1

版本 1

UserDefaults:應用程序版本 2

版本 2

這是一個沙盒應用程序,所以我 go 到這里並刪除整個容器。

~/Library/Containers/com.example.myapp/

我切換到 Xcode,在我的 git 歷史記錄中檢查版本 1,然后運行該應用程序。

問題

運行應用程序的版本 1 時,它會寫入settings屬性。 但同時它也寫入了版本 1 甚至沒有實現的version屬性。 所以,我認為發生了一些奇怪的緩存問題。

為了“從頭開始”運行應用程序,我還需要做些什么嗎?

我與一位 Apple 工程師交談過,結果發現后台有一個守護進程用於訪問用戶默認值。

問題的原因

只有守護進程應該有權訪問共享應用程序組中的用戶默認值。 您使用用戶默認值的應用程序也只與守護進程對話。

守護進程也有一個緩存並將其返回,因為它不知道您的手動更改並認為文件沒有更改。

解決方案

殺死惡魔

蘋果工程師還說,從技術上講,你可以每次都殺死守護進程,但這不是推薦的方式。 他們也沒有告訴我這個惡魔的名字。

使用默認命令行工具

推薦的方法似乎是使用defaults命令行工具。 這個工具基本上和你的應用程序一樣。 它與守護進程對話,守護進程將更新實際文件。 請注意,對於共享應用程序組中的用戶默認值,您需要指定文件的完整路徑。 使用捆綁標識符是不夠的。

這是defaults的參考: https://ss64.com/osx/defaults.html

圖表:訪問用戶默認值

訪問共享應用程序組容器中的用戶默認值

暫無
暫無

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

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