Post

Replies

Boosts

Views

Activity

Reply to UserDefaults data not removed when mac OS X app is removed/moved to bin
1.检测应用是否为新安装 通过检查应用程序包的创建日期是否与之前记录的日期不同,判断是否为重新安装。 2.清除UserDefaults数据 如果检测到新安装,则清除所有UserDefaults数据,并存储当前安装日期。 代码实现(Swift):func handleFreshInstall() { let defaults = UserDefaults.standard guard let bundleIdentifier = Bundle.main.bundleIdentifier else { return } do { let bundlePath = Bundle.main.bundlePath let attributes = try FileManager.default.attributesOfItem(atPath: bundlePath) guard let currentInstallDate = attributes[.creationDate] as? Date else { return } let key = "appInstallDate" if let storedInstallDate = defaults.object(forKey: key) as? Date { if currentInstallDate != storedInstallDate { // 检测到重新安装,清除数据 handleFreshInstall() defaults.set(currentInstallDate, forKey: key) defaults.synchronize() // 执行其他初始化设置 print("UserDefaults已重置") } } else { // 首次运行,保存安装日期 defaults.set(currentInstallDate, forKey: key) } } catch { print("获取属性失败: (error)") } } // 在应用启动时调用该方法 handleFreshInstall() 步骤解释: 获取应用安装日期:使用FileManager获取应用程序包的创建日期,该日期在每次重新安装时会更新。 比较安装日期:将当前安装日期与之前存储在UserDefaults中的日期对比。 重置数据:若日期不同,则清除UserDefaults并存储新日期,确保后续启动不会重复清除。 首次运行处理:若未存储过日期,则保存当前日期,避免首次安装时误删数据。 注意事项: 企业应用更新:若通过企业渠道更新应用(版本升级),安装日期会变化,导致用户数据被重置。若需保留数据,需结合版本号检查,仅在版本未变且安装日期变化时重置。 测试验证:在不同macOS版本和安装方式下测试,确保创建日期的准确性。 替代方案: 使用钥匙串存储唯一标识:生成UUID存储于钥匙串,即使应用删除仍可检测是否为全新安装。但需处理钥匙串的访问权限。 引导用户手动清除:在应用内提供“重置数据”选项,或指导用户删除~/Library/Preferences/.plist文件。
Topic: App & System Services SubTopic: Core OS Tags:
Apr ’25