[英]UserDefaults in shared app group container won't save when editing manually
我正在開發我的 macOS 應用程序的新版本,該應用程序將version
屬性存儲在UserDefaults.standard
中。 現在我想測試從版本1到版本2的更新過程。只有版本2寫入version
屬性。 所以版本 1 不應該有它。
UserDefaults:應用程序版本 1
UserDefaults:應用程序版本 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.