Macos 卸载沙盒mac应用程序后删除NSUserDefaults

Macos 卸载沙盒mac应用程序后删除NSUserDefaults,macos,uninstallation,Macos,Uninstallation,我有一个沙盒应用程序,它是从Mac AppStore安装的 它写入默认值。我原以为当应用程序被删除时,NSUserDefaults会消失,就像iOS沙盒应用程序一样 然而,NSUserDefaults却被抛在了后面。因此,如果用户重新安装应用程序,他/她仍然可以访问与我的情况相同的东西,这是负面的副作用 我想知道是否有一种方法专门用于AppStore沙盒应用程序在卸载时删除NSUserDefaults。因为macOS通常允许您只需将应用程序拖到垃圾箱中,而不是让您运行卸载程序即可删除应用程序,无

我有一个沙盒应用程序,它是从Mac AppStore安装的

它写入默认值。我原以为当应用程序被删除时,NSUserDefaults会消失,就像iOS沙盒应用程序一样

然而,NSUserDefaults却被抛在了后面。因此,如果用户重新安装应用程序,他/她仍然可以访问与我的情况相同的东西,这是负面的副作用


我想知道是否有一种方法专门用于AppStore沙盒应用程序在卸载时删除NSUserDefaults。

因为macOS通常允许您只需将应用程序拖到垃圾箱中,而不是让您运行卸载程序即可删除应用程序,无法强制在卸载时运行诸如删除用户默认值之类的任务

我个人认为这是一个特征,而不是一个bug;如果我作为一个用户,某个应用程序损坏,需要卸载并重新安装,这不应该迫使我在这个过程中重置与该应用程序相关的所有数据。但是YMMV


如果这确实是一个问题,您可以在用户默认值中为NSURLContentModificationDateKey或NSURLADDEDTDirectoryDateKey存储应用程序的值,并在应用程序启动时测试这些值是否匹配。如果没有,该应用程序很可能已经重新安装,你可以提供核弹默认数据。我真的建议在做这件事之前,先打开一个对话框询问用户,因为在没有警告的情况下销毁个人的数据是非常不象Mac的,这与许多用户的预期相反,也因为其他原因,每次他们将应用程序更新到更高版本时,你都会对他们的数据进行核爆。

关于ContentModificationDate的有趣想法。谢谢我同意可以将其视为非AppStore应用程序的一项功能。然而,AppStore应用程序与iOS应用程序有很大不同。@Victoronin Mac AppStore应用程序仍然是Mac应用程序,应该仍然像Mac应用程序一样运行。如果你的应用程序没有,你会激怒一些用户。